From 57ee8b48d4e31cb21e2cc0bf8f84027976646deb Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 14:32:00 +0800
Subject: [PATCH] gb28181版本升级

---
 /dev/null           |  575 -------------------------------
 .idea/workspace.xml |  470 +++++++++++++++++++++++++
 2 files changed, 454 insertions(+), 591 deletions(-)

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 21f4006..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-# Compiled class file
-*.class
-
-# Log file
-*.log
-logs/*
-# BlueJ files
-*.ctxt
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-src/main/resources/application-*.yml
-# Package Files #
-#*.jar
-*.war
-*.nar
-*.ear
-*.zip
-*.tar.gz
-*.rar
-*.iml
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-/.idea/*
-/target/*
-/.idea/
-/target/
-
-/src/main/resources/static/
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index dfec153..06c2235 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -17,11 +17,427 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="208daac0-1abd-465d-abf2-6a0414be019b" name="默认的" comment="配置提交">
+      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/application-test.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-test.yml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/logback-spring-local.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/logback-spring-local.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wvp-pro.iml" beforeDir="false" afterPath="$PROJECT_DIR$/wvp-pro.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/DOCKERFILE" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/LICENSE" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/docker/docker-compose.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/docker/redis/redis.conf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/docker/wvp/Dockerfile" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/readmes.md" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/config上饶服务器.ini" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/config保安服务器.ini" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/config本机.ini" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/mysql.sql" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/videos.sql" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/信州分局配置文件.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/sql/市局配置文件.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/common/VersionPo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/ApiAccessFilter.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/MediaStatusTimerTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/Swagger3Config.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/VersionConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/VersionInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/druid/DruidConfiguration.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/druid/EnableDruidSupport.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/DefaultUserDetailsServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/InvalidSessionHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/LogoutHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/BaiduPoint.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CmdType.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceNotFoundEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Host.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamCallback.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformCatalog.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformGbStream.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformRegister.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SDPInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SsrcTransaction.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/bean/WvpSipDate.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/SubscribeListenerForPlatform.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/ISIPProcessorObserver.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/ISIPRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/CancelRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/IMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageHandlerAbstract.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/ControlMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/NotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/QueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/AlarmQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/ResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/AlarmResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/BroadcastResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/ConfigDownloadResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceConfigResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceControlResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/ISIPResponseProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/SIPResponseProcessorAbstract.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/ByeResponseProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/CancelResponseProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/ITimeoutProcessor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/impl/TimeoutProcessorImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/utils/NumericUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipment.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipmentRecord.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/service/TalkBackEquipmentService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/business/service/impl/TalkBackEquipmentServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/config/MyDecoder.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/config/SysConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/event/StartupEvent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/handle/UdpServerHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/util/Hex.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/netty/util/Utils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/entity/DeviceChannelPoliceCamera.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/mapper/DeviceChannelPoliceCameraMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/DeviceChannelPoliceCameraService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/impl/DeviceChannelPoliceCameraServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/vo/DeviceChannelPoliceCameraVO.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/ILogService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IRecordInfoServer.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/IUserService.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/CatalogSubscribeTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/RecordInfoServerImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/LogMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/RecordInfoDao.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/LogDto.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/RecordInfo.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/CollectionUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/GpsUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/IpUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/JarFileUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/ObjectUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/SerializeUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/BaseNode.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNode.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeManager.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/INode.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/node/TreeNode.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/redis/JedisUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BatchGBStreamParam.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTree.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTreeNode.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/SseController/SseController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/ChannelReduce.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/bean/PlayResult.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/session/PlayTypeEnum.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/record/RecordController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/all-application.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application-dev.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application-docker.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application-test.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application.yml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/banner.txt" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/logback-spring-local.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/wvpssl.jks" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/test/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImplTest.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/.babelrc" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/.editorconfig" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/.gitignore" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/.postcssrc.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/README.md" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/build.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/check-versions.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/logo.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/utils.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/vue-loader.conf.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/webpack.base.conf.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/webpack.dev.conf.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/build/webpack.prod.conf.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/config/dev.env.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/config/index.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/config/prod.env.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/index.html" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/package-lock.json" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/package.json" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/App.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/api/deviceApi.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/icons.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/loading.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/login-bg.jpg" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/login-cloud.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/logo.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/play.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/assets/zlm-log.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/CloudRecord.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/CloudRecordDetail.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/DeviceList.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/GeoConvertTools.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/Login.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/MediaServerManger.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/ParentPlatformList.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/PushVideoList.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/StreamProxyList.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/UiHeader.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/channelList.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/channelTree.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/channelTreeItem.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/control.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/devicePosition.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/MediaServerEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/StreamProxyEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/addStreamTOGB.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/catalogEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/changePassword.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/chooseChannel.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/chooseChannelForCatalog.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/chooseChannelForGb.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/chooseChannelForStream.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/deviceEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/devicePlayer.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/easyPlayer.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/getCatalog.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/importChannel.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/importChannelShowErrorData.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/jessibuca.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/onvifEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/platformEdit.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/dialog/rtcPlayer.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/jessibuca.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/live.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/service/MediaServer.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/setting/Media.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/setting/Sip.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/setting/Web.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/test.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/components/test2.vue" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/main.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/src/router/index.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/.gitkeep" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/EasyPlayer.swf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/css/iconfont.css" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/css/iconfont.woff2" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/css/login.css" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/favicon.ico" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/fonts/poppins/Poppins-Bold.ttf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/fonts/poppins/Poppins-Medium.ttf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/fonts/poppins/Poppins-Regular.ttf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/fonts/poppins/Poppins-SemiBold.ttf" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/images/zlm-logo.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/EasyWasmPlayer.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/ZLMRTCClient.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/jessibuca/ff.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/jessibuca/ff.wasm" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/jessibuca/ff.worker.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/jessibuca/index.js" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/js/jessibuca/logo.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/libDecoder.wasm" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/web_src/static/logo.png" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/wvp-pro.iml" beforeDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -37,6 +453,11 @@
     </option>
   </component>
   <component name="Git.Settings">
+    <option name="RECENT_BRANCH_BY_REPOSITORY">
+      <map>
+        <entry key="$PROJECT_DIR$" value="main" />
+      </map>
+    </option>
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
   </component>
   <component name="ProjectId" id="2DjiKrABuvRQZiE0FsL0c3fg9Z7" />
@@ -188,6 +609,7 @@
       <workItem from="1687240699186" duration="276000" />
       <workItem from="1687249861313" duration="464000" />
       <workItem from="1687772319116" duration="68000" />
+      <workItem from="1687846557234" duration="798000" />
     </task>
     <task id="LOCAL-00001" summary="默认的">
       <created>1676691639632</created>
@@ -259,7 +681,14 @@
       <option name="project" value="LOCAL" />
       <updated>1678191961494</updated>
     </task>
-    <option name="localTasksCounter" value="11" />
+    <task id="LOCAL-00011" summary="执法记录仪同步去除">
+      <created>1687846701481</created>
+      <option name="number" value="00011" />
+      <option name="presentableId" value="LOCAL-00011" />
+      <option name="project" value="LOCAL" />
+      <updated>1687846701481</updated>
+    </task>
+    <option name="localTasksCounter" value="12" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -300,7 +729,8 @@
     <MESSAGE value="对讲设备读取数据修改" />
     <MESSAGE value="对讲设备字段修改读取数据修改" />
     <MESSAGE value="设备插入修改" />
-    <option name="LAST_COMMIT_MESSAGE" value="设备插入修改" />
+    <MESSAGE value="执法记录仪同步去除" />
+    <option name="LAST_COMMIT_MESSAGE" value="执法记录仪同步去除" />
   </component>
   <component name="WindowStateProjectService">
     <state x="414" y="174" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1686903824574">
@@ -311,22 +741,22 @@
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
     <state x="92" y="92" width="1736" height="856" key="DiffContextDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1686965187217" />
-    <state width="1877" height="402" key="GridCell.Tab.0.bottom" timestamp="1687772386516">
+    <state width="1877" height="402" key="GridCell.Tab.0.bottom" timestamp="1687847163998">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
-    <state width="1877" height="402" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1687772386516" />
-    <state width="1877" height="402" key="GridCell.Tab.0.center" timestamp="1687772386516">
+    <state width="1877" height="402" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1687847163998" />
+    <state width="1877" height="402" key="GridCell.Tab.0.center" timestamp="1687847163998">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
-    <state width="1877" height="402" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1687772386516" />
-    <state width="1877" height="402" key="GridCell.Tab.0.left" timestamp="1687772386516">
+    <state width="1877" height="402" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1687847163998" />
+    <state width="1877" height="402" key="GridCell.Tab.0.left" timestamp="1687847163998">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
-    <state width="1877" height="402" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1687772386516" />
-    <state width="1877" height="402" key="GridCell.Tab.0.right" timestamp="1687772386516">
+    <state width="1877" height="402" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1687847163998" />
+    <state width="1877" height="402" key="GridCell.Tab.0.right" timestamp="1687847163998">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
-    <state width="1877" height="402" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1687772386516" />
+    <state width="1877" height="402" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1687847163998" />
     <state width="1877" height="402" key="GridCell.Tab.1.bottom" timestamp="1687772386516">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
@@ -363,14 +793,22 @@
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
     <state x="644" y="221" key="RollbackChangesDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1686904469155" />
+    <state x="552" y="239" key="Vcs.Push.Dialog.v2" timestamp="1687846702887">
+      <screen x="0" y="0" width="1920" height="1040" />
+    </state>
+    <state x="552" y="239" key="Vcs.Push.Dialog.v2/0.0.1920.1040@0.0.1920.1040" timestamp="1687846702887" />
     <state x="661" y="252" width="866" height="536" key="find.popup" timestamp="1687177208968">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
     <state x="661" y="252" width="866" height="536" key="find.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1687177208968" />
-    <state x="643" y="306" key="git4idea.merge.GitPullDialog" timestamp="1684921113189">
+    <state x="643" y="306" key="git4idea.merge.GitPullDialog" timestamp="1687846658305">
       <screen x="0" y="0" width="1920" height="1040" />
     </state>
-    <state x="643" y="306" key="git4idea.merge.GitPullDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1684921113189" />
+    <state x="643" y="306" key="git4idea.merge.GitPullDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1687846658305" />
+    <state x="726" y="419" key="git4idea.remote.GitConfigureRemotesDialog" timestamp="1687846651571">
+      <screen x="0" y="0" width="1920" height="1040" />
+    </state>
+    <state x="726" y="419" key="git4idea.remote.GitConfigureRemotesDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1687846651570" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
diff --git a/DOCKERFILE b/DOCKERFILE
deleted file mode 100644
index 6c4beb5..0000000
--- a/DOCKERFILE
+++ /dev/null
@@ -1,127 +0,0 @@
-FROM ubuntu:20.04 AS build
-
-ARG DEBIAN_FRONTEND=noninteractive
-ENV TZ=Asia/Shanghai
-
-EXPOSE 18080/tcp
-
-EXPOSE 5060/tcp
-EXPOSE 5060/udp
-
-EXPOSE 6379/tcp
-
-EXPOSE 18081/tcp
-
-EXPOSE 80/tcp
-EXPOSE 1935/tcp
-EXPOSE 554/tcp
-EXPOSE 554/udp
-EXPOSE 30000-30500/tcp
-EXPOSE 30000-30500/udp
-
-ENV LC_ALL zh_CN.UTF-8
-
-# 使用了自己的settings.xml作为maven的源,加快打包速度
-RUN apt-get update && \
-        DEBIAN_FRONTEND="noninteractive" && \
-         apt-get install -y --no-install-recommends openjdk-11-jre git maven nodejs npm build-essential tcl language-pack-zh-hans \
-         cmake curl  vim ca-certificates  tzdata libmysqlclient-dev  redis-server libssl-dev libx264-dev libfaac-dev ffmpeg
-WORKDIR /home
-
-RUN      git clone https://gitee.com/pan648540858/maven.git && \
-         cp maven/settings.xml /usr/share/maven/conf/ && \
-         git clone https://gitee.com/pan648540858/wvp-GB28181.git && \
-         git clone https://gitee.com/pan648540858/wvp-pro-assist.git
-         # 编译前端界面
-WORKDIR /home/wvp-GB28181/web_src
-
-RUN      npm install && \
-         npm run build && \
-         mkdir -p /opt/wvp/config && \
-         mkdir -p /opt/assist/config && \
-         cp /home/wvp-GB28181/src/main/resources/application-dev.yml /opt/wvp/config/application.yml && \
-         cp /home/wvp-pro-assist/src/main/resources/application-dev.yml /opt/assist/config/application.yml
-
-         # wvp打包
-WORKDIR /home/wvp-GB28181
-RUN      mvn compile && \
-         mvn package && \
-         cp /home/wvp-GB28181/target/wvp*.jar /opt/wvp/
-
-         # wvp 录像管理打包
-WORKDIR /home/wvp-pro-assist
-RUN      mvn compile && \
-         mvn package && \
-         cp /home/wvp-pro-assist/target/*.jar /opt/assist/
-
-         # zlm打包
-WORKDIR /home
-RUN     mkdir -p /opt/media && \
-        git clone --depth=1 https://gitee.com/xia-chu/ZLMediaKit && \
-        cd ZLMediaKit && git submodule update --init --recursive && \
-        mkdir -p build release/linux/Release/ &&\
-        cd build && \
-        cmake -DCMAKE_BUILD_TYPE=Release .. && \
-        make -j4 && \
-        rm -rf ../release/linux/Release/config.ini && \
-        cp -r ../release/linux/Release/* /opt/media && \
-        mkdir -p /opt/media/www/record
-
-
-         # 清理
- RUN     rm -rf /home/wiki && \
-         rm -rf /home/wvp-GB28181 && \
-         apt-get autoremove -y git maven nodejs npm && \
-         apt-get clean -y && \
-         rm -rf /var/lib/apt/lists/*dic
-
-WORKDIR /opt/wvp
-RUN     echo '#!/bin/bash' > run.sh && \
-        echo 'echo ${WVP_IP}' >> run.sh && \
-        echo 'echo ${WVP_CONFIG}' >> run.sh && \
-        echo 'redis-server --daemonize yes --bind 0.0.0.0' >> run.sh && \
-        echo 'cd /opt/assist' >> run.sh && \
-        echo 'nohup java -jar *.jar --userSettings.record=/opt/media/www/record/ &' >> run.sh && \
-        echo 'nohup /opt/media/MediaServer -d -m 3 &' >> run.sh && \
-        echo 'cd /opt/wvp' >> run.sh && \
-        echo 'if [${WVP_CONFIG}]; then' >> run.sh && \
-        echo '        java -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 ${WVP_CONFIG}' >> run.sh && \
-        echo 'else' >> run.sh && \
-        echo '        java -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 --media.ip=127.0.0.1 --media.sdp-ip=${WVP_IP} --sip.ip=${WVP_IP} --media.stream-ip=${WVP_IP}' >> run.sh  && \
-        echo 'fi' >> run.sh
-RUN chmod +x run.sh
-
-FROM ubuntu:20.04
-
-ARG DEBIAN_FRONTEND=noninteractive
-ENV TZ=Asia/Shanghai
-
-EXPOSE 18080/tcp
-
-EXPOSE 5060/tcp
-EXPOSE 5060/udp
-
-EXPOSE 6379/tcp
-
-EXPOSE 18081/tcp
-
-EXPOSE 80/tcp
-EXPOSE 1935/tcp
-EXPOSE 554/tcp
-EXPOSE 554/udp
-EXPOSE 30000-30500/tcp
-EXPOSE 30000-30500/udp
-
-ENV LC_ALL zh_CN.UTF-8
-
-RUN apt-get update && \
-        DEBIAN_FRONTEND="noninteractive" && \
-        apt-get install -y --no-install-recommends openjdk-11-jre tcl language-pack-zh-hans \
-        ca-certificates  tzdata libmysqlclient21  redis-server libssl1.1 libx264-155 libfaac0 ffmpeg && \
-        apt-get autoremove -y && \
-        apt-get clean -y && \
-        rm -rf /var/lib/apt/lists/*dic
-
-WORKDIR /opt/wvp
-COPY --from=build /opt /opt
-CMD ["sh", "run.sh"]
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 57cc8e5..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 swwhaha
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100644
index 564b197..0000000
--- a/README.md
+++ /dev/null
@@ -1,134 +0,0 @@
-![logo](https://gitee.com/pan648540858/wvp-GB28181-pro/raw/wvp-28181-2.0/web_src/static/logo.png)
-# 开箱即用的的28181协议视频平台
-
-[![Build Status](https://travis-ci.org/xia-chu/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xia-chu/ZLMediaKit)
-[![license](http://img.shields.io/badge/license-MIT-green.svg)](https://github.com/xia-chu/ZLMediaKit/blob/master/LICENSE)
-[![JAVA](https://img.shields.io/badge/language-java-red.svg)](https://en.cppreference.com/)
-[![platform](https://img.shields.io/badge/platform-linux%20|%20macos%20|%20windows-blue.svg)](https://github.com/xia-chu/ZLMediaKit)
-[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-yellow.svg)](https://github.com/xia-chu/ZLMediaKit/pulls)
-
-
-WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。   
-
-流媒体服务基于ZLMediaKit-https://github.com/xiongziliang/ZLMediaKit
-
-前端页面基于MediaServerUI进行修改.  
-
-# 应用场景:
-支持浏览器无插件播放摄像头视频。  
-支持摄像机、平台、NVR等设备接入。 
-支持国标级联。  
-支持rtsp/rtmp等视频流转发到国标平台。  
-支持rtsp/rtmp等推流转发到国标平台。  
-
-# 项目目标
-旨在打造一个易配置,易使用,便于维护的28181国标信令系统, 依托优秀的开源流媒体服务框架ZLMediaKit, 实现一个完整易用GB28181平台. 
-
-# 部署文档
-[https://github.com/648540858/wvp-GB28181-pro/wiki](https://github.com/648540858/wvp-GB28181-pro/wiki)
-
-# gitee同步仓库
-https://gitee.com/pan648540858/wvp-GB28181-pro.git
-
-# 截图
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101513_79632720_1018729.png "2022-03-04_09-51.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/103025_5df016f9_1018729.png "2022-03-04_10-27.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101706_088fbafa_1018729.png "2022-03-04_09-52_1.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101756_3d662828_1018729.png "2022-03-04_10-00_1.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101823_19050c66_1018729.png "2022-03-04_10-12_1.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101848_e5a39557_1018729.png "2022-03-04_10-12_2.png")
-![build_1.png](https://images.gitee.com/uploads/images/2022/0304/101919_ee5b8c79_1018729.png "2022-03-04_10-13.png")
-
-# 1.0 基础特性  
-1. 视频预览;  
-2. 云台控制(方向、缩放控制);  
-3. 视频设备信息同步;   
-4. 离在线监控;  
-5. 录像查询与回放(基于NVR\DVR,暂不支持快进、seek操作);  
-6. 无人观看自动断流;    
-7. 支持UDP和TCP两种国标信令传输模式; 
-8. 集成web界面, 不需要单独部署前端服务, 直接利用wvp内置文件服务部署, 随wvp一起部署;   
-9. 支持平台接入, 针对大平台大量设备的情况进行优化;  
-10. 支持检索,通道筛选;  
-11. 支持自动配置ZLM媒体服务, 减少因配置问题所出现的问题;  
-12. 支持启用udp多端口模式, 提高udp模式下媒体传输性能;  
-13. 支持通道是否含有音频的设置;  
-14. 支持通道子目录查询;  
-15. 支持udp/tcp国标流传输模式;  
-16. 支持直接输出RTSP、RTMP、HTTP-FLV、Websocket-FLV、HLS多种协议流地址  
-17. 支持国标网络校时  
-18. 支持公网部署, 支持wvp与zlm分开部署   
-19. 支持播放h265, g.711格式的流(需要将closeWaitRTPInfo设为false)
-20. 报警信息处理,支持向前端推送报警信息
-
-# 1.0 新支持特性  
-1. 集成web界面, 不需要单独部署前端服务, 直接利用wvp内置文件服务部署, 随wvp一起部署;   
-2. 支持平台接入, 针对大平台大量设备的情况进行优化;  
-3. 支持检索,通道筛选;  
-4. 支持自动配置ZLM媒体服务, 减少因配置问题所出现的问题;  
-5. 支持启用udp多端口模式, 提高udp模式下媒体传输性能;  
-6. 支持通道是否含有音频的设置;  
-7. 支持通道子目录查询;  
-8. 支持udp/tcp国标流传输模式;  
-9. 支持直接输出RTSP、RTMP、HTTP-FLV、Websocket-FLV、HLS多种协议流地址  
-10. 支持国标网络校时  
-11. 支持公网部署, 支持wvp与zlm分开部署   
-12. 支持播放h265, g.711格式的流   
-13. 支持固定流地址和自动点播,同时支持未点播时直接播放流地址,代码自动发起点播.  ( [查看WIKI](https://github.com/648540858/wvp-GB28181-pro/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E6%92%AD%E6%94%BE%E5%9C%B0%E5%9D%80%E4%B8%8E%E8%87%AA%E5%8A%A8%E7%82%B9%E6%92%AD))
-14. 报警信息处理,支持向前端推送报警信息
-15. 支持订阅与通知方法
-   -  [X] 移动位置订阅
-   -  [X] 移动位置通知处理
-   -  [X] 报警事件订阅
-   -  [X] 报警事件通知处理
-   -  [X] 设备目录订阅
-   -  [X] 设备目录通知处理
-16. 移动位置查询和显示,可通过配置文件设置移动位置历史是否存储
-
-# 2.0 支持特性
-- [X] 国标通道向上级联
-    - [X] WEB添加上级平台
-    - [X] 注册
-    - [X] 心跳保活
-    - [X] 通道选择
-    - [X] 通道推送
-    - [X] 点播
-    - [X] 云台控制
-    - [X] 平台状态查询
-    - [X] 平台信息查询
-    - [X] 平台远程启动
-    - [X] 每个级联平台可自定义的虚拟目录
-    - [X] 目录订阅与通知
-    - [X] 录像查看与播放
-    - [X] GPS订阅与通知(直播推流)
-- [X] 添加RTSP视频
-- [X] 添加接口鉴权
-- [X] 添加RTMP视频
-- [X] 云端录像(需要部署单独服务配合使用)
-- [X] 多流媒体节点,自动选择负载最低的节点使用。
-- [X] 支持使用mysql作为数据库,默认sqlite3,开箱即用。
-- [X] WEB端支持播放H264与H265,音频支持G.711A/G.711U/AAC,覆盖国标常用编码格式。
-
-# docker快速体验
-目前作者的docker-compose因为时间有限维护不及时,这里提供第三方提供的供大家使用,维护不易,大家记得给这位小伙伴点个star。  
-https://github.com/SaltFish001/wvp_pro_compose
-[https://github.com/SaltFish001/wvp_pro_compose](https://github.com/SaltFish001/wvp_pro_compose)
-这是作者维护的一个镜像,可能存在不及时的问题。
-```shell
-docker pull 648540858/wvp_pro
-
-docker run  --env WVP_IP="你的IP" -it -p 18080:18080 -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -p 80:80 -p 5060:5060 -p 5060:5060/udp 648540858/wvp_pro
-```
-docker使用详情查看:[https://hub.docker.com/r/648540858/wvp_pro](https://hub.docker.com/r/648540858/wvp_pro)
-
-# gitee同步仓库
-https://gitee.com/pan648540858/wvp-GB28181-pro.git  
-
-# 使用帮助
-QQ群: 901799015, ZLM使用文档[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)  
-QQ私信一般不回, 精力有限.欢迎大家在群里讨论.觉得项目对你有帮助,欢迎star和提交pr。
-
-
-# 致谢
-感谢作者[夏楚](https://github.com/xia-chu) 提供这么棒的开源流媒体服务框架  
-
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
deleted file mode 100644
index 3da521a..0000000
--- a/docker/docker-compose.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: '3'
-services:
-  redis:
-    image: redis
-    restart: always
-    volumes:
-      - ./redis/redis.conf:/etc/redis/redis_default.conf
-      - ./redis/data/:/data
-    environment:
-      TZ: "Asia/Shanghai"
-    command: redis-server /etc/redis/redis_default.conf --appendonly yes
-  wvp:
-    build:
-      context: ./wvp
-      args:
-        gitUrl: "https://gitee.com/pan648540858"
-        zlmGitUrl: "https://gitee.com/xia-chu/ZLMediaKit"
-    restart: always
-    ports:
-      - "5060:5060"
-      - "5060:5060/udp"
-      - "18080:18080"
-      - "80:80"
-      - "10000:10000/tcp"
-      - "10000:10000/udp"
-      - "30000-30500:30000-30500/tcp"
-      - "30000-30500:30000-30500/udp"
-    volumes:
-      - ./video:/opt/media/www/record/
-      - ./logs/wvp:/opt/wvp/logs/
-      - ./logs/assist:/opt/assist/logs/
-      - ./logs/media:/opt/media/log/
-    environment:
-      TZ: "Asia/Shanghai"
-      # [必须修改] 本机的IP
-      WVP_HOST: 172.18.0.61
-      WVP_PWD: aseqw_+hiy123
-      WVP_DOMAIN: 6101130049
-      WVP_ID: 61011300490000000001
-      REDIS_HOST: redis
-      REDIS_PORT: 6379
-      REDIS_DB: 6
-      REDIS_PWD: root
-      ASSIST_JVM_CONFIG: -Xms128m -Xmx256m
-      WVP_JVM_CONFIG: -Xms128m -Xmx256m
-      ASSIST_CONFIG:
-      WVP_CONFIG:
-    depends_on:
-      - redis
diff --git a/docker/redis/redis.conf b/docker/redis/redis.conf
deleted file mode 100644
index c211f13..0000000
--- a/docker/redis/redis.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-requirepass root
-bind 0.0.0.0
diff --git a/docker/wvp/Dockerfile b/docker/wvp/Dockerfile
deleted file mode 100644
index 34e3bab..0000000
--- a/docker/wvp/Dockerfile
+++ /dev/null
@@ -1,81 +0,0 @@
-FROM ubuntu:20.04   as   build
-
-ARG gitUrl="https://gitee.com/pan648540858"
-ARG zlmGitUrl="https://gitee.com/xia-chu/ZLMediaKit"
-
-RUN export DEBIAN_FRONTEND=noninteractive &&\
-        apt-get update && \
-        apt-get install -y --no-install-recommends openjdk-11-jre git maven nodejs npm build-essential \
-        cmake ca-certificates openssl ffmpeg &&\
-        mkdir -p /opt/wvp/config /opt/wvp/heapdump /opt/wvp/config /opt/assist/config /opt/assist/heapdump /opt/media/www/record
-
-RUN cd /home && \
-        git clone "${gitUrl}/maven.git" && \
-        cp maven/settings.xml /usr/share/maven/conf/
-
-RUN cd /home && \
-        git clone "${gitUrl}/wvp-GB28181-pro.git"
-RUN cd /home/wvp-GB28181-pro/web_src && \
-        npm install && \
-        npm run build
-RUN cd /home/wvp-GB28181-pro && \
-        mvn clean package -Dmaven.test.skip=true && \
-        cp /home/wvp-GB28181-pro/target/*.jar /opt/wvp/ && \
-        cp /home/wvp-GB28181-pro/src/main/resources/application-docker.yml /opt/wvp/config/application.yml
-
-RUN cd /home && \
-		git clone "${gitUrl}/wvp-pro-assist.git"
-RUN cd /home/wvp-pro-assist && \
-	git reset --hard 58f1a79136a55a7cd1593c95b56ddadcc2225b61 && \
-        mvn clean package -Dmaven.test.skip=true && \
-        cp /home/wvp-pro-assist/target/*.jar /opt/assist/ && \
-        cp /home/wvp-pro-assist/src/main/resources/application-dev.yml /opt/assist/config/application.yml
-
-RUN cd /home && \
-        git clone --depth=1 "${zlmGitUrl}"
-RUN cd /home/ZLMediaKit && \
-        git submodule update --init --recursive && \
-        mkdir -p build release/linux/Release/ &&\
-        cd build && \
-        cmake -DCMAKE_BUILD_TYPE=Release .. && \
-        make -j4 && \
-        rm -rf ../release/linux/Release/config.ini && \
-        cp -r ../release/linux/Release/* /opt/media
-
-RUN cd /opt/wvp && \
-        echo '#!/bin/bash' > run.sh && \
-        echo 'echo ${WVP_IP}' >> run.sh && \
-        echo 'echo ${WVP_CONFIG}' >> run.sh && \
-        echo 'cd /opt/assist' >> run.sh && \
-        echo 'nohup java ${ASSIST_JVM_CONFIG} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/assist/heapdump/ -jar *.jar --spring.config.location=/opt/assist/config/application.yml --userSettings.record=/opt/media/www/record/  --media.record-assist-port=18081 ${ASSIST_CONFIG} &' >> run.sh && \
-        echo 'nohup /opt/media/MediaServer -d -m 3 &' >> run.sh && \
-        echo 'cd /opt/wvp' >> run.sh && \
-        echo 'java ${WVP_JVM_CONFIG} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/wvp/heapdump/ -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 ${WVP_CONFIG}' >> run.sh && \
-        chmod +x run.sh
-
-FROM ubuntu:20.04
-
-EXPOSE 18080/tcp
-EXPOSE 5060/tcp
-EXPOSE 5060/udp
-EXPOSE 6379/tcp
-EXPOSE 18081/tcp
-EXPOSE 80/tcp
-EXPOSE 1935/tcp
-EXPOSE 554/tcp
-EXPOSE 554/udp
-EXPOSE 30000-30500/tcp
-EXPOSE 30000-30500/udp
-
-ENV LC_ALL zh_CN.UTF-8
-
-RUN export DEBIAN_FRONTEND=noninteractive &&\
-        apt-get update && \
-        apt-get install -y --no-install-recommends openjdk-11-jre ca-certificates ffmpeg language-pack-zh-hans && \
-        apt-get autoremove -y && \
-        apt-get clean -y && \
-        rm -rf /var/lib/apt/lists/*dic
-
-COPY --from=build /opt /opt
-WORKDIR /opt/wvp
-CMD ["sh", "run.sh"]
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 8ea9906..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,307 +0,0 @@
-<?xml version="1.0"?>
-<project
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.3.5.RELEASE</version>
-	</parent>
-
-	<groupId>com.genersoft</groupId>
-	<artifactId>wvp-pro</artifactId>
-	<version>2.0.2</version>
-	<name>web video platform</name>
-	<description>国标28181视频平台</description>
-
-	<repositories>
-		<repository>
-			<id>nexus-aliyun</id>
-			<name>Nexus aliyun</name>
-			<url>https://maven.aliyun.com/repository/public</url>
-			<layout>default</layout>
-			<snapshots>
-				<enabled>false</enabled>
-			</snapshots>
-			<releases>
-				<enabled>true</enabled>
-			</releases>
-		</repository>
-	</repositories>
-	<pluginRepositories>
-		<pluginRepository>
-			<id>nexus-aliyun</id>
-			<name>Nexus aliyun</name>
-			<url>https://maven.aliyun.com/repository/public</url>
-			<snapshots>
-				<enabled>false</enabled>
-			</snapshots>
-			<releases>
-				<enabled>true</enabled>
-			</releases>
-		</pluginRepository>
-	</pluginRepositories>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<maven.build.timestamp.format>MMddHHmm</maven.build.timestamp.format>
-		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
-		<jedis-version>3.1.0</jedis-version>
-
-		<!-- 依赖版本 -->
-		<snippetsDirectory>${project.build.directory}/generated-snippets</snippetsDirectory>
-		<asciidoctor.input.directory>${project.basedir}/docs/asciidoc</asciidoctor.input.directory>
-		<generated.asciidoc.directory>${project.build.directory}/asciidoc</generated.asciidoc.directory>
-		<asciidoctor.html.output.directory>${project.build.directory}/asciidoc/html</asciidoctor.html.output.directory>
-		<asciidoctor.pdf.output.directory>${project.build.directory}/asciidoc/pdf</asciidoctor.pdf.output.directory>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-redis</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-configuration-processor</artifactId>
-			<optional>true</optional>
-		</dependency>
-		<dependency>
-			<groupId>org.mybatis.spring.boot</groupId>
-			<artifactId>mybatis-spring-boot-starter</artifactId>
-			<version>2.1.4</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-security</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>redis.clients</groupId>
-			<artifactId>jedis</artifactId>
-			<version>${jedis-version}</version>
-		</dependency>
-
-		<!-- druid数据库连接池 -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>druid-spring-boot-starter</artifactId>
-			<version>1.1.22</version>
-		</dependency>
-
-		<!-- mysql数据库 -->
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-			<version>8.0.22</version>
-		</dependency>
-
-		<!-- 添加sqlite-jdbc数据库驱动 -->
-		<dependency>
-			<groupId>org.xerial</groupId>
-			<artifactId>sqlite-jdbc</artifactId>
-			<version>3.32.3.2</version>
-		</dependency>
-
-		<!--Mybatis分页插件 -->
-		<dependency>
-			<groupId>com.github.pagehelper</groupId>
-			<artifactId>pagehelper-spring-boot-starter</artifactId>
-			<version>1.4.1</version>
-		</dependency>
-
-		<!--Swagger3 -->
-		<!--在线文档 -->
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-boot-starter</artifactId>
-			<version>3.0.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.github.xiaoymin</groupId>
-			<artifactId>knife4j-spring-boot-starter</artifactId>
-			<version>3.0.2</version>
-		</dependency>
-
-
-		<!--参数校验 -->
-		<dependency>
-			<groupId>javax.validation</groupId>
-			<artifactId>validation-api</artifactId>
-		</dependency>
-
-		<!-- 日志相关 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-aop</artifactId>
-		</dependency>
-
-		<!-- sip协议栈 -->
-		<dependency>
-			<groupId>javax.sip</groupId>
-			<artifactId>jain-sip-ri</artifactId>
-			<version>1.3.0-91</version>
-		</dependency>
-
-		<!-- 取代log4j -->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>log4j-over-slf4j</artifactId>
-			<version>1.7.35</version>
-		</dependency>
-
-		<!-- xml解析库 -->
-		<dependency>
-			<groupId>org.dom4j</groupId>
-			<artifactId>dom4j</artifactId>
-			<version>2.1.3</version>
-		</dependency>
-
-		<!-- json解析库fastjson -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>1.2.73</version>
-		</dependency>
-
-		<!-- okhttp -->
-		<dependency>
-			<groupId>com.squareup.okhttp3</groupId>
-			<artifactId>okhttp</artifactId>
-			<version>4.9.0</version>
-		</dependency>
-
-		<!-- okhttp 调试日志 -->
-		<dependency>
-			<groupId>com.squareup.okhttp3</groupId>
-			<artifactId>logging-interceptor</artifactId>
-			<version>4.9.0</version>
-		</dependency>
-
-
-
-		<!-- okhttp-digest -->
-		<dependency>
-			<groupId>com.burgstaller</groupId>
-			<artifactId>okhttp-digest</artifactId>
-			<version>2.1</version>
-		</dependency>
-
-		<!-- https://mvnrepository.com/artifact/net.sf.kxml/kxml2 -->
-		<dependency>
-			<groupId>net.sf.kxml</groupId>
-			<artifactId>kxml2</artifactId>
-			<version>2.3.0</version>
-		</dependency>
-
-		<!--反向代理-->
-		<dependency>
-			<groupId>org.mitre.dsmiley.httpproxy</groupId>
-			<artifactId>smiley-http-proxy-servlet</artifactId>
-			<version>1.12</version>
-		</dependency>
-
-		<!--excel解析库-->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>easyexcel</artifactId>
-			<version>3.0.4</version>
-		</dependency>
-
-		<!-- 获取系统信息 -->
-		<dependency>
-			<groupId>com.github.oshi</groupId>
-			<artifactId>oshi-core</artifactId>
-			<version>6.1.0</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.session</groupId>
-			<artifactId>spring-session-core</artifactId>
-		</dependency>
-
-<!--		&lt;!&ndash; 检测文件编码 &ndash;&gt;-->
-<!--		&lt;!&ndash; https://mvnrepository.com/artifact/cpdetector/cpdetector &ndash;&gt;-->
-<!--		<dependency>-->
-<!--			<groupId>cpdetector</groupId>-->
-<!--			<artifactId>cpdetector</artifactId>-->
-<!--			<version>1.0.8</version>-->
-<!--		</dependency>-->
-
-		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-			<version>31.0.1-jre</version>
-		</dependency>
-
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-<!--			<scope>test</scope>-->
-		</dependency>
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<version>1.18.24</version>
-		</dependency>
-	</dependencies>
-
-
-
-	<build>
-		<finalName>videos</finalName>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-				<configuration>
-					<includeSystemScope>true</includeSystemScope>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<source>1.8</source>
-					<target>1.8</target>
-				</configuration>
-			</plugin>
-
-			<plugin>
-				<groupId>pl.project13.maven</groupId>
-				<artifactId>git-commit-id-plugin</artifactId>
-				<configuration>
-					<offline>true</offline>
-				</configuration>
-			</plugin>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<configuration>
-					<skipTests>true</skipTests>
-				</configuration>
-			</plugin>
-
-		</plugins>
-		<resources>
-			<resource>
-				<directory>src/main/resources</directory>
-			</resource>
-			<resource>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**/*.xml</include>
-				</includes>
-			</resource>
-		</resources>
-	</build>
-</project>
diff --git a/readmes.md b/readmes.md
deleted file mode 100644
index dd69a85..0000000
--- a/readmes.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# 进入 web_src 下,执行
-cd wvp-GB28181-pro/web_src/
-
-# 下载依赖
-npm --registry=https://registry.npm.taobao.org install
-
-# 打包前端
-npm run build
-
-# 后台启动后可以直接通过 
-http://ip:port/login 访问
-
-比如: http://localhost:18185/login 
\ No newline at end of file
diff --git "a/sql/config\344\270\212\351\245\266\346\234\215\345\212\241\345\231\250.ini" "b/sql/config\344\270\212\351\245\266\346\234\215\345\212\241\345\231\250.ini"
deleted file mode 100644
index 0dc6421..0000000
--- "a/sql/config\344\270\212\351\245\266\346\234\215\345\212\241\345\231\250.ini"
+++ /dev/null
@@ -1,154 +0,0 @@
-; auto-generated by mINI class {
-
-[api]
-apiDebug=1
-defaultSnap=./www/logo.png
-secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-snapRoot=./www/snap/
-
-[cluster]
-origin_url=
-retry_count=3
-timeout_sec=15
-
-[ffmpeg]
-bin=/usr/local/ffmpeg
-cmd=%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264  -f flv %s
-log=./ffmpeg/ffmpeg.log
-restart_sec=0
-snap=%s -i %s -y -f mjpeg -t 0.001 %s
-
-[general]
-addMuteAudio=1
-check_nvidia_dev=1
-continue_push_ms=3000
-enableVhost=0
-enable_audio=1
-enable_ffmpeg_log=0
-flowThreshold=1024
-fmp4_demand=0
-hls_demand=0
-maxStreamWaitMS=15000
-mediaServerId=your_server_id
-mergeWriteMS=0
-modifyStamp=0
-publishToHls=1
-publishToMP4=0
-resetWhenRePlay=1
-rtmp_demand=0
-rtsp_demand=0
-streamNoneReaderDelayMS=10000
-ts_demand=0
-unready_frame_cache=100
-wait_add_track_ms=3000
-wait_track_ready_ms=3000
-
-[hls]
-broadcastRecordTs=0
-deleteDelaySec=0
-fileBufSize=65536
-filePath=./www
-segDur=2
-segKeep=0
-segNum=3
-segRetain=5
-
-[hook]
-admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-alive_interval=10.0
-enable=1
-on_flow_report=
-on_http_access=
-on_play=http://36.14.131.102:18085/index/hook/on_play
-on_publish=http://36.14.131.102:18085/index/hook/on_publish
-on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4
-on_record_ts=
-on_rtsp_auth=
-on_rtsp_realm=
-on_server_keepalive=http://36.14.131.102:18085/index/hook/on_server_keepalive
-on_server_started=http://36.14.131.102:18085/index/hook/on_server_started
-on_shell_login=http://36.14.131.102:18085/index/hook/on_shell_login
-on_stream_changed=http://36.14.131.102:18085/index/hook/on_stream_changed
-on_stream_none_reader=http://36.14.131.102:18085/index/hook/on_stream_none_reader
-on_stream_not_found=http://36.14.131.102:18085/index/hook/on_stream_not_found
-retry=1
-retry_delay=3.000000
-timeoutSec=20
-
-[http]
-charSet=utf-8
-dirMenu=1
-forbidCacheSuffix=
-forwarded_ip_header=
-keepAliveSecond=30
-maxReqSize=40960
-notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:a16b6cb,branch:master,build time:Mar 21 2022 17:05:18)</center></body></html>
-port=8880
-rootPath=./www
-sendBufSize=65536
-sslport=8443
-virtualPath=
-
-[multicast]
-addrMax=239.255.255.255
-addrMin=239.0.0.0
-udpTTL=64
-
-[record]
-appName=record
-fastStart=0
-fileBufSize=65536
-filePath=./www
-fileRepeat=0
-fileSecond=3600
-sampleMS=500
-
-[rtc]
-externIP=
-port=8000
-preferredCodecA=PCMU,PCMA,opus,mpeg4-generic
-preferredCodecV=H264,H265,AV1X,VP9,VP8
-rembBitRate=0
-timeoutSec=15
-
-[rtmp]
-handshakeSecond=15
-keepAliveSecond=15
-modifyStamp=0
-port=1935
-sslport=0
-
-[rtp]
-audioMtuSize=600
-rtpMaxSize=10
-videoMtuSize=1400
-
-[rtp_proxy]
-dumpDir=
-g711a_pt=8
-g711u_pt=0
-h264_pt=98
-h265_pt=99
-opus_pt=100
-port=10000
-port_range=30000-30500
-ps_pt=96
-timeoutSec=15
-ts_pt=33
-
-[rtsp]
-authBasic=0
-directProxy=1
-handshakeSecond=15
-keepAliveSecond=15
-port=8854
-sslport=0
-
-[shell]
-maxReqSize=1024
-port=0
-
-[srt]
-port=
-
-; } ---
diff --git "a/sql/config\344\277\235\345\256\211\346\234\215\345\212\241\345\231\250.ini" "b/sql/config\344\277\235\345\256\211\346\234\215\345\212\241\345\231\250.ini"
deleted file mode 100644
index 0b8b255..0000000
--- "a/sql/config\344\277\235\345\256\211\346\234\215\345\212\241\345\231\250.ini"
+++ /dev/null
@@ -1,154 +0,0 @@
-; auto-generated by mINI class {
-
-[api]
-apiDebug=1
-defaultSnap=./www/logo.png
-secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-snapRoot=./www/snap/
-
-[cluster]
-origin_url=
-retry_count=3
-timeout_sec=15
-
-[ffmpeg]
-bin=/usr/local/ffmpeg
-cmd=%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264  -f flv %s
-log=./ffmpeg/ffmpeg.log
-restart_sec=0
-snap=%s -i %s -y -f mjpeg -t 0.001 %s
-
-[general]
-addMuteAudio=1
-check_nvidia_dev=1
-continue_push_ms=3000
-enableVhost=0
-enable_audio=1
-enable_ffmpeg_log=0
-flowThreshold=1024
-fmp4_demand=0
-hls_demand=0
-maxStreamWaitMS=15000
-mediaServerId=your_server_id
-mergeWriteMS=0
-modifyStamp=0
-publishToHls=1
-publishToMP4=0
-resetWhenRePlay=1
-rtmp_demand=0
-rtsp_demand=0
-streamNoneReaderDelayMS=10000
-ts_demand=0
-unready_frame_cache=100
-wait_add_track_ms=3000
-wait_track_ready_ms=3000
-
-[hls]
-broadcastRecordTs=0
-deleteDelaySec=0
-fileBufSize=65536
-filePath=./www
-segDur=2
-segKeep=0
-segNum=3
-segRetain=5
-
-[hook]
-admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-alive_interval=10.0
-enable=1
-on_flow_report=
-on_http_access=
-on_play=http://192.168.0.204:18080/index/hook/on_play
-on_publish=http://192.168.0.204:18080/index/hook/on_publish
-on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4
-on_record_ts=
-on_rtsp_auth=
-on_rtsp_realm=
-on_server_keepalive=http://192.168.0.204:18080/index/hook/on_server_keepalive
-on_server_started=http://192.168.0.204:18080/index/hook/on_server_started
-on_shell_login=http://192.168.0.204:18080/index/hook/on_shell_login
-on_stream_changed=http://192.168.0.204:18080/index/hook/on_stream_changed
-on_stream_none_reader=http://192.168.0.204:18080/index/hook/on_stream_none_reader
-on_stream_not_found=http://192.168.0.204:18080/index/hook/on_stream_not_found
-retry=1
-retry_delay=3.000000
-timeoutSec=20
-
-[http]
-charSet=utf-8
-dirMenu=1
-forbidCacheSuffix=
-forwarded_ip_header=
-keepAliveSecond=30
-maxReqSize=40960
-notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:a16b6cb,branch:master,build time:Mar 21 2022 17:05:18)</center></body></html>
-port=8880
-rootPath=./www
-sendBufSize=65536
-sslport=8443
-virtualPath=
-
-[multicast]
-addrMax=239.255.255.255
-addrMin=239.0.0.0
-udpTTL=64
-
-[record]
-appName=record
-fastStart=0
-fileBufSize=65536
-filePath=./www
-fileRepeat=0
-fileSecond=3600
-sampleMS=500
-
-[rtc]
-externIP=
-port=8000
-preferredCodecA=PCMU,PCMA,opus,mpeg4-generic
-preferredCodecV=H264,H265,AV1X,VP9,VP8
-rembBitRate=0
-timeoutSec=15
-
-[rtmp]
-handshakeSecond=15
-keepAliveSecond=15
-modifyStamp=0
-port=1935
-sslport=0
-
-[rtp]
-audioMtuSize=600
-rtpMaxSize=10
-videoMtuSize=1400
-
-[rtp_proxy]
-dumpDir=
-g711a_pt=8
-g711u_pt=0
-h264_pt=98
-h265_pt=99
-opus_pt=100
-port=10000
-port_range=30000-30500
-ps_pt=96
-timeoutSec=15
-ts_pt=33
-
-[rtsp]
-authBasic=0
-directProxy=1
-handshakeSecond=15
-keepAliveSecond=15
-port=8854
-sslport=0
-
-[shell]
-maxReqSize=1024
-port=0
-
-[srt]
-port=
-
-; } ---
diff --git "a/sql/config\346\234\254\346\234\272.ini" "b/sql/config\346\234\254\346\234\272.ini"
deleted file mode 100644
index bba3e9a..0000000
--- "a/sql/config\346\234\254\346\234\272.ini"
+++ /dev/null
@@ -1,154 +0,0 @@
-; auto-generated by mINI class {
-
-[api]
-apiDebug=1
-defaultSnap=./www/logo.png
-secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-snapRoot=./www/snap/
-
-[cluster]
-origin_url=
-retry_count=3
-timeout_sec=15
-
-[ffmpeg]
-bin=/usr/local/ffmpeg
-cmd=%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264  -f flv %s
-log=./ffmpeg/ffmpeg.log
-restart_sec=0
-snap=%s -i %s -y -f mjpeg -t 0.001 %s
-
-[general]
-addMuteAudio=1
-check_nvidia_dev=1
-continue_push_ms=3000
-enableVhost=0
-enable_audio=1
-enable_ffmpeg_log=0
-flowThreshold=1024
-fmp4_demand=0
-hls_demand=0
-maxStreamWaitMS=15000
-mediaServerId=your_server_id
-mergeWriteMS=0
-modifyStamp=0
-publishToHls=1
-publishToMP4=0
-resetWhenRePlay=1
-rtmp_demand=0
-rtsp_demand=0
-streamNoneReaderDelayMS=10000
-ts_demand=0
-unready_frame_cache=100
-wait_add_track_ms=3000
-wait_track_ready_ms=3000
-
-[hls]
-broadcastRecordTs=0
-deleteDelaySec=0
-fileBufSize=65536
-filePath=./www
-segDur=2
-segKeep=0
-segNum=3
-segRetain=5
-
-[hook]
-admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
-alive_interval=10.0
-enable=1
-on_flow_report=
-on_http_access=
-on_play=http://36.14.255.242:18085/index/hook/on_play
-on_publish=http://36.14.255.242:18085/index/hook/on_publish
-on_record_mp4=http://127.0.0.1:18081/api/record/on_record_mp4
-on_record_ts=
-on_rtsp_auth=
-on_rtsp_realm=
-on_server_keepalive=http://36.14.255.242:18085/index/hook/on_server_keepalive
-on_server_started=http://36.14.255.242:18085/index/hook/on_server_started
-on_shell_login=http://36.14.255.242:18085/index/hook/on_shell_login
-on_stream_changed=http://36.14.255.242:18085/index/hook/on_stream_changed
-on_stream_none_reader=http://36.14.255.242:18085/index/hook/on_stream_none_reader
-on_stream_not_found=http://36.14.255.242:18085/index/hook/on_stream_not_found
-retry=1
-retry_delay=3.000000
-timeoutSec=20
-
-[http]
-charSet=utf-8
-dirMenu=1
-forbidCacheSuffix=
-forwarded_ip_header=
-keepAliveSecond=30
-maxReqSize=40960
-notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:a16b6cb,branch:master,build time:Mar 21 2022 17:05:18)</center></body></html>
-port=8880
-rootPath=./www
-sendBufSize=65536
-sslport=8443
-virtualPath=
-
-[multicast]
-addrMax=239.255.255.255
-addrMin=239.0.0.0
-udpTTL=64
-
-[record]
-appName=record
-fastStart=0
-fileBufSize=65536
-filePath=./www
-fileRepeat=0
-fileSecond=3600
-sampleMS=500
-
-[rtc]
-externIP=
-port=8000
-preferredCodecA=PCMU,PCMA,opus,mpeg4-generic
-preferredCodecV=H264,H265,AV1X,VP9,VP8
-rembBitRate=0
-timeoutSec=15
-
-[rtmp]
-handshakeSecond=15
-keepAliveSecond=15
-modifyStamp=0
-port=1935
-sslport=0
-
-[rtp]
-audioMtuSize=600
-rtpMaxSize=10
-videoMtuSize=1400
-
-[rtp_proxy]
-dumpDir=
-g711a_pt=8
-g711u_pt=0
-h264_pt=98
-h265_pt=99
-opus_pt=100
-port=10000
-port_range=30000-30500
-ps_pt=96
-timeoutSec=15
-ts_pt=33
-
-[rtsp]
-authBasic=0
-directProxy=1
-handshakeSecond=15
-keepAliveSecond=15
-port=8854
-sslport=0
-
-[shell]
-maxReqSize=1024
-port=0
-
-[srt]
-port=
-
-; } ---
diff --git a/sql/mysql.sql b/sql/mysql.sql
deleted file mode 100644
index 7c68429..0000000
--- a/sql/mysql.sql
+++ /dev/null
@@ -1,544 +0,0 @@
--- MySQL dump 10.13  Distrib 8.0.28, for Linux (x86_64)
---
--- Host: 127.0.0.1    Database: wvp
--- ------------------------------------------------------
--- Server version	8.0.28-0ubuntu0.20.04.3
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!50503 SET NAMES utf8mb4 */;
-/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-/*!40103 SET TIME_ZONE='+00:00' */;
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
---
--- Table structure for table `device`
---
-
-DROP TABLE IF EXISTS `device`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `device` (
-                          `id` int NOT NULL AUTO_INCREMENT,
-                          `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `manufacturer` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `model` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `firmware` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `transport` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `streamMode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `online` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `registerTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `keepaliveTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                          `ip` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          `updateTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          `port` int NOT NULL,
-                          `expires` int NOT NULL,
-                          `subscribeCycleForCatalog` int NOT NULL,
-                          `hostAddress` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          `charset` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                          PRIMARY KEY (`id`),
-                          UNIQUE KEY `device_deviceId_uindex` (`deviceId`)
-) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `device`
---
-
-LOCK TABLES `device` WRITE;
-/*!40000 ALTER TABLE `device` DISABLE KEYS */;
-/*!40000 ALTER TABLE `device` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `device_alarm`
---
-
-DROP TABLE IF EXISTS `device_alarm`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `device_alarm` (
-                                `id` int NOT NULL AUTO_INCREMENT,
-                                `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `alarmPriority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `alarmMethod` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `alarmTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `alarmDescription` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `longitude` double DEFAULT NULL,
-                                `latitude` double DEFAULT NULL,
-                                `alarmType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `device_alarm`
---
-
-LOCK TABLES `device_alarm` WRITE;
-/*!40000 ALTER TABLE `device_alarm` DISABLE KEYS */;
-/*!40000 ALTER TABLE `device_alarm` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `device_channel`
---
-
-DROP TABLE IF EXISTS `device_channel`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `device_channel` (
-                                  `id` int NOT NULL AUTO_INCREMENT,
-                                  `channelId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                  `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `manufacture` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `model` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `owner` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `civilCode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `block` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `address` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `parentId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `safetyWay` int DEFAULT NULL,
-                                  `registerWay` int DEFAULT NULL,
-                                  `certNum` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `certifiable` int DEFAULT NULL,
-                                  `errCode` int DEFAULT NULL,
-                                  `endTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `secrecy` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `ipAddress` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `port` int DEFAULT NULL,
-                                  `password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `PTZType` int DEFAULT NULL,
-                                  `status` int DEFAULT NULL,
-                                  `longitude` double DEFAULT NULL,
-                                  `latitude` double DEFAULT NULL,
-                                  `streamId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                  `parental` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                  `hasAudio` bit(1) DEFAULT NULL,
-                                  `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                  `updateTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                  `subCount` int DEFAULT '0',
-                                  PRIMARY KEY (`id`),
-                                  UNIQUE KEY `device_channel_id_uindex` (`id`),
-                                  UNIQUE KEY `device_channel_pk` (`channelId`,`deviceId`)
-) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `device_channel`
---
-
-LOCK TABLES `device_channel` WRITE;
-/*!40000 ALTER TABLE `device_channel` DISABLE KEYS */;
-/*!40000 ALTER TABLE `device_channel` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `device_mobile_position`
---
-
-DROP TABLE IF EXISTS `device_mobile_position`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `device_mobile_position` (
-                                          `id` int NOT NULL AUTO_INCREMENT,
-                                          `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                          `channelId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                          `deviceName` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                          `time` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                          `longitude` double NOT NULL,
-                                          `latitude` double NOT NULL,
-                                          `altitude` double DEFAULT NULL,
-                                          `speed` double DEFAULT NULL,
-                                          `direction` double DEFAULT NULL,
-                                          `reportSource` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                          `geodeticSystem` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                          `cnLng` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                          `cnLat` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                          PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `device_mobile_position`
---
-
-LOCK TABLES `device_mobile_position` WRITE;
-/*!40000 ALTER TABLE `device_mobile_position` DISABLE KEYS */;
-/*!40000 ALTER TABLE `device_mobile_position` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `gb_stream`
---
-
-DROP TABLE IF EXISTS `gb_stream`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `gb_stream` (
-                             `gbStreamId` int NOT NULL AUTO_INCREMENT,
-                             `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                             `longitude` double DEFAULT NULL,
-                             `latitude` double DEFAULT NULL,
-                             `streamType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                             `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                             `status` int DEFAULT NULL,
-                             `createStamp` bigint DEFAULT NULL,
-                             PRIMARY KEY (`gbStreamId`) USING BTREE,
-                             UNIQUE KEY `app` (`app`,`stream`) USING BTREE,
-                             UNIQUE KEY `gbId` (`gbId`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=300766 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `gb_stream`
---
-
-LOCK TABLES `gb_stream` WRITE;
-/*!40000 ALTER TABLE `gb_stream` DISABLE KEYS */;
-/*!40000 ALTER TABLE `gb_stream` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `log`
---
-
-DROP TABLE IF EXISTS `log`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `log` (
-                       `id` int NOT NULL AUTO_INCREMENT,
-                       `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `result` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `timing` bigint NOT NULL,
-                       `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                       PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=962 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `log`
---
-
-LOCK TABLES `log` WRITE;
-/*!40000 ALTER TABLE `log` DISABLE KEYS */;
-/*!40000 ALTER TABLE `log` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `media_server`
---
-
-DROP TABLE IF EXISTS `media_server`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `media_server` (
-                                `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `hookIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `sdpIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `streamIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `httpPort` int NOT NULL,
-                                `httpSSlPort` int NOT NULL,
-                                `rtmpPort` int NOT NULL,
-                                `rtmpSSlPort` int NOT NULL,
-                                `rtpProxyPort` int NOT NULL,
-                                `rtspPort` int NOT NULL,
-                                `rtspSSLPort` int NOT NULL,
-                                `autoConfig` int NOT NULL,
-                                `secret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `streamNoneReaderDelayMS` int NOT NULL,
-                                `rtpEnable` int NOT NULL,
-                                `rtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `sendRtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `recordAssistPort` int NOT NULL,
-                                `defaultServer` int NOT NULL,
-                                `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                `hookAliveInterval` int NOT NULL,
-                                PRIMARY KEY (`id`) USING BTREE,
-                                UNIQUE KEY `media_server_i` (`ip`,`httpPort`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `media_server`
---
-
-LOCK TABLES `media_server` WRITE;
-/*!40000 ALTER TABLE `media_server` DISABLE KEYS */;
-/*!40000 ALTER TABLE `media_server` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `parent_platform`
---
-
-DROP TABLE IF EXISTS `parent_platform`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `parent_platform` (
-                                   `id` int NOT NULL AUTO_INCREMENT,
-                                   `enable` int DEFAULT NULL,
-                                   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `serverGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                   `serverGBDomain` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `serverIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `serverPort` int DEFAULT NULL,
-                                   `deviceGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                   `deviceIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `devicePort` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `expires` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `keepTimeout` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `characterSet` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                   `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                   `ptz` int DEFAULT NULL,
-                                   `rtcp` int DEFAULT NULL,
-                                   `status` bit(1) DEFAULT NULL,
-                                   `shareAllLiveStream` int DEFAULT NULL,
-                                   PRIMARY KEY (`id`),
-                                   UNIQUE KEY `parent_platform_id_uindex` (`id`),
-                                   UNIQUE KEY `parent_platform_pk` (`serverGBId`)
-) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `parent_platform`
---
-
-LOCK TABLES `parent_platform` WRITE;
-/*!40000 ALTER TABLE `parent_platform` DISABLE KEYS */;
-/*!40000 ALTER TABLE `parent_platform` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `platform_catalog`
---
-
-DROP TABLE IF EXISTS `platform_catalog`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `platform_catalog` (
-                                    `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                    `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                    `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                    PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `platform_catalog`
---
-
-LOCK TABLES `platform_catalog` WRITE;
-/*!40000 ALTER TABLE `platform_catalog` DISABLE KEYS */;
-/*!40000 ALTER TABLE `platform_catalog` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `platform_gb_channel`
---
-
-DROP TABLE IF EXISTS `platform_gb_channel`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `platform_gb_channel` (
-                                       `id` int NOT NULL AUTO_INCREMENT,
-                                       `platformId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                       `catalogId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                       `deviceChannelId` int NOT NULL,
-                                       PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `platform_gb_channel`
---
-
-LOCK TABLES `platform_gb_channel` WRITE;
-/*!40000 ALTER TABLE `platform_gb_channel` DISABLE KEYS */;
-/*!40000 ALTER TABLE `platform_gb_channel` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `platform_gb_stream`
---
-
-DROP TABLE IF EXISTS `platform_gb_stream`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `platform_gb_stream` (
-                                      `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                      `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                                      `gbStreamId` int NOT NULL,
-                                      `id` int NOT NULL AUTO_INCREMENT,
-                                      PRIMARY KEY (`id`),
-                                      UNIQUE KEY `platform_gb_stream_pk` (`platformId`,`catalogId`,`gbStreamId`)
-) ENGINE=InnoDB AUTO_INCREMENT=301207 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `platform_gb_stream`
---
-
-LOCK TABLES `platform_gb_stream` WRITE;
-/*!40000 ALTER TABLE `platform_gb_stream` DISABLE KEYS */;
-/*!40000 ALTER TABLE `platform_gb_stream` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `stream_proxy`
---
-
-DROP TABLE IF EXISTS `stream_proxy`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `stream_proxy` (
-                                `id` int NOT NULL AUTO_INCREMENT,
-                                `type` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                `app` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
-                                `stream` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
-                                `url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `src_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `dst_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `timeout_ms` int DEFAULT NULL,
-                                `ffmpeg_cmd_key` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `rtp_type` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                `enable_hls` bit(1) DEFAULT NULL,
-                                `enable_mp4` bit(1) DEFAULT NULL,
-                                `enable` bit(1) NOT NULL,
-                                `status` bit(1) NOT NULL,
-                                `enable_remove_none_reader` bit(1) NOT NULL,
-                                `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
-                                `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                                PRIMARY KEY (`id`),
-                                UNIQUE KEY `stream_proxy_pk` (`app`,`stream`)
-) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `stream_proxy`
---
-
-LOCK TABLES `stream_proxy` WRITE;
-/*!40000 ALTER TABLE `stream_proxy` DISABLE KEYS */;
-/*!40000 ALTER TABLE `stream_proxy` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `stream_push`
---
-
-DROP TABLE IF EXISTS `stream_push`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `stream_push` (
-                               `id` int NOT NULL AUTO_INCREMENT,
-                               `app` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
-                               `stream` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
-                               `totalReaderCount` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                               `originType` int DEFAULT NULL,
-                               `originTypeStr` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                               `createStamp` bigint DEFAULT NULL,
-                               `aliveSecond` int DEFAULT NULL,
-                               `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-                               PRIMARY KEY (`id`),
-                               UNIQUE KEY `stream_push_pk` (`app`,`stream`)
-) ENGINE=InnoDB AUTO_INCREMENT=300799 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `stream_push`
---
-
-LOCK TABLES `stream_push` WRITE;
-/*!40000 ALTER TABLE `stream_push` DISABLE KEYS */;
-/*!40000 ALTER TABLE `stream_push` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `user`
---
-
-DROP TABLE IF EXISTS `user`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `user` (
-                        `id` int NOT NULL AUTO_INCREMENT,
-                        `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                        `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                        `roleId` int NOT NULL,
-                        `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                        `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                        PRIMARY KEY (`id`) USING BTREE,
-                        UNIQUE KEY `user_username_uindex` (`username`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `user`
---
-
-LOCK TABLES `user` WRITE;
-/*!40000 ALTER TABLE `user` DISABLE KEYS */;
-INSERT INTO `user` VALUES (1,'admin','21232f297a57a5a743894a0e4a801fc3',1,'2021 - 04 - 13 14:14:57','2021 - 04 - 13 14:14:57');
-/*!40000 ALTER TABLE `user` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `user_role`
---
-
-DROP TABLE IF EXISTS `user_role`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `user_role` (
-                             `id` int NOT NULL AUTO_INCREMENT,
-                             `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `authority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `user_role`
---
-
-LOCK TABLES `user_role` WRITE;
-/*!40000 ALTER TABLE `user_role` DISABLE KEYS */;
-INSERT INTO `user_role` VALUES (1,'admin','0','2021-04-13 14:14:57','2021-04-13 14:14:57');
-/*!40000 ALTER TABLE `user_role` ENABLE KEYS */;
-UNLOCK TABLES;
-/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
-
-/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-
--- Dump completed on 2022-03-07  8:26:30
diff --git a/sql/videos.sql b/sql/videos.sql
deleted file mode 100644
index 98bd2cb..0000000
--- a/sql/videos.sql
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : localhost_3306
- Source Server Type    : MySQL
- Source Server Version : 80022
- Source Host           : localhost:3306
- Source Schema         : videos
-
- Target Server Type    : MySQL
- Target Server Version : 80022
- File Encoding         : 65001
-
- Date: 19/08/2022 11:18:43
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for device
--- ----------------------------
-DROP TABLE IF EXISTS `device`;
-CREATE TABLE `device`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `manufacturer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `firmware` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `streamMode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `online` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `registerTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `keepaliveTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `port` int(0) NOT NULL,
-  `expires` int(0) NOT NULL,
-  `subscribeCycleForCatalog` int(0) NOT NULL,
-  `hostAddress` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `charset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `device_deviceId_uindex`(`deviceId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 84 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of device
--- ----------------------------
-INSERT INTO `device` VALUES (83, '34020000001320000001', 'IP DOME', 'Hikvision', 'DS-2DE2204IW-D3/W/XM', 'V5.6.800', 'UDP', 'UDP', '1', '2022-08-01 10:40:14', '2022-08-01 10:45:19', '192.168.0.118', '2022-07-21 17:34:32', '2022-08-01 10:45:19', 5060, 3600, 0, '192.168.0.118:5060', 'GB2312');
-
--- ----------------------------
--- Table structure for device_alarm
--- ----------------------------
-DROP TABLE IF EXISTS `device_alarm`;
-CREATE TABLE `device_alarm`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `alarmPriority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `alarmMethod` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `alarmTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `alarmDescription` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `longitude` double NULL DEFAULT NULL,
-  `latitude` double NULL DEFAULT NULL,
-  `alarmType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for device_channel
--- ----------------------------
-DROP TABLE IF EXISTS `device_channel`;
-CREATE TABLE `device_channel`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `manufacture` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `model` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `owner` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `civilCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `block` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `safetyWay` int(0) NULL DEFAULT NULL,
-  `registerWay` int(0) NULL DEFAULT NULL,
-  `certNum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `certifiable` int(0) NULL DEFAULT NULL,
-  `errCode` int(0) NULL DEFAULT NULL,
-  `endTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `secrecy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `ipAddress` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `port` int(0) NULL DEFAULT NULL,
-  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `PTZType` int(0) NULL DEFAULT NULL,
-  `status` int(0) NULL DEFAULT NULL,
-  `longitude` double NULL DEFAULT NULL,
-  `latitude` double NULL DEFAULT NULL,
-  `streamId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `parental` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `hasAudio` bit(1) NULL DEFAULT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `subCount` int(0) NULL DEFAULT 0,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `device_channel_id_uindex`(`id`) USING BTREE,
-  UNIQUE INDEX `device_channel_pk`(`channelId`, `deviceId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 121 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of device_channel
--- ----------------------------
-INSERT INTO `device_channel` VALUES (119, '34020000001320000001', 'IPdome', 'Hikvision', 'IP Camera', 'Owner', '3402000000', '', 'Address', '34020000002000000001', 0, 1, '', 0, 0, NULL, '0', '', 0, '', 0, 1, 0, 0, NULL, '34020000001320000001', '0', NULL, '', '', 0);
-
--- ----------------------------
--- Table structure for device_mobile_position
--- ----------------------------
-DROP TABLE IF EXISTS `device_mobile_position`;
-CREATE TABLE `device_mobile_position`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `deviceName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `longitude` double NOT NULL,
-  `latitude` double NOT NULL,
-  `altitude` double NULL DEFAULT NULL,
-  `speed` double NULL DEFAULT NULL,
-  `direction` double NULL DEFAULT NULL,
-  `reportSource` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `geodeticSystem` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `cnLng` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `cnLat` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for gb_stream
--- ----------------------------
-DROP TABLE IF EXISTS `gb_stream`;
-CREATE TABLE `gb_stream`  (
-  `gbStreamId` int(0) NOT NULL AUTO_INCREMENT,
-  `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `longitude` double NULL DEFAULT NULL,
-  `latitude` double NULL DEFAULT NULL,
-  `streamType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `status` int(0) NULL DEFAULT NULL,
-  `createStamp` bigint(0) NULL DEFAULT NULL,
-  PRIMARY KEY (`gbStreamId`) USING BTREE,
-  UNIQUE INDEX `app`(`app`, `stream`) USING BTREE,
-  UNIQUE INDEX `gbId`(`gbId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 300782 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for log
--- ----------------------------
-DROP TABLE IF EXISTS `log`;
-CREATE TABLE `log`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `result` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `timing` bigint(0) NOT NULL,
-  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2267 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of log
--- ----------------------------
-INSERT INTO `log` VALUES (1305, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 32, 'admin', '2022-03-29 10:09:05');
-INSERT INTO `log` VALUES (1306, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 250, 'admin', '2022-03-29 10:13:17');
-INSERT INTO `log` VALUES (1307, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 13, 'admin', '2022-03-29 10:13:33');
-INSERT INTO `log` VALUES (1308, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 147, 'admin', '2022-03-29 10:14:04');
-INSERT INTO `log` VALUES (1309, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 46, 'admin', '2022-03-29 10:14:19');
-INSERT INTO `log` VALUES (1310, '登录', 'GET', '/api/user/login', '0:0:0:0:0:0:0:1', '200 OK', 287, 'admin', '2022-03-29 10:14:48');
-INSERT INTO `log` VALUES (1311, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '0:0:0:0:0:0:0:1', '200 OK', 60, 'admin', '2022-03-29 10:14:58');
-INSERT INTO `log` VALUES (1312, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 35, 'admin', '2022-03-29 10:15:00');
-INSERT INTO `log` VALUES (1313, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 38, 'admin', '2022-03-29 10:15:08');
-INSERT INTO `log` VALUES (1314, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 196, 'admin', '2022-03-29 10:15:15');
-INSERT INTO `log` VALUES (1315, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 199, 'admin', '2022-03-29 10:15:24');
-INSERT INTO `log` VALUES (1316, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 175, 'admin', '2022-03-29 10:15:34');
-INSERT INTO `log` VALUES (1317, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 209, 'admin', '2022-03-29 10:15:54');
-INSERT INTO `log` VALUES (1318, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '0:0:0:0:0:0:0:1', '200 OK', 38, 'admin', '2022-03-29 10:16:18');
-INSERT INTO `log` VALUES (1319, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '0:0:0:0:0:0:0:1', '200 OK', 4, 'admin', '2022-03-29 10:16:43');
-INSERT INTO `log` VALUES (1320, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 187, 'admin', '2022-03-29 10:16:45');
-INSERT INTO `log` VALUES (1321, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 170, 'admin', '2022-03-29 10:16:52');
-INSERT INTO `log` VALUES (1322, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '0:0:0:0:0:0:0:1', '200 OK', 4, 'admin', '2022-03-29 10:18:26');
-INSERT INTO `log` VALUES (1323, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 23, 'admin', '2022-03-29 10:18:37');
-INSERT INTO `log` VALUES (1324, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 25, 'admin', '2022-03-29 10:18:46');
-INSERT INTO `log` VALUES (1325, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 196, 'admin', '2022-03-29 10:18:53');
-INSERT INTO `log` VALUES (1326, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 196, 'admin', '2022-03-29 10:19:08');
-INSERT INTO `log` VALUES (1327, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 149, 'admin', '2022-03-29 10:19:22');
-INSERT INTO `log` VALUES (1328, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 10:20:08');
-INSERT INTO `log` VALUES (1329, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 175, 'admin', '2022-03-29 10:20:10');
-INSERT INTO `log` VALUES (1330, '登录', 'GET', '/api/user/login', '0:0:0:0:0:0:0:1', '200 OK', 294, 'admin', '2022-03-29 11:15:16');
-INSERT INTO `log` VALUES (1331, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 52, 'admin', '2022-03-29 11:15:21');
-INSERT INTO `log` VALUES (1332, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 34, 'admin', '2022-03-29 11:15:28');
-INSERT INTO `log` VALUES (1333, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 33, 'admin', '2022-03-29 11:15:35');
-INSERT INTO `log` VALUES (1334, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 31, 'admin', '2022-03-29 11:18:33');
-INSERT INTO `log` VALUES (1335, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-29 11:18:42');
-INSERT INTO `log` VALUES (1336, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:21:28');
-INSERT INTO `log` VALUES (1337, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 10178, 'admin', '2022-03-29 11:21:40');
-INSERT INTO `log` VALUES (1338, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 10118, 'admin', '2022-03-29 11:22:00');
-INSERT INTO `log` VALUES (1339, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 39, 'admin', '2022-03-29 11:23:41');
-INSERT INTO `log` VALUES (1340, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 189, 'admin', '2022-03-29 11:25:05');
-INSERT INTO `log` VALUES (1341, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 120, 'admin', '2022-03-29 11:25:15');
-INSERT INTO `log` VALUES (1342, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 11:25:22');
-INSERT INTO `log` VALUES (1343, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 11:25:22');
-INSERT INTO `log` VALUES (1344, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:25:26');
-INSERT INTO `log` VALUES (1345, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 11:25:26');
-INSERT INTO `log` VALUES (1346, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:25:35');
-INSERT INTO `log` VALUES (1347, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:25:38');
-INSERT INTO `log` VALUES (1348, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:25:38');
-INSERT INTO `log` VALUES (1349, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:25:41');
-INSERT INTO `log` VALUES (1350, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:25:41');
-INSERT INTO `log` VALUES (1351, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:25:52');
-INSERT INTO `log` VALUES (1352, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:25:52');
-INSERT INTO `log` VALUES (1353, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:25:56');
-INSERT INTO `log` VALUES (1354, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 11:25:56');
-INSERT INTO `log` VALUES (1355, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:25:59');
-INSERT INTO `log` VALUES (1356, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:25:59');
-INSERT INTO `log` VALUES (1357, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:02');
-INSERT INTO `log` VALUES (1358, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:26:02');
-INSERT INTO `log` VALUES (1359, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:04');
-INSERT INTO `log` VALUES (1360, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:26:08');
-INSERT INTO `log` VALUES (1361, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:10');
-INSERT INTO `log` VALUES (1362, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:11');
-INSERT INTO `log` VALUES (1363, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:26:12');
-INSERT INTO `log` VALUES (1364, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:15');
-INSERT INTO `log` VALUES (1365, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:15');
-INSERT INTO `log` VALUES (1366, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1367, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1368, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1369, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1370, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1371, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1372, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 11:26:16');
-INSERT INTO `log` VALUES (1373, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 11:26:17');
-INSERT INTO `log` VALUES (1374, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 13, 'admin', '2022-03-29 11:26:21');
-INSERT INTO `log` VALUES (1375, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 8, 'admin', '2022-03-29 11:26:25');
-INSERT INTO `log` VALUES (1376, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 161, 'admin', '2022-03-29 11:26:35');
-INSERT INTO `log` VALUES (1377, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20130, 'admin', '2022-03-29 11:26:44');
-INSERT INTO `log` VALUES (1378, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 147, 'admin', '2022-03-29 11:48:33');
-INSERT INTO `log` VALUES (1379, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 297, 'admin', '2022-03-29 14:03:35');
-INSERT INTO `log` VALUES (1380, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 84, 'admin', '2022-03-29 14:03:40');
-INSERT INTO `log` VALUES (1381, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20113, 'admin', '2022-03-29 14:04:08');
-INSERT INTO `log` VALUES (1382, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 52, 'admin', '2022-03-29 14:13:54');
-INSERT INTO `log` VALUES (1383, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-29 14:15:22');
-INSERT INTO `log` VALUES (1384, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 47, 'admin', '2022-03-29 14:17:40');
-INSERT INTO `log` VALUES (1385, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 209, 'admin', '2022-03-29 14:18:25');
-INSERT INTO `log` VALUES (1386, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:30');
-INSERT INTO `log` VALUES (1387, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:32');
-INSERT INTO `log` VALUES (1388, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:32');
-INSERT INTO `log` VALUES (1389, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 14:18:33');
-INSERT INTO `log` VALUES (1390, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:33');
-INSERT INTO `log` VALUES (1391, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:34');
-INSERT INTO `log` VALUES (1392, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:35');
-INSERT INTO `log` VALUES (1393, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:37');
-INSERT INTO `log` VALUES (1394, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:38');
-INSERT INTO `log` VALUES (1395, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:39');
-INSERT INTO `log` VALUES (1396, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:40');
-INSERT INTO `log` VALUES (1397, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:40');
-INSERT INTO `log` VALUES (1398, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:41');
-INSERT INTO `log` VALUES (1399, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:41');
-INSERT INTO `log` VALUES (1400, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:43');
-INSERT INTO `log` VALUES (1401, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 11, 'admin', '2022-03-29 14:18:43');
-INSERT INTO `log` VALUES (1402, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:18:43');
-INSERT INTO `log` VALUES (1403, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:43');
-INSERT INTO `log` VALUES (1404, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:43');
-INSERT INTO `log` VALUES (1405, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:44');
-INSERT INTO `log` VALUES (1406, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 2, 'admin', '2022-03-29 14:18:44');
-INSERT INTO `log` VALUES (1407, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:44');
-INSERT INTO `log` VALUES (1408, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:45');
-INSERT INTO `log` VALUES (1409, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 14:18:46');
-INSERT INTO `log` VALUES (1410, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:47');
-INSERT INTO `log` VALUES (1411, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:49');
-INSERT INTO `log` VALUES (1412, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:49');
-INSERT INTO `log` VALUES (1413, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:50');
-INSERT INTO `log` VALUES (1414, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:50');
-INSERT INTO `log` VALUES (1415, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:50');
-INSERT INTO `log` VALUES (1416, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:50');
-INSERT INTO `log` VALUES (1417, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:51');
-INSERT INTO `log` VALUES (1418, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:51');
-INSERT INTO `log` VALUES (1419, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:18:51');
-INSERT INTO `log` VALUES (1420, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:18:52');
-INSERT INTO `log` VALUES (1421, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:53');
-INSERT INTO `log` VALUES (1422, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:54');
-INSERT INTO `log` VALUES (1423, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:56');
-INSERT INTO `log` VALUES (1424, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:18:58');
-INSERT INTO `log` VALUES (1425, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:00');
-INSERT INTO `log` VALUES (1426, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:01');
-INSERT INTO `log` VALUES (1427, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:03');
-INSERT INTO `log` VALUES (1428, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:19:03');
-INSERT INTO `log` VALUES (1429, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:19:03');
-INSERT INTO `log` VALUES (1430, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:19:06');
-INSERT INTO `log` VALUES (1431, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 29, 'admin', '2022-03-29 14:19:11');
-INSERT INTO `log` VALUES (1432, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 8, 'admin', '2022-03-29 14:19:11');
-INSERT INTO `log` VALUES (1433, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:12');
-INSERT INTO `log` VALUES (1434, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:12');
-INSERT INTO `log` VALUES (1435, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:19:18');
-INSERT INTO `log` VALUES (1436, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 17, 'admin', '2022-03-29 14:19:22');
-INSERT INTO `log` VALUES (1437, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:23');
-INSERT INTO `log` VALUES (1438, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:19:24');
-INSERT INTO `log` VALUES (1439, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:24');
-INSERT INTO `log` VALUES (1440, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:24');
-INSERT INTO `log` VALUES (1441, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:25');
-INSERT INTO `log` VALUES (1442, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:27');
-INSERT INTO `log` VALUES (1443, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:30');
-INSERT INTO `log` VALUES (1444, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:31');
-INSERT INTO `log` VALUES (1445, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:31');
-INSERT INTO `log` VALUES (1446, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:19:32');
-INSERT INTO `log` VALUES (1447, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:32');
-INSERT INTO `log` VALUES (1448, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:32');
-INSERT INTO `log` VALUES (1449, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 11, 'admin', '2022-03-29 14:19:33');
-INSERT INTO `log` VALUES (1450, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:37');
-INSERT INTO `log` VALUES (1451, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:19:39');
-INSERT INTO `log` VALUES (1452, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-29 14:19:41');
-INSERT INTO `log` VALUES (1453, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:19:44');
-INSERT INTO `log` VALUES (1454, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 14:19:57');
-INSERT INTO `log` VALUES (1455, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:20:00');
-INSERT INTO `log` VALUES (1456, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:20:01');
-INSERT INTO `log` VALUES (1457, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1458, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1459, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1460, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1461, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1462, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-29 14:20:04');
-INSERT INTO `log` VALUES (1463, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20105, 'admin', '2022-03-29 14:20:29');
-INSERT INTO `log` VALUES (1464, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 145, 'admin', '2022-03-29 14:23:40');
-INSERT INTO `log` VALUES (1465, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 32, 'admin', '2022-03-29 14:23:43');
-INSERT INTO `log` VALUES (1466, '登录', 'GET', '/api/user/login', '192.168.0.103', '200 OK', 136, 'admin', '2022-03-29 15:06:48');
-INSERT INTO `log` VALUES (1467, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 24, 'admin', '2022-03-29 15:06:57');
-INSERT INTO `log` VALUES (1468, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:02');
-INSERT INTO `log` VALUES (1469, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:02');
-INSERT INTO `log` VALUES (1470, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:07');
-INSERT INTO `log` VALUES (1471, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:07');
-INSERT INTO `log` VALUES (1472, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:09');
-INSERT INTO `log` VALUES (1473, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:09');
-INSERT INTO `log` VALUES (1474, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:11');
-INSERT INTO `log` VALUES (1475, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:11');
-INSERT INTO `log` VALUES (1476, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:12');
-INSERT INTO `log` VALUES (1477, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:13');
-INSERT INTO `log` VALUES (1478, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:14');
-INSERT INTO `log` VALUES (1479, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:15');
-INSERT INTO `log` VALUES (1480, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:16');
-INSERT INTO `log` VALUES (1481, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:16');
-INSERT INTO `log` VALUES (1482, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:18');
-INSERT INTO `log` VALUES (1483, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:20');
-INSERT INTO `log` VALUES (1484, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:22');
-INSERT INTO `log` VALUES (1485, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:24');
-INSERT INTO `log` VALUES (1486, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:25');
-INSERT INTO `log` VALUES (1487, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 2, 'admin', '2022-03-29 15:07:26');
-INSERT INTO `log` VALUES (1488, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:28');
-INSERT INTO `log` VALUES (1489, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 3, 'admin', '2022-03-29 15:07:29');
-INSERT INTO `log` VALUES (1490, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 198, 'admin', '2022-03-29 15:08:27');
-INSERT INTO `log` VALUES (1491, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 144, 'admin', '2022-03-29 15:12:54');
-INSERT INTO `log` VALUES (1492, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 82, 'admin', '2022-03-29 15:17:48');
-INSERT INTO `log` VALUES (1493, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 180, 'admin', '2022-03-29 15:19:12');
-INSERT INTO `log` VALUES (1494, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 34, 'admin', '2022-03-29 15:21:00');
-INSERT INTO `log` VALUES (1495, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 22, 'admin', '2022-03-29 15:21:14');
-INSERT INTO `log` VALUES (1496, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 130, 'admin', '2022-03-29 15:21:49');
-INSERT INTO `log` VALUES (1497, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 4, 'admin', '2022-03-29 15:22:24');
-INSERT INTO `log` VALUES (1498, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 196, 'admin', '2022-03-29 15:22:53');
-INSERT INTO `log` VALUES (1499, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 294, 'admin', '2022-03-29 16:19:08');
-INSERT INTO `log` VALUES (1500, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 58, 'admin', '2022-03-29 16:19:17');
-INSERT INTO `log` VALUES (1501, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '192.168.0.102', '200 OK', 49, 'admin', '2022-03-29 16:23:05');
-INSERT INTO `log` VALUES (1502, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 642, 'admin', '2022-03-29 16:24:07');
-INSERT INTO `log` VALUES (1503, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 252, 'admin', '2022-03-29 16:25:39');
-INSERT INTO `log` VALUES (1504, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000001', '192.168.0.102', '200 OK', 75, 'admin', '2022-03-29 16:25:53');
-INSERT INTO `log` VALUES (1505, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000002000000001/sync', '192.168.0.102', '200 OK', 8, 'admin', '2022-03-29 16:27:23');
-INSERT INTO `log` VALUES (1506, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 35, 'admin', '2022-03-29 16:30:24');
-INSERT INTO `log` VALUES (1507, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 249, 'admin', '2022-03-29 16:32:45');
-INSERT INTO `log` VALUES (1508, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 249, 'admin', '2022-03-30 08:32:32');
-INSERT INTO `log` VALUES (1509, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '127.0.0.1', '200 OK', 101, 'admin', '2022-03-30 08:33:28');
-INSERT INTO `log` VALUES (1510, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 58, 'admin', '2022-03-30 08:33:34');
-INSERT INTO `log` VALUES (1511, '登录', 'GET', '/api/user/login', '192.168.0.103', '200 OK', 138, 'admin', '2022-03-30 08:39:32');
-INSERT INTO `log` VALUES (1512, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 222, 'admin', '2022-03-30 08:39:50');
-INSERT INTO `log` VALUES (1513, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 19, 'admin', '2022-03-30 08:40:08');
-INSERT INTO `log` VALUES (1514, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 131, 'admin', '2022-03-30 08:40:29');
-INSERT INTO `log` VALUES (1515, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 131, 'admin', '2022-03-30 08:41:34');
-INSERT INTO `log` VALUES (1516, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '127.0.0.1', '200 OK', 25, 'admin', '2022-03-30 08:48:25');
-INSERT INTO `log` VALUES (1517, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 201, 'admin', '2022-03-30 08:53:13');
-INSERT INTO `log` VALUES (1518, '登录', 'GET', '/api/user/login', '192.168.0.103', '200 OK', 139, 'admin', '2022-03-30 08:55:59');
-INSERT INTO `log` VALUES (1519, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 219, 'admin', '2022-03-30 08:56:05');
-INSERT INTO `log` VALUES (1520, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000002000000001/sync', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 08:57:48');
-INSERT INTO `log` VALUES (1521, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 231, 'admin', '2022-03-30 08:58:50');
-INSERT INTO `log` VALUES (1522, '登录', 'GET', '/api/user/login', '192.168.0.103', '200 OK', 138, 'admin', '2022-03-30 08:59:37');
-INSERT INTO `log` VALUES (1523, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 131, 'admin', '2022-03-30 08:59:42');
-INSERT INTO `log` VALUES (1524, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 09:00:49');
-INSERT INTO `log` VALUES (1525, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000001', '127.0.0.1', '200 OK', 66, 'admin', '2022-03-30 09:00:52');
-INSERT INTO `log` VALUES (1526, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 20, 'admin', '2022-03-30 09:10:36');
-INSERT INTO `log` VALUES (1527, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 59, 'admin', '2022-03-30 09:13:01');
-INSERT INTO `log` VALUES (1528, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.103', '200 OK', 138, 'admin', '2022-03-30 09:13:15');
-INSERT INTO `log` VALUES (1529, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 244, 'admin', '2022-03-30 11:05:51');
-INSERT INTO `log` VALUES (1530, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '127.0.0.1', '200 OK', 34, 'admin', '2022-03-30 11:06:00');
-INSERT INTO `log` VALUES (1531, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 35, 'admin', '2022-03-30 11:25:43');
-INSERT INTO `log` VALUES (1532, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 187, 'admin', '2022-03-30 11:28:03');
-INSERT INTO `log` VALUES (1533, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:28:51');
-INSERT INTO `log` VALUES (1534, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '127.0.0.1', '200 OK', 32, 'admin', '2022-03-30 11:28:59');
-INSERT INTO `log` VALUES (1535, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 34, 'admin', '2022-03-30 11:29:03');
-INSERT INTO `log` VALUES (1536, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 205, 'admin', '2022-03-30 11:29:33');
-INSERT INTO `log` VALUES (1537, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20540, 'admin', '2022-03-30 11:29:44');
-INSERT INTO `log` VALUES (1538, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 42, 'admin', '2022-03-30 11:30:08');
-INSERT INTO `log` VALUES (1539, '登录', 'GET', '/api/user/login', '0:0:0:0:0:0:0:1', '200 OK', 258, 'admin', '2022-03-30 11:31:17');
-INSERT INTO `log` VALUES (1540, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 180, 'admin', '2022-03-30 11:33:13');
-INSERT INTO `log` VALUES (1541, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 26, 'admin', '2022-03-30 11:34:02');
-INSERT INTO `log` VALUES (1542, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 20537, 'admin', '2022-03-30 11:34:56');
-INSERT INTO `log` VALUES (1543, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 25, 'admin', '2022-03-30 11:36:21');
-INSERT INTO `log` VALUES (1544, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 180, 'admin', '2022-03-30 11:42:23');
-INSERT INTO `log` VALUES (1545, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 178, 'admin', '2022-03-30 11:51:45');
-INSERT INTO `log` VALUES (1546, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:51:54');
-INSERT INTO `log` VALUES (1547, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:51:57');
-INSERT INTO `log` VALUES (1548, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:51:57');
-INSERT INTO `log` VALUES (1549, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 11:51:57');
-INSERT INTO `log` VALUES (1550, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:51:58');
-INSERT INTO `log` VALUES (1551, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:51:59');
-INSERT INTO `log` VALUES (1552, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:52:00');
-INSERT INTO `log` VALUES (1553, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 11:52:00');
-INSERT INTO `log` VALUES (1554, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:52:01');
-INSERT INTO `log` VALUES (1555, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:52:02');
-INSERT INTO `log` VALUES (1556, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 11:52:04');
-INSERT INTO `log` VALUES (1557, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 47, 'admin', '2022-03-30 11:52:51');
-INSERT INTO `log` VALUES (1558, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 11:52:58');
-INSERT INTO `log` VALUES (1559, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:52:59');
-INSERT INTO `log` VALUES (1560, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 11:53:00');
-INSERT INTO `log` VALUES (1561, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:53:00');
-INSERT INTO `log` VALUES (1562, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:53:01');
-INSERT INTO `log` VALUES (1563, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:53:01');
-INSERT INTO `log` VALUES (1564, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:53:02');
-INSERT INTO `log` VALUES (1565, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:53:03');
-INSERT INTO `log` VALUES (1566, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 11:53:04');
-INSERT INTO `log` VALUES (1567, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:53:07');
-INSERT INTO `log` VALUES (1568, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 11:53:16');
-INSERT INTO `log` VALUES (1569, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '127.0.0.1', '200 OK', 83, 'admin', '2022-03-30 11:54:37');
-INSERT INTO `log` VALUES (1570, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 242, 'admin', '2022-03-30 13:33:09');
-INSERT INTO `log` VALUES (1571, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 65, 'admin', '2022-03-30 13:33:17');
-INSERT INTO `log` VALUES (1572, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 202, 'admin', '2022-03-30 13:35:14');
-INSERT INTO `log` VALUES (1573, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 13:35:33');
-INSERT INTO `log` VALUES (1574, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 13:35:36');
-INSERT INTO `log` VALUES (1575, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 13:35:37');
-INSERT INTO `log` VALUES (1576, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-03-30 13:35:38');
-INSERT INTO `log` VALUES (1577, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 13:35:38');
-INSERT INTO `log` VALUES (1578, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 13:35:39');
-INSERT INTO `log` VALUES (1579, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 13:35:45');
-INSERT INTO `log` VALUES (1580, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20094, 'admin', '2022-03-30 13:36:02');
-INSERT INTO `log` VALUES (1581, '登录', 'GET', '/api/user/login', '0:0:0:0:0:0:0:1', '200 OK', 246, 'admin', '2022-03-30 13:40:36');
-INSERT INTO `log` VALUES (1582, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 39, 'admin', '2022-03-30 13:40:40');
-INSERT INTO `log` VALUES (1583, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 7, 'admin', '2022-03-30 13:40:48');
-INSERT INTO `log` VALUES (1584, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 6, 'admin', '2022-03-30 13:40:49');
-INSERT INTO `log` VALUES (1585, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 4, 'admin', '2022-03-30 13:40:50');
-INSERT INTO `log` VALUES (1586, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 6, 'admin', '2022-03-30 13:40:50');
-INSERT INTO `log` VALUES (1587, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '0:0:0:0:0:0:0:1', '200 OK', 20573, 'admin', '2022-03-30 13:41:14');
-INSERT INTO `log` VALUES (1588, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 193, 'admin', '2022-03-30 13:52:48');
-INSERT INTO `log` VALUES (1589, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 13:52:55');
-INSERT INTO `log` VALUES (1590, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 13:52:56');
-INSERT INTO `log` VALUES (1591, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20114, 'admin', '2022-03-30 13:53:19');
-INSERT INTO `log` VALUES (1592, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 146, 'admin', '2022-03-30 13:57:17');
-INSERT INTO `log` VALUES (1593, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 30, 'admin', '2022-03-30 13:57:20');
-INSERT INTO `log` VALUES (1594, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 13:57:48');
-INSERT INTO `log` VALUES (1595, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 151, 'admin', '2022-03-30 13:58:03');
-INSERT INTO `log` VALUES (1596, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 13428, 'admin', '2022-03-30 13:58:19');
-INSERT INTO `log` VALUES (1597, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20131, 'admin', '2022-03-30 13:58:19');
-INSERT INTO `log` VALUES (1598, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 168, 'admin', '2022-03-30 14:01:34');
-INSERT INTO `log` VALUES (1599, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786A97E', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:01:54');
-INSERT INTO `log` VALUES (1600, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 47, 'admin', '2022-03-30 14:01:55');
-INSERT INTO `log` VALUES (1601, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:02:11');
-INSERT INTO `log` VALUES (1602, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20127, 'admin', '2022-03-30 14:02:28');
-INSERT INTO `log` VALUES (1603, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 187, 'admin', '2022-03-30 14:03:48');
-INSERT INTO `log` VALUES (1604, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20157, 'admin', '2022-03-30 14:04:26');
-INSERT INTO `log` VALUES (1605, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 14:07:05');
-INSERT INTO `log` VALUES (1606, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:07:15');
-INSERT INTO `log` VALUES (1607, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 14:07:16');
-INSERT INTO `log` VALUES (1608, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:07:17');
-INSERT INTO `log` VALUES (1609, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:07:18');
-INSERT INTO `log` VALUES (1610, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-30 14:07:38');
-INSERT INTO `log` VALUES (1611, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20114, 'admin', '2022-03-30 14:07:48');
-INSERT INTO `log` VALUES (1612, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 184, 'admin', '2022-03-30 14:11:38');
-INSERT INTO `log` VALUES (1613, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:11:43');
-INSERT INTO `log` VALUES (1614, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:11:45');
-INSERT INTO `log` VALUES (1615, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:11:45');
-INSERT INTO `log` VALUES (1616, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:11:46');
-INSERT INTO `log` VALUES (1617, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:11:47');
-INSERT INTO `log` VALUES (1618, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:11:50');
-INSERT INTO `log` VALUES (1619, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:11:56');
-INSERT INTO `log` VALUES (1620, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 182, 'admin', '2022-03-30 14:12:10');
-INSERT INTO `log` VALUES (1621, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20546, 'admin', '2022-03-30 14:12:20');
-INSERT INTO `log` VALUES (1622, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 167, 'admin', '2022-03-30 14:12:32');
-INSERT INTO `log` VALUES (1623, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:12:36');
-INSERT INTO `log` VALUES (1624, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:12:37');
-INSERT INTO `log` VALUES (1625, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:12:37');
-INSERT INTO `log` VALUES (1626, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:12:39');
-INSERT INTO `log` VALUES (1627, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:12:42');
-INSERT INTO `log` VALUES (1628, '通用前端控制命令', 'POST', '/api/ptz/front_end_command/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:12:45');
-INSERT INTO `log` VALUES (1629, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20111, 'admin', '2022-03-30 14:13:11');
-INSERT INTO `log` VALUES (1630, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 29, 'admin', '2022-03-30 14:13:24');
-INSERT INTO `log` VALUES (1631, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20104, 'admin', '2022-03-30 14:14:11');
-INSERT INTO `log` VALUES (1632, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 143, 'admin', '2022-03-30 14:14:47');
-INSERT INTO `log` VALUES (1633, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 158, 'admin', '2022-03-30 14:14:51');
-INSERT INTO `log` VALUES (1634, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-30 14:14:54');
-INSERT INTO `log` VALUES (1635, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 119, 'admin', '2022-03-30 14:14:54');
-INSERT INTO `log` VALUES (1636, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 14:14:54');
-INSERT INTO `log` VALUES (1637, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 158, 'admin', '2022-03-30 14:14:54');
-INSERT INTO `log` VALUES (1638, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:14:57');
-INSERT INTO `log` VALUES (1639, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 170, 'admin', '2022-03-30 14:14:58');
-INSERT INTO `log` VALUES (1640, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 10, 'admin', '2022-03-30 14:15:04');
-INSERT INTO `log` VALUES (1641, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 44, 'admin', '2022-03-30 14:15:04');
-INSERT INTO `log` VALUES (1642, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:15:23');
-INSERT INTO `log` VALUES (1643, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20154, 'admin', '2022-03-30 14:15:36');
-INSERT INTO `log` VALUES (1644, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 154, 'admin', '2022-03-30 14:24:20');
-INSERT INTO `log` VALUES (1645, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 123, 'admin', '2022-03-30 14:25:19');
-INSERT INTO `log` VALUES (1646, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20154, 'admin', '2022-03-30 14:26:02');
-INSERT INTO `log` VALUES (1647, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 176, 'admin', '2022-03-30 14:26:25');
-INSERT INTO `log` VALUES (1648, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 190, 'admin', '2022-03-30 14:27:14');
-INSERT INTO `log` VALUES (1649, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 153, 'admin', '2022-03-30 14:27:53');
-INSERT INTO `log` VALUES (1650, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 191, 'admin', '2022-03-30 14:28:01');
-INSERT INTO `log` VALUES (1651, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 176, 'admin', '2022-03-30 14:29:44');
-INSERT INTO `log` VALUES (1652, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20110, 'admin', '2022-03-30 14:30:15');
-INSERT INTO `log` VALUES (1653, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 47, 'admin', '2022-03-30 14:33:42');
-INSERT INTO `log` VALUES (1654, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 190, 'admin', '2022-03-30 14:34:59');
-INSERT INTO `log` VALUES (1655, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20582, 'admin', '2022-03-30 14:35:35');
-INSERT INTO `log` VALUES (1656, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 183, 'admin', '2022-03-30 14:35:38');
-INSERT INTO `log` VALUES (1657, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20587, 'admin', '2022-03-30 14:36:05');
-INSERT INTO `log` VALUES (1658, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:37:40');
-INSERT INTO `log` VALUES (1659, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-30 14:37:55');
-INSERT INTO `log` VALUES (1660, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 30, 'admin', '2022-03-30 14:38:08');
-INSERT INTO `log` VALUES (1661, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20115, 'admin', '2022-03-30 14:38:09');
-INSERT INTO `log` VALUES (1662, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 182, 'admin', '2022-03-30 14:38:20');
-INSERT INTO `log` VALUES (1663, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 30, 'admin', '2022-03-30 14:38:36');
-INSERT INTO `log` VALUES (1664, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 29, 'admin', '2022-03-30 14:38:38');
-INSERT INTO `log` VALUES (1665, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:38:39');
-INSERT INTO `log` VALUES (1666, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 172, 'admin', '2022-03-30 14:38:40');
-INSERT INTO `log` VALUES (1667, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 14:38:52');
-INSERT INTO `log` VALUES (1668, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 148, 'admin', '2022-03-30 14:39:15');
-INSERT INTO `log` VALUES (1669, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 14:39:24');
-INSERT INTO `log` VALUES (1670, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 148, 'admin', '2022-03-30 14:39:30');
-INSERT INTO `log` VALUES (1671, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-30 14:39:43');
-INSERT INTO `log` VALUES (1672, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/34020000001320000012_34020000001320000014', '127.0.0.1', '200 OK', 9398, 'admin', '2022-03-30 14:39:55');
-INSERT INTO `log` VALUES (1673, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 255, 'admin', '2022-03-30 14:39:55');
-INSERT INTO `log` VALUES (1674, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 14:39:56');
-INSERT INTO `log` VALUES (1675, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 201, 'admin', '2022-03-30 14:42:26');
-INSERT INTO `log` VALUES (1676, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 163, 'admin', '2022-03-30 14:42:50');
-INSERT INTO `log` VALUES (1677, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:42:54');
-INSERT INTO `log` VALUES (1678, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:42:54');
-INSERT INTO `log` VALUES (1679, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:42:56');
-INSERT INTO `log` VALUES (1680, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-03-30 14:42:59');
-INSERT INTO `log` VALUES (1681, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:43:00');
-INSERT INTO `log` VALUES (1682, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-03-30 14:43:01');
-INSERT INTO `log` VALUES (1683, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-03-30 14:43:03');
-INSERT INTO `log` VALUES (1684, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-03-30 14:43:03');
-INSERT INTO `log` VALUES (1685, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20113, 'admin', '2022-03-30 14:43:28');
-INSERT INTO `log` VALUES (1686, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 146, 'admin', '2022-03-30 14:43:53');
-INSERT INTO `log` VALUES (1687, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 22, 'admin', '2022-03-30 14:44:02');
-INSERT INTO `log` VALUES (1688, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 44, 'admin', '2022-03-30 14:44:11');
-INSERT INTO `log` VALUES (1689, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/34020000001320000012_34020000001320000014', '127.0.0.1', '200 OK', 9108, 'admin', '2022-03-30 14:44:24');
-INSERT INTO `log` VALUES (1690, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 221, 'admin', '2022-03-30 14:44:24');
-INSERT INTO `log` VALUES (1691, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 148, 'admin', '2022-03-30 14:44:28');
-INSERT INTO `log` VALUES (1692, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 210, 'admin', '2022-03-30 14:47:05');
-INSERT INTO `log` VALUES (1693, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 260, 'admin', '2022-03-30 14:47:08');
-INSERT INTO `log` VALUES (1694, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 340, 'admin', '2022-03-30 14:47:33');
-INSERT INTO `log` VALUES (1695, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 60, 'admin', '2022-03-30 14:47:36');
-INSERT INTO `log` VALUES (1696, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 0, 'admin', '2022-03-30 14:48:06');
-INSERT INTO `log` VALUES (1697, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 150, 'admin', '2022-03-30 14:48:19');
-INSERT INTO `log` VALUES (1698, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 153, 'admin', '2022-03-30 14:49:26');
-INSERT INTO `log` VALUES (1699, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786A9D7', '127.0.0.1', '200 OK', 29, 'admin', '2022-03-30 14:50:13');
-INSERT INTO `log` VALUES (1700, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 163, 'admin', '2022-03-30 14:50:13');
-INSERT INTO `log` VALUES (1701, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786AF47', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 14:50:44');
-INSERT INTO `log` VALUES (1702, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 162, 'admin', '2022-03-30 14:50:45');
-INSERT INTO `log` VALUES (1703, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786AF47', '127.0.0.1', '200 OK', 20218, 'admin', '2022-03-30 14:50:45');
-INSERT INTO `log` VALUES (1704, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 162, 'admin', '2022-03-30 14:50:45');
-INSERT INTO `log` VALUES (1705, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 31, 'admin', '2022-03-30 14:52:01');
-INSERT INTO `log` VALUES (1706, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 14:52:16');
-INSERT INTO `log` VALUES (1707, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 173, 'admin', '2022-03-30 14:52:20');
-INSERT INTO `log` VALUES (1708, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 22, 'admin', '2022-03-30 14:52:24');
-INSERT INTO `log` VALUES (1709, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 120, 'admin', '2022-03-30 14:52:24');
-INSERT INTO `log` VALUES (1710, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 28, 'admin', '2022-03-30 14:52:25');
-INSERT INTO `log` VALUES (1711, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 202, 'admin', '2022-03-30 14:52:26');
-INSERT INTO `log` VALUES (1712, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786A87D', '127.0.0.1', '200 OK', 20140, 'admin', '2022-03-30 14:52:31');
-INSERT INTO `log` VALUES (1713, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/undefined', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 14:52:33');
-INSERT INTO `log` VALUES (1714, '停止历史媒体下载', 'GET', '/api/download/stop/34020000001320000012/34020000001320000014/4786B02A', '127.0.0.1', '200 OK', 9445, 'admin', '2022-03-30 14:52:34');
-INSERT INTO `log` VALUES (1715, '开始历史媒体下载', 'GET', '/api/download/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 287, 'admin', '2022-03-30 14:52:34');
-INSERT INTO `log` VALUES (1716, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 267, 'admin', '2022-03-30 14:53:52');
-INSERT INTO `log` VALUES (1717, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 78, 'admin', '2022-03-30 14:55:58');
-INSERT INTO `log` VALUES (1718, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 38, 'admin', '2022-03-30 14:56:00');
-INSERT INTO `log` VALUES (1719, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 26, 'admin', '2022-03-30 14:56:21');
-INSERT INTO `log` VALUES (1720, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 49, 'admin', '2022-03-30 15:02:10');
-INSERT INTO `log` VALUES (1721, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 29, 'admin', '2022-03-30 15:02:12');
-INSERT INTO `log` VALUES (1722, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 21, 'admin', '2022-03-30 15:02:19');
-INSERT INTO `log` VALUES (1723, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 971, 'admin', '2022-03-30 15:03:18');
-INSERT INTO `log` VALUES (1724, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 57, 'admin', '2022-03-30 15:03:27');
-INSERT INTO `log` VALUES (1725, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 404, 'admin', '2022-03-30 15:03:28');
-INSERT INTO `log` VALUES (1726, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 34, 'admin', '2022-03-30 15:03:31');
-INSERT INTO `log` VALUES (1727, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 63, 'admin', '2022-03-30 15:03:56');
-INSERT INTO `log` VALUES (1728, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 47, 'admin', '2022-03-30 15:03:57');
-INSERT INTO `log` VALUES (1729, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 53, 'admin', '2022-03-30 15:04:00');
-INSERT INTO `log` VALUES (1730, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10064, 'admin', '2022-03-30 15:04:25');
-INSERT INTO `log` VALUES (1731, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10012, 'admin', '2022-03-30 15:04:37');
-INSERT INTO `log` VALUES (1732, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 20, 'admin', '2022-03-30 15:04:39');
-INSERT INTO `log` VALUES (1733, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 35, 'admin', '2022-03-30 15:06:04');
-INSERT INTO `log` VALUES (1734, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 194, 'admin', '2022-03-30 15:06:37');
-INSERT INTO `log` VALUES (1735, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 9514, 'admin', '2022-03-30 15:06:50');
-INSERT INTO `log` VALUES (1736, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 178, 'admin', '2022-03-30 15:21:06');
-INSERT INTO `log` VALUES (1737, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20580, 'admin', '2022-03-30 15:22:22');
-INSERT INTO `log` VALUES (1738, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 137, 'admin', '2022-03-30 15:25:36');
-INSERT INTO `log` VALUES (1739, '将推流移出到国标', 'DELETE', '/api/push/remove_form_gb', '127.0.0.1', '200 OK', 31, 'admin', '2022-03-30 15:29:41');
-INSERT INTO `log` VALUES (1740, '将推流移出到国标', 'DELETE', '/api/push/remove_form_gb', '127.0.0.1', '200 OK', 27, 'admin', '2022-03-30 15:45:28');
-INSERT INTO `log` VALUES (1741, '将推流移出到国标', 'DELETE', '/api/push/remove_form_gb', '127.0.0.1', '200 OK', 30, 'admin', '2022-03-30 15:50:55');
-INSERT INTO `log` VALUES (1742, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 24, 'admin', '2022-03-30 15:51:05');
-INSERT INTO `log` VALUES (1743, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20, 'admin', '2022-03-30 15:51:25');
-INSERT INTO `log` VALUES (1744, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20117, 'admin', '2022-03-30 15:51:51');
-INSERT INTO `log` VALUES (1745, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 155, 'admin', '2022-03-30 16:02:42');
-INSERT INTO `log` VALUES (1746, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 305, 'admin', '2022-03-30 17:05:04');
-INSERT INTO `log` VALUES (1747, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 95, 'admin', '2022-03-30 17:05:21');
-INSERT INTO `log` VALUES (1748, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 78, 'admin', '2022-03-30 17:15:09');
-INSERT INTO `log` VALUES (1749, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 45, 'admin', '2022-03-30 17:17:23');
-INSERT INTO `log` VALUES (1750, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 10075, 'admin', '2022-03-30 17:18:28');
-INSERT INTO `log` VALUES (1751, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10017, 'admin', '2022-03-30 17:18:39');
-INSERT INTO `log` VALUES (1752, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10025, 'admin', '2022-03-30 17:19:08');
-INSERT INTO `log` VALUES (1753, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 46, 'admin', '2022-03-30 17:19:10');
-INSERT INTO `log` VALUES (1754, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 10103, 'admin', '2022-03-30 17:20:05');
-INSERT INTO `log` VALUES (1755, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10008, 'admin', '2022-03-30 17:20:26');
-INSERT INTO `log` VALUES (1756, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 30, 'admin', '2022-03-30 17:20:50');
-INSERT INTO `log` VALUES (1757, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '192.168.0.102', '200 OK', 5, 'admin', '2022-03-30 17:20:51');
-INSERT INTO `log` VALUES (1758, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 33, 'admin', '2022-03-30 17:20:55');
-INSERT INTO `log` VALUES (1759, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 40, 'admin', '2022-03-30 17:21:16');
-INSERT INTO `log` VALUES (1760, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 95, 'admin', '2022-03-30 17:21:23');
-INSERT INTO `log` VALUES (1761, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 20, 'admin', '2022-03-30 17:21:25');
-INSERT INTO `log` VALUES (1762, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 128, 'admin', '2022-03-30 17:21:42');
-INSERT INTO `log` VALUES (1763, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 24, 'admin', '2022-03-30 17:22:03');
-INSERT INTO `log` VALUES (1764, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 40, 'admin', '2022-03-30 17:22:44');
-INSERT INTO `log` VALUES (1765, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10, 'admin', '2022-03-30 17:22:46');
-INSERT INTO `log` VALUES (1766, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-30 17:22:48');
-INSERT INTO `log` VALUES (1767, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 33, 'admin', '2022-03-30 17:23:55');
-INSERT INTO `log` VALUES (1768, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 26, 'admin', '2022-03-30 17:30:37');
-INSERT INTO `log` VALUES (1769, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 27, 'admin', '2022-03-30 17:30:39');
-INSERT INTO `log` VALUES (1770, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 243, 'admin', '2022-03-30 17:32:56');
-INSERT INTO `log` VALUES (1771, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '192.168.0.102', '200 OK', 61, 'admin', '2022-03-30 17:33:00');
-INSERT INTO `log` VALUES (1772, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 35, 'admin', '2022-03-30 17:33:02');
-INSERT INTO `log` VALUES (1773, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 191, 'admin', '2022-03-30 17:33:23');
-INSERT INTO `log` VALUES (1774, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 20571, 'admin', '2022-03-30 17:33:40');
-INSERT INTO `log` VALUES (1775, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 18, 'admin', '2022-03-30 17:34:57');
-INSERT INTO `log` VALUES (1776, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 34, 'admin', '2022-03-30 17:35:23');
-INSERT INTO `log` VALUES (1777, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 29, 'admin', '2022-03-30 17:35:37');
-INSERT INTO `log` VALUES (1778, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 266, 'admin', '2022-03-31 08:32:57');
-INSERT INTO `log` VALUES (1779, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 38, 'admin', '2022-03-31 08:34:58');
-INSERT INTO `log` VALUES (1780, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 39, 'admin', '2022-03-31 08:35:46');
-INSERT INTO `log` VALUES (1781, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 10083, 'admin', '2022-03-31 08:37:47');
-INSERT INTO `log` VALUES (1782, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-31 08:37:56');
-INSERT INTO `log` VALUES (1783, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10013, 'admin', '2022-03-31 08:37:58');
-INSERT INTO `log` VALUES (1784, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 3049, 'admin', '2022-03-31 08:38:17');
-INSERT INTO `log` VALUES (1785, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 1692, 'admin', '2022-03-31 08:38:20');
-INSERT INTO `log` VALUES (1786, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 30, 'admin', '2022-03-31 08:38:29');
-INSERT INTO `log` VALUES (1787, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 48, 'admin', '2022-03-31 08:39:11');
-INSERT INTO `log` VALUES (1788, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 24, 'admin', '2022-03-31 08:39:12');
-INSERT INTO `log` VALUES (1789, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 22, 'admin', '2022-03-31 08:39:15');
-INSERT INTO `log` VALUES (1790, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 107, 'admin', '2022-03-31 08:40:16');
-INSERT INTO `log` VALUES (1791, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 58, 'admin', '2022-03-31 08:40:17');
-INSERT INTO `log` VALUES (1792, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-31 08:40:20');
-INSERT INTO `log` VALUES (1793, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 37, 'admin', '2022-03-31 08:45:51');
-INSERT INTO `log` VALUES (1794, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 85, 'admin', '2022-03-31 08:46:12');
-INSERT INTO `log` VALUES (1795, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 36, 'admin', '2022-03-31 08:48:22');
-INSERT INTO `log` VALUES (1796, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 232, 'admin', '2022-03-31 08:48:43');
-INSERT INTO `log` VALUES (1797, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 10037, 'admin', '2022-03-31 08:50:47');
-INSERT INTO `log` VALUES (1798, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 25, 'admin', '2022-03-31 08:50:53');
-INSERT INTO `log` VALUES (1799, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000002000000001/sync', '192.168.0.102', '200 OK', 4, 'admin', '2022-03-31 08:50:56');
-INSERT INTO `log` VALUES (1800, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 10008, 'admin', '2022-03-31 08:50:59');
-INSERT INTO `log` VALUES (1801, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000002000000001/sync', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 08:51:18');
-INSERT INTO `log` VALUES (1802, '从上级平台移除国标通道', 'DELETE', '/api/platform/del_channel_for_gb', '192.168.0.102', '200 OK', 0, 'admin', '2022-03-31 08:51:38');
-INSERT INTO `log` VALUES (1803, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 08:51:49');
-INSERT INTO `log` VALUES (1804, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 78, 'admin', '2022-03-31 08:52:12');
-INSERT INTO `log` VALUES (1805, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000002', '192.168.0.102', '200 OK', 115, 'admin', '2022-03-31 08:52:17');
-INSERT INTO `log` VALUES (1806, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 255, 'admin', '2022-03-31 09:05:19');
-INSERT INTO `log` VALUES (1807, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 38, 'admin', '2022-03-31 09:07:05');
-INSERT INTO `log` VALUES (1808, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 29, 'admin', '2022-03-31 09:07:14');
-INSERT INTO `log` VALUES (1809, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-31 09:07:38');
-INSERT INTO `log` VALUES (1810, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 64, 'admin', '2022-03-31 09:08:20');
-INSERT INTO `log` VALUES (1811, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 33, 'admin', '2022-03-31 09:09:01');
-INSERT INTO `log` VALUES (1812, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 19, 'admin', '2022-03-31 09:09:12');
-INSERT INTO `log` VALUES (1813, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 17, 'admin', '2022-03-31 09:09:18');
-INSERT INTO `log` VALUES (1814, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000001', '192.168.0.102', '200 OK', 90, 'admin', '2022-03-31 09:09:38');
-INSERT INTO `log` VALUES (1815, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 25, 'admin', '2022-03-31 09:09:41');
-INSERT INTO `log` VALUES (1816, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 106, 'admin', '2022-03-31 09:13:55');
-INSERT INTO `log` VALUES (1817, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-31 09:17:34');
-INSERT INTO `log` VALUES (1818, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 261, 'admin', '2022-03-31 09:37:35');
-INSERT INTO `log` VALUES (1819, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 44, 'admin', '2022-03-31 09:37:39');
-INSERT INTO `log` VALUES (1820, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 42, 'admin', '2022-03-31 09:37:41');
-INSERT INTO `log` VALUES (1821, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 25, 'admin', '2022-03-31 09:39:35');
-INSERT INTO `log` VALUES (1822, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 86, 'admin', '2022-03-31 09:39:58');
-INSERT INTO `log` VALUES (1823, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '192.168.0.102', '200 OK', 83, 'admin', '2022-03-31 09:40:00');
-INSERT INTO `log` VALUES (1824, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 320, 'admin', '2022-03-31 09:40:28');
-INSERT INTO `log` VALUES (1825, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 257, 'admin', '2022-03-31 10:14:49');
-INSERT INTO `log` VALUES (1826, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000002000000001/delete', '192.168.0.102', '200 OK', 80, 'admin', '2022-03-31 10:17:18');
-INSERT INTO `log` VALUES (1827, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 35, 'admin', '2022-03-31 10:17:52');
-INSERT INTO `log` VALUES (1828, '添加上级平台', 'POST', '/api/platform/save', '192.168.0.102', '200 OK', 549, 'admin', '2022-03-31 10:18:03');
-INSERT INTO `log` VALUES (1829, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 37, 'admin', '2022-03-31 10:18:12');
-INSERT INTO `log` VALUES (1830, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 16, 'admin', '2022-03-31 10:20:49');
-INSERT INTO `log` VALUES (1831, '将推流移出到国标', 'DELETE', '/api/push/remove_form_gb', '192.168.0.102', '200 OK', 16, 'admin', '2022-03-31 10:20:58');
-INSERT INTO `log` VALUES (1832, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 216, 'admin', '2022-03-31 10:21:57');
-INSERT INTO `log` VALUES (1833, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '192.168.0.102', '200 OK', 3, 'admin', '2022-03-31 10:22:54');
-INSERT INTO `log` VALUES (1834, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 140, 'admin', '2022-03-31 10:27:19');
-INSERT INTO `log` VALUES (1835, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 25, 'admin', '2022-03-31 10:27:23');
-INSERT INTO `log` VALUES (1836, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 69, 'admin', '2022-03-31 10:29:06');
-INSERT INTO `log` VALUES (1837, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 270, 'admin', '2022-03-31 10:29:44');
-INSERT INTO `log` VALUES (1838, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 47, 'admin', '2022-03-31 10:29:50');
-INSERT INTO `log` VALUES (1839, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 13, 'admin', '2022-03-31 10:32:39');
-INSERT INTO `log` VALUES (1840, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '192.168.0.102', '200 OK', 31, 'admin', '2022-03-31 10:33:40');
-INSERT INTO `log` VALUES (1841, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000002', '192.168.0.102', '200 OK', 65, 'admin', '2022-03-31 10:35:07');
-INSERT INTO `log` VALUES (1842, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 10:37:13');
-INSERT INTO `log` VALUES (1843, '登录', 'GET', '/api/user/login', '192.168.0.114', '200 OK', 139, 'admin', '2022-03-31 10:37:32');
-INSERT INTO `log` VALUES (1844, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.114', '200 OK', 13, 'admin', '2022-03-31 10:37:46');
-INSERT INTO `log` VALUES (1845, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.114', '200 OK', 14, 'admin', '2022-03-31 10:37:57');
-INSERT INTO `log` VALUES (1846, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 66, 'admin', '2022-03-31 10:38:00');
-INSERT INTO `log` VALUES (1847, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 146, 'admin', '2022-03-31 10:38:22');
-INSERT INTO `log` VALUES (1848, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 14, 'admin', '2022-03-31 10:38:26');
-INSERT INTO `log` VALUES (1849, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 245, 'admin', '2022-03-31 10:41:38');
-INSERT INTO `log` VALUES (1850, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 187, 'admin', '2022-03-31 10:41:45');
-INSERT INTO `log` VALUES (1851, '登录', 'GET', '/api/user/login', '192.168.0.114', '200 OK', 155, 'admin', '2022-03-31 10:41:51');
-INSERT INTO `log` VALUES (1852, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.114', '200 OK', 187, 'admin', '2022-03-31 10:42:00');
-INSERT INTO `log` VALUES (1853, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 31, 'admin', '2022-03-31 10:47:48');
-INSERT INTO `log` VALUES (1854, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.114', '200 OK', 201, 'admin', '2022-03-31 10:48:10');
-INSERT INTO `log` VALUES (1855, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 23, 'admin', '2022-03-31 10:48:22');
-INSERT INTO `log` VALUES (1856, '从上级平台移除国标通道', 'DELETE', '/api/platform/del_channel_for_gb', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 10:50:27');
-INSERT INTO `log` VALUES (1857, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 10:51:47');
-INSERT INTO `log` VALUES (1858, '从上级平台移除国标通道', 'DELETE', '/api/platform/del_channel_for_gb', '192.168.0.102', '200 OK', 0, 'admin', '2022-03-31 10:57:10');
-INSERT INTO `log` VALUES (1859, '移除上级平台', 'DELETE', '/api/platform/delete/34020000002000000002', '192.168.0.102', '200 OK', 97, 'admin', '2022-03-31 11:03:58');
-INSERT INTO `log` VALUES (1860, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 265, 'admin', '2022-03-31 11:08:13');
-INSERT INTO `log` VALUES (1861, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 167, 'admin', '2022-03-31 11:09:04');
-INSERT INTO `log` VALUES (1862, '将推流移出到国标', 'DELETE', '/api/push/remove_form_gb', '192.168.0.102', '200 OK', 40, 'admin', '2022-03-31 11:11:42');
-INSERT INTO `log` VALUES (1863, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 231, 'admin', '2022-03-31 11:17:36');
-INSERT INTO `log` VALUES (1864, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '192.168.0.102', '200 OK', 11, 'admin', '2022-03-31 11:17:39');
-INSERT INTO `log` VALUES (1865, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 55, 'admin', '2022-03-31 11:17:41');
-INSERT INTO `log` VALUES (1866, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 32, 'admin', '2022-03-31 11:19:01');
-INSERT INTO `log` VALUES (1867, '从上级平台移除国标通道', 'DELETE', '/api/platform/del_channel_for_gb', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 11:20:35');
-INSERT INTO `log` VALUES (1868, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 190, 'admin', '2022-03-31 11:21:23');
-INSERT INTO `log` VALUES (1869, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 24, 'admin', '2022-03-31 11:21:29');
-INSERT INTO `log` VALUES (1870, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 24, 'admin', '2022-03-31 11:21:32');
-INSERT INTO `log` VALUES (1871, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 21, 'admin', '2022-03-31 11:21:33');
-INSERT INTO `log` VALUES (1872, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 22, 'admin', '2022-03-31 11:21:34');
-INSERT INTO `log` VALUES (1873, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 24, 'admin', '2022-03-31 11:21:34');
-INSERT INTO `log` VALUES (1874, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 28, 'admin', '2022-03-31 11:21:36');
-INSERT INTO `log` VALUES (1875, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 131, 'admin', '2022-03-31 11:22:20');
-INSERT INTO `log` VALUES (1876, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 131, 'admin', '2022-03-31 11:22:21');
-INSERT INTO `log` VALUES (1877, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 25, 'admin', '2022-03-31 11:23:00');
-INSERT INTO `log` VALUES (1878, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 15, 'admin', '2022-03-31 11:34:22');
-INSERT INTO `log` VALUES (1879, '从上级平台移除国标通道', 'DELETE', '/api/platform/del_channel_for_gb', '192.168.0.102', '200 OK', 10, 'admin', '2022-03-31 11:34:36');
-INSERT INTO `log` VALUES (1880, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 200, 'admin', '2022-03-31 11:36:42');
-INSERT INTO `log` VALUES (1881, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 20099, 'admin', '2022-03-31 11:37:06');
-INSERT INTO `log` VALUES (1882, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 26, 'admin', '2022-03-31 11:37:10');
-INSERT INTO `log` VALUES (1883, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 180, 'admin', '2022-03-31 11:37:28');
-INSERT INTO `log` VALUES (1884, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 190, 'admin', '2022-03-31 11:37:44');
-INSERT INTO `log` VALUES (1885, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786ADFA', '192.168.0.102', '200 OK', 20570, 'admin', '2022-03-31 11:38:02');
-INSERT INTO `log` VALUES (1886, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 265, 'admin', '2022-03-31 15:27:36');
-INSERT INTO `log` VALUES (1887, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 133, 'admin', '2022-03-31 15:32:18');
-INSERT INTO `log` VALUES (1888, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 77, 'admin', '2022-03-31 15:32:19');
-INSERT INTO `log` VALUES (1889, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 29, 'admin', '2022-03-31 15:32:24');
-INSERT INTO `log` VALUES (1890, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 64, 'admin', '2022-03-31 15:32:47');
-INSERT INTO `log` VALUES (1891, '启用代理', 'GET', '/api/proxy/start', '192.168.0.102', '200 OK', 50, 'admin', '2022-03-31 15:32:48');
-INSERT INTO `log` VALUES (1892, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 59, 'admin', '2022-03-31 15:32:52');
-INSERT INTO `log` VALUES (1893, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 251, 'admin', '2022-04-01 15:25:19');
-INSERT INTO `log` VALUES (1894, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10075, 'admin', '2022-04-01 15:25:44');
-INSERT INTO `log` VALUES (1895, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 50, 'admin', '2022-04-01 15:25:47');
-INSERT INTO `log` VALUES (1896, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10033, 'admin', '2022-04-01 15:25:55');
-INSERT INTO `log` VALUES (1897, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 66, 'admin', '2022-04-01 15:26:19');
-INSERT INTO `log` VALUES (1898, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10035, 'admin', '2022-04-01 15:26:57');
-INSERT INTO `log` VALUES (1899, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 27, 'admin', '2022-04-01 15:27:04');
-INSERT INTO `log` VALUES (1900, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10022, 'admin', '2022-04-01 15:27:09');
-INSERT INTO `log` VALUES (1901, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10036, 'admin', '2022-04-01 15:27:32');
-INSERT INTO `log` VALUES (1902, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 21, 'admin', '2022-04-01 15:27:37');
-INSERT INTO `log` VALUES (1903, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10010, 'admin', '2022-04-01 15:27:44');
-INSERT INTO `log` VALUES (1904, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 1172, 'admin', '2022-04-01 15:28:32');
-INSERT INTO `log` VALUES (1905, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 865, 'admin', '2022-04-01 15:28:34');
-INSERT INTO `log` VALUES (1906, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 35, 'admin', '2022-04-01 15:28:52');
-INSERT INTO `log` VALUES (1907, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 112, 'admin', '2022-04-01 15:29:07');
-INSERT INTO `log` VALUES (1908, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 95, 'admin', '2022-04-01 15:29:09');
-INSERT INTO `log` VALUES (1909, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 49, 'admin', '2022-04-01 15:29:15');
-INSERT INTO `log` VALUES (1910, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 103, 'admin', '2022-04-01 15:34:51');
-INSERT INTO `log` VALUES (1911, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 69, 'admin', '2022-04-01 15:34:52');
-INSERT INTO `log` VALUES (1912, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 69, 'admin', '2022-04-01 15:34:53');
-INSERT INTO `log` VALUES (1913, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 72, 'admin', '2022-04-01 15:34:54');
-INSERT INTO `log` VALUES (1914, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-01 15:34:58');
-INSERT INTO `log` VALUES (1915, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 586, 'admin', '2022-04-01 15:35:38');
-INSERT INTO `log` VALUES (1916, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 36, 'admin', '2022-04-01 15:35:48');
-INSERT INTO `log` VALUES (1917, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 119, 'admin', '2022-04-01 15:36:37');
-INSERT INTO `log` VALUES (1918, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 76, 'admin', '2022-04-01 15:36:43');
-INSERT INTO `log` VALUES (1919, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 27, 'admin', '2022-04-01 15:36:44');
-INSERT INTO `log` VALUES (1920, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 208, 'admin', '2022-04-01 15:37:07');
-INSERT INTO `log` VALUES (1921, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 5034, 'admin', '2022-04-01 15:37:59');
-INSERT INTO `log` VALUES (1922, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20507, 'admin', '2022-04-01 15:38:00');
-INSERT INTO `log` VALUES (1923, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 5020, 'admin', '2022-04-01 15:38:07');
-INSERT INTO `log` VALUES (1924, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 22, 'admin', '2022-04-01 15:38:17');
-INSERT INTO `log` VALUES (1925, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 633, 'admin', '2022-04-01 15:38:26');
-INSERT INTO `log` VALUES (1926, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-01 15:38:31');
-INSERT INTO `log` VALUES (1927, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 411, 'admin', '2022-04-01 15:38:32');
-INSERT INTO `log` VALUES (1928, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 19, 'admin', '2022-04-01 15:38:33');
-INSERT INTO `log` VALUES (1929, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 290, 'admin', '2022-04-11 10:22:33');
-INSERT INTO `log` VALUES (1930, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10077, 'admin', '2022-04-11 10:23:31');
-INSERT INTO `log` VALUES (1931, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 33, 'admin', '2022-04-11 10:23:43');
-INSERT INTO `log` VALUES (1932, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 116, 'admin', '2022-04-11 10:24:12');
-INSERT INTO `log` VALUES (1933, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 2632, 'admin', '2022-04-11 10:24:19');
-INSERT INTO `log` VALUES (1934, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-11 10:25:15');
-INSERT INTO `log` VALUES (1935, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 190, 'admin', '2022-04-11 10:26:25');
-INSERT INTO `log` VALUES (1936, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-11 10:26:29');
-INSERT INTO `log` VALUES (1937, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 60, 'admin', '2022-04-11 10:26:30');
-INSERT INTO `log` VALUES (1938, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 60, 'admin', '2022-04-11 10:26:33');
-INSERT INTO `log` VALUES (1939, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10052, 'admin', '2022-04-11 10:30:09');
-INSERT INTO `log` VALUES (1940, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10010, 'admin', '2022-04-11 10:30:24');
-INSERT INTO `log` VALUES (1941, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 51, 'admin', '2022-04-11 10:30:38');
-INSERT INTO `log` VALUES (1942, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 25, 'admin', '2022-04-11 10:30:46');
-INSERT INTO `log` VALUES (1943, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 13, 'admin', '2022-04-11 10:31:02');
-INSERT INTO `log` VALUES (1944, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10030, 'admin', '2022-04-11 10:34:01');
-INSERT INTO `log` VALUES (1945, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 25, 'admin', '2022-04-11 10:34:07');
-INSERT INTO `log` VALUES (1946, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 1503, 'admin', '2022-04-11 10:34:31');
-INSERT INTO `log` VALUES (1947, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 47, 'admin', '2022-04-11 10:34:44');
-INSERT INTO `log` VALUES (1948, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 24, 'admin', '2022-04-11 10:34:45');
-INSERT INTO `log` VALUES (1949, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 2660, 'admin', '2022-04-11 10:35:37');
-INSERT INTO `log` VALUES (1950, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 1165, 'admin', '2022-04-11 10:35:57');
-INSERT INTO `log` VALUES (1951, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 22, 'admin', '2022-04-11 10:36:01');
-INSERT INTO `log` VALUES (1952, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 254, 'admin', '2022-04-11 10:54:48');
-INSERT INTO `log` VALUES (1953, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 141, 'admin', '2022-04-11 10:54:54');
-INSERT INTO `log` VALUES (1954, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 68, 'admin', '2022-04-11 10:54:58');
-INSERT INTO `log` VALUES (1955, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-11 10:55:03');
-INSERT INTO `log` VALUES (1956, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 2577, 'admin', '2022-04-11 10:55:06');
-INSERT INTO `log` VALUES (1957, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 27, 'admin', '2022-04-11 10:55:15');
-INSERT INTO `log` VALUES (1958, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 86, 'admin', '2022-04-11 10:57:37');
-INSERT INTO `log` VALUES (1959, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 15, 'admin', '2022-04-11 10:57:51');
-INSERT INTO `log` VALUES (1960, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 6676, 'admin', '2022-04-11 10:59:42');
-INSERT INTO `log` VALUES (1961, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 24, 'admin', '2022-04-11 10:59:58');
-INSERT INTO `log` VALUES (1962, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 2600, 'admin', '2022-04-11 11:00:33');
-INSERT INTO `log` VALUES (1963, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 21, 'admin', '2022-04-11 11:00:45');
-INSERT INTO `log` VALUES (1964, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 51, 'admin', '2022-04-11 11:06:34');
-INSERT INTO `log` VALUES (1965, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20123, 'admin', '2022-04-11 11:07:20');
-INSERT INTO `log` VALUES (1966, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001110000234/sync', '127.0.0.1', '200 OK', 5, 'admin', '2022-04-11 11:08:55');
-INSERT INTO `log` VALUES (1967, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001110000234/sync', '127.0.0.1', '200 OK', 6, 'admin', '2022-04-11 11:09:29');
-INSERT INTO `log` VALUES (1968, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001110000234/sync', '127.0.0.1', '200 OK', 4, 'admin', '2022-04-11 11:09:33');
-INSERT INTO `log` VALUES (1969, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001110000234/sync', '127.0.0.1', '200 OK', 4, 'admin', '2022-04-11 11:10:15');
-INSERT INTO `log` VALUES (1970, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 4, 'admin', '2022-04-11 11:10:19');
-INSERT INTO `log` VALUES (1971, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001110000234/delete', '127.0.0.1', '200 OK', 75, 'admin', '2022-04-11 11:11:15');
-INSERT INTO `log` VALUES (1972, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 268, 'admin', '2022-04-21 09:33:29');
-INSERT INTO `log` VALUES (1973, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 41, 'admin', '2022-04-21 09:33:43');
-INSERT INTO `log` VALUES (1974, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 174, 'admin', '2022-04-21 10:28:37');
-INSERT INTO `log` VALUES (1975, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 33, 'admin', '2022-04-21 10:28:44');
-INSERT INTO `log` VALUES (1976, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-04-21 10:30:22');
-INSERT INTO `log` VALUES (1977, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 206, 'admin', '2022-04-21 10:34:29');
-INSERT INTO `log` VALUES (1978, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 10, 'admin', '2022-04-21 10:35:11');
-INSERT INTO `log` VALUES (1979, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-04-21 10:35:13');
-INSERT INTO `log` VALUES (1980, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 7, 'admin', '2022-04-21 10:35:13');
-INSERT INTO `log` VALUES (1981, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-04-21 10:35:14');
-INSERT INTO `log` VALUES (1982, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-04-21 10:35:14');
-INSERT INTO `log` VALUES (1983, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-04-21 10:35:14');
-INSERT INTO `log` VALUES (1984, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 6, 'admin', '2022-04-21 10:35:15');
-INSERT INTO `log` VALUES (1985, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 4, 'admin', '2022-04-21 10:35:16');
-INSERT INTO `log` VALUES (1986, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 3, 'admin', '2022-04-21 10:35:17');
-INSERT INTO `log` VALUES (1987, '云台控制', 'POST', '/api/ptz/control/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 5, 'admin', '2022-04-21 10:35:18');
-INSERT INTO `log` VALUES (1988, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 150, 'admin', '2022-04-21 11:00:26');
-INSERT INTO `log` VALUES (1989, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 48, 'admin', '2022-04-21 11:00:35');
-INSERT INTO `log` VALUES (1990, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 22, 'admin', '2022-04-21 11:08:04');
-INSERT INTO `log` VALUES (1991, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-21 11:08:15');
-INSERT INTO `log` VALUES (1992, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20138, 'admin', '2022-04-21 11:08:32');
-INSERT INTO `log` VALUES (1993, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-04-21 11:13:14');
-INSERT INTO `log` VALUES (1994, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-21 11:16:51');
-INSERT INTO `log` VALUES (1995, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 190, 'admin', '2022-04-21 14:10:45');
-INSERT INTO `log` VALUES (1996, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 188, 'admin', '2022-04-21 14:13:54');
-INSERT INTO `log` VALUES (1997, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 25, 'admin', '2022-04-21 14:15:44');
-INSERT INTO `log` VALUES (1998, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20098, 'admin', '2022-04-21 14:17:22');
-INSERT INTO `log` VALUES (1999, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 181, 'admin', '2022-04-21 14:17:55');
-INSERT INTO `log` VALUES (2000, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-21 14:19:00');
-INSERT INTO `log` VALUES (2001, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-21 14:23:26');
-INSERT INTO `log` VALUES (2002, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 24, 'admin', '2022-04-21 14:29:30');
-INSERT INTO `log` VALUES (2003, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 151, 'admin', '2022-04-21 14:49:27');
-INSERT INTO `log` VALUES (2004, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20142, 'admin', '2022-04-21 14:49:45');
-INSERT INTO `log` VALUES (2005, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-04-21 14:55:24');
-INSERT INTO `log` VALUES (2006, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 127, 'admin', '2022-04-21 14:59:50');
-INSERT INTO `log` VALUES (2007, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 134, 'admin', '2022-04-21 15:01:18');
-INSERT INTO `log` VALUES (2008, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20151, 'admin', '2022-04-21 15:01:40');
-INSERT INTO `log` VALUES (2009, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 147, 'admin', '2022-04-21 15:15:35');
-INSERT INTO `log` VALUES (2010, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20560, 'admin', '2022-04-21 15:35:33');
-INSERT INTO `log` VALUES (2011, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 143, 'admin', '2022-04-21 15:36:37');
-INSERT INTO `log` VALUES (2012, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 294, 'admin', '2022-04-22 13:45:17');
-INSERT INTO `log` VALUES (2013, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 44, 'admin', '2022-04-22 13:46:01');
-INSERT INTO `log` VALUES (2014, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20115, 'admin', '2022-04-22 13:46:26');
-INSERT INTO `log` VALUES (2015, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 260, 'admin', '2022-04-25 15:36:30');
-INSERT INTO `log` VALUES (2016, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 148, 'admin', '2022-04-25 16:09:31');
-INSERT INTO `log` VALUES (2017, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 267, 'admin', '2022-04-26 08:49:24');
-INSERT INTO `log` VALUES (2018, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 118, 'admin', '2022-04-26 08:50:47');
-INSERT INTO `log` VALUES (2019, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 68, 'admin', '2022-04-26 08:50:51');
-INSERT INTO `log` VALUES (2020, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 39, 'admin', '2022-04-26 08:50:53');
-INSERT INTO `log` VALUES (2021, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 500, 'admin', '2022-04-26 08:51:04');
-INSERT INTO `log` VALUES (2022, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 274, 'admin', '2022-04-26 08:51:09');
-INSERT INTO `log` VALUES (2023, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 41, 'admin', '2022-04-26 08:51:12');
-INSERT INTO `log` VALUES (2024, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 69, 'admin', '2022-04-26 08:53:01');
-INSERT INTO `log` VALUES (2025, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-26 08:53:09');
-INSERT INTO `log` VALUES (2026, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 29, 'admin', '2022-04-26 08:53:11');
-INSERT INTO `log` VALUES (2027, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 152, 'admin', '2022-04-26 09:38:15');
-INSERT INTO `log` VALUES (2028, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 47, 'admin', '2022-04-26 09:53:40');
-INSERT INTO `log` VALUES (2029, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10058, 'admin', '2022-04-26 09:54:03');
-INSERT INTO `log` VALUES (2030, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 31, 'admin', '2022-04-26 09:54:17');
-INSERT INTO `log` VALUES (2031, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10008, 'admin', '2022-04-26 09:54:18');
-INSERT INTO `log` VALUES (2032, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 19, 'admin', '2022-04-26 09:54:18');
-INSERT INTO `log` VALUES (2033, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 19, 'admin', '2022-04-26 09:54:22');
-INSERT INTO `log` VALUES (2034, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 22, 'admin', '2022-04-26 09:54:34');
-INSERT INTO `log` VALUES (2035, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 2638, 'admin', '2022-04-26 09:54:38');
-INSERT INTO `log` VALUES (2036, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 25, 'admin', '2022-04-26 09:54:48');
-INSERT INTO `log` VALUES (2037, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10036, 'admin', '2022-04-26 10:03:10');
-INSERT INTO `log` VALUES (2038, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10030, 'admin', '2022-04-26 10:03:23');
-INSERT INTO `log` VALUES (2039, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 31, 'admin', '2022-04-26 10:03:26');
-INSERT INTO `log` VALUES (2040, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10037, 'admin', '2022-04-26 10:03:44');
-INSERT INTO `log` VALUES (2041, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 42, 'admin', '2022-04-26 10:03:47');
-INSERT INTO `log` VALUES (2042, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 127, 'admin', '2022-04-26 10:07:04');
-INSERT INTO `log` VALUES (2043, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 95, 'admin', '2022-04-26 10:07:07');
-INSERT INTO `log` VALUES (2044, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 35, 'admin', '2022-04-26 10:07:08');
-INSERT INTO `log` VALUES (2045, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 52, 'admin', '2022-04-26 10:07:19');
-INSERT INTO `log` VALUES (2046, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 22, 'admin', '2022-04-26 10:07:25');
-INSERT INTO `log` VALUES (2047, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 56, 'admin', '2022-04-26 10:07:36');
-INSERT INTO `log` VALUES (2048, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 20, 'admin', '2022-04-26 10:07:39');
-INSERT INTO `log` VALUES (2049, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 23, 'admin', '2022-04-26 10:07:39');
-INSERT INTO `log` VALUES (2050, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 150, 'admin', '2022-04-26 10:15:43');
-INSERT INTO `log` VALUES (2051, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 157, 'admin', '2022-04-26 10:15:50');
-INSERT INTO `log` VALUES (2052, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10060, 'admin', '2022-04-26 10:16:30');
-INSERT INTO `log` VALUES (2053, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 10024, 'admin', '2022-04-26 10:16:45');
-INSERT INTO `log` VALUES (2054, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 52, 'admin', '2022-04-26 10:16:50');
-INSERT INTO `log` VALUES (2055, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 73, 'admin', '2022-04-26 10:17:00');
-INSERT INTO `log` VALUES (2056, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 50, 'admin', '2022-04-26 10:17:04');
-INSERT INTO `log` VALUES (2057, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 48, 'admin', '2022-04-26 10:17:05');
-INSERT INTO `log` VALUES (2058, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 45, 'admin', '2022-04-26 10:18:42');
-INSERT INTO `log` VALUES (2059, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 17, 'admin', '2022-04-26 10:18:56');
-INSERT INTO `log` VALUES (2060, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10034, 'admin', '2022-04-26 10:20:41');
-INSERT INTO `log` VALUES (2061, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 60, 'admin', '2022-04-26 10:20:51');
-INSERT INTO `log` VALUES (2062, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 91, 'admin', '2022-04-26 10:49:55');
-INSERT INTO `log` VALUES (2063, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 10028, 'admin', '2022-04-26 10:50:13');
-INSERT INTO `log` VALUES (2064, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 3, 'admin', '2022-04-26 10:53:03');
-INSERT INTO `log` VALUES (2065, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 299, 'admin', '2022-04-26 10:53:48');
-INSERT INTO `log` VALUES (2066, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 10065, 'admin', '2022-04-26 10:58:48');
-INSERT INTO `log` VALUES (2067, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 10027, 'admin', '2022-04-26 10:59:02');
-INSERT INTO `log` VALUES (2068, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 16, 'admin', '2022-04-26 11:01:43');
-INSERT INTO `log` VALUES (2069, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 194, 'admin', '2022-04-26 11:06:25');
-INSERT INTO `log` VALUES (2070, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 12, 'admin', '2022-04-26 11:06:48');
-INSERT INTO `log` VALUES (2071, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 12, 'admin', '2022-04-26 11:06:52');
-INSERT INTO `log` VALUES (2072, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 47, 'admin', '2022-04-26 11:08:13');
-INSERT INTO `log` VALUES (2073, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-26 11:08:22');
-INSERT INTO `log` VALUES (2074, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 15045, 'admin', '2022-04-26 11:08:31');
-INSERT INTO `log` VALUES (2075, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20091, 'admin', '2022-04-26 11:08:31');
-INSERT INTO `log` VALUES (2076, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20150, 'admin', '2022-04-26 11:08:45');
-INSERT INTO `log` VALUES (2077, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 200, 'admin', '2022-04-26 11:29:35');
-INSERT INTO `log` VALUES (2078, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 48, 'admin', '2022-04-26 11:29:53');
-INSERT INTO `log` VALUES (2079, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 23, 'admin', '2022-04-26 11:30:15');
-INSERT INTO `log` VALUES (2080, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20111, 'admin', '2022-04-26 11:30:29');
-INSERT INTO `log` VALUES (2081, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 76, 'admin', '2022-04-26 11:30:44');
-INSERT INTO `log` VALUES (2082, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 30, 'admin', '2022-04-26 11:30:58');
-INSERT INTO `log` VALUES (2083, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 167, 'admin', '2022-04-26 13:32:00');
-INSERT INTO `log` VALUES (2084, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 255, 'admin', '2022-04-26 13:33:08');
-INSERT INTO `log` VALUES (2085, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 150, 'admin', '2022-04-26 13:37:41');
-INSERT INTO `log` VALUES (2086, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 26, 'admin', '2022-04-26 13:37:44');
-INSERT INTO `log` VALUES (2087, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 37, 'admin', '2022-04-26 13:37:54');
-INSERT INTO `log` VALUES (2088, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 41, 'admin', '2022-04-26 13:38:18');
-INSERT INTO `log` VALUES (2089, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20567, 'admin', '2022-04-26 13:38:21');
-INSERT INTO `log` VALUES (2090, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 27, 'admin', '2022-04-26 13:38:24');
-INSERT INTO `log` VALUES (2091, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 423, 'admin', '2022-04-26 13:40:16');
-INSERT INTO `log` VALUES (2092, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 312, 'admin', '2022-04-26 13:41:33');
-INSERT INTO `log` VALUES (2093, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 36, 'admin', '2022-04-26 13:41:36');
-INSERT INTO `log` VALUES (2094, '保存代理', 'POST', '/api/proxy/save', '127.0.0.1', '200 OK', 33184, 'admin', '2022-04-26 13:43:02');
-INSERT INTO `log` VALUES (2095, '移除代理', 'DELETE', '/api/proxy/del', '127.0.0.1', '200 OK', 53, 'admin', '2022-04-26 13:44:06');
-INSERT INTO `log` VALUES (2096, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 200, 'admin', '2022-04-26 13:44:12');
-INSERT INTO `log` VALUES (2097, '启用代理', 'GET', '/api/proxy/start', '0:0:0:0:0:0:0:1', '200 OK', 2671, 'admin', '2022-04-26 13:44:37');
-INSERT INTO `log` VALUES (2098, '停用代理', 'GET', '/api/proxy/stop', '0:0:0:0:0:0:0:1', '200 OK', 26, 'admin', '2022-04-26 13:44:45');
-INSERT INTO `log` VALUES (2099, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 32615, 'admin', '2022-04-26 13:44:50');
-INSERT INTO `log` VALUES (2100, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 168, 'admin', '2022-04-26 13:48:10');
-INSERT INTO `log` VALUES (2101, '登录', 'GET', '/api/user/login', '192.168.0.103', '200 OK', 161, 'admin', '2022-04-26 13:48:52');
-INSERT INTO `log` VALUES (2102, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 194, 'admin', '2022-04-26 13:55:01');
-INSERT INTO `log` VALUES (2103, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 39, 'admin', '2022-04-26 14:00:34');
-INSERT INTO `log` VALUES (2104, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 126922, 'admin', '2022-04-26 14:03:21');
-INSERT INTO `log` VALUES (2105, '保存代理', 'POST', '/api/proxy/save', '192.168.0.102', '200 OK', 131, 'admin', '2022-04-26 14:03:21');
-INSERT INTO `log` VALUES (2106, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 37, 'admin', '2022-04-26 14:03:31');
-INSERT INTO `log` VALUES (2107, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.102', '200 OK', 25, 'admin', '2022-04-26 14:03:39');
-INSERT INTO `log` VALUES (2108, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 162, 'admin', '2022-04-26 14:46:39');
-INSERT INTO `log` VALUES (2109, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 145, 'admin', '2022-04-26 15:52:54');
-INSERT INTO `log` VALUES (2110, '[设备查询] 更新通道信息', 'POST', '/api/device/query/channel/update/34020000001320000012', '192.168.0.102', '200 OK', 40, 'admin', '2022-04-26 15:53:44');
-INSERT INTO `log` VALUES (2111, '[设备查询] 更新通道信息', 'POST', '/api/device/query/channel/update/34020000001320000012', '192.168.0.102', '200 OK', 20, 'admin', '2022-04-26 15:53:45');
-INSERT INTO `log` VALUES (2112, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.102', '200 OK', 33, 'admin', '2022-04-26 16:01:38');
-INSERT INTO `log` VALUES (2113, '登录', 'GET', '/api/user/login', '192.168.0.102', '200 OK', 148, 'admin', '2022-04-26 16:28:12');
-INSERT INTO `log` VALUES (2114, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 264, 'admin', '2022-04-26 16:28:19');
-INSERT INTO `log` VALUES (2115, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 18, 'admin', '2022-04-26 16:30:00');
-INSERT INTO `log` VALUES (2116, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 26, 'admin', '2022-04-26 16:31:01');
-INSERT INTO `log` VALUES (2117, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 20688, 'admin', '2022-04-26 16:33:12');
-INSERT INTO `log` VALUES (2118, '向上级平台添加国标通道', 'POST', '/api/platform/update_channel_for_gb', '192.168.0.102', '200 OK', 56, 'admin', '2022-04-26 16:44:34');
-INSERT INTO `log` VALUES (2119, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.102', '200 OK', 55, 'admin', '2022-04-26 16:51:09');
-INSERT INTO `log` VALUES (2120, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 506, 'admin', '2022-04-27 08:39:57');
-INSERT INTO `log` VALUES (2121, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 171, 'admin', '2022-04-27 09:16:37');
-INSERT INTO `log` VALUES (2122, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 8, 'admin', '2022-04-27 09:21:10');
-INSERT INTO `log` VALUES (2123, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 51, 'admin', '2022-04-27 09:24:53');
-INSERT INTO `log` VALUES (2124, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 36, 'admin', '2022-04-27 09:25:02');
-INSERT INTO `log` VALUES (2125, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20148, 'admin', '2022-04-27 09:25:18');
-INSERT INTO `log` VALUES (2126, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 156, 'admin', '2022-04-27 09:25:23');
-INSERT INTO `log` VALUES (2127, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786991D', '127.0.0.1', '200 OK', 20431, 'admin', '2022-04-27 09:26:05');
-INSERT INTO `log` VALUES (2128, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 25, 'admin', '2022-04-27 09:27:46');
-INSERT INTO `log` VALUES (2129, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/4786B26E', '127.0.0.1', '200 OK', 20128, 'admin', '2022-04-27 09:28:14');
-INSERT INTO `log` VALUES (2130, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 3, 'admin', '2022-04-27 09:34:07');
-INSERT INTO `log` VALUES (2131, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 6, 'admin', '2022-04-27 09:34:23');
-INSERT INTO `log` VALUES (2132, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 6, 'admin', '2022-04-27 09:34:24');
-INSERT INTO `log` VALUES (2133, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 15, 'admin', '2022-04-27 09:34:24');
-INSERT INTO `log` VALUES (2134, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 10, 'admin', '2022-04-27 09:34:24');
-INSERT INTO `log` VALUES (2135, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 17, 'admin', '2022-04-27 09:34:24');
-INSERT INTO `log` VALUES (2136, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 34, 'admin', '2022-04-27 09:34:25');
-INSERT INTO `log` VALUES (2137, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 10, 'admin', '2022-04-27 09:34:25');
-INSERT INTO `log` VALUES (2138, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 18, 'admin', '2022-04-27 09:34:25');
-INSERT INTO `log` VALUES (2139, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 9, 'admin', '2022-04-27 09:34:25');
-INSERT INTO `log` VALUES (2140, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 17, 'admin', '2022-04-27 09:34:25');
-INSERT INTO `log` VALUES (2141, '订阅位置信息', 'GET', '/api/position/subscribe/34020000001320000012', '127.0.0.1', '200 OK', 12, 'admin', '2022-04-27 09:34:26');
-INSERT INTO `log` VALUES (2142, '启用代理', 'GET', '/api/proxy/start', '127.0.0.1', '200 OK', 3002, 'admin', '2022-04-27 09:35:11');
-INSERT INTO `log` VALUES (2143, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 28, 'admin', '2022-04-27 09:35:35');
-INSERT INTO `log` VALUES (2144, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 23, 'admin', '2022-04-27 09:36:59');
-INSERT INTO `log` VALUES (2145, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 187, 'admin', '2022-04-27 09:37:20');
-INSERT INTO `log` VALUES (2146, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20554, 'admin', '2022-04-27 09:37:29');
-INSERT INTO `log` VALUES (2147, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 20, 'admin', '2022-04-27 09:37:41');
-INSERT INTO `log` VALUES (2148, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 31, 'admin', '2022-04-27 09:37:47');
-INSERT INTO `log` VALUES (2149, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 27, 'admin', '2022-04-27 09:38:01');
-INSERT INTO `log` VALUES (2150, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 127, 'admin', '2022-04-27 09:42:35');
-INSERT INTO `log` VALUES (2151, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/47869D1D', '127.0.0.1', '200 OK', 20113, 'admin', '2022-04-27 09:43:00');
-INSERT INTO `log` VALUES (2152, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 274, 'admin', '2022-04-27 11:48:15');
-INSERT INTO `log` VALUES (2153, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 249, 'admin', '2022-04-27 13:59:37');
-INSERT INTO `log` VALUES (2154, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 274, 'admin', '2022-04-27 15:55:45');
-INSERT INTO `log` VALUES (2155, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 263, 'admin', '2022-04-28 09:30:27');
-INSERT INTO `log` VALUES (2156, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 148, 'admin', '2022-04-28 09:54:55');
-INSERT INTO `log` VALUES (2157, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 283, 'admin', '2022-07-11 08:59:14');
-INSERT INTO `log` VALUES (2158, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 145, 'admin', '2022-07-11 09:06:15');
-INSERT INTO `log` VALUES (2159, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 178, 'admin', '2022-07-11 09:07:16');
-INSERT INTO `log` VALUES (2160, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 511, 'admin', '2022-07-11 09:12:07');
-INSERT INTO `log` VALUES (2161, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.101', '200 OK', 24, 'admin', '2022-07-11 09:13:53');
-INSERT INTO `log` VALUES (2162, '启用代理', 'GET', '/api/proxy/start', '192.168.0.101', '200 OK', 369, 'admin', '2022-07-11 09:13:55');
-INSERT INTO `log` VALUES (2163, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 36, 'admin', '2022-07-11 09:14:08');
-INSERT INTO `log` VALUES (2164, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 295, 'admin', '2022-07-11 09:14:25');
-INSERT INTO `log` VALUES (2165, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 29, 'admin', '2022-07-11 09:14:31');
-INSERT INTO `log` VALUES (2166, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 371, 'admin', '2022-07-11 09:14:45');
-INSERT INTO `log` VALUES (2167, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.101', '200 OK', 32, 'admin', '2022-07-11 09:14:52');
-INSERT INTO `log` VALUES (2168, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 22, 'admin', '2022-07-11 09:14:54');
-INSERT INTO `log` VALUES (2169, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 266, 'admin', '2022-07-11 09:15:13');
-INSERT INTO `log` VALUES (2170, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 37, 'admin', '2022-07-11 09:16:52');
-INSERT INTO `log` VALUES (2171, '启用代理', 'GET', '/api/proxy/start', '192.168.0.101', '200 OK', 10027, 'admin', '2022-07-11 09:18:18');
-INSERT INTO `log` VALUES (2172, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 138, 'admin', '2022-07-11 09:18:52');
-INSERT INTO `log` VALUES (2173, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 206, 'admin', '2022-07-11 09:19:09');
-INSERT INTO `log` VALUES (2174, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.101', '200 OK', 24, 'admin', '2022-07-11 09:20:45');
-INSERT INTO `log` VALUES (2175, '启用代理', 'GET', '/api/proxy/start', '192.168.0.101', '200 OK', 248, 'admin', '2022-07-11 09:20:46');
-INSERT INTO `log` VALUES (2176, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 250, 'admin', '2022-07-11 09:25:35');
-INSERT INTO `log` VALUES (2177, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 43, 'admin', '2022-07-11 09:25:40');
-INSERT INTO `log` VALUES (2178, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 191, 'admin', '2022-07-11 09:25:55');
-INSERT INTO `log` VALUES (2179, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 165, 'admin', '2022-07-11 11:42:45');
-INSERT INTO `log` VALUES (2180, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 279, 'admin', '2022-07-20 16:24:21');
-INSERT INTO `log` VALUES (2181, '停用代理', 'GET', '/api/proxy/stop', '127.0.0.1', '200 OK', 23, 'admin', '2022-07-20 16:39:55');
-INSERT INTO `log` VALUES (2182, '登录', 'GET', '/api/user/login', '192.168.0.110', '200 OK', 141, 'admin', '2022-07-20 16:47:49');
-INSERT INTO `log` VALUES (2183, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 137, 'admin', '2022-07-20 17:51:46');
-INSERT INTO `log` VALUES (2184, '启用代理', 'GET', '/api/proxy/start', '192.168.0.101', '200 OK', 94, 'admin', '2022-07-20 17:51:53');
-INSERT INTO `log` VALUES (2185, '启用代理', 'GET', '/api/proxy/start', '192.168.0.101', '200 OK', 100, 'admin', '2022-07-20 17:52:01');
-INSERT INTO `log` VALUES (2186, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 37, 'admin', '2022-07-20 17:52:03');
-INSERT INTO `log` VALUES (2187, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 131, 'admin', '2022-07-20 17:52:19');
-INSERT INTO `log` VALUES (2188, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 151, 'admin', '2022-07-20 17:53:49');
-INSERT INTO `log` VALUES (2189, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 142, 'admin', '2022-07-20 18:03:44');
-INSERT INTO `log` VALUES (2190, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 267, 'admin', '2022-07-21 08:57:20');
-INSERT INTO `log` VALUES (2191, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.101', '200 OK', 36, 'admin', '2022-07-21 08:57:25');
-INSERT INTO `log` VALUES (2192, '保存代理', 'POST', '/api/proxy/save', '192.168.0.101', '200 OK', 321, 'admin', '2022-07-21 08:57:32');
-INSERT INTO `log` VALUES (2193, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 417, 'admin', '2022-07-21 14:09:45');
-INSERT INTO `log` VALUES (2194, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '127.0.0.1', '200 OK', 47, 'admin', '2022-07-21 14:11:03');
-INSERT INTO `log` VALUES (2195, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 247, 'admin', '2022-07-21 14:12:55');
-INSERT INTO `log` VALUES (2196, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000012/sync', '127.0.0.1', '200 OK', 8, 'admin', '2022-07-21 14:13:00');
-INSERT INTO `log` VALUES (2197, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 21, 'admin', '2022-07-21 14:13:02');
-INSERT INTO `log` VALUES (2198, '开始视频回放', 'GET', '/api/playback/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 28, 'admin', '2022-07-21 14:13:29');
-INSERT INTO `log` VALUES (2199, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 11, 'admin', '2022-07-21 14:13:43');
-INSERT INTO `log` VALUES (2200, '停止点播', 'GET', '/api/play/stop/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 16095, 'admin', '2022-07-21 14:14:02');
-INSERT INTO `log` VALUES (2201, '停止视频回放', 'GET', '/api/playback/stop/34020000001320000012/34020000001320000014/47869B58', '127.0.0.1', '200 OK', 20245, 'admin', '2022-07-21 14:14:02');
-INSERT INTO `log` VALUES (2202, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 137, 'admin', '2022-07-21 14:19:09');
-INSERT INTO `log` VALUES (2203, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.101', '200 OK', 12, 'admin', '2022-07-21 14:19:16');
-INSERT INTO `log` VALUES (2204, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 244, 'admin', '2022-07-21 15:58:51');
-INSERT INTO `log` VALUES (2205, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '127.0.0.1', '200 OK', 31, 'admin', '2022-07-21 15:58:55');
-INSERT INTO `log` VALUES (2206, '登录', 'GET', '/api/user/login', '192.168.0.110', '200 OK', 145, 'admin', '2022-07-21 16:00:35');
-INSERT INTO `log` VALUES (2207, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.110', '200 OK', 14, 'admin', '2022-07-21 16:00:38');
-INSERT INTO `log` VALUES (2208, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.110', '200 OK', 11, 'admin', '2022-07-21 16:01:09');
-INSERT INTO `log` VALUES (2209, '登录', 'GET', '/api/user/login', '192.168.0.101', '200 OK', 166, 'admin', '2022-07-21 16:03:58');
-INSERT INTO `log` VALUES (2210, '开始点播', 'GET', '/api/play/start/34020000001320000012/34020000001320000014', '192.168.0.101', '200 OK', 10, 'admin', '2022-07-21 16:04:02');
-INSERT INTO `log` VALUES (2211, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 151, 'admin', '2022-07-21 16:28:06');
-INSERT INTO `log` VALUES (2212, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '127.0.0.1', '200 OK', 28, 'admin', '2022-07-21 16:28:18');
-INSERT INTO `log` VALUES (2213, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000013/delete', '127.0.0.1', '200 OK', 23, 'admin', '2022-07-21 16:29:15');
-INSERT INTO `log` VALUES (2214, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 142, 'admin', '2022-07-21 16:30:09');
-INSERT INTO `log` VALUES (2215, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 326, 'admin', '2022-07-21 16:46:08');
-INSERT INTO `log` VALUES (2216, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000012/delete', '127.0.0.1', '200 OK', 36, 'admin', '2022-07-21 16:46:12');
-INSERT INTO `log` VALUES (2217, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '127.0.0.1', '200 OK', 23, 'admin', '2022-07-21 16:46:41');
-INSERT INTO `log` VALUES (2218, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 251, 'admin', '2022-07-21 17:04:12');
-INSERT INTO `log` VALUES (2219, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 1229, 'admin', '2022-07-21 17:09:28');
-INSERT INTO `log` VALUES (2220, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 302, 'admin', '2022-07-21 17:10:19');
-INSERT INTO `log` VALUES (2221, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 204, 'admin', '2022-07-21 17:12:16');
-INSERT INTO `log` VALUES (2222, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 162, 'admin', '2022-07-21 17:12:23');
-INSERT INTO `log` VALUES (2223, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 41, 'admin', '2022-07-21 17:13:28');
-INSERT INTO `log` VALUES (2224, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 76, 'admin', '2022-07-21 17:15:32');
-INSERT INTO `log` VALUES (2225, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 193, 'admin', '2022-07-21 17:16:15');
-INSERT INTO `log` VALUES (2226, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 2003, 'admin', '2022-07-21 17:16:57');
-INSERT INTO `log` VALUES (2227, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 265, 'admin', '2022-07-21 17:18:34');
-INSERT INTO `log` VALUES (2228, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 153, 'admin', '2022-07-21 17:18:49');
-INSERT INTO `log` VALUES (2229, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 158, 'admin', '2022-07-21 17:19:29');
-INSERT INTO `log` VALUES (2230, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 190, 'admin', '2022-07-21 17:20:51');
-INSERT INTO `log` VALUES (2231, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 160, 'admin', '2022-07-21 17:21:13');
-INSERT INTO `log` VALUES (2232, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000001/sync', '192.168.0.106', '200 OK', 7, 'admin', '2022-07-21 17:21:41');
-INSERT INTO `log` VALUES (2233, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 200, 'admin', '2022-07-21 17:21:55');
-INSERT INTO `log` VALUES (2234, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 373, 'admin', '2022-07-21 17:31:40');
-INSERT INTO `log` VALUES (2235, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 64, 'admin', '2022-07-21 17:31:48');
-INSERT INTO `log` VALUES (2236, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 123, 'admin', '2022-07-21 17:31:56');
-INSERT INTO `log` VALUES (2237, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 33, 'admin', '2022-07-21 17:33:52');
-INSERT INTO `log` VALUES (2238, '[设备查询] 移除设备', 'DELETE', '/api/device/query/devices/34020000001320000001/delete', '192.168.0.106', '200 OK', 115, 'admin', '2022-07-21 17:34:02');
-INSERT INTO `log` VALUES (2239, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 43, 'admin', '2022-07-21 17:34:57');
-INSERT INTO `log` VALUES (2240, '停止点播', 'GET', '/api/play/stop/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 91, 'admin', '2022-07-21 17:35:05');
-INSERT INTO `log` VALUES (2241, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 28, 'admin', '2022-07-21 17:38:48');
-INSERT INTO `log` VALUES (2242, '停止点播', 'GET', '/api/play/stop/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 73, 'admin', '2022-07-21 17:38:58');
-INSERT INTO `log` VALUES (2243, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 191, 'admin', '2022-07-22 15:59:03');
-INSERT INTO `log` VALUES (2244, '启用代理', 'GET', '/api/proxy/start', '192.168.0.106', '200 OK', 4965, 'admin', '2022-07-22 16:04:34');
-INSERT INTO `log` VALUES (2245, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.106', '200 OK', 446, 'admin', '2022-07-22 16:04:50');
-INSERT INTO `log` VALUES (2246, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 187, 'admin', '2022-07-25 09:02:43');
-INSERT INTO `log` VALUES (2247, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000001/sync', '192.168.0.106', '200 OK', 5, 'admin', '2022-07-25 09:03:11');
-INSERT INTO `log` VALUES (2248, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 28, 'admin', '2022-07-25 09:08:48');
-INSERT INTO `log` VALUES (2249, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 189, 'admin', '2022-07-25 14:34:54');
-INSERT INTO `log` VALUES (2250, '开始点播', 'GET', '/api/play/start/34020000001320000001/34020000001320000001', '192.168.0.106', '200 OK', 25, 'admin', '2022-07-25 14:54:18');
-INSERT INTO `log` VALUES (2251, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 186, 'admin', '2022-07-25 15:39:12');
-INSERT INTO `log` VALUES (2252, '启用代理', 'GET', '/api/proxy/start', '192.168.0.106', '200 OK', 4529, 'admin', '2022-07-25 15:39:27');
-INSERT INTO `log` VALUES (2253, '停用代理', 'GET', '/api/proxy/stop', '192.168.0.106', '200 OK', 234, 'admin', '2022-07-25 15:39:34');
-INSERT INTO `log` VALUES (2254, '登录', 'GET', '/api/user/login', '192.168.0.106', '200 OK', 185, 'admin', '2022-07-25 16:30:06');
-INSERT INTO `log` VALUES (2255, '移除代理', 'DELETE', '/api/proxy/del', '192.168.0.106', '200 OK', 127, 'admin', '2022-07-25 16:30:10');
-INSERT INTO `log` VALUES (2256, '保存代理', 'POST', '/api/proxy/save', '192.168.0.106', '200 OK', 2400, 'admin', '2022-07-25 16:30:26');
-INSERT INTO `log` VALUES (2257, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 199, 'admin', '2022-08-17 10:06:24');
-INSERT INTO `log` VALUES (2258, '登录', 'GET', '/api/user/login', '192.168.0.112', '200 OK', 225, 'admin', '2022-08-17 10:20:47');
-INSERT INTO `log` VALUES (2259, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000001/sync', '192.168.0.112', '200 OK', 9, 'admin', '2022-08-17 10:35:52');
-INSERT INTO `log` VALUES (2260, '登录', 'GET', '/api/user/login', '192.168.0.112', '200 OK', 226, 'admin', '2022-08-17 15:12:04');
-INSERT INTO `log` VALUES (2261, '登录', 'GET', '/api/user/login', '192.168.0.112', '200 OK', 191, 'admin', '2022-08-18 15:56:15');
-INSERT INTO `log` VALUES (2262, '登录', 'GET', '/api/user/login', '192.168.0.112', '200 OK', 213, 'admin', '2022-08-18 17:13:13');
-INSERT INTO `log` VALUES (2263, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000001/sync', '192.168.0.112', '200 OK', 4, 'admin', '2022-08-18 17:23:58');
-INSERT INTO `log` VALUES (2264, '登录', 'GET', '/api/user/login', '127.0.0.1', '200 OK', 197, 'admin', '2022-08-18 17:35:45');
-INSERT INTO `log` VALUES (2265, '登录', 'GET', '/api/user/login', '192.168.0.112', '200 OK', 210, 'admin', '2022-08-18 18:00:16');
-INSERT INTO `log` VALUES (2266, '[设备查询] 同步设备通道', 'POST', '/api/device/query/devices/34020000001320000001/sync', '192.168.0.112', '200 OK', 3, 'admin', '2022-08-18 18:00:31');
-
--- ----------------------------
--- Table structure for media_server
--- ----------------------------
-DROP TABLE IF EXISTS `media_server`;
-CREATE TABLE `media_server`  (
-  `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `hookIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `sdpIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `streamIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `httpPort` int(0) NOT NULL,
-  `httpSSlPort` int(0) NOT NULL,
-  `rtmpPort` int(0) NOT NULL,
-  `rtmpSSlPort` int(0) NOT NULL,
-  `rtpProxyPort` int(0) NOT NULL,
-  `rtspPort` int(0) NOT NULL,
-  `rtspSSLPort` int(0) NOT NULL,
-  `autoConfig` int(0) NOT NULL,
-  `secret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `streamNoneReaderDelayMS` int(0) NOT NULL,
-  `rtpEnable` int(0) NOT NULL,
-  `rtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `sendRtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `recordAssistPort` int(0) NOT NULL,
-  `defaultServer` int(0) NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `hookAliveInterval` int(0) NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `media_server_i`(`ip`, `httpPort`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of media_server
--- ----------------------------
-INSERT INTO `media_server` VALUES ('your_server_id', '192.168.0.119', '192.168.0.105', '192.168.0.119', '192.168.0.119', 8880, 8443, 1935, 0, 10000, 8854, 0, 1, '035c73f7-bb6b-4889-a715-d9eb2d1925cc', 10000, 1, '30000,30500', '30000,30500', 18081, 1, '2022-07-21 17:31:06', '2022-07-21 17:31:06', 10);
-
--- ----------------------------
--- Table structure for parent_platform
--- ----------------------------
-DROP TABLE IF EXISTS `parent_platform`;
-CREATE TABLE `parent_platform`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `enable` int(0) NULL DEFAULT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `serverGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `serverGBDomain` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `serverIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `serverPort` int(0) NULL DEFAULT NULL,
-  `deviceGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `deviceIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `devicePort` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `expires` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `keepTimeout` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `characterSet` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `ptz` int(0) NULL DEFAULT NULL,
-  `rtcp` int(0) NULL DEFAULT NULL,
-  `status` bit(1) NULL DEFAULT NULL,
-  `shareAllLiveStream` int(0) NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `parent_platform_id_uindex`(`id`) USING BTREE,
-  UNIQUE INDEX `parent_platform_pk`(`serverGBId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 32 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of parent_platform
--- ----------------------------
-INSERT INTO `parent_platform` VALUES (31, 1, '测试数据', '34020000002000000002', '3402000002', '192.168.0.114', 5060, '34020000002000000001', '192.168.0.102', '5060', '34020000002000000001', '12345678', '300', '60', 'UDP', 'GB2312', '34020000002000000002', 1, 0, b'0', 1);
-
--- ----------------------------
--- Table structure for platform_catalog
--- ----------------------------
-DROP TABLE IF EXISTS `platform_catalog`;
-CREATE TABLE `platform_catalog`  (
-  `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for platform_gb_channel
--- ----------------------------
-DROP TABLE IF EXISTS `platform_gb_channel`;
-CREATE TABLE `platform_gb_channel`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `deviceChannelId` int(0) NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 60 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of platform_gb_channel
--- ----------------------------
-INSERT INTO `platform_gb_channel` VALUES (47, '', '', 0);
-
--- ----------------------------
--- Table structure for platform_gb_stream
--- ----------------------------
-DROP TABLE IF EXISTS `platform_gb_stream`;
-CREATE TABLE `platform_gb_stream`  (
-  `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `gbStreamId` int(0) NOT NULL,
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `platform_gb_stream_pk`(`platformId`, `catalogId`, `gbStreamId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 301208 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for stream_proxy
--- ----------------------------
-DROP TABLE IF EXISTS `stream_proxy`;
-CREATE TABLE `stream_proxy`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `url` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `src_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `dst_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `timeout_ms` int(0) NULL DEFAULT NULL,
-  `ffmpeg_cmd_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `rtp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `enable_hls` bit(1) NULL DEFAULT NULL,
-  `enable_mp4` bit(1) NULL DEFAULT NULL,
-  `enable` bit(1) NOT NULL,
-  `status` bit(1) NOT NULL,
-  `enable_remove_none_reader` bit(1) NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `stream_proxy_pk`(`app`, `stream`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 70 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for stream_push
--- ----------------------------
-DROP TABLE IF EXISTS `stream_push`;
-CREATE TABLE `stream_push`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `totalReaderCount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `originType` int(0) NULL DEFAULT NULL,
-  `originTypeStr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  `createStamp` bigint(0) NULL DEFAULT NULL,
-  `aliveSecond` int(0) NULL DEFAULT NULL,
-  `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `stream_push_pk`(`app`, `stream`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 300817 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for user
--- ----------------------------
-DROP TABLE IF EXISTS `user`;
-CREATE TABLE `user`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `roleId` int(0) NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE INDEX `user_username_uindex`(`username`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user
--- ----------------------------
-INSERT INTO `user` VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 1, '2021 - 04 - 13 14:14:57', '2021 - 04 - 13 14:14:57');
-
--- ----------------------------
--- Table structure for user_role
--- ----------------------------
-DROP TABLE IF EXISTS `user_role`;
-CREATE TABLE `user_role`  (
-  `id` int(0) NOT NULL AUTO_INCREMENT,
-  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `authority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user_role
--- ----------------------------
-INSERT INTO `user_role` VALUES (1, 'admin', '0', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
-
-SET FOREIGN_KEY_CHECKS = 1;
diff --git "a/sql/\344\277\241\345\267\236\345\210\206\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml" "b/sql/\344\277\241\345\267\236\345\210\206\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml"
deleted file mode 100644
index 72dcee4..0000000
--- "a/sql/\344\277\241\345\267\236\345\210\206\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml"
+++ /dev/null
@@ -1,99 +0,0 @@
-spring:
-  # [可选]上传文件大小限制
-  servlet:
-    multipart:
-      max-file-size: 10MB
-      max-request-size: 100MB
-  # REDIS数据库配置
-  redis:
-    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-    host: 127.0.0.1
-    # [必须修改] 端口号
-    port: 6379
-    # [可选] 数据库 DB
-    database: 6
-    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-    password:
-    # [可选] 超时时间
-    timeout: 10000
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    # mysql数据源
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://10.141.11.11:3306/videos?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowPublicKeyRetrieval=true
-    username: root
-    password: srjw@2023
-    druid:
-      initialSize: 10                       # 连接池初始化连接数
-      maxActive: 200                        # 连接池最大连接数
-      minIdle: 5                            # 连接池最小空闲连接数
-      maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所\下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
-      keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
-      validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
-      testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
-      testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
-      timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
-      minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
-      filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
-      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
-      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
-      #stat-view-servlet.url-pattern: /admin/druid/*
-
-#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-  port: 18080
-
-# 作为28181服务器的配置
-sip:
-  monitor-ip: 0.0.0.0
-  # [必须修改] 本机的IP
-  ip: 10.141.11.11
-  # [可选] 28181服务监听的端口
-  port: 5060
-  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-  # 后两位为行业编码,定义参照附录D.3
-  # 3701020049标识山东济南历下区 信息行业接入
-  # [可选]
-  domain: 3402000000
-  # [可选]
-  id: 34020000002000000001
-  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-  password:
-
-#zlm 默认服务器配置
-media:
-  id: your_server_id
-  # [必须修改] zlm服务器的内网IP
-  ip: 10.141.11.11
-  # [必须修改] zlm服务器的http.port
-  http-port: 8880
-  # [可选] zlm服务器的hook.admin_params=secret
-  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-  rtp:
-    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-    enable: true
-    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
-    port-range: 30000,30500 # 端口范围
-    # [可选] 国标级联在此范围内选择端口发送媒体流,
-    send-port-range: 30000,30500 # 端口范围
-  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-  record-assist-port: 18081
-# [可选] 日志配置, 一般不需要改
-logging:
-  config: classpath:logback-spring-local.xml
-user-settings:
-  play-timeout: 5000
-  # 推流直播是否录制
-  record-push-live: true
-  # 国标是否录制
-  record-sip: true
-# 版本信息, 不需修改
-version:
-  version: "@project.version@"
-  description: "@project.description@"
-  artifact-id: "@project.artifactId@"
diff --git "a/sql/\345\270\202\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml" "b/sql/\345\270\202\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml"
deleted file mode 100644
index ea329c5..0000000
--- "a/sql/\345\270\202\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266.yml"
+++ /dev/null
@@ -1,99 +0,0 @@
-spring:
-  # [可选]上传文件大小限制
-  servlet:
-    multipart:
-      max-file-size: 10MB
-      max-request-size: 100MB
-  # REDIS数据库配置
-  redis:
-    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-    host: 127.0.0.1
-    # [必须修改] 端口号
-    port: 6385
-    # [可选] 数据库 DB
-    database: 6
-    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-    password:
-    # [可选] 超时时间
-    timeout: 10000
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    # mysql数据源
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://36.14.131.102:3306/videos?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowPublicKeyRetrieval=true
-    username: root
-    password: ft@135246
-    druid:
-      initialSize: 10                       # 连接池初始化连接数
-      maxActive: 200                        # 连接池最大连接数
-      minIdle: 5                            # 连接池最小空闲连接数
-      maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所\下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
-      keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
-      validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
-      testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
-      testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
-      timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
-      minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
-      filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
-      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
-      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
-      #stat-view-servlet.url-pattern: /admin/druid/*
-
-#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-  port: 18085
-
-# 作为28181服务器的配置
-sip:
-  monitor-ip: 0.0.0.0
-  # [必须修改] 本机的IP
-  ip: 36.14.131.102
-  # [可选] 28181服务监听的端口
-  port: 5060
-  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-  # 后两位为行业编码,定义参照附录D.3
-  # 3701020049标识山东济南历下区 信息行业接入
-  # [可选]
-  domain: 3402000000
-  # [可选]
-  id: 34020000002000000001
-  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-  password: 12345678
-
-#zlm 默认服务器配置
-media:
-  id: your_server_id
-  # [必须修改] zlm服务器的内网IP
-  ip: 36.14.131.102
-  # [必须修改] zlm服务器的http.port
-  http-port: 8880
-  # [可选] zlm服务器的hook.admin_params=secret
-  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-  rtp:
-    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-    enable: true
-    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
-    port-range: 30000,30500 # 端口范围
-    # [可选] 国标级联在此范围内选择端口发送媒体流,
-    send-port-range: 30000,30500 # 端口范围
-  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-  record-assist-port: 18081
-# [可选] 日志配置, 一般不需要改
-logging:
-  config: classpath:logback-spring-local.xml
-user-settings:
-  play-timeout: 5000
-  # 推流直播是否录制
-  record-push-live: true
-  # 国标是否录制
-  record-sip: true
-# 版本信息, 不需修改
-version:
-  version: "@project.version@"
-  description: "@project.description@"
-  artifact-id: "@project.artifactId@"
diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
deleted file mode 100644
index 8d43314..0000000
--- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.genersoft.iot.vmp;
-
-import java.util.logging.LogManager;
-
-import com.genersoft.iot.vmp.conf.druid.EnableDruidSupport;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.ServletComponentScan;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import springfox.documentation.oas.annotations.EnableOpenApi;
-
-/**
- *
- */
-@ServletComponentScan("com.genersoft.iot.vmp.conf")
-@SpringBootApplication
-@EnableScheduling
-@EnableOpenApi
-@EnableDruidSupport
-public class VManageBootstrap extends LogManager {
-	private static String[] args;
-	private static ConfigurableApplicationContext context;
-	public static void main(String[] args) {
-		VManageBootstrap.args = args;
-		VManageBootstrap.context = SpringApplication.run(VManageBootstrap.class, args);
-	}
-	// 项目重启
-	public static void restart() {
-		context.close();
-		VManageBootstrap.context = SpringApplication.run(VManageBootstrap.class, args);
-	}
-	
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java b/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java
deleted file mode 100644
index ec2a725..0000000
--- a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.genersoft.iot.vmp.common;
-
-public class ApiSaveConstant {
-
-    public static String getVal(String key) {
-        String[] keyItemArray = key.split("/");
-        if (keyItemArray.length <= 1 || !"api".equals(keyItemArray[1])) {
-            return null;
-        }
-        if (keyItemArray.length >= 4) {
-            switch (keyItemArray[2]) {
-                case "alarm":
-                    if ("delete".equals(keyItemArray[3])) {
-                        return "删除报警";
-                    }
-                    break;
-                case "device":
-                    switch (keyItemArray[3]) {
-                        case "config":
-                            if (keyItemArray.length >= 5 && "basicParam".equals(keyItemArray[4])) {
-                                return "[设备配置] 基本配置设置命令";
-                            }
-                            break;
-                        case "control":
-                            switch (keyItemArray[4]) {
-                                case "teleboot":
-                                    return "[设备控制] 远程启动";
-                                case "record":
-                                    return "[设备控制] 录像控制";
-                                case "guard":
-                                    return "[设备控制] 布防/撤防命令";
-                                case "reset_alarm":
-                                    return "[设备控制] 报警复位";
-                                case "i_frame":
-                                    return "[设备控制] 强制关键帧";
-                                case "home_position":
-                                    return "[设备控制] 看守位控制";
-                            }
-                            break;
-                            case "query":
-                                if (keyItemArray.length <= 5) return null;
-                                switch (keyItemArray[4]) {
-                                    case "devices":
-                                        if (keyItemArray.length < 7) return null;
-                                        switch (keyItemArray[6]) {
-                                            case "sync":
-                                                return "[设备查询] 同步设备通道";
-                                            case "delete":
-                                                return "[设备查询] 移除设备";
-                                        }
-                                        break;
-                                    case "channel":
-                                        return "[设备查询] 更新通道信息";
-                                    case "transport":
-                                        return "[设备查询] 修改数据流传输模式";
-                                }
-                                break;
-                            }
-                case "gbStream":
-                    switch (keyItemArray[3]) {
-                        case "del":
-                            return "移除通道与国标的关联";
-                        case "add":
-                            return "添加通道与国标的关联";
-                    }
-                    break;
-                case "media":
-                    break;
-                case "position":
-                    if ("subscribe".equals(keyItemArray[3])) {
-                        return "订阅位置信息";
-                    }
-                    break;
-                case "platform":
-                    switch (keyItemArray[3]) {
-                        case "save":
-                            return "添加上级平台";
-                        case "delete":
-                            return "移除上级平台";
-                        case "update_channel_for_gb":
-                            return "向上级平台添加国标通道";
-                        case "del_channel_for_gb":
-                            return "从上级平台移除国标通道";
-                    }
-                    break;
-                case "platform_gb_stream":
-                    break;
-                case "play":
-                    switch (keyItemArray[3]) {
-                        case "start":
-                            return "开始点播";
-                        case "stop":
-                            return "停止点播";
-                        case "convert":
-                            return "转码";
-                        case "convertStop":
-                            return "结束转码";
-                        case "broadcast":
-                            return "语音广播";
-                    }
-                    break;
-                case "download":
-                    switch (keyItemArray[3]) {
-                        case "start":
-                            return "开始历史媒体下载";
-                        case "stop":
-                            return "停止历史媒体下载";
-                    }
-                    break;
-                case "playback":
-                    switch (keyItemArray[3]) {
-                        case "start":
-                            return "开始视频回放";
-                        case "stop":
-                            return "停止视频回放";
-                    }
-                    break;
-                case "ptz":
-                    switch (keyItemArray[3]) {
-                        case "control":
-                            return "云台控制";
-                        case "front_end_command":
-                            return "通用前端控制命令";
-                    }
-                    break;
-                case "gb_record":
-                    break;
-                case "onvif":
-                    break;
-                case "server":
-                    if ("restart".equals(keyItemArray[3])) {
-                        return "重启流媒体服务";
-                    }
-                    break;
-                case "proxy":
-                    switch (keyItemArray[3]) {
-                        case "save":
-                            return "保存代理";
-                        case "del":
-                            return "移除代理";
-                        case "start":
-                            return "启用代理";
-                        case "stop":
-                            return "停用代理";
-                    }
-                    break;
-                case "push":
-                    switch (keyItemArray[3]) {
-                        case "save_to_gb":
-                            return "将推流添加到国标";
-                        case "remove_form_gb":
-                            return "将推流移出到国标";
-                    }
-                    break;
-                case "user":
-                    switch (keyItemArray[3]) {
-                        case "login":
-                            return "登录";
-                        case "changePassword":
-                            return "修改密码";
-                        case "add":
-                            return "添加用户";
-                        case "delete":
-                            return "删除用户";
-                    }
-                    break;
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
deleted file mode 100644
index 0626384..0000000
--- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package com.genersoft.iot.vmp.common;
-
-import com.alibaba.fastjson.JSONArray;
-
-public class StreamInfo {
-
-    private String app;
-    private String stream;
-    private String deviceID;
-    private String channelId;
-    private String flv;
-    private String https_flv;
-    private String ws_flv;
-    private String wss_flv;
-    private String fmp4;
-    private String https_fmp4;
-    private String ws_fmp4;
-    private String wss_fmp4;
-    private String hls;
-    private String https_hls;
-    private String ws_hls;
-    private String wss_hls;
-    private String ts;
-    private String https_ts;
-    private String ws_ts;
-    private String wss_ts;
-    private String rtmp;
-    private String rtmps;
-    private String rtsp;
-    private String rtsps;
-    private String rtc;
-    private String mediaServerId;
-    private Object tracks;
-
-    public static class TransactionInfo{
-        public String callId;
-        public String localTag;
-        public String remoteTag;
-        public String branch;
-    }
-
-    private TransactionInfo transactionInfo;
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getDeviceID() {
-        return deviceID;
-    }
-
-    public void setDeviceID(String deviceID) {
-        this.deviceID = deviceID;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-
-    public String getFlv() {
-        return flv;
-    }
-
-    public void setFlv(String flv) {
-        this.flv = flv;
-    }
-
-    public String getWs_flv() {
-        return ws_flv;
-    }
-
-    public void setWs_flv(String ws_flv) {
-        this.ws_flv = ws_flv;
-    }
-
-    public String getRtmp() {
-        return rtmp;
-    }
-
-    public void setRtmp(String rtmp) {
-        this.rtmp = rtmp;
-    }
-
-    public String getHls() {
-        return hls;
-    }
-
-    public void setHls(String hls) {
-        this.hls = hls;
-    }
-
-    public String getRtsp() {
-        return rtsp;
-    }
-
-    public void setRtsp(String rtsp) {
-        this.rtsp = rtsp;
-    }
-
-    public Object getTracks() {
-        return tracks;
-    }
-
-    public void setTracks(Object tracks) {
-        this.tracks = tracks;
-    }
-
-    public String getFmp4() {
-        return fmp4;
-    }
-
-    public void setFmp4(String fmp4) {
-        this.fmp4 = fmp4;
-    }
-
-    public String getWs_fmp4() {
-        return ws_fmp4;
-    }
-
-    public void setWs_fmp4(String ws_fmp4) {
-        this.ws_fmp4 = ws_fmp4;
-    }
-
-    public String getWs_hls() {
-        return ws_hls;
-    }
-
-    public void setWs_hls(String ws_hls) {
-        this.ws_hls = ws_hls;
-    }
-
-    public String getTs() {
-        return ts;
-    }
-
-    public void setTs(String ts) {
-        this.ts = ts;
-    }
-
-    public String getWs_ts() {
-        return ws_ts;
-    }
-
-    public void setWs_ts(String ws_ts) {
-        this.ws_ts = ws_ts;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getRtc() {
-        return rtc;
-    }
-
-    public void setRtc(String rtc) {
-        this.rtc = rtc;
-    }
-
-    public TransactionInfo getTransactionInfo() {
-        return transactionInfo;
-    }
-
-    public void setTransactionInfo(TransactionInfo transactionInfo) {
-        this.transactionInfo = transactionInfo;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public String getHttps_flv() {
-        return https_flv;
-    }
-
-    public void setHttps_flv(String https_flv) {
-        this.https_flv = https_flv;
-    }
-
-    public String getWss_flv() {
-        return wss_flv;
-    }
-
-    public void setWss_flv(String wss_flv) {
-        this.wss_flv = wss_flv;
-    }
-
-    public String getWss_fmp4() {
-        return wss_fmp4;
-    }
-
-    public void setWss_fmp4(String wss_fmp4) {
-        this.wss_fmp4 = wss_fmp4;
-    }
-
-    public String getWss_hls() {
-        return wss_hls;
-    }
-
-    public void setWss_hls(String wss_hls) {
-        this.wss_hls = wss_hls;
-    }
-
-    public String getWss_ts() {
-        return wss_ts;
-    }
-
-    public void setWss_ts(String wss_ts) {
-        this.wss_ts = wss_ts;
-    }
-
-    public String getRtmps() {
-        return rtmps;
-    }
-
-    public void setRtmps(String rtmps) {
-        this.rtmps = rtmps;
-    }
-
-    public String getRtsps() {
-        return rtsps;
-    }
-
-    public void setRtsps(String rtsps) {
-        this.rtsps = rtsps;
-    }
-
-    public String getHttps_hls() {
-        return https_hls;
-    }
-
-    public void setHttps_hls(String https_hls) {
-        this.https_hls = https_hls;
-    }
-
-    public String getHttps_fmp4() {
-        return https_fmp4;
-    }
-
-    public void setHttps_fmp4(String https_fmp4) {
-        this.https_fmp4 = https_fmp4;
-    }
-
-    public String getHttps_ts() {
-        return https_ts;
-    }
-
-    public void setHttps_ts(String https_ts) {
-        this.https_ts = https_ts;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java b/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java
deleted file mode 100644
index 81a93ac..0000000
--- a/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.genersoft.iot.vmp.common;
-
-public class SystemInfoDto<T> {
-    private String time;
-    private T data;
-
-    public String getTime() {
-        return time;
-    }
-
-    public void setTime(String time) {
-        this.time = time;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VersionPo.java b/src/main/java/com/genersoft/iot/vmp/common/VersionPo.java
deleted file mode 100644
index a7d8ce6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/common/VersionPo.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.genersoft.iot.vmp.common;
-
-import com.alibaba.fastjson.annotation.JSONField;
-
-public class VersionPo {
-    /**
-     * git的全版本号
-     */
-    @JSONField(name="GIT-Revision")
-    private String GIT_Revision;
-    /**
-     * maven版本
-     */
-    @JSONField(name = "Create-By")
-    private String Create_By;
-    /**
-     * git的分支
-     */
-    @JSONField(name = "GIT-BRANCH")
-    private String GIT_BRANCH;
-    /**
-     * git的url
-     */
-    @JSONField(name = "GIT-URL")
-    private String GIT_URL;
-    /**
-     * 构建日期
-     */
-    @JSONField(name = "BUILD-DATE")
-    private String BUILD_DATE;
-    /**
-     * 项目名称 配合pom使用
-     */
-    @JSONField(name = "artifactId")
-    private String artifactId;
-    /**
-     * git局部版本号
-     */
-    @JSONField(name = "GIT-Revision-SHORT")
-    private String GIT_Revision_SHORT;
-    /**
-     * 项目的版本如2.0.1.0 配合pom使用
-     */
-    @JSONField(name = "version")
-    private String version;
-    /**
-     * 子系统名称
-     */
-    @JSONField(name = "project")
-    private String project;
-    /**
-     * jdk版本
-     */
-    @JSONField(name="Build_Jdk")
-    private String Build_Jdk;
-
-    public void setGIT_Revision(String GIT_Revision) {
-        this.GIT_Revision = GIT_Revision;
-    }
-
-    public void setCreate_By(String create_By) {
-        Create_By = create_By;
-    }
-
-    public void setGIT_BRANCH(String GIT_BRANCH) {
-        this.GIT_BRANCH = GIT_BRANCH;
-    }
-
-    public void setGIT_URL(String GIT_URL) {
-        this.GIT_URL = GIT_URL;
-    }
-
-    public void setBUILD_DATE(String BUILD_DATE) {
-        this.BUILD_DATE = BUILD_DATE;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public void setGIT_Revision_SHORT(String GIT_Revision_SHORT) {
-        this.GIT_Revision_SHORT = GIT_Revision_SHORT;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
-    public void setBuild_Jdk(String build_Jdk) {
-        Build_Jdk = build_Jdk;
-    }
-
-    public String getGIT_Revision() {
-        return GIT_Revision;
-    }
-
-    public String getCreate_By() {
-        return Create_By;
-    }
-
-    public String getGIT_BRANCH() {
-        return GIT_BRANCH;
-    }
-
-    public String getGIT_URL() {
-        return GIT_URL;
-    }
-
-    public String getBUILD_DATE() {
-        return BUILD_DATE;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public String getGIT_Revision_SHORT() {
-        return GIT_Revision_SHORT;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public String getProject() {
-        return project;
-    }
-
-    public String getBuild_Jdk() {
-        return Build_Jdk;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
deleted file mode 100644
index 73306c2..0000000
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.genersoft.iot.vmp.common;
-
-/**    
- * @description: 定义常量   
- * @author: swwheihei
- * @date:   2019年5月30日 下午3:04:04   
- *   
- */
-public class VideoManagerConstants {
-	
-	public static final String WVP_SERVER_PREFIX = "VMP_SIGNALLING_SERVER_INFO_";
-
-	public static final String WVP_SERVER_STREAM_PREFIX = "VMP_SIGNALLING_STREAM_";
-
-	public static final String MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_";
-
-	public static final String MEDIA_SERVER_KEEPALIVE_PREFIX = "VMP_MEDIA_SERVER_KEEPALIVE_";
-
-	public static final String MEDIA_SERVERS_ONLINE_PREFIX = "VMP_MEDIA_ONLINE_SERVERS_";
-
-	public static final String MEDIA_STREAM_PREFIX = "VMP_MEDIA_STREAM";
-
-	public static final String DEVICE_PREFIX = "VMP_DEVICE_";
-
-	public static final String CACHEKEY_PREFIX = "VMP_CHANNEL_";
-
-	public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_";
-
-	// 此处多了一个_,暂不修改
-	public static final String PLAYER_PREFIX = "VMP_PLAYER_";
-	public static final String PLAY_BLACK_PREFIX = "VMP_PLAYBACK_";
-	public static final String PLAY_INFO_PREFIX = "VMP_PLAY_INFO_";
-
-	public static final String DOWNLOAD_PREFIX = "VMP_DOWNLOAD_";
-
-	public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_";
-
-	public static final String PLATFORM_CATCH_PREFIX = "VMP_PLATFORM_CATCH_";
-
-	public static final String PLATFORM_REGISTER_PREFIX = "VMP_PLATFORM_REGISTER_";
-
-	public static final String PLATFORM_REGISTER_INFO_PREFIX = "VMP_PLATFORM_REGISTER_INFO_";
-
-	public static final String PLATFORM_SEND_RTP_INFO_PREFIX = "VMP_PLATFORM_SEND_RTP_INFO_";
-
-	public static final String EVENT_ONLINE_REGISTER = "1";
-	
-	public static final String EVENT_ONLINE_KEEPLIVE = "2";
-
-	public static final String EVENT_ONLINE_MESSAGE = "3";
-
-	public static final String EVENT_OUTLINE_UNREGISTER = "1";
-	
-	public static final String EVENT_OUTLINE_TIMEOUT = "2";
-
-	public static final String MEDIA_SSRC_USED_PREFIX = "VMP_MEDIA_USED_SSRC_";
-
-	public static final String MEDIA_TRANSACTION_USED_PREFIX = "VMP_MEDIA_TRANSACTION_";
-
-	public static final String SIP_CSEQ_PREFIX = "VMP_SIP_CSEQ_";
-
-	public static final String SIP_SN_PREFIX = "VMP_SIP_SN_";
-
-	public static final String SIP_SUBSCRIBE_PREFIX = "VMP_SIP_SUBSCRIBE_";
-
-	public static final String SYSTEM_INFO_CPU_PREFIX = "VMP_SYSTEM_INFO_CPU_";
-
-	public static final String SYSTEM_INFO_MEM_PREFIX = "VMP_SYSTEM_INFO_MEM_";
-
-	public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_";
-
-	//************************** redis 消息*********************************
-	public static final String WVP_MSG_STREAM_CHANGE_PREFIX = "WVP_MSG_STREAM_CHANGE_";
-	public static final String WVP_MSG_GPS_PREFIX = "VM_MSG_GPS";
-
-	//**************************    第三方  ****************************************
-	public static final String WVP_STREAM_GB_ID_PREFIX = "memberNo_";
-	public static final String WVP_STREAM_GPS_MSG_PREFIX = "WVP_STREAM_GPS_MSG_";
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ApiAccessFilter.java b/src/main/java/com/genersoft/iot/vmp/conf/ApiAccessFilter.java
deleted file mode 100644
index 08d030a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/ApiAccessFilter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.common.ApiSaveConstant;
-import com.genersoft.iot.vmp.conf.security.SecurityUtils;
-import com.genersoft.iot.vmp.service.ILogService;
-import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import javax.servlet.*;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-
-/**
- * @author lin
- */
-@WebFilter(filterName = "ApiAccessFilter", urlPatterns = "/api/*", asyncSupported=true)
-public class ApiAccessFilter extends OncePerRequestFilter {
-
-    private final static Logger logger = LoggerFactory.getLogger(ApiAccessFilter.class);
-
-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private ILogService logService;
-
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
-        String username = null;
-        if (SecurityUtils.getUserInfo() == null) {
-            username = servletRequest.getParameter("username");
-        }else {
-            username = SecurityUtils.getUserInfo().getUsername();
-        }
-        long start = System.currentTimeMillis(); // 请求进入时间
-        String uriName = ApiSaveConstant.getVal(servletRequest.getRequestURI());
-
-        filterChain.doFilter(servletRequest, servletResponse);
-
-        if (uriName != null && userSetup.getLogInDatebase()) {
-
-            LogDto logDto = new LogDto();
-            logDto.setName(uriName);
-            logDto.setUsername(username);
-            logDto.setAddress(servletRequest.getRemoteAddr());
-            logDto.setResult(HttpStatus.valueOf(servletResponse.getStatus()).toString());
-            logDto.setTiming(System.currentTimeMillis() - start);
-            logDto.setType(servletRequest.getMethod());
-            logDto.setUri(servletRequest.getRequestURI());
-            logDto.setCreateTime(format.format(System.currentTimeMillis()));
-            logService.add(logDto);
-//            logger.warn("[Api Access]  [{}] [{}] [{}] [{}] [{}] {}ms",
-//                    uriName, servletRequest.getMethod(), servletRequest.getRequestURI(), servletRequest.getRemoteAddr(), HttpStatus.valueOf(servletResponse.getStatus()),
-//                    System.currentTimeMillis() - start);
-
-        }
-    }
-
-    /**
-     * 获取IP地址
-     *
-     * @param request 请求
-     * @return request发起客户端的IP地址
-     */
-    private String getIP(HttpServletRequest request) {
-        if (request == null) {
-            return "0.0.0.0";
-        }
-
-        String Xip = request.getHeader("X-Real-IP");
-        String XFor = request.getHeader("X-Forwarded-For");
-
-        String UNKNOWN_IP = "unknown";
-        if (StringUtils.isNotEmpty(XFor) && !UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            //多次反向代理后会有多个ip值,第一个ip才是真实ip
-            int index = XFor.indexOf(",");
-            if (index != -1) {
-                return XFor.substring(0, index);
-            } else {
-                return XFor;
-            }
-        }
-
-        XFor = Xip;
-        if (StringUtils.isNotEmpty(XFor) && !UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            return XFor;
-        }
-
-        if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            XFor = request.getHeader("Proxy-Client-IP");
-        }
-        if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            XFor = request.getHeader("WL-Proxy-Client-IP");
-        }
-        if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            XFor = request.getHeader("HTTP_CLIENT_IP");
-        }
-        if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
-        }
-        if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
-            XFor = request.getRemoteAddr();
-        }
-        return XFor;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
deleted file mode 100644
index 80e39f5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ScheduledFuture;
-
-/**
- * 动态定时任务
- */
-@Component
-public class DynamicTask {
-
-    @Autowired
-    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
-
-    private Map<String, ScheduledFuture<?>> futureMap = new ConcurrentHashMap<>();
-
-    @Bean
-    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
-        return new ThreadPoolTaskScheduler();
-    }
-
-    /**
-     * 循环执行的任务
-     * @param key 任务ID
-     * @param task 任务
-     * @param cycleForCatalog 间隔
-     * @return
-     */
-    public String startCron(String key, Runnable task, int cycleForCatalog) {
-        stop(key);
-        // scheduleWithFixedDelay 必须等待上一个任务结束才开始计时period, cycleForCatalog表示执行的间隔
-        ScheduledFuture future = threadPoolTaskScheduler.scheduleWithFixedDelay(task, cycleForCatalog * 1000L);
-        futureMap.put(key, future);
-        return "startCron";
-    }
-
-    /**
-     * 延时任务
-     * @param key 任务ID
-     * @param task 任务
-     * @param delay 延时 /秒
-     * @return
-     */
-    public String startDelay(String key, Runnable task, int delay) {
-        stop(key);
-        Date starTime = new Date(System.currentTimeMillis() + delay * 1000);
-        // scheduleWithFixedDelay 必须等待上一个任务结束才开始计时period, cycleForCatalog表示执行的间隔
-        ScheduledFuture future = threadPoolTaskScheduler.schedule(task, starTime);
-        futureMap.put(key, future);
-        return "startCron";
-    }
-
-    public void stop(String key) {
-        if (futureMap.get(key) != null && !futureMap.get(key).isCancelled()) {
-            futureMap.get(key).cancel(true);
-        }
-    }
-
-    public boolean contains(String key) {
-        return futureMap.get(key) != null;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
deleted file mode 100644
index bdd1503..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.StringUtils;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-@Configuration("mediaConfig")
-public class MediaConfig{
-
-    // 修改必须配置,不再支持自动获取
-    @Value("${media.id}")
-    private String id;
-
-    @Value("${media.ip}")
-    private String ip;
-
-    @Value("${media.hook-ip:${sip.ip}}")
-    private String hookIp;
-
-    @Value("${sip.ip}")
-    private String sipIp;
-
-    @Value("${sip.domain}")
-    private String sipDomain;
-
-    @Value("${media.sdp-ip:${media.ip}}")
-    private String sdpIp;
-
-    @Value("${media.stream-ip:${media.ip}}")
-    private String streamIp;
-
-    @Value("${media.http-port}")
-    private Integer httpPort;
-
-    @Value("${media.http-ssl-port:0}")
-    private Integer httpSSlPort = 0;
-
-    @Value("${media.rtmp-port:0}")
-    private Integer rtmpPort = 0;
-
-    @Value("${media.rtmp-ssl-port:0}")
-    private Integer rtmpSSlPort = 0;
-
-    @Value("${media.rtp-proxy-port:0}")
-    private Integer rtpProxyPort = 0;
-
-    @Value("${media.rtsp-port:0}")
-    private Integer rtspPort = 0;
-
-    @Value("${media.rtsp-ssl-port:0}")
-    private Integer rtspSSLPort = 0;
-
-    @Value("${media.auto-config:true}")
-    private boolean autoConfig = true;
-
-    @Value("${media.secret}")
-    private String secret;
-
-    @Value("${media.stream-none-reader-delay-ms:10000}")
-    private int streamNoneReaderDelayMS = 10000;
-
-    @Value("${media.rtp.enable}")
-    private boolean rtpEnable;
-
-    @Value("${media.rtp.port-range}")
-    private String rtpPortRange;
-
-
-    @Value("${media.rtp.send-port-range}")
-    private String sendRtpPortRange;
-
-    @Value("${media.record-assist-port:0}")
-    private Integer recordAssistPort = 0;
-
-    public String getId() {
-        return id;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public String getHookIp() {
-        if (StringUtils.isEmpty(hookIp)){
-            return sipIp;
-        }else {
-            return hookIp;
-        }
-
-    }
-
-    public String getSipIp() {
-        if (sipIp == null) {
-            return this.ip;
-        }else {
-            return sipIp;
-        }
-    }
-
-    public int getHttpPort() {
-        return httpPort;
-    }
-
-    public int getHttpSSlPort() {
-        return httpSSlPort;
-    }
-
-    public int getRtmpPort() {
-        return rtmpPort;
-    }
-    
-    public int getRtmpSSlPort() {
-        return rtmpSSlPort;
-    }
-
-    public int getRtpProxyPort() {
-        if (rtpProxyPort == null) {
-            return 0;
-        }else {
-            return rtpProxyPort;
-        }
-
-    }
-
-    public int getRtspPort() {
-        return rtspPort;
-    }
-
-    public int getRtspSSLPort() {
-        return rtspSSLPort;
-    }
-
-    public boolean isAutoConfig() {
-        return autoConfig;
-    }
-
-    public String getSecret() {
-        return secret;
-    }
-
-    public int getStreamNoneReaderDelayMS() {
-        return streamNoneReaderDelayMS;
-    }
-
-    public boolean isRtpEnable() {
-        return rtpEnable;
-    }
-
-    public String getRtpPortRange() {
-        return rtpPortRange;
-    }
-    
-    public int getRecordAssistPort() {
-        return recordAssistPort;
-    }
-
-    public String getSdpIp() {
-        if (StringUtils.isEmpty(sdpIp)){
-            return ip;
-        }else {
-            return sdpIp;
-        }
-    }
-
-    public String getStreamIp() {
-        if (StringUtils.isEmpty(streamIp)){
-            return ip;
-        }else {
-            return streamIp;
-        }
-    }
-
-    public String getSipDomain() {
-        return sipDomain;
-    }
-
-    public String getSendRtpPortRange() {
-        return sendRtpPortRange;
-    }
-
-    public MediaServerItem getMediaSerItem(){
-        MediaServerItem mediaServerItem = new MediaServerItem();
-        mediaServerItem.setId(id);
-        mediaServerItem.setIp(ip);
-        mediaServerItem.setDefaultServer(true);
-        mediaServerItem.setHookIp(getHookIp());
-        mediaServerItem.setSdpIp(getSdpIp());
-        mediaServerItem.setStreamIp(getStreamIp());
-        mediaServerItem.setHttpPort(httpPort);
-        mediaServerItem.setHttpSSlPort(httpSSlPort);
-        mediaServerItem.setRtmpPort(rtmpPort);
-        mediaServerItem.setRtmpSSlPort(rtmpSSlPort);
-        mediaServerItem.setRtpProxyPort(getRtpProxyPort());
-        mediaServerItem.setRtspPort(rtspPort);
-        mediaServerItem.setRtspSSLPort(rtspSSLPort);
-        mediaServerItem.setAutoConfig(autoConfig);
-        mediaServerItem.setSecret(secret);
-        mediaServerItem.setStreamNoneReaderDelayMS(streamNoneReaderDelayMS);
-        mediaServerItem.setRtpEnable(rtpEnable);
-        mediaServerItem.setRtpPortRange(rtpPortRange);
-        mediaServerItem.setSendRtpPortRange(sendRtpPortRange);
-        mediaServerItem.setRecordAssistPort(recordAssistPort);
-        mediaServerItem.setHookAliveInterval(120);
-
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        mediaServerItem.setCreateTime(format.format(System.currentTimeMillis()));
-        mediaServerItem.setUpdateTime(format.format(System.currentTimeMillis()));
-
-        return mediaServerItem;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaStatusTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaStatusTimerTask.java
deleted file mode 100644
index cb9de7d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/MediaStatusTimerTask.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.alibaba.fastjson.JSONObject;
-import org.springframework.scheduling.annotation.Scheduled;
-
-/**
- * 定时向zlm同步媒体流状态
- */
-public class MediaStatusTimerTask {
-
-
-    @Scheduled(fixedRate = 2 * 1000)   //每3秒执行一次
-    public void execute(){
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
deleted file mode 100644
index a6facd5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import org.apache.catalina.connector.ClientAbortException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.mitre.dsmiley.httpproxy.ProxyServlet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.servlet.ServletRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.StringUtils;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.ConnectException;
-
-/**
- * @author lin
- */
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-@Configuration
-public class ProxyServletConfig {
-
-    private final static Logger logger = LoggerFactory.getLogger(ProxyServletConfig.class);
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Value("${server.port}")
-    private int serverPort;
-
-    @Bean
-    public ServletRegistrationBean zlmServletRegistrationBean(){
-        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ZlmProxyServlet(),"/zlm/*");
-        servletRegistrationBean.setName("zlm_Proxy");
-        servletRegistrationBean.addInitParameter("targetUri", "http://127.0.0.1:6080");
-        servletRegistrationBean.addUrlMappings();
-        if (logger.isDebugEnabled()) {
-            servletRegistrationBean.addInitParameter("log", "true");
-        }
-        return servletRegistrationBean;
-    }
-
-    class ZlmProxyServlet extends ProxyServlet{
-        @Override
-        protected String rewriteQueryStringFromRequest(HttpServletRequest servletRequest, String queryString) {
-            String queryStr = super.rewriteQueryStringFromRequest(servletRequest, queryString);
-            MediaServerItem mediaInfo = getMediaInfoByUri(servletRequest.getRequestURI());
-            if (mediaInfo != null) {
-                if (!StringUtils.isEmpty(queryStr)) {
-                    queryStr += "&secret=" + mediaInfo.getSecret();
-                }else {
-                    queryStr = "secret=" + mediaInfo.getSecret();
-                }
-            }
-            return queryStr;
-        }
-
-        /**
-         * 异常处理
-         */
-        @Override
-        protected void handleRequestException(HttpRequest proxyRequest, HttpResponse proxyResonse, Exception e){
-            try {
-                super.handleRequestException(proxyRequest, proxyResonse, e);
-            } catch (ServletException servletException) {
-                logger.error("zlm 代理失败: ", e);
-            } catch (IOException ioException) {
-                if (ioException instanceof ConnectException) {
-                    logger.error("zlm 连接失败");
-                } else if (ioException instanceof ClientAbortException) {
-                    logger.error("zlm: 用户已中断连接,代理终止");
-                } else {
-                    logger.error("zlm 代理失败: ", e);
-                }
-            } catch (RuntimeException exception){
-                logger.error("zlm 代理失败: ", e);
-            }
-        }
-
-        /**
-         * 对于为按照格式请求的可以直接返回404
-         */
-        @Override
-        protected String getTargetUri(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-
-            String uri = null;
-            if (mediaInfo != null) {
-//                String realRequestURI = requestURI.substring(requestURI.indexOf(mediaInfo.getId())+ mediaInfo.getId().length());
-                uri = String.format("http://%s:%s", mediaInfo.getIp(), mediaInfo.getHttpPort());
-            }else {
-                uri = "http://127.0.0.1:" + serverPort +"/index/hook/null"; // 只是一个能返回404的请求而已, 其他的也可以
-            }
-            return uri;
-        }
-
-        /**
-         * 动态替换请求目标
-         */
-        @Override
-        protected HttpHost getTargetHost(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-            HttpHost host;
-            if (mediaInfo != null) {
-                host = new HttpHost(mediaInfo.getIp(), mediaInfo.getHttpPort());
-            }else {
-                host = new HttpHost("127.0.0.1", serverPort);
-            }
-            return host;
-
-        }
-
-        /**
-         * 根据uri获取流媒体信息
-         */
-        MediaServerItem getMediaInfoByUri(String uri){
-            String[] split = uri.split("/");
-            String mediaServerId = split[2];
-            if ("default".equals(mediaServerId)) {
-                return mediaServerService.getDefaultMediaServer();
-            }else {
-                return mediaServerService.getOne(mediaServerId);
-            }
-        }
-
-        /**
-         * 去掉url中的标志信息
-         */
-        @Override
-        protected String rewriteUrlFromRequest(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-            String url = super.rewriteUrlFromRequest(servletRequest);
-            if (mediaInfo == null) {
-                logger.error("[ZLM服务访问代理],错误:处理url信息时未找到流媒体信息=>{}", requestURI);
-                return  url;
-            }
-            if (!StringUtils.isEmpty(mediaInfo.getId())) {
-                url = url.replace(mediaInfo.getId() + "/", "");
-            }
-            return url.replace("default/", "");
-        }
-    }
-
-    @Bean
-    public ServletRegistrationBean recordServletRegistrationBean(){
-        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new RecordProxyServlet(),"/record_proxy/*");
-        servletRegistrationBean.setName("record_proxy");
-        servletRegistrationBean.addInitParameter("targetUri", "http://127.0.0.1:18081");
-        servletRegistrationBean.addUrlMappings();
-        if (logger.isDebugEnabled()) {
-            servletRegistrationBean.addInitParameter("log", "true");
-        }
-        return servletRegistrationBean;
-    }
-
-    class RecordProxyServlet extends ProxyServlet{
-
-        @Override
-        protected String rewriteQueryStringFromRequest(HttpServletRequest servletRequest, String queryString) {
-            String queryStr = super.rewriteQueryStringFromRequest(servletRequest, queryString);
-            MediaServerItem mediaInfo = getMediaInfoByUri(servletRequest.getRequestURI());
-            String remoteHost = String.format("http://%s:%s", mediaInfo.getIp(), mediaInfo.getHttpPort());
-            if (mediaInfo != null) {
-                if (!StringUtils.isEmpty(queryStr)) {
-                    queryStr += "&remoteHost=" + remoteHost;
-                }else {
-                    queryStr = "remoteHost=" + remoteHost;
-                }
-            }
-            return queryStr;
-        }
-
-        /**
-         * 异常处理
-         */
-        @Override
-        protected void handleRequestException(HttpRequest proxyRequest, HttpResponse proxyResponse, Exception e){
-            try {
-                super.handleRequestException(proxyRequest, proxyResponse, e);
-            } catch (ServletException servletException) {
-                logger.error("录像服务 代理失败: ", e);
-            } catch (IOException ioException) {
-                if (ioException instanceof ConnectException) {
-                    logger.error("录像服务 连接失败");
-                } else if (ioException instanceof ClientAbortException) {
-                    logger.error("录像服务:用户已中断连接,代理终止");
-                } else {
-                    logger.error("录像服务 代理失败: ", e);
-                }
-            } catch (RuntimeException exception){
-                logger.error("录像服务 代理失败: ", e);
-            }
-        }
-
-        /**
-         * 对于为按照格式请求的可以直接返回404
-         */
-        @Override
-        protected String getTargetUri(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-
-            String uri = null;
-            if (mediaInfo != null) {
-//                String realRequestURI = requestURI.substring(requestURI.indexOf(mediaInfo.getId())+ mediaInfo.getId().length());
-                uri = String.format("http://%s:%s", mediaInfo.getIp(), mediaInfo.getRecordAssistPort());
-            }else {
-                uri = "http://127.0.0.1:" + serverPort +"/index/hook/null"; // 只是一个能返回404的请求而已, 其他的也可以
-            }
-            return uri;
-        }
-
-        /**
-         * 动态替换请求目标
-         */
-        @Override
-        protected HttpHost getTargetHost(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-            HttpHost host;
-            if (mediaInfo != null) {
-                host = new HttpHost(mediaInfo.getIp(), mediaInfo.getRecordAssistPort());
-            }else {
-                host = new HttpHost("127.0.0.1", serverPort);
-            }
-            return host;
-
-        }
-
-        /**
-         * 根据uri获取流媒体信息
-         */
-        MediaServerItem getMediaInfoByUri(String uri){
-            String[] split = uri.split("/");
-            String mediaServerId = split[2];
-            if ("default".equals(mediaServerId)) {
-                return mediaServerService.getDefaultMediaServer();
-            }else {
-                return mediaServerService.getOne(mediaServerId);
-            }
-
-        }
-
-        /**
-         * 去掉url中的标志信息
-         */
-        @Override
-        protected String rewriteUrlFromRequest(HttpServletRequest servletRequest) {
-            String requestURI = servletRequest.getRequestURI();
-            MediaServerItem mediaInfo = getMediaInfoByUri(requestURI);
-            String url = super.rewriteUrlFromRequest(servletRequest);
-            if (mediaInfo == null) {
-                logger.error("[录像服务访问代理],错误:处理url信息时未找到流媒体信息=>{}", requestURI);
-                return  url;
-            }
-            if (!StringUtils.isEmpty(mediaInfo.getId())) {
-                url = url.replace(mediaInfo.getId() + "/", "");
-            }
-            return url.replace("default/", "");
-        }
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java
deleted file mode 100644
index 9f45a30..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.service.impl.RedisGPSMsgListener;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.cache.annotation.CachingConfigurerSupport;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.listener.PatternTopic;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-import com.alibaba.fastjson.parser.ParserConfig;
-import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer;
-import redis.clients.jedis.JedisPool;
-import redis.clients.jedis.JedisPoolConfig;
-
-/**
- * @description:Redis中间件配置类,使用spring-data-redis集成,自动从application.yml中加载redis配置
- * @author: swwheihei
- * @date: 2019年5月30日 上午10:58:25
- * 
- */
-@Configuration
-public class RedisConfig extends CachingConfigurerSupport {
-
-	@Value("${spring.redis.host}")
-	private String host;
-	@Value("${spring.redis.port}")
-	private int port;
-	@Value("${spring.redis.database}")
-	private int database;
-	@Value("${spring.redis.password}")
-	private String password;
-	@Value("${spring.redis.timeout}")
-	private int timeout;
-	@Value("${spring.redis.poolMaxTotal:1000}")
-	private int poolMaxTotal;
-	@Value("${spring.redis.poolMaxIdle:500}")
-	private int poolMaxIdle;
-	@Value("${spring.redis.poolMaxWait:5}")
-	private int poolMaxWait;
-
-	@Autowired
-	private RedisGPSMsgListener redisGPSMsgListener;
-
-	@Bean
-	public JedisPool jedisPool() {
-		if (StringUtils.isBlank(password)) {
-			password = null;
-		}
-		JedisPoolConfig poolConfig = new JedisPoolConfig();
-		poolConfig.setMaxIdle(poolMaxIdle);
-		poolConfig.setMaxTotal(poolMaxTotal);
-		// 秒转毫秒
-		poolConfig.setMaxWaitMillis(poolMaxWait * 1000L);
-		JedisPool jp = new JedisPool(poolConfig, host, port, timeout * 1000, password, database);
-		return jp;
-	}
-
-	@Bean("redisTemplate")
-	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
-		RedisTemplate<Object, Object> template = new RedisTemplate<>();
-		template.setConnectionFactory(redisConnectionFactory);
-		// 使用fastjson进行序列化处理,提高解析效率
-		FastJsonRedisSerializer<Object> serializer = new FastJsonRedisSerializer<Object>(Object.class);
-		// value值的序列化采用fastJsonRedisSerializer
-		template.setValueSerializer(serializer);
-		template.setHashValueSerializer(serializer);
-		// key的序列化采用StringRedisSerializer
-		template.setKeySerializer(new StringRedisSerializer());
-		template.setHashKeySerializer(new StringRedisSerializer());
-		template.setConnectionFactory(redisConnectionFactory);
-		// 使用fastjson时需设置此项,否则会报异常not support type
-		ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
-		return template;
-	}
-
-	/**
-	 * redis消息监听器容器 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
-	 * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
-	 * 
-	 * @param connectionFactory
-	 * @return
-	 */
-	@Bean
-	RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
-
-        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
-        container.setConnectionFactory(connectionFactory);
-		container.addMessageListener(redisGPSMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_GPS_PREFIX));
-        return container;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java b/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java
deleted file mode 100644
index a2281ab..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/RedisKeyExpirationEventMessageListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.data.redis.connection.RedisConnection;
-import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.util.StringUtils;
-
-import java.util.Properties;
-
-public class RedisKeyExpirationEventMessageListener extends KeyExpirationEventMessageListener {
-
-    private UserSetup userSetup;
-    private RedisMessageListenerContainer listenerContainer;
-    private String keyspaceNotificationsConfigParameter = "EA";
-
-    public RedisKeyExpirationEventMessageListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
-        super(listenerContainer);
-        this.listenerContainer = listenerContainer;
-        this.userSetup = userSetup;
-    }
-
-    @Override
-    public void init() {
-        if (!userSetup.getRedisConfig()) {
-            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用
-            setKeyspaceNotificationsConfigParameter("");
-        }else {
-
-            RedisConnection connection = this.listenerContainer.getConnectionFactory().getConnection();
-            Properties config = connection.getConfig("notify-keyspace-events");
-            try {
-                if (!config.getProperty("notify-keyspace-events").equals(keyspaceNotificationsConfigParameter)) {
-                    connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);
-                }
-            } finally {
-                connection.close();
-            }
-        }
-        super.init();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
deleted file mode 100644
index 6fa802d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true)
-public class SipConfig {
-
-	private String ip;
-
-	/**
-	 * 默认使用 0.0.0.0
-	 */
-	private String monitorIp = "0.0.0.0";
-
-	private Integer port;
-
-	private String domain;
-
-	private String id;
-
-	private String password;
-	
-	Integer ptzSpeed = 50;
-
-	Integer keepaliveTimeOut = 255;
-
-	Integer registerTimeInterval = 120;
-
-	private boolean alarm = false;
-
-	public void setIp(String ip) {
-		this.ip = ip;
-	}
-
-	public void setMonitorIp(String monitorIp) {
-		this.monitorIp = monitorIp;
-	}
-
-	public void setPort(Integer port) {
-		this.port = port;
-	}
-
-	public void setDomain(String domain) {
-		this.domain = domain;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public void setPtzSpeed(Integer ptzSpeed) {
-		this.ptzSpeed = ptzSpeed;
-	}
-
-	public void setKeepaliveTimeOut(Integer keepaliveTimeOut) {
-		this.keepaliveTimeOut = keepaliveTimeOut;
-	}
-
-	public void setRegisterTimeInterval(Integer registerTimeInterval) {
-		this.registerTimeInterval = registerTimeInterval;
-	}
-
-	public String getMonitorIp() {
-		return monitorIp;
-	}
-
-	public String getIp() {
-		return ip;
-	}
-
-
-	public Integer getPort() {
-		return port;
-	}
-
-
-	public String getDomain() {
-		return domain;
-	}
-
-
-	public String getId() {
-		return id;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-
-	public Integer getPtzSpeed() {
-		return ptzSpeed;
-	}
-
-	public Integer getKeepaliveTimeOut() {
-		return keepaliveTimeOut;
-	}
-
-	public Integer getRegisterTimeInterval() {
-		return registerTimeInterval;
-	}
-
-	public boolean isAlarm() {
-		return alarm;
-	}
-
-	public void setAlarm(boolean alarm) {
-		this.alarm = alarm;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
deleted file mode 100644
index 7f9f847..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 系统启动时控制上级平台重新注册
- */
-@Component
-@Order(value=3)
-public class SipPlatformRunner implements CommandLineRunner {
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    private ISIPCommanderForPlatform sipCommanderForPlatform;
-
-
-    @Override
-    public void run(String... args) throws Exception {
-        // 设置所有平台离线
-        storager.outlineForAllParentPlatform();
-
-        // 清理所有平台注册缓存
-        redisCatchStorage.cleanPlatformRegisterInfos();
-
-        // 停止所有推流
-//        zlmrtpServerFactory.closeAllSendRtpStream();
-
-        List<ParentPlatform> parentPlatforms = storager.queryEnableParentPlatformList(true);
-
-        for (ParentPlatform parentPlatform : parentPlatforms) {
-            redisCatchStorage.updatePlatformRegister(parentPlatform);
-
-            redisCatchStorage.updatePlatformKeepalive(parentPlatform);
-
-            ParentPlatformCatch parentPlatformCatch = new ParentPlatformCatch();
-
-            parentPlatformCatch.setParentPlatform(parentPlatform);
-            parentPlatformCatch.setId(parentPlatform.getServerGBId());
-            redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-
-            // 取消订阅
-            sipCommanderForPlatform.unregister(parentPlatform, null, (eventResult)->{
-                // 发送平台未注册消息
-                publisher.platformNotRegisterEventPublish(parentPlatform.getServerGBId());
-            });
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/Swagger3Config.java b/src/main/java/com/genersoft/iot/vmp/conf/Swagger3Config.java
deleted file mode 100644
index 7ee13f8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/Swagger3Config.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Contact;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-
-@Configuration
-public class Swagger3Config {
-
-    @Value("${swagger-ui.enabled: true}")
-    private boolean enable;
-
-    @Bean
-    public Docket createRestApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("1. 全部")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-    @Bean
-    public Docket createRestGBApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("2. 国标28181")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.gb28181"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-
-    @Bean
-    public Docket createRestONVIFApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("3. ONVIF")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.onvif"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-
-    @Bean
-    public Docket createRestStreamProxyApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("4. 拉流转发")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.streamProxy"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-    @Bean
-    public Docket createRestStreamPushApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("5. 推流管理")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.streamPush"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-
-
-    @Bean
-    public Docket createServerApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("6. 服务管理")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.server"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-    @Bean
-    public Docket createUserApi() {
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .groupName("7. 用户管理")
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.genersoft.iot.vmp.vmanager.user"))
-                .paths(PathSelectors.any())
-                .build()
-                .pathMapping("/")
-                .enable(enable);
-    }
-
-    private ApiInfo apiInfo() {
-        return new ApiInfoBuilder()
-                .title("WVP-PRO 接口文档")
-                .description("更多请咨询服务开发者(https://github.com/648540858/wvp-GB28181-pro)。")
-                .contact(new Contact("648540858", "648540858", "648540858@qq.com"))
-                .version("2.0")
-                .build();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
deleted file mode 100644
index 13ec692..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.utils.SystemInfoUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * 获取系统信息写入redis
- */
-@Component
-public class SystemInfoTimerTask {
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Scheduled(fixedRate = 1000)   //每1秒执行一次
-    public void execute(){
-        try {
-            double cpuInfo = SystemInfoUtils.getCpuInfo();
-            redisCatchStorage.addCpuInfo(cpuInfo);
-            double memInfo = SystemInfoUtils.getMemInfo();
-            redisCatchStorage.addMemInfo(memInfo);
-            Map<String, String> networkInterfaces = SystemInfoUtils.getNetworkInterfaces();
-            redisCatchStorage.addNetInfo(networkInterfaces);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java
deleted file mode 100644
index 1bc8521..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-
-import java.util.concurrent.ThreadPoolExecutor;
-
-@Configuration
-@EnableAsync(proxyTargetClass = true)
-public class ThreadPoolTaskConfig {
-
-    public static final int cpuNum = Runtime.getRuntime().availableProcessors();
-
-    /**
-     *   默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,
-     *    当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
-     *  当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
-     */
-
-    /**
-     * 核心线程数(默认线程数)
-     */
-    private static final int corePoolSize = cpuNum;
-    /**
-     * 最大线程数
-     */
-    private static final int maxPoolSize = cpuNum*2;
-    /**
-     * 允许线程空闲时间(单位:默认为秒)
-     */
-    private static final int keepAliveTime = 30;
-    /**
-     * 缓冲队列大小
-     */
-    private static final int queueCapacity = 500;
-    /**
-     * 线程池名前缀
-     */
-    private static final String threadNamePrefix = "wvp-";
-
-    @Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名
-    public ThreadPoolTaskExecutor taskExecutor() {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        executor.setCorePoolSize(corePoolSize);
-        executor.setMaxPoolSize(maxPoolSize);
-        executor.setQueueCapacity(queueCapacity);
-        executor.setKeepAliveSeconds(keepAliveTime);
-        executor.setThreadNamePrefix(threadNamePrefix);
-
-        // 线程池对拒绝任务的处理策略
-        // CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
-        // 初始化
-        executor.initialize();
-        return executor;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
deleted file mode 100644
index d1d0e20..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-@Component
-@ConfigurationProperties(prefix = "user-settings", ignoreInvalidFields = true)
-public class UserSetup {
-
-    private Boolean savePositionHistory = Boolean.FALSE;
-
-    private Boolean autoApplyPlay = Boolean.FALSE;
-
-    private Boolean seniorSdp = Boolean.FALSE;
-
-    private Long playTimeout = 18000L;
-
-    private Boolean interfaceAuthentication = Boolean.TRUE;
-
-    private Boolean recordPushLive = Boolean.TRUE;
-
-    private Boolean recordSip = Boolean.TRUE;
-
-    private Boolean logInDatebase = Boolean.TRUE;
-
-    private Boolean redisConfig = Boolean.TRUE;
-
-    private String serverId = "000000";
-
-    private String thirdPartyGBIdReg = "[\\s\\S]*";
-
-    private List<String> interfaceAuthenticationExcludes = new ArrayList<>();
-
-    public Boolean getSavePositionHistory() {
-        return savePositionHistory;
-    }
-
-    public Boolean isSavePositionHistory() {
-        return savePositionHistory;
-    }
-
-    public Boolean isAutoApplyPlay() {
-        return autoApplyPlay;
-    }
-
-    public Boolean isSeniorSdp() {
-        return seniorSdp;
-    }
-
-    public Long getPlayTimeout() {
-        return playTimeout;
-    }
-
-    public Boolean isInterfaceAuthentication() {
-        return interfaceAuthentication;
-    }
-
-    public Boolean isRecordPushLive() {
-        return recordPushLive;
-    }
-
-    public List<String> getInterfaceAuthenticationExcludes() {
-        return interfaceAuthenticationExcludes;
-    }
-
-    public void setSavePositionHistory(Boolean savePositionHistory) {
-        this.savePositionHistory = savePositionHistory;
-    }
-
-    public void setAutoApplyPlay(Boolean autoApplyPlay) {
-        this.autoApplyPlay = autoApplyPlay;
-    }
-
-    public void setSeniorSdp(Boolean seniorSdp) {
-        this.seniorSdp = seniorSdp;
-    }
-
-    public void setPlayTimeout(Long playTimeout) {
-        this.playTimeout = playTimeout;
-    }
-
-    public void setInterfaceAuthentication(boolean interfaceAuthentication) {
-        this.interfaceAuthentication = interfaceAuthentication;
-    }
-
-    public void setRecordPushLive(Boolean recordPushLive) {
-        this.recordPushLive = recordPushLive;
-    }
-
-    public void setInterfaceAuthenticationExcludes(List<String> interfaceAuthenticationExcludes) {
-        this.interfaceAuthenticationExcludes = interfaceAuthenticationExcludes;
-    }
-
-    public Boolean getLogInDatebase() {
-        return logInDatebase;
-    }
-
-    public void setLogInDatebase(Boolean logInDatebase) {
-        this.logInDatebase = logInDatebase;
-    }
-
-    public String getServerId() {
-        return serverId;
-    }
-
-    public void setServerId(String serverId) {
-        this.serverId = serverId;
-    }
-
-    public String getThirdPartyGBIdReg() {
-        return thirdPartyGBIdReg;
-    }
-
-    public void setThirdPartyGBIdReg(String thirdPartyGBIdReg) {
-        this.thirdPartyGBIdReg = thirdPartyGBIdReg;
-    }
-
-    public Boolean getRedisConfig() {
-        return redisConfig;
-    }
-
-    public void setRedisConfig(Boolean redisConfig) {
-        this.redisConfig = redisConfig;
-    }
-
-    public Boolean getRecordSip() {
-        return recordSip;
-    }
-
-    public void setRecordSip(Boolean recordSip) {
-        this.recordSip = recordSip;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/VersionConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/VersionConfig.java
deleted file mode 100644
index a24ade4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/VersionConfig.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties(prefix = "version")
-public class VersionConfig {
-
-    private String version;
-    private String artifactId;
-    private String description;
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/VersionInfo.java b/src/main/java/com/genersoft/iot/vmp/conf/VersionInfo.java
deleted file mode 100644
index 4ff5eba..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/VersionInfo.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.genersoft.iot.vmp.common.VersionPo;
-import com.genersoft.iot.vmp.utils.GitUtil;
-import com.genersoft.iot.vmp.utils.JarFileUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-@Component
-public class VersionInfo {
-
-    @Autowired
-    VersionConfig config;
-    @Autowired
-    GitUtil gitUtil;
-    @Autowired
-    JarFileUtils jarFileUtils;
-
-    public VersionPo getVersion() {
-        VersionPo versionPo = new VersionPo();
-        Map<String,String> map=jarFileUtils.readJarFile();
-        versionPo.setGIT_Revision(gitUtil.getGitCommitId());
-        versionPo.setCreate_By(map.get("Created-By"));
-        versionPo.setGIT_BRANCH(gitUtil.getBranch());
-        versionPo.setGIT_URL(gitUtil.getGitUrl());
-        versionPo.setBUILD_DATE(gitUtil.getBuildDate());
-        versionPo.setArtifactId(config.getArtifactId());
-        versionPo.setGIT_Revision_SHORT(gitUtil.getCommitIdShort());
-        versionPo.setVersion(config.getVersion());
-        versionPo.setProject(config.getDescription());
-        versionPo.setBuild_Jdk(map.get("Build-Jdk"));
-
-        return versionPo;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java
deleted file mode 100644
index 93e2b87..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Component
-public class WVPTimerTask {
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Value("${server.port}")
-    private int serverPort;
-
-    @Autowired
-    private SipConfig sipConfig;
-
-    @Scheduled(fixedRate = 2 * 1000)   //每3秒执行一次
-    public void execute(){
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("ip", sipConfig.getIp());
-        jsonObject.put("port", serverPort);
-        redisCatchStorage.updateWVPInfo(jsonObject, 3);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/druid/DruidConfiguration.java b/src/main/java/com/genersoft/iot/vmp/conf/druid/DruidConfiguration.java
deleted file mode 100644
index 12f6e63..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/druid/DruidConfiguration.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.genersoft.iot.vmp.conf.druid;
-
-import com.alibaba.druid.support.http.StatViewServlet;
-import com.alibaba.druid.support.http.WebStatFilter;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.boot.web.servlet.ServletRegistrationBean;
-import org.springframework.context.annotation.Bean;
-
-import javax.servlet.Filter;
-import javax.servlet.Servlet;
-
-/**
- * druid监控配置
- * @author
- */
-public class DruidConfiguration  {
-
-    @Value("${rj-druid-manage.allow:127.0.0.1}")
-    private String allow;
-
-    @Value("${rj-druid-manage.deny:}")
-    private String deny;
-
-    @Value("${rj-druid-manage.loginUsername:admin}")
-    private String loginUsername;
-
-    @Value("${rj-druid-manage.loginPassword:admin}")
-    private String loginPassword;
-
-    @Value("${rj-druid-manage.resetEnable:false}")
-    private String resetEnable;
-
-    /**
-     * druid监控页面开启
-     */
-    @Bean
-    public ServletRegistrationBean druidServlet() {
-        ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
-        // IP白名单
-        servletRegistrationBean.addInitParameter("allow", allow);
-        // IP黑名单(共同存在时,deny优先于allow)
-        servletRegistrationBean.addInitParameter("deny", deny);
-        //控制台管理用户
-        servletRegistrationBean.addInitParameter("loginUsername", loginUsername);
-        servletRegistrationBean.addInitParameter("loginPassword", loginPassword);
-        //是否能够重置数据 禁用HTML页面上的“Reset All”功能
-        servletRegistrationBean.addInitParameter("resetEnable", resetEnable);
-        return servletRegistrationBean;
-    }
-
-    /**
-     * druid url监控配置
-     */
-    @Bean
-    public FilterRegistrationBean filterRegistrationBean() {
-        FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(new WebStatFilter());
-        filterRegistrationBean.addUrlPatterns("/*");
-        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
-        return filterRegistrationBean;
-    }
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/druid/EnableDruidSupport.java b/src/main/java/com/genersoft/iot/vmp/conf/druid/EnableDruidSupport.java
deleted file mode 100644
index 5fd710b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/druid/EnableDruidSupport.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.conf.druid;
-
-import org.springframework.boot.web.servlet.ServletComponentScan;
-import org.springframework.context.annotation.Import;
-
-import java.lang.annotation.*;
-
-/**
- * druid监控支持注解
- *
- * @author
- * {@link DruidConfiguration} druid监控页面安全配置支持
- * {@link ServletComponentScan} druid监控页面需要扫描servlet
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-@Import({
-        DruidConfiguration.class,
-})
-@ServletComponentScan
-public @interface EnableDruidSupport {
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java
deleted file mode 100644
index da4e2ed..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.genersoft.iot.vmp.conf.runner;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.service.IDeviceService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-
-/**
- * 系统启动时控制设备离线
- */
-@Component
-@Order(value=4)
-public class SipDeviceRunner implements CommandLineRunner {
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IDeviceService deviceService;
-
-    @Override
-    public void run(String... args) throws Exception {
-        // 读取redis没有心跳信息的则设置为离线,等收到下次心跳设置为在线
-        // 设置所有设备离线
-        storager.outlineForAll();
-        List<String> onlineForAll = redisCatchStorage.getOnlineForAll();
-        for (String deviceId : onlineForAll) {
-            storager.online(deviceId);
-            Device device = redisCatchStorage.getDevice(deviceId);
-            if (device != null && device.getSubscribeCycleForCatalog() > 0) {
-                // 查询在线设备那些开启了订阅,为设备开启定时的目录订阅
-                deviceService.addCatalogSubscribe(device);
-            }
-        }
-        // 重置cseq计数
-        redisCatchStorage.resetAllCSEQ();
-
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
deleted file mode 100644
index 2356b57..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.alibaba.fastjson.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.AuthenticationEntryPoint;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 处理匿名用户访问逻辑
- */
-@Component
-public class AnonymousAuthenticationEntryPoint implements AuthenticationEntryPoint {
-
-    private final static Logger logger = LoggerFactory.getLogger(DefaultUserDetailsServiceImpl.class);
-
-    @Override
-    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) {
-//        logger.debug("用户需要登录,访问[{}]失败,AuthenticationException=[{}]", request.getRequestURI(), e.getMessage());
-        // 允许跨域
-        response.setHeader("Access-Control-Allow-Origin", "*");
-        // 允许自定义请求头token(允许head跨域)
-        response.setHeader("Access-Control-Allow-Headers", "token, Accept, Origin, X-Requested-With, Content-Type, Last-Modified");
-        response.setHeader("Content-type", "application/json;charset=UTF-8");
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("code", "-1");
-        jsonObject.put("msg", "请登录后重新请求");
-        if (request.getRequestURI().contains("api/user/login")){
-            jsonObject.put("msg", e.getMessage());
-        }
-        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-        try {
-            response.getWriter().print(jsonObject.toJSONString());
-        } catch (IOException ioException) {
-            ioException.printStackTrace();
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/DefaultUserDetailsServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/conf/security/DefaultUserDetailsServiceImpl.java
deleted file mode 100644
index 63569ef..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/DefaultUserDetailsServiceImpl.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import com.github.xiaoymin.knife4j.core.util.StrUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-
-/**
- * 用户登录认证逻辑
- */
-@Component
-public class DefaultUserDetailsServiceImpl implements UserDetailsService {
-
-    private final static Logger logger = LoggerFactory.getLogger(DefaultUserDetailsServiceImpl.class);
-
-    @Autowired
-    private IUserService userService;
-
-    @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        if (StrUtil.isBlank(username)) {
-            logger.info("登录用户:{} 不存在", username);
-            throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
-        }
-
-        // 查出密码
-        User user = userService.getUserByUsername(username);
-        if (user == null) {
-            logger.info("登录用户:{} 不存在", username);
-            throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
-        }
-        String password = SecurityUtils.encryptPassword(user.getPassword());
-        user.setPassword(password);
-        return new LoginUser(user, LocalDateTime.now());
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/InvalidSessionHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/InvalidSessionHandler.java
deleted file mode 100644
index f3fd068..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/InvalidSessionHandler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.web.session.InvalidSessionStrategy;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 登录超时的处理
- */
-public class InvalidSessionHandler implements InvalidSessionStrategy {
-
-    private final static Logger logger = LoggerFactory.getLogger(InvalidSessionHandler.class);
-
-    @Override
-    public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse httpServletResponse) throws IOException, ServletException {
-        String username = request.getParameter("username");
-        logger.info("[登录超时] - [{}]", username);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java
deleted file mode 100644
index 9bbf2e7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.*;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.AuthenticationFailureHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-@Component
-public class LoginFailureHandler implements AuthenticationFailureHandler {
-
-    private final static Logger logger = LoggerFactory.getLogger(LoginFailureHandler.class);
-
-    @Autowired
-    private ObjectMapper objectMapper;
-
-    @Override
-    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {
-
-        String username = request.getParameter("username");
-        if (e instanceof AccountExpiredException) {
-            // 账号过期
-            logger.info("[登录失败] - 用户[{}]账号过期", username);
-
-        } else if (e instanceof BadCredentialsException) {
-            // 密码错误
-            logger.info("[登录失败] - 用户[{}]密码/SIP服务器ID 错误", username);
-
-        } else if (e instanceof CredentialsExpiredException) {
-            // 密码过期
-            logger.info("[登录失败] - 用户[{}]密码过期", username);
-
-        } else if (e instanceof DisabledException) {
-            // 用户被禁用
-            logger.info("[登录失败] - 用户[{}]被禁用", username);
-
-        } else if (e instanceof LockedException) {
-            // 用户被锁定
-            logger.info("[登录失败] - 用户[{}]被锁定", username);
-
-        } else if (e instanceof InternalAuthenticationServiceException) {
-            // 内部错误
-            logger.error(String.format("[登录失败] - [%s]内部错误", username), e);
-
-        } else {
-            // 其他错误
-            logger.error(String.format("[登录失败] - [%s]其他错误", username), e);
-        }
-        Map<String, Object> map = new HashMap<>();
-        map.put("code","0");
-        map.put("msg","登录失败");
-        response.setContentType("application/json;charset=UTF-8");
-        response.getWriter().write(objectMapper.writeValueAsString(map));
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java
deleted file mode 100644
index 9690c6d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-@Component
-public class LoginSuccessHandler implements AuthenticationSuccessHandler {
-
-    private final static Logger logger = LoggerFactory.getLogger(LoginSuccessHandler.class);
-
-    @Override
-    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
-        String username = request.getParameter("username");
-        logger.info("[登录成功] - [{}]", username);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/LogoutHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/LogoutHandler.java
deleted file mode 100644
index 790eab8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/LogoutHandler.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 退出登录成功
- */
-@Component
-public class LogoutHandler implements LogoutSuccessHandler {
-
-    private final static Logger logger = LoggerFactory.getLogger(LogoutHandler.class);
-
-    @Override
-    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
-        String username = request.getParameter("username");
-        logger.info("[退出登录成功] - [{}]", username);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java b/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
deleted file mode 100644
index fd29d11..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
-import javax.security.sasl.AuthenticationException;
-
-public class SecurityUtils {
-
-    /**
-     * 描述根据账号密码进行调用security进行认证授权 主动调
-     * 用AuthenticationManager的authenticate方法实现
-     * 授权成功后将用户信息存入SecurityContext当中
-     * @param username 用户名
-     * @param password 密码
-     * @param authenticationManager 认证授权管理器,
-     * @see  AuthenticationManager
-     * @return UserInfo  用户信息
-     */
-    public static LoginUser login(String username, String password, AuthenticationManager authenticationManager) throws AuthenticationException {
-        //使用security框架自带的验证token生成器  也可以自定义。
-        UsernamePasswordAuthenticationToken token =new UsernamePasswordAuthenticationToken(username,password);
-        Authentication authenticate = authenticationManager.authenticate(token);
-        SecurityContextHolder.getContext().setAuthentication(authenticate);
-        LoginUser user = (LoginUser) authenticate.getPrincipal();
-        return user;
-    }
-
-    /**
-     * 获取当前登录的所有认证信息
-     * @return
-     */
-    public static Authentication getAuthentication(){
-        SecurityContext context = SecurityContextHolder.getContext();
-        return context.getAuthentication();
-    }
-
-    /**
-     * 获取当前登录用户信息
-     * @return
-     */
-    public static LoginUser getUserInfo(){
-        Authentication authentication = getAuthentication();
-        if(authentication!=null){
-            Object principal = authentication.getPrincipal();
-            if(principal!=null && !"anonymousUser".equals(principal)){
-                LoginUser user = (LoginUser) authentication.getPrincipal();
-                return user;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 获取当前登录用户ID
-     * @return
-     */
-    public static int getUserId(){
-        LoginUser user = getUserInfo();
-        return user.getId();
-    }
-
-    /**
-     * 生成BCryptPasswordEncoder密码
-     *
-     * @param password 密码
-     * @return 加密字符串
-     */
-    public static String encryptPassword(String password) {
-        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-        return passwordEncoder.encode(password);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
deleted file mode 100644
index 8725929..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
-import java.util.List;
-
-/**
- * 配置Spring Security
- */
-@Configuration
-@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
-
-    private final static Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private DefaultUserDetailsServiceImpl userDetailsService;
-    /**
-     * 登出成功的处理
-     */
-    @Autowired
-    private LoginFailureHandler loginFailureHandler;
-    /**
-     * 登录成功的处理
-     */
-    @Autowired
-    private LoginSuccessHandler loginSuccessHandler;
-    /**
-     * 登出成功的处理
-     */
-    @Autowired
-    private LogoutHandler logoutHandler;
-    /**
-     * 未登录的处理
-     */
-    @Autowired
-    private AnonymousAuthenticationEntryPoint anonymousAuthenticationEntryPoint;
-//    /**
-//     * 超时处理
-//     */
-//    @Autowired
-//    private InvalidSessionHandler invalidSessionHandler;
-
-//    /**
-//     * 顶号处理
-//     */
-//    @Autowired
-//    private SessionInformationExpiredHandler sessionInformationExpiredHandler;
-//    /**
-//     * 登录用户没有权限访问资源
-//     */
-//    @Autowired
-//    private LoginUserAccessDeniedHandler accessDeniedHandler;
-
-
-    /**
-     * 描述: 静态资源放行,这里的放行,是不走 Spring Security 过滤器链
-     **/
-    @Override
-    public void configure(WebSecurity web) {
-
-        if (!userSetup.isInterfaceAuthentication()) {
-            web.ignoring().antMatchers("**");
-        }else {
-            // 可以直接访问的静态数据
-            web.ignoring()
-                    .antMatchers("/")
-                    .antMatchers("/#/**")
-                    .antMatchers("/static/**")
-                    .antMatchers("/index.html")
-                    .antMatchers("/doc.html") // "/webjars/**", "/swagger-resources/**", "/v3/api-docs/**"
-                    .antMatchers("/webjars/**")
-                    .antMatchers("/swagger-resources/**")
-                    .antMatchers("/v3/api-docs/**")
-                    .antMatchers("/js/**");
-            List<String> interfaceAuthenticationExcludes = userSetup.getInterfaceAuthenticationExcludes();
-            for (String interfaceAuthenticationExclude : interfaceAuthenticationExcludes) {
-                if (interfaceAuthenticationExclude.split("/").length < 4 ) {
-                    logger.warn("{}不满足两级目录,已忽略", interfaceAuthenticationExclude);
-                }else {
-                    web.ignoring().antMatchers(interfaceAuthenticationExclude);
-                }
-
-            }
-        }
-    }
-
-    /**
-     * 配置认证方式
-     * @param auth
-     * @throws Exception
-     */
-    @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
-        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
-        // 设置不隐藏 未找到用户异常
-        provider.setHideUserNotFoundExceptions(true);
-        // 用户认证service - 查询数据库的逻辑
-        provider.setUserDetailsService(userDetailsService);
-        // 设置密码加密算法
-        provider.setPasswordEncoder(passwordEncoder());
-        auth.authenticationProvider(provider);
-    }
-
-    @Override
-    protected void configure(HttpSecurity http) throws Exception {
-        http.cors().and().csrf().disable();
-        // 设置允许添加静态文件
-        http.headers().contentTypeOptions().disable();
-        http.authorizeRequests()
-                // 放行接口
-                .antMatchers("/api/user/login","/index/hook/**","/api/device/query/**","/api/play/start/**").permitAll()
-                // 除上面外的所有请求全部需要鉴权认证
-                .anyRequest().authenticated()
-                // 异常处理(权限拒绝、登录失效等)
-                .and().exceptionHandling()
-                .authenticationEntryPoint(anonymousAuthenticationEntryPoint)//匿名用户访问无权限资源时的异常处理
-//                .accessDeniedHandler(accessDeniedHandler)//登录用户没有权限访问资源
-                // 登入
-                .and().formLogin().permitAll()//允许所有用户
-                .successHandler(loginSuccessHandler)//登录成功处理逻辑
-                .failureHandler(loginFailureHandler)//登录失败处理逻辑
-                // 登出
-                .and().logout().logoutUrl("/api/user/logout").permitAll()//允许所有用户
-                .logoutSuccessHandler(logoutHandler)//登出成功处理逻辑
-                .deleteCookies("JSESSIONID")
-                // 会话管理
-//                .and().sessionManagement().invalidSessionStrategy(invalidSessionHandler) // 超时处理
-//                .maximumSessions(1)//同一账号同时登录最大用户数
-//                .expiredSessionStrategy(sessionInformationExpiredHandler) // 顶号处理
-        ;
-
-    }
-
-    /**
-     * 描述: 密码加密算法 BCrypt 推荐使用
-     **/
-    @Bean
-    public BCryptPasswordEncoder passwordEncoder() {
-        return new BCryptPasswordEncoder();
-    }
-
-    /**
-     * 描述: 注入AuthenticationManager管理器
-     **/
-    @Override
-    @Bean
-    public AuthenticationManager authenticationManager() throws Exception {
-        return super.authenticationManager();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
deleted file mode 100644
index 45e03bc..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.genersoft.iot.vmp.conf.security.dto;
-
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.springframework.security.core.CredentialsContainer;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.SpringSecurityCoreVersion;
-import org.springframework.security.core.userdetails.UserDetails;
-
-import java.time.LocalDateTime;
-import java.util.Collection;
-
-public class LoginUser implements UserDetails, CredentialsContainer {
-
-    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
-
-    /**
-     * 用户
-     */
-    private User user;
-
-
-    /**
-     * 登录时间
-     */
-    private LocalDateTime loginTime;
-
-    public LoginUser(User user, LocalDateTime loginTime) {
-        this.user = user;
-        this.loginTime = loginTime;
-    }
-
-
-    @Override
-    public Collection<? extends GrantedAuthority> getAuthorities() {
-        return null;
-    }
-
-    @Override
-    public String getPassword() {
-        return user.getPassword();
-    }
-
-    @Override
-    public String getUsername() {
-        return user.getUsername();
-    }
-
-    /**
-     * 账户是否未过期,过期无法验证
-     */
-    @Override
-    public boolean isAccountNonExpired() {
-        return true;
-    }
-
-    /**
-     * 指定用户是否解锁,锁定的用户无法进行身份验证
-     * <p>
-     * 密码锁定
-     * </p>
-     */
-    @Override
-    public boolean isAccountNonLocked() {
-        return true;
-    }
-
-    /**
-     * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
-     */
-    @Override
-    public boolean isCredentialsNonExpired() {
-        return true;
-    }
-
-    /**
-     * 用户是否被启用或禁用。禁用的用户无法进行身份验证。
-     */
-    @Override
-    public boolean isEnabled() {
-        return true;
-    }
-
-    /**
-     * 认证完成后,擦除密码
-     */
-    @Override
-    public void eraseCredentials() {
-        user.setPassword(null);
-    }
-
-
-    public int getId() {
-        return user.getId();
-    }
-
-    public Role getRole() {
-        return user.getRole();
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
deleted file mode 100644
index eb055fb..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.genersoft.iot.vmp.gb28181;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.transmit.ISIPProcessorObserver;
-import gov.nist.javax.sip.SipProviderImpl;
-import gov.nist.javax.sip.SipStackImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.stereotype.Component;
-
-import javax.sip.*;
-import java.util.Properties;
-import java.util.TooManyListenersException;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-@Component
-public class SipLayer{
-
-	private final static Logger logger = LoggerFactory.getLogger(SipLayer.class);
-
-	@Autowired
-	private SipConfig sipConfig;
-
-	@Autowired
-	private ISIPProcessorObserver sipProcessorObserver;
-
-	private SipStackImpl sipStack;
-
-	private SipFactory sipFactory;
-
-
-	@Bean("sipFactory")
-	private SipFactory createSipFactory() {
-		sipFactory = SipFactory.getInstance();
-		sipFactory.setPathName("gov.nist");
-		return sipFactory;
-	}
-	
-	@Bean("sipStack")
-	@DependsOn({"sipFactory"})
-	private SipStack createSipStack() throws PeerUnavailableException {
-		Properties properties = new Properties();
-		properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
-		properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getMonitorIp());
-		properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true");
-		/**
-		 * sip_server_log.log 和 sip_debug_log.log public static final int TRACE_NONE =
-		 * 0; public static final int TRACE_MESSAGES = 16; public static final int
-		 * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32;
-		 */
-		properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "0");
-		properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log");
-		properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log");
-		sipStack = (SipStackImpl) sipFactory.createSipStack(properties);
-
-		return sipStack;
-	}
-
-	@Bean(name = "tcpSipProvider")
-	@DependsOn("sipStack")
-	private SipProviderImpl startTcpListener() {
-		ListeningPoint tcpListeningPoint = null;
-		SipProviderImpl tcpSipProvider  = null;
-		try {
-			tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "TCP");
-			tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
-			tcpSipProvider.setDialogErrorsAutomaticallyHandled();
-			tcpSipProvider.addSipListener(sipProcessorObserver);
-//			tcpSipProvider.setAutomaticDialogSupportEnabled(false);
-			logger.info("Sip Server TCP 启动成功 port {" + sipConfig.getMonitorIp() + ":" + sipConfig.getPort() + "}");
-		} catch (TransportNotSupportedException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			logger.error("无法使用 [ {}:{} ]作为SIP[ TCP ]服务,可排查: 1. sip.monitor-ip 是否为本机网卡IP; 2. sip.port 是否已被占用"
-					, sipConfig.getMonitorIp(), sipConfig.getPort());
-		} catch (TooManyListenersException e) {
-			e.printStackTrace();
-		} catch (ObjectInUseException e) {
-			e.printStackTrace();
-		}
-		return tcpSipProvider;
-	}
-	
-	@Bean(name = "udpSipProvider")
-	@DependsOn("sipStack")
-	private SipProviderImpl startUdpListener() {
-		ListeningPoint udpListeningPoint = null;
-		SipProviderImpl udpSipProvider = null;
-		try {
-			udpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "UDP");
-			udpSipProvider = (SipProviderImpl)sipStack.createSipProvider(udpListeningPoint);
-			udpSipProvider.addSipListener(sipProcessorObserver);
-//			udpSipProvider.setAutomaticDialogSupportEnabled(false);
-		} catch (TransportNotSupportedException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			logger.error("无法使用 [ {}:{} ]作为SIP[ UDP ]服务,可排查: 1. sip.monitor-ip 是否为本机网卡IP; 2. sip.port 是否已被占用"
-					, sipConfig.getMonitorIp(), sipConfig.getPort());
-		} catch (TooManyListenersException e) {
-			e.printStackTrace();
-		} catch (ObjectInUseException e) {
-			e.printStackTrace();
-		}
-		logger.info("Sip Server UDP 启动成功 port [" + sipConfig.getMonitorIp() + ":" + sipConfig.getPort() + "]");
-		return udpSipProvider;
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java
deleted file mode 100644
index 5ee3de6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Conditions Of Use
- *
- * This software was developed by employees of the National Institute of
- * Standards and Technology (NIST), an agency of the Federal Government.
- * Pursuant to title 15 Untied States Code Section 105, works of NIST
- * employees are not subject to copyright protection in the United States
- * and are considered to be in the public domain.  As a result, a formal
- * license is not needed to use the software.
- *
- * This software is provided by NIST as a service and is expressly
- * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
- * AND DATA ACCURACY.  NIST does not warrant or make any representations
- * regarding the use of the software or the results thereof, including but
- * not limited to the correctness, accuracy, reliability or usefulness of
- * the software.
- *
- * Permission to use this software is contingent upon your acceptance
- * of the terms of this agreement
- *
- * .
- *
- */
-package com.genersoft.iot.vmp.gb28181.auth;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.text.DecimalFormat;
-import java.util.Date;
-import java.util.Random;
-
-import javax.sip.address.URI;
-import javax.sip.header.AuthorizationHeader;
-import javax.sip.header.HeaderFactory;
-import javax.sip.header.WWWAuthenticateHeader;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-
-import gov.nist.core.InternalErrorHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implements the HTTP digest authentication method server side functionality.
- *
- * @author M. Ranganathan
- * @author Marc Bednarek
- */
-
-public class DigestServerAuthenticationHelper  {
-
-    private Logger logger = LoggerFactory.getLogger(DigestServerAuthenticationHelper.class);
-
-    private MessageDigest messageDigest;
-
-    public static final String DEFAULT_ALGORITHM = "MD5";
-    public static final String DEFAULT_SCHEME = "Digest";
-
-
-
-
-    /** to hex converter */
-    private static final char[] toHex = { '0', '1', '2', '3', '4', '5', '6',
-            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-
-    /**
-     * Default constructor.
-     * @throws NoSuchAlgorithmException
-     */
-    public DigestServerAuthenticationHelper()
-            throws NoSuchAlgorithmException {
-        messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM);
-    }
-
-    public static String toHexString(byte b[]) {
-        int pos = 0;
-        char[] c = new char[b.length * 2];
-        for (int i = 0; i < b.length; i++) {
-            c[pos++] = toHex[(b[i] >> 4) & 0x0F];
-            c[pos++] = toHex[b[i] & 0x0f];
-        }
-        return new String(c);
-    }
-
-    /**
-     * Generate the challenge string.
-     *
-     * @return a generated nonce.
-     */
-    private String generateNonce() {
-        // Get the time of day and run MD5 over it.
-        Date date = new Date();
-        long time = date.getTime();
-        Random rand = new Random();
-        long pad = rand.nextLong();
-        // String nonceString = (new Long(time)).toString()
-        //         + (new Long(pad)).toString();
-        String nonceString = Long.valueOf(time).toString()
-                + Long.valueOf(pad).toString();
-        byte mdbytes[] = messageDigest.digest(nonceString.getBytes());
-        // Convert the mdbytes array into a hex string.
-        return toHexString(mdbytes);
-    }
-
-    public Response generateChallenge(HeaderFactory headerFactory, Response response, String realm) {
-        try {
-            WWWAuthenticateHeader proxyAuthenticate = headerFactory
-                    .createWWWAuthenticateHeader(DEFAULT_SCHEME);
-            proxyAuthenticate.setParameter("realm", realm);
-            proxyAuthenticate.setParameter("qop", "auth");
-            proxyAuthenticate.setParameter("nonce", generateNonce());
-            proxyAuthenticate.setParameter("algorithm", DEFAULT_ALGORITHM);
-
-            response.setHeader(proxyAuthenticate);
-        } catch (Exception ex) {
-            InternalErrorHandler.handleException(ex);
-        }
-        return response;
-    }
-    /**
-     * Authenticate the inbound request.
-     *
-     * @param request - the request to authenticate.
-     * @param hashedPassword -- the MD5 hashed string of username:realm:plaintext password.
-     *
-     * @return true if authentication succeded and false otherwise.
-     */
-    public boolean doAuthenticateHashedPassword(Request request, String hashedPassword) {
-        AuthorizationHeader authHeader = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
-        if ( authHeader == null ) return false;
-        String realm = authHeader.getRealm();
-        String username = authHeader.getUsername();
-
-        if ( username == null || realm == null ) {
-            return false;
-        }
-
-        String nonce = authHeader.getNonce();
-        URI uri = authHeader.getURI();
-        if (uri == null) {
-            return false;
-        }
-
-
-
-        String A2 = request.getMethod().toUpperCase() + ":" + uri.toString();
-        String HA1 = hashedPassword;
-
-
-        byte[] mdbytes = messageDigest.digest(A2.getBytes());
-        String HA2 = toHexString(mdbytes);
-
-        String cnonce = authHeader.getCNonce();
-        String KD = HA1 + ":" + nonce;
-        if (cnonce != null) {
-            KD += ":" + cnonce;
-        }
-        KD += ":" + HA2;
-        mdbytes = messageDigest.digest(KD.getBytes());
-        String mdString = toHexString(mdbytes);
-        String response = authHeader.getResponse();
-
-
-        return mdString.equals(response);
-    }
-
-    /**
-     * Authenticate the inbound request given plain text password.
-     *
-     * @param request - the request to authenticate.
-     * @param pass -- the plain text password.
-     *
-     * @return true if authentication succeded and false otherwise.
-     */
-    public boolean doAuthenticatePlainTextPassword(Request request, String pass) {
-        AuthorizationHeader authHeader = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
-        if ( authHeader == null ) return false;
-        String realm = authHeader.getRealm().trim();
-        String username = authHeader.getUsername().trim();
-
-        if ( username == null || realm == null ) {
-            return false;
-        }
-
-        String nonce = authHeader.getNonce();
-        URI uri = authHeader.getURI();
-        if (uri == null) {
-            return false;
-        }
-        // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略
-        String qop = authHeader.getQop();
-
-        // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。
-        // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
-        String cnonce = authHeader.getCNonce();
-
-        // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量
-        int nc = authHeader.getNonceCount();
-        String ncStr = String.format("%08x", nc).toUpperCase();
-        // String ncStr = new DecimalFormat("00000000").format(nc);
-        // String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16));
-
-        String A1 = username + ":" + realm + ":" + pass;
-        String A2 = request.getMethod().toUpperCase() + ":" + uri.toString();
-        byte mdbytes[] = messageDigest.digest(A1.getBytes());
-        String HA1 = toHexString(mdbytes);
-        logger.debug("A1: " + A1);
-        logger.debug("A2: " + A2);
-
-        mdbytes = messageDigest.digest(A2.getBytes());
-        String HA2 = toHexString(mdbytes);
-        logger.debug("HA1: " + HA1);
-        logger.debug("HA2: " + HA2);
-        // String cnonce = authHeader.getCNonce();
-        logger.debug("nonce: " + nonce);
-        logger.debug("nc: " + ncStr);
-        logger.debug("cnonce: " + cnonce);
-        logger.debug("qop: " + qop);
-        String KD = HA1 + ":" + nonce;
-
-        if (qop != null && qop.equals("auth") ) {
-            if (nc != -1) {
-                KD += ":" + ncStr;
-            }
-            if (cnonce != null) {
-                KD += ":" + cnonce;
-            }
-            KD += ":" + qop;
-        }
-        KD += ":" + HA2;
-        logger.debug("KD: " + KD);
-        mdbytes = messageDigest.digest(KD.getBytes());
-        String mdString = toHexString(mdbytes);
-        logger.debug("mdString: " + mdString);
-        String response = authHeader.getResponse();
-        logger.debug("response: " + response);
-        return mdString.equals(response);
-
-    }
-
-//     public static void main(String[] args) throws NoSuchAlgorithmException {
-//         String realm = "3402000000";
-//         String username = "44010000001180008012";
-
-
-//         String nonce = "07cab60999fbf643264ace27d3b7de8b";
-//         String uri = "sip:34020000002000000001@3402000000";
-//         // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略
-//         String qop = "auth";
-
-//         // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。
-//         // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
-//         //String cNonce = authHeader.getCNonce();
-
-//         // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量
-//         int nc = 1;
-//         String ncStr = new DecimalFormat("00000000").format(nc);
-// //        String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16));
-//         MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM);
-//         String A1 = username + ":" + realm + ":" + "12345678";
-//         String A2 = "REGISTER" + ":" + uri;
-//         byte mdbytes[] = messageDigest.digest(A1.getBytes());
-//         String HA1 = toHexString(mdbytes);
-//         System.out.println("A1: " + A1);
-//         System.out.println("A2: " + A2);
-
-//         mdbytes = messageDigest.digest(A2.getBytes());
-//         String HA2 = toHexString(mdbytes);
-//         System.out.println("HA1: " + HA1);
-//         System.out.println("HA2: " + HA2);
-//         String cnonce = "0a4f113b";
-//         System.out.println("nonce: " + nonce);
-//         System.out.println("nc: " + ncStr);
-//         System.out.println("cnonce: " + cnonce);
-//         System.out.println("qop: " + qop);
-//         String KD = HA1 + ":" + nonce;
-
-//         if (qop != null && qop.equals("auth") ) {
-//             if (nc != -1) {
-//                 KD += ":" + ncStr;
-//             }
-//             if (cnonce != null) {
-//                 KD += ":" + cnonce;
-//             }
-//             KD += ":" + qop;
-//         }
-//         KD += ":" + HA2;
-//         System.out.println("KD: " + KD);
-//         mdbytes = messageDigest.digest(KD.getBytes());
-//         String mdString = toHexString(mdbytes);
-//         System.out.println("mdString: " + mdString);
-//         String response = "4f0507d4b87cdecff04bdaf4c96348f0";
-//         System.out.println("response: " + response);
-//     }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
deleted file mode 100644
index b26a38b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.auth;
-
-import com.genersoft.iot.vmp.storager.impl.VideoManagerStoragerImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-
-/**    
- * @description:注册逻辑处理,当设备注册后触发逻辑。
- * @author: swwheihei
- * @date:   2020年5月8日 下午9:41:46     
- */
-@Component
-public class RegisterLogicHandler {
-
-	private Logger logger = LoggerFactory.getLogger(RegisterLogicHandler.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private VideoManagerStoragerImpl storager;
-	
-	public void onRegister(Device device) {
-		// 只有第一次注册时调用查询设备信息,如需更新调用更新API接口
-//		// TODO 此处错误无法获取到通道
-//		Device device1 = storager.queryVideoDevice(device.getDeviceId());
-//		if (device.isFirsRegister()) {
-//			logger.info("[{}] 首次注册,查询设备信息以及通道信息", device.getDeviceId());
-//			try {
-//				Thread.sleep(100);
-//				cmder.deviceInfoQuery(device);
-//				Thread.sleep(100);
-//				cmder.catalogQuery(device, null);
-//			} catch (InterruptedException e) {
-//				e.printStackTrace();
-//			}
-//		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/BaiduPoint.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/BaiduPoint.java
deleted file mode 100644
index 8f33f30..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/BaiduPoint.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class BaiduPoint {
-
-    String bdLng;
-
-    String bdLat;
-
-    public String getBdLng() {
-        return bdLng;
-    }
-
-    public void setBdLng(String bdLng) {
-        this.bdLng = bdLng;
-    }
-
-    public String getBdLat() {
-        return bdLat;
-    }
-
-    public void setBdLat(String bdLat) {
-        this.bdLat = bdLat;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
deleted file mode 100644
index c74fb87..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import java.util.Date;
-import java.util.List;
-
-public class CatalogData {
-    private int total;
-    private List<DeviceChannel> channelList;
-    private Date lastTime;
-    private Device device;
-
-    public int getTotal() {
-        return total;
-    }
-
-    public void setTotal(int total) {
-        this.total = total;
-    }
-
-    public List<DeviceChannel> getChannelList() {
-        return channelList;
-    }
-
-    public void setChannelList(List<DeviceChannel> channelList) {
-        this.channelList = channelList;
-    }
-
-    public Date getLastTime() {
-        return lastTime;
-    }
-
-    public void setLastTime(Date lastTime) {
-        this.lastTime = lastTime;
-    }
-
-    public Device getDevice() {
-        return device;
-    }
-
-    public void setDevice(Device device) {
-        this.device = device;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CmdType.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CmdType.java
deleted file mode 100644
index ed5cad6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CmdType.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class CmdType {
-
-    public static final String CATALOG = "Catalog";
-    public static final String ALARM = "Alarm";
-    public static final String MOBILE_POSITION = "MobilePosition";
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
deleted file mode 100644
index 01d340c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-
-public class Device {
-
-	/**
-	 * 设备Id
-	 */
-	private String deviceId;
-
-	/**
-	 * 设备名
-	 */
-	private String name;
-	
-	/**
-	 * 生产厂商
-	 */
-	private String manufacturer;
-	
-	/**
-	 * 型号
-	 */
-	private String model;
-	
-	/**
-	 * 固件版本
-	 */
-	private String firmware;
-
-	/**
-	 * 传输协议
-	 * UDP/TCP
-	 */
-	private String transport;
-
-	/**
-	 * 数据流传输模式
-	 * UDP:udp传输
-	 * TCP-ACTIVE:tcp主动模式
-	 * TCP-PASSIVE:tcp被动模式
-	 */
-	private String streamMode;
-
-	/**
-	 * wan地址_ip
-	 */
-	private String  ip;
-
-	/**
-	 * wan地址_port
-	 */
-	private int port;
-
-	/**
-	 * wan地址
-	 */
-	private String  hostAddress;
-	
-	/**
-	 * 在线
-	 */
-	private int online;
-
-
-	/**
-	 * 注册时间
-	 */
-	private String registerTime;
-
-
-	/**
-	 * 心跳时间
-	 */
-	private String keepaliveTime;
-
-	/**
-	 * 通道个数
-	 */
-	private int channelCount;
-
-	/**
-	 * 注册有效期
-	 */
-	private int expires;
-
-	/**
-	 * 创建时间
-	 */
-	private String createTime;
-
-	/**
-	 * 更新时间
-	 */
-	private String updateTime;
-
-	/**
-	 * 设备使用的媒体id, 默认为null
-	 */
-	private String mediaServerId;
-
-	/**
-	 * 首次注册
-	 */
-	private boolean firsRegister;
-
-	/**
-	 * 字符集, 支持 UTF-8 与 GB2312
-	 */
-	private String charset ;
-
-	/**
-	 * 目录订阅周期,0为不订阅
-	 */
-	private int subscribeCycleForCatalog ;
-
-
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getManufacturer() {
-		return manufacturer;
-	}
-
-	public void setManufacturer(String manufacturer) {
-		this.manufacturer = manufacturer;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public String getFirmware() {
-		return firmware;
-	}
-
-	public void setFirmware(String firmware) {
-		this.firmware = firmware;
-	}
-
-	public String getTransport() {
-		return transport;
-	}
-
-	public void setTransport(String transport) {
-		this.transport = transport;
-	}
-
-	public String getStreamMode() {
-		return streamMode;
-	}
-
-	public void setStreamMode(String streamMode) {
-		this.streamMode = streamMode;
-	}
-
-	public String getIp() {
-		return ip;
-	}
-
-	public void setIp(String ip) {
-		this.ip = ip;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	public String getHostAddress() {
-		return hostAddress;
-	}
-
-	public void setHostAddress(String hostAddress) {
-		this.hostAddress = hostAddress;
-	}
-
-	public int getOnline() {
-		return online;
-	}
-
-	public void setOnline(int online) {
-		this.online = online;
-	}
-
-	public int getChannelCount() {
-		return channelCount;
-	}
-
-	public void setChannelCount(int channelCount) {
-		this.channelCount = channelCount;
-	}
-
-	public String getRegisterTime() {
-		return registerTime;
-	}
-
-	public void setRegisterTime(String registerTime) {
-		this.registerTime = registerTime;
-	}
-
-	public String getKeepaliveTime() {
-		return keepaliveTime;
-	}
-
-	public void setKeepaliveTime(String keepaliveTime) {
-		this.keepaliveTime = keepaliveTime;
-	}
-
-	public int getExpires() {
-		return expires;
-	}
-
-	public void setExpires(int expires) {
-		this.expires = expires;
-	}
-
-	public String getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(String createTime) {
-		this.createTime = createTime;
-	}
-
-	public String getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(String updateTime) {
-		this.updateTime = updateTime;
-	}
-
-	public String getMediaServerId() {
-		return mediaServerId;
-	}
-
-	public void setMediaServerId(String mediaServerId) {
-		this.mediaServerId = mediaServerId;
-	}
-
-	public boolean isFirsRegister() {
-		return firsRegister;
-	}
-
-	public void setFirsRegister(boolean firsRegister) {
-		this.firsRegister = firsRegister;
-	}
-
-	public String getCharset() {
-		return charset;
-	}
-
-	public void setCharset(String charset) {
-		this.charset = charset;
-	}
-
-	public int getSubscribeCycleForCatalog() {
-		return subscribeCycleForCatalog;
-	}
-
-	public void setSubscribeCycleForCatalog(int subscribeCycleForCatalog) {
-		this.subscribeCycleForCatalog = subscribeCycleForCatalog;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java
deleted file mode 100644
index 51616fb..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-
-public class DeviceAlarm {
-
-	/**
-	 * 数据库id
-	 */
-	private String id;
-
-	/**
-	 * 设备Id
-	 */
-	private String deviceId;
-
-	/**
-	 * 通道Id
-	 */
-	private String channelId;
-
-	/**
-	 * 报警级别, 1为一级警情, 2为二级警情, 3为三级警情, 4为四级 警情-
-	 */
-	private String alarmPriority;
-
-	/**
-	 * 报警方式 , 1为电话报警, 2为设备报警, 3为短信报警, 4为 GPS报警, 5为视频报警, 6为设备故障报警,
-	 * 7其他报警;可以为直接组合如12为电话报警或 设备报警-
-	 */
-	private String alarmMethod;
-
-	/**
-	 * 报警时间
-	 */
-	private String alarmTime;
-
-	/**
-	 * 报警内容描述
-	 */
-	private String alarmDescription;
-
-	/**
-	 * 经度
-	 */
-	private double longitude;
-
-	/**
-	 * 纬度
-	 */
-	private double latitude;
-
-	/**
-	 * 报警类型
-	 */
-	private String alarmType;
-
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getAlarmPriority() {
-		return alarmPriority;
-	}
-
-	public void setAlarmPriority(String alarmPriority) {
-		this.alarmPriority = alarmPriority;
-	}
-
-	public String getAlarmMethod() {
-		return alarmMethod;
-	}
-
-	public void setAlarmMethod(String alarmMethod) {
-		this.alarmMethod = alarmMethod;
-	}
-
-	public String getAlarmTime() {
-		return alarmTime;
-	}
-
-	public void setAlarmTime(String alarmTime) {
-		this.alarmTime = alarmTime;
-	}
-
-	public String getAlarmDescription() {
-		return alarmDescription;
-	}
-
-	public void setAlarmDescription(String alarmDescription) {
-		this.alarmDescription = alarmDescription;
-	}
-
-	public double getLongitude() {
-		return longitude;
-	}
-
-	public void setLongitude(double longitude) {
-		this.longitude = longitude;
-	}
-
-	public double getLatitude() {
-		return latitude;
-	}
-
-	public void setLatitude(double latitude) {
-		this.latitude = latitude;
-	}
-
-	public String getAlarmType() {
-		return alarmType;
-	}
-
-	public void setAlarmType(String alarmType) {
-		this.alarmType = alarmType;
-	}
-
-	public String getChannelId() {
-		return channelId;
-	}
-
-	public void setChannelId(String channelId) {
-		this.channelId = channelId;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
deleted file mode 100644
index 3633789..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
+++ /dev/null
@@ -1,444 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class DeviceChannel {
-
-
-	/**
-	 * 数据库自赠ID
-	 */
-	private int id;
-
-	/**
-	 * 通道id
-	 */
-	private String channelId;
-
-	/**
-	 * 设备id
-	 */
-	private String deviceId;
-	
-	/**
-	 * 通道名
-	 */
-	private String name;
-	
-	/**
-	 * 生产厂商
-	 */
-	private String manufacture;
-	
-	/**
-	 * 型号
-	 */
-	private String model;
-	
-	/**
-	 * 设备归属
-	 */
-	private String owner;
-	
-	/**
-	 * 行政区域
-	 */
-	private String civilCode;
-	
-	/**
-	 * 警区
-	 */
-	private String block;
-
-	/**
-	 * 安装地址
-	 */
-	private String address;
-	
-	/**
-	 * 是否有子设备 1有, 0没有
-	 */
-	private int parental;
-	
-	/**
-	 * 父级id
-	 */
-	private String parentId;
-	
-	/**
-	 * 信令安全模式  缺省为0; 0:不采用; 2: S/MIME签名方式; 3: S/ MIME加密签名同时采用方式; 4:数字摘要方式
-	 */
-	private int safetyWay;
-	
-	/**
-	 * 注册方式 缺省为1;1:符合IETFRFC3261标准的认证注册模 式; 2:基于口令的双向认证注册模式; 3:基于数字证书的双向认证注册模式
-	 */
-	private int registerWay;
-	
-	/**
-	 * 证书序列号
-	 */
-	private String certNum;
-	
-	/**
-	 * 证书有效标识 缺省为0;证书有效标识:0:无效1: 有效
-	 */
-	private int certifiable;
-	
-	/**
-	 * 证书无效原因码
-	 */
-	private int errCode;
-	
-	/**
-	 * 证书终止有效期
-	 */
-	private String endTime;
-	
-	/**
-	 * 保密属性 缺省为0; 0:不涉密, 1:涉密
-	 */
-	private String secrecy;
-	
-	/**
-	 * IP地址
-	 */
-	private String ipAddress;
-	
-	/**
-	 * 端口号
-	 */
-	private int port;
-	
-	/**
-	 * 密码
-	 */
-	private String password;
-
-	/**
-	 * 云台类型
-	 */
-	private int PTZType;
-
-	/**
-	 * 云台类型描述字符串
-	 */
-	private String PTZTypeText;
-
-	/**
-	 * 创建时间
-	 */
-	private String createTime;
-
-	/**
-	 * 更新时间
-	 */
-	private String updateTime;
-	
-	/**
-	 * 在线/离线
-	 * 1在线,0离线
-	 * 默认在线
-	 * 信令:
-	 * <Status>ON</Status>
-	 * <Status>OFF</Status>
-	 * 遇到过NVR下的IPC下发信令可以推流, 但是 Status 响应 OFF
-	 */
-	private int status;
-
-	/**
-	 * 经度
-	 */
-	private double longitude;
-	
-	/**
-	 * 纬度
-	 */
-	private double latitude;
-
-	/**
-	 * 子设备数
-	 */
-	private int subCount;
-
-	/**
-	 * 流唯一编号,存在表示正在直播
-	 */
-	private String  streamId;
-
-	/**
-	 *  是否含有音频
-	 */
-	private boolean hasAudio;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public void setPTZType(int PTZType) {
-		this.PTZType = PTZType;
-		switch (PTZType) {
-			case 0:
-				this.PTZTypeText = "未知";
-				break;
-			case 1:
-				this.PTZTypeText = "球机";
-				break;
-			case 2:
-				this.PTZTypeText = "半球";
-				break;
-			case 3:
-				this.PTZTypeText = "固定枪机";
-				break;
-			case 4:
-				this.PTZTypeText = "遥控枪机";
-				break;
-		}
-	}
-
-	public String getChannelId() {
-		return channelId;
-	}
-
-	public void setChannelId(String channelId) {
-		this.channelId = channelId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getManufacture() {
-		return manufacture;
-	}
-
-	public void setManufacture(String manufacture) {
-		this.manufacture = manufacture;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public String getOwner() {
-		return owner;
-	}
-
-	public void setOwner(String owner) {
-		this.owner = owner;
-	}
-
-	public String getCivilCode() {
-		return civilCode;
-	}
-
-	public void setCivilCode(String civilCode) {
-		this.civilCode = civilCode;
-	}
-
-	public String getBlock() {
-		return block;
-	}
-
-	public void setBlock(String block) {
-		this.block = block;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public int getParental() {
-		return parental;
-	}
-
-	public void setParental(int parental) {
-		this.parental = parental;
-	}
-
-	public String getParentId() {
-		return parentId;
-	}
-
-	public void setParentId(String parentId) {
-		this.parentId = parentId;
-	}
-
-	public int getSafetyWay() {
-		return safetyWay;
-	}
-
-	public void setSafetyWay(int safetyWay) {
-		this.safetyWay = safetyWay;
-	}
-
-	public int getRegisterWay() {
-		return registerWay;
-	}
-
-	public void setRegisterWay(int registerWay) {
-		this.registerWay = registerWay;
-	}
-
-	public String getCertNum() {
-		return certNum;
-	}
-
-	public void setCertNum(String certNum) {
-		this.certNum = certNum;
-	}
-
-	public int getCertifiable() {
-		return certifiable;
-	}
-
-	public void setCertifiable(int certifiable) {
-		this.certifiable = certifiable;
-	}
-
-	public int getErrCode() {
-		return errCode;
-	}
-
-	public void setErrCode(int errCode) {
-		this.errCode = errCode;
-	}
-
-	public String getEndTime() {
-		return endTime;
-	}
-
-	public void setEndTime(String endTime) {
-		this.endTime = endTime;
-	}
-
-	public String getSecrecy() {
-		return secrecy;
-	}
-
-	public void setSecrecy(String secrecy) {
-		this.secrecy = secrecy;
-	}
-
-	public String getIpAddress() {
-		return ipAddress;
-	}
-
-	public void setIpAddress(String ipAddress) {
-		this.ipAddress = ipAddress;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public int getPTZType() {
-		return PTZType;
-	}
-
-	public String getPTZTypeText() {
-		return PTZTypeText;
-	}
-
-	public void setPTZTypeText(String PTZTypeText) {
-		this.PTZTypeText = PTZTypeText;
-	}
-
-	public int getStatus() {
-		return status;
-	}
-
-	public void setStatus(int status) {
-		this.status = status;
-	}
-
-	public double getLongitude() {
-		return longitude;
-	}
-
-	public void setLongitude(double longitude) {
-		this.longitude = longitude;
-	}
-
-	public double getLatitude() {
-		return latitude;
-	}
-
-	public void setLatitude(double latitude) {
-		this.latitude = latitude;
-	}
-
-	public int getSubCount() {
-		return subCount;
-	}
-
-	public void setSubCount(int subCount) {
-		this.subCount = subCount;
-	}
-
-	public boolean isHasAudio() {
-		return hasAudio;
-	}
-
-	public void setHasAudio(boolean hasAudio) {
-		this.hasAudio = hasAudio;
-	}
-
-	public String getStreamId() {
-		return streamId;
-	}
-
-	public void setStreamId(String streamId) {
-		this.streamId = streamId;
-	}
-
-	public String getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(String createTime) {
-		this.createTime = createTime;
-	}
-
-	public String getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(String updateTime) {
-		this.updateTime = updateTime;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceNotFoundEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceNotFoundEvent.java
deleted file mode 100644
index 4e55011..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceNotFoundEvent.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import javax.sip.Dialog;
-import java.util.EventObject;
-
-public class DeviceNotFoundEvent extends EventObject {
-    /**
-     * Constructs a prototypical Event.
-     *
-     * @param dialog
-     * @throws IllegalArgumentException if source is null.
-     */
-    public DeviceNotFoundEvent(Dialog dialog) {
-        super(dialog);
-    }
-
-
-    public Dialog getDialog() {
-        return (Dialog)super.getSource();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java
deleted file mode 100644
index 1b77dde..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-/**
- * 直播流关联国标上级平台
- */
-public class GbStream extends PlatformGbStream{
-
-    private Integer gbStreamId;
-    private String app;
-    private String stream;
-    private String gbId;
-    private String name;
-    private String mediaServerId;
-    private double longitude;
-    private double latitude;
-    private String streamType;
-    private boolean status;
-    /**
-     * GMT unix系统时间戳,单位秒
-     */
-    public Long createStamp;
-
-    @Override
-    public Integer getGbStreamId() {
-        return gbStreamId;
-    }
-
-    public void setGbStreamId(Integer gbStreamId) {
-        this.gbStreamId = gbStreamId;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getGbId() {
-        return gbId;
-    }
-
-    public void setGbId(String gbId) {
-        this.gbId = gbId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public double getLongitude() {
-        return longitude;
-    }
-
-    public void setLongitude(double longitude) {
-        this.longitude = longitude;
-    }
-
-    public double getLatitude() {
-        return latitude;
-    }
-
-    public void setLatitude(double latitude) {
-        this.latitude = latitude;
-    }
-
-    public String getStreamType() {
-        return streamType;
-    }
-
-    public void setStreamType(String streamType) {
-        this.streamType = streamType;
-    }
-
-    public boolean isStatus() {
-        return status;
-    }
-
-    public void setStatus(boolean status) {
-        this.status = status;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-
-    public Long getCreateStamp() {
-        return createStamp;
-    }
-
-    public void setCreateStamp(Long createStamp) {
-        this.createStamp = createStamp;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Host.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Host.java
deleted file mode 100644
index 1b14560..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Host.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-
-
-public class Host {
-	
-	private String ip;
-	private int port;
-	private String address;
-
-
-	public String getIp() {
-		return ip;
-	}
-
-	public void setIp(String ip) {
-		this.ip = ip;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamCallback.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamCallback.java
deleted file mode 100644
index 42a0519..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamCallback.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public interface InviteStreamCallback {
-    void call(InviteStreamInfo inviteStreamInfo);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamInfo.java
deleted file mode 100644
index 3f3c583..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamInfo.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-
-public class InviteStreamInfo {
-
-    public InviteStreamInfo(MediaServerItem mediaServerItem, JSONObject response, String callId, String app, String stream) {
-        this.mediaServerItem = mediaServerItem;
-        this.response = response;
-        this.callId = callId;
-        this.app = app;
-        this.stream = stream;
-    }
-
-    private MediaServerItem mediaServerItem;
-    private JSONObject response;
-    private String callId;
-    private String app;
-    private String stream;
-
-    public MediaServerItem getMediaServerItem() {
-        return mediaServerItem;
-    }
-
-    public void setMediaServerItem(MediaServerItem mediaServerItem) {
-        this.mediaServerItem = mediaServerItem;
-    }
-
-    public JSONObject getResponse() {
-        return response;
-    }
-
-    public void setResponse(JSONObject response) {
-        this.response = response;
-    }
-
-    public String getCallId() {
-        return callId;
-    }
-
-    public void setCallId(String callId) {
-        this.callId = callId;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java
deleted file mode 100644
index c6cf782..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-/**
- * @description: 移动位置bean
- * @author: lawrencehj
- * @date: 2021年1月23日
- */
-
-public class MobilePosition {
-    /**
-     * 设备Id
-     */
-    private String deviceId;
-
-    /**
-     * 通道Id
-     */
-    private String channelId;
-
-    /**
-     * 设备名称
-     */
-    private String deviceName;
-
-    /**
-     * 通知时间
-     */
-    private String time;
-
-    /**
-     * 经度
-     */
-    private double longitude;
-
-    /**
-     * 纬度
-     */
-    private double latitude;
-
-    /**
-     * 海拔高度
-     */
-    private double altitude;
-
-    /**
-     * 速度
-     */
-    private double speed;
-
-    /**
-     * 方向
-     */
-    private double direction;
-
-    /**
-     * 位置信息上报来源(Mobile Position、GPS Alarm)
-     */
-    private String reportSource;
-
-    /**
-     * 国内地理坐标系(GCJ-02 / BD-09)
-     */
-    private String GeodeticSystem;
-
-    /**
-     * 国内坐标系:经度坐标
-     */
-    private String cnLng;
-
-    /**
-     * 国内坐标系:纬度坐标
-     */
-    private String cnLat;
-
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getDeviceName() {
-        return deviceName;
-    }
-
-    public void setDeviceName(String deviceName) {
-        this.deviceName = deviceName;
-    }
-
-    public String getTime() {
-        return time;
-    }
-
-    public void setTime(String time) {
-        this.time = time;
-    }
-
-    public double getLongitude() {
-        return longitude;
-    }
-
-    public void setLongitude(double longitude) {
-        this.longitude = longitude;
-    }
-    
-    public double getLatitude() {
-        return latitude;
-    }
-
-    public void setLatitude(double latitude) {
-        this.latitude = latitude;
-    }
-
-    public double getAltitude() {
-        return altitude;
-    }
-
-    public void setAltitude(double altitude) {
-        this.altitude = altitude;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-
-    public double getDirection() {
-        return direction;
-    }
-
-    public void setDirection(double direction) {
-        this.direction = direction;
-    }
-
-    public String getReportSource() {
-        return reportSource;
-    }
-
-    public void setReportSource(String reportSource) {
-        this.reportSource = reportSource;
-    }
-
-    public String getGeodeticSystem() {
-        return GeodeticSystem;
-    }
-
-    public void setGeodeticSystem(String geodeticSystem) {
-        GeodeticSystem = geodeticSystem;
-    }
-
-    public String getCnLng() {
-        return cnLng;
-    }
-
-    public void setCnLng(String cnLng) {
-        this.cnLng = cnLng;
-    }
-
-    public String getCnLat() {
-        return cnLat;
-    }
-
-    public void setCnLat(String cnLat) {
-        this.cnLat = cnLat;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
deleted file mode 100644
index 8df7939..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
+++ /dev/null
@@ -1,332 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class ParentPlatform {
-
-    /**
-     * id
-     */
-    private Integer id;
-
-    /**
-     * 是否启用
-     */
-    private boolean enable;
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * SIP服务国标编码
-     */
-    private String serverGBId;
-
-    /**
-     * SIP服务国标域
-     */
-    private String serverGBDomain;
-
-    /**
-     * SIP服务IP
-     */
-    private String serverIP;
-
-    /**
-     * SIP服务端口
-     */
-    private int serverPort;
-
-    /**
-     * 设备国标编号
-     */
-    private String deviceGBId;
-
-    /**
-     * 设备ip
-     */
-    private String deviceIp;
-
-    /**
-     * 设备端口
-     */
-    private String devicePort;
-
-    /**
-     * SIP认证用户名(默认使用设备国标编号)
-     */
-    private String username;
-
-    /**
-     * SIP认证密码
-     */
-    private String password;
-
-    /**
-     * 注册周期 (秒)
-     */
-    private String expires;
-
-    /**
-     * 心跳周期(秒)
-     */
-    private String keepTimeout;
-
-    /**
-     * 传输协议
-     * UDP/TCP
-     */
-    private String transport;
-
-    /**
-     * 字符集
-     */
-    private String characterSet;
-
-    /**
-     * 允许云台控制
-     */
-    private boolean ptz;
-
-    /**
-     * RTCP流保活
-     * TODO 预留, 暂不实现
-     */
-    private boolean rtcp;
-
-    /**
-     * 在线状态
-     */
-    private boolean status;
-
-    /**
-     * 在线状态
-     */
-    private int channelCount;
-
-    /**
-     * 共享所有的直播流
-     */
-    private boolean shareAllLiveStream;
-
-    /**
-     * 默认目录Id,自动添加的通道多放在这个目录下
-     */
-    private String catalogId;
-
-    /**
-     * 已被订阅目录信息
-     */
-    private boolean catalogSubscribe;
-
-    /**
-     * 已被订阅报警信息
-     */
-    private boolean alarmSubscribe;
-
-    /**
-     * 已被订阅GPS信息
-     */
-    private boolean gpsSubscribe;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public boolean isEnable() {
-        return enable;
-    }
-
-    public void setEnable(boolean enable) {
-        this.enable = enable;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getServerGBId() {
-        return serverGBId;
-    }
-
-    public void setServerGBId(String serverGBId) {
-        this.serverGBId = serverGBId;
-    }
-
-    public String getServerGBDomain() {
-        return serverGBDomain;
-    }
-
-    public void setServerGBDomain(String serverGBDomain) {
-        this.serverGBDomain = serverGBDomain;
-    }
-
-    public String getServerIP() {
-        return serverIP;
-    }
-
-    public void setServerIP(String serverIP) {
-        this.serverIP = serverIP;
-    }
-
-    public int getServerPort() {
-        return serverPort;
-    }
-
-    public void setServerPort(int serverPort) {
-        this.serverPort = serverPort;
-    }
-
-    public String getDeviceGBId() {
-        return deviceGBId;
-    }
-
-    public void setDeviceGBId(String deviceGBId) {
-        this.deviceGBId = deviceGBId;
-    }
-
-    public String getDeviceIp() {
-        return deviceIp;
-    }
-
-    public void setDeviceIp(String deviceIp) {
-        this.deviceIp = deviceIp;
-    }
-
-    public String getDevicePort() {
-        return devicePort;
-    }
-
-    public void setDevicePort(String devicePort) {
-        this.devicePort = devicePort;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getExpires() {
-        return expires;
-    }
-
-    public void setExpires(String expires) {
-        this.expires = expires;
-    }
-
-    public String getKeepTimeout() {
-        return keepTimeout;
-    }
-
-    public void setKeepTimeout(String keepTimeout) {
-        this.keepTimeout = keepTimeout;
-    }
-
-    public String getTransport() {
-        return transport;
-    }
-
-    public void setTransport(String transport) {
-        this.transport = transport;
-    }
-
-    public String getCharacterSet() {
-        return characterSet;
-    }
-
-    public void setCharacterSet(String characterSet) {
-        this.characterSet = characterSet;
-    }
-
-    public boolean isPtz() {
-        return ptz;
-    }
-
-    public void setPtz(boolean ptz) {
-        this.ptz = ptz;
-    }
-
-    public boolean isRtcp() {
-        return rtcp;
-    }
-
-    public void setRtcp(boolean rtcp) {
-        this.rtcp = rtcp;
-    }
-
-    public boolean isStatus() {
-        return status;
-    }
-
-    public void setStatus(boolean status) {
-        this.status = status;
-    }
-
-    public int getChannelCount() {
-        return channelCount;
-    }
-
-    public void setChannelCount(int channelCount) {
-        this.channelCount = channelCount;
-    }
-
-
-    public boolean isShareAllLiveStream() {
-        return shareAllLiveStream;
-    }
-
-    public void setShareAllLiveStream(boolean shareAllLiveStream) {
-        this.shareAllLiveStream = shareAllLiveStream;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-
-    public boolean isCatalogSubscribe() {
-        return catalogSubscribe;
-    }
-
-    public void setCatalogSubscribe(boolean catalogSubscribe) {
-        this.catalogSubscribe = catalogSubscribe;
-    }
-
-    public boolean isAlarmSubscribe() {
-        return alarmSubscribe;
-    }
-
-    public void setAlarmSubscribe(boolean alarmSubscribe) {
-        this.alarmSubscribe = alarmSubscribe;
-    }
-
-    public boolean isGpsSubscribe() {
-        return gpsSubscribe;
-    }
-
-    public void setGpsSubscribe(boolean gpsSubscribe) {
-        this.gpsSubscribe = gpsSubscribe;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java
deleted file mode 100644
index 6c429f2..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class ParentPlatformCatch {
-
-    private String id;
-
-    // 心跳未回复次数
-    private int keepAliveReply;
-
-    // 注册未回复次数
-    private int registerAliveReply;
-
-    private String callId;
-
-    private ParentPlatform parentPlatform;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public int getKeepAliveReply() {
-        return keepAliveReply;
-    }
-
-    public void setKeepAliveReply(int keepAliveReply) {
-        this.keepAliveReply = keepAliveReply;
-    }
-
-    public int getRegisterAliveReply() {
-        return registerAliveReply;
-    }
-
-    public void setRegisterAliveReply(int registerAliveReply) {
-        this.registerAliveReply = registerAliveReply;
-    }
-
-    public ParentPlatform getParentPlatform() {
-        return parentPlatform;
-    }
-
-    public void setParentPlatform(ParentPlatform parentPlatform) {
-        this.parentPlatform = parentPlatform;
-    }
-
-    public String getCallId() {
-        return callId;
-    }
-
-    public void setCallId(String callId) {
-        this.callId = callId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformCatalog.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformCatalog.java
deleted file mode 100644
index 065971d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformCatalog.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class PlatformCatalog {
-    private String id;
-    private String name;
-    private String platformId;
-    private String parentId;
-    private int childrenCount; // 子节点数
-    private int type; // 0 目录, 1 国标通道, 2 直播流
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public String getParentId() {
-        return parentId;
-    }
-
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    public int getChildrenCount() {
-        return childrenCount;
-    }
-
-    public void setChildrenCount(int childrenCount) {
-        this.childrenCount = childrenCount;
-    }
-
-    public int getType() {
-        return type;
-    }
-
-    public void setType(int type) {
-        this.type = type;
-    }
-
-    public void setTypeForCatalog() {
-        this.type = 0;
-    }
-
-    public void setTypeForGb() {
-        this.type = 1;
-    }
-
-    public void setTypeForStream() {
-        this.type = 2;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformGbStream.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformGbStream.java
deleted file mode 100644
index f425dfa..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformGbStream.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class PlatformGbStream {
-    private Integer gbStreamId;
-    private String platformId;
-    private String catalogId;
-
-    public Integer getGbStreamId() {
-        return gbStreamId;
-    }
-
-    public void setGbStreamId(Integer gbStreamId) {
-        this.gbStreamId = gbStreamId;
-    }
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformRegister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformRegister.java
deleted file mode 100644
index 4a45862..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformRegister.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class PlatformRegister {
-
-    // 未回复次数
-    private int reply;
-
-    public int getReply() {
-        return reply;
-    }
-
-    public void setReply(int reply) {
-        this.reply = reply;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
deleted file mode 100644
index a6a5912..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-
-//import gov.nist.javax.sip.header.SIPDate;
-
-import java.util.List;
-
-/**    
- * @description:设备录像信息bean 
- * @author: swwheihei
- * @date:   2020年5月8日 下午2:05:56     
- */
-public class RecordInfo {
-
-	private String deviceId;
-
-	private String channelId;
-
-	private String sn;
-
-	private String name;
-	
-	private int sumNum;
-	
-	private List<RecordItem> recordList;
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int getSumNum() {
-		return sumNum;
-	}
-
-	public void setSumNum(int sumNum) {
-		this.sumNum = sumNum;
-	}
-
-	public List<RecordItem> getRecordList() {
-		return recordList;
-	}
-
-	public void setRecordList(List<RecordItem> recordList) {
-		this.recordList = recordList;
-	}
-
-	public String getChannelId() {
-		return channelId;
-	}
-
-	public void setChannelId(String channelId) {
-		this.channelId = channelId;
-	}
-
-	public String getSn() {
-		return sn;
-	}
-
-	public void setSn(String sn) {
-		this.sn = sn;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java
deleted file mode 100644
index da787be..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-
-import org.jetbrains.annotations.NotNull;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * @description:设备录像bean 
- * @author: swwheihei
- * @date:   2020年5月8日 下午2:06:54     
- */
-public class RecordItem  implements Comparable<RecordItem>{
-
-	private String deviceId;
-	
-	private String name;
-	
-	private String filePath;
-
-	private String fileSize;
-
-	private String address;
-	
-	private String startTime;
-	
-	private String endTime;
-	
-	private int secrecy;
-	
-	private String type;
-	
-	private String recorderId;
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getFilePath() {
-		return filePath;
-	}
-
-	public void setFilePath(String filePath) {
-		this.filePath = filePath;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public String getStartTime() {
-		return startTime;
-	}
-
-	public void setStartTime(String startTime) {
-		this.startTime = startTime;
-	}
-
-	public String getEndTime() {
-		return endTime;
-	}
-
-	public void setEndTime(String endTime) {
-		this.endTime = endTime;
-	}
-
-	public int getSecrecy() {
-		return secrecy;
-	}
-
-	public void setSecrecy(int secrecy) {
-		this.secrecy = secrecy;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getRecorderId() {
-		return recorderId;
-	}
-
-	public void setRecorderId(String recorderId) {
-		this.recorderId = recorderId;
-	}
-
-	public String getFileSize() {
-		return fileSize;
-	}
-
-	public void setFileSize(String fileSize) {
-		this.fileSize = fileSize;
-	}
-
-	@Override
-	public int compareTo(@NotNull RecordItem recordItem) {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		try {
-			Date startTime_now = sdf.parse(startTime);
-			Date startTime_param = sdf.parse(recordItem.getStartTime());
-			if (startTime_param.compareTo(startTime_now) > 0) {
-				return -1;
-			}else {
-				return 1;
-			}
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-		return 0;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SDPInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SDPInfo.java
deleted file mode 100644
index 39225b5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SDPInfo.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import javax.sdp.SessionDescription;
-
-public class SDPInfo {
-    private byte[] source;
-    private SessionDescription sdpSource;
-    private String sessionName;
-    private Long startTime;
-    private Long stopTime;
-    private String username;
-    private String address;
-    private String ssrc;
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java
deleted file mode 100644
index a2c38ac..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class SendRtpItem {
-
-    /**
-     * 推流ip
-     */
-    private String ip;
-
-    /**
-     * 推流端口
-     */
-    private int port;
-
-    /**
-     * 推流标识
-     */
-    private String ssrc;
-
-    /**
-     * 平台id
-     */
-    private String platformId;
-
-     /**
-     * 对应设备id
-     */
-    private String deviceId;
-
-    /**
-     * 直播流的应用名
-     */
-    private String app;
-
-   /**
-     * 通道id
-     */
-    private String channelId;
-
-    /**
-     * 推流状态
-     * 0 等待设备推流上来
-     * 1 等待上级平台回复ack
-     * 2 推流中
-     */
-    private int status = 0;
-
-
-    /**
-     * 设备推流的streamId
-     */
-    private String streamId;
-
-    /**
-     * 是否为tcp
-     */
-    private boolean tcp;
-
-    /**
-     * 是否为tcp主动模式
-     */
-    private boolean tcpActive;
-
-    /**
-     * 自己推流使用的端口
-     */
-    private int localPort;
-
-    /**
-     * 使用的流媒体
-     */
-    private String mediaServerId;
-
-    /**
-     *  invite的callId
-     */
-    private String CallId;
-
-    /**
-     * 是否是play, false是playback
-     */
-    private boolean isPlay;
-
-    private byte[] transaction;
-
-    private byte[] dialog;
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public String getSsrc() {
-        return ssrc;
-    }
-
-    public void setSsrc(String ssrc) {
-        this.ssrc = ssrc;
-    }
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-
-    public int getStatus() {
-        return status;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStreamId() {
-        return streamId;
-    }
-
-    public void setStreamId(String streamId) {
-        this.streamId = streamId;
-    }
-
-    public boolean isTcp() {
-        return tcp;
-    }
-
-    public void setTcp(boolean tcp) {
-        this.tcp = tcp;
-    }
-
-    public int getLocalPort() {
-        return localPort;
-    }
-
-    public void setLocalPort(int localPort) {
-        this.localPort = localPort;
-    }
-
-    public boolean isTcpActive() {
-        return tcpActive;
-    }
-
-    public void setTcpActive(boolean tcpActive) {
-        this.tcpActive = tcpActive;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public String getCallId() {
-        return CallId;
-    }
-
-    public void setCallId(String callId) {
-        CallId = callId;
-    }
-
-    public boolean isPlay() {
-        return isPlay;
-    }
-
-    public void setPlay(boolean play) {
-        isPlay = play;
-    }
-
-    public byte[] getTransaction() {
-        return transaction;
-    }
-
-    public void setTransaction(byte[] transaction) {
-        this.transaction = transaction;
-    }
-
-    public byte[] getDialog() {
-        return dialog;
-    }
-
-    public void setDialog(byte[] dialog) {
-        this.dialog = dialog;
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SsrcTransaction.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SsrcTransaction.java
deleted file mode 100644
index c2dedec..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SsrcTransaction.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-public class SsrcTransaction {
-
-    private String deviceId;
-    private String channelId;
-    private String callId;
-    private String stream;
-    private byte[] transaction;
-    private byte[] dialog;
-    private String mediaServerId;
-    private String ssrc;
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-
-    public String getCallId() {
-        return callId;
-    }
-
-    public void setCallId(String callId) {
-        this.callId = callId;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public byte[] getTransaction() {
-        return transaction;
-    }
-
-    public void setTransaction(byte[] transaction) {
-        this.transaction = transaction;
-    }
-
-    public byte[] getDialog() {
-        return dialog;
-    }
-
-    public void setDialog(byte[] dialog) {
-        this.dialog = dialog;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public String getSsrc() {
-        return ssrc;
-    }
-
-    public void setSsrc(String ssrc) {
-        this.ssrc = ssrc;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
deleted file mode 100644
index 62a45d5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Component
-public class SubscribeHolder {
-
-    private static ConcurrentHashMap<String, SubscribeInfo> catalogMap = new ConcurrentHashMap<>();
-    private static ConcurrentHashMap<String, SubscribeInfo> mobilePositionMap = new ConcurrentHashMap<>();
-
-
-    public void putCatalogSubscribe(String platformId, SubscribeInfo subscribeInfo) {
-        catalogMap.put(platformId, subscribeInfo);
-    }
-
-    public SubscribeInfo getCatalogSubscribe(String platformId) {
-        return catalogMap.get(platformId);
-    }
-
-    public void removeCatalogSubscribe(String platformId) {
-        catalogMap.remove(platformId);
-    }
-
-    public void putMobilePositionSubscribe(String platformId, SubscribeInfo subscribeInfo) {
-        mobilePositionMap.put(platformId, subscribeInfo);
-    }
-
-    public SubscribeInfo getMobilePositionSubscribe(String platformId) {
-        return mobilePositionMap.get(platformId);
-    }
-
-    public void removeMobilePositionSubscribe(String platformId) {
-        mobilePositionMap.remove(platformId);
-    }
-
-    public List<String> getAllCatalogSubscribePlatform() {
-        List<String> platforms = new ArrayList<>();
-        if(catalogMap.size() > 0) {
-            for (String key : catalogMap.keySet()) {
-                platforms.add(catalogMap.get(key).getId());
-            }
-        }
-        return platforms;
-    }
-
-    public void removeAllSubscribe(String platformId) {
-        mobilePositionMap.remove(platformId);
-        catalogMap.remove(platformId);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
deleted file mode 100644
index 434a639..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-
-import javax.sip.Dialog;
-import javax.sip.RequestEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-
-public class SubscribeInfo {
-
-
-    public SubscribeInfo(RequestEvent evt, String id) {
-        this.id = id;
-        Request request = evt.getRequest();
-        ExpiresHeader expiresHeader = (ExpiresHeader)request.getHeader(ExpiresHeader.NAME);
-        this.expires = expiresHeader.getExpires();
-        EventHeader eventHeader = (EventHeader)request.getHeader(EventHeader.NAME);
-        this.eventId = eventHeader.getEventId();
-        this.eventType = eventHeader.getEventType();
-        this.transaction = evt.getServerTransaction();
-        this.dialog = evt.getDialog();
-        CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
-        this.callId = callIdHeader.getCallId();
-    }
-
-    private String id;
-    private int expires;
-    private String callId;
-    private String eventId;
-    private String eventType;
-    private ServerTransaction transaction;
-    private Dialog dialog;
-
-    public String getId() {
-        return id;
-    }
-
-    public int getExpires() {
-        return expires;
-    }
-
-    public String getCallId() {
-        return callId;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public void setExpires(int expires) {
-        this.expires = expires;
-    }
-
-    public void setCallId(String callId) {
-        this.callId = callId;
-    }
-
-    public String getEventId() {
-        return eventId;
-    }
-
-    public void setEventId(String eventId) {
-        this.eventId = eventId;
-    }
-
-    public String getEventType() {
-        return eventType;
-    }
-
-    public void setEventType(String eventType) {
-        this.eventType = eventType;
-    }
-
-    public ServerTransaction getTransaction() {
-        return transaction;
-    }
-
-    public void setTransaction(ServerTransaction transaction) {
-        this.transaction = transaction;
-    }
-
-    public Dialog getDialog() {
-        return dialog;
-    }
-
-    public void setDialog(Dialog dialog) {
-        this.dialog = dialog;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/WvpSipDate.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/WvpSipDate.java
deleted file mode 100644
index f2a256b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/WvpSipDate.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.bean;
-
-import gov.nist.core.InternalErrorHandler;
-import gov.nist.javax.sip.header.SIPDate;
-
-import java.util.*;
-
-/**
- * 重写jain sip的SIPDate解决与国标时间格式不一致的问题
- */
-public class WvpSipDate extends SIPDate {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1L;
-    
-    private Calendar javaCal;
-
-    public WvpSipDate(long timeMillis) {
-        this.javaCal = new GregorianCalendar(TimeZone.getDefault(), Locale.getDefault());
-        Date date = new Date(timeMillis);
-        this.javaCal.setTime(date);
-        this.wkday = this.javaCal.get(7);
-        switch(this.wkday) {
-            case 1:
-                this.sipWkDay = "Sun";
-                break;
-            case 2:
-                this.sipWkDay = "Mon";
-                break;
-            case 3:
-                this.sipWkDay = "Tue";
-                break;
-            case 4:
-                this.sipWkDay = "Wed";
-                break;
-            case 5:
-                this.sipWkDay = "Thu";
-                break;
-            case 6:
-                this.sipWkDay = "Fri";
-                break;
-            case 7:
-                this.sipWkDay = "Sat";
-                break;
-            default:
-                InternalErrorHandler.handleException("No date map for wkday " + this.wkday);
-        }
-
-        this.day = this.javaCal.get(5);
-        this.month = this.javaCal.get(2);
-        switch(this.month) {
-            case 0:
-                this.sipMonth = "Jan";
-                break;
-            case 1:
-                this.sipMonth = "Feb";
-                break;
-            case 2:
-                this.sipMonth = "Mar";
-                break;
-            case 3:
-                this.sipMonth = "Apr";
-                break;
-            case 4:
-                this.sipMonth = "May";
-                break;
-            case 5:
-                this.sipMonth = "Jun";
-                break;
-            case 6:
-                this.sipMonth = "Jul";
-                break;
-            case 7:
-                this.sipMonth = "Aug";
-                break;
-            case 8:
-                this.sipMonth = "Sep";
-                break;
-            case 9:
-                this.sipMonth = "Oct";
-                break;
-            case 10:
-                this.sipMonth = "Nov";
-                break;
-            case 11:
-                this.sipMonth = "Dec";
-                break;
-            default:
-                InternalErrorHandler.handleException("No date map for month " + this.month);
-        }
-
-        this.year = this.javaCal.get(1);
-        this.hour = this.javaCal.get(11);
-        this.minute = this.javaCal.get(12);
-        this.second = this.javaCal.get(13);
-    }
-
-    @Override
-    public StringBuilder encode(StringBuilder var1) {
-        String var2;
-        if (this.month < 9) {
-            var2 = "0" + (this.month + 1);
-        } else {
-            var2 = "" + (this.month + 1);
-        }
-
-        String var3;
-        if (this.day < 10) {
-            var3 = "0" + this.day;
-        } else {
-            var3 = "" + this.day;
-        }
-
-        String var4;
-        if (this.hour < 10) {
-            var4 = "0" + this.hour;
-        } else {
-            var4 = "" + this.hour;
-        }
-
-        String var5;
-        if (this.minute < 10) {
-            var5 = "0" + this.minute;
-        } else {
-            var5 = "" + this.minute;
-        }
-
-        String var6;
-        if (this.second < 10) {
-            var6 = "0" + this.second;
-        } else {
-            var6 = "" + this.second;
-        }
-
-        int var8 = this.javaCal.get(14);
-        String var7;
-        if (var8 < 10) {
-            var7 = "00" + var8;
-        } else if (var8 < 100) {
-            var7 = "0" + var8;
-        } else {
-            var7 = "" + var8;
-        }
-
-        return var1.append(this.year).append("-").append(var2).append("-").append(var3).append("T").append(var4).append(":").append(var5).append(":").append(var6).append(".").append(var7);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java
deleted file mode 100644
index 60861af..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-
-/**    
- * @description:设备离在线状态检测器,用于检测设备状态
- * @author: swwheihei
- * @date:   2020年5月13日 下午2:40:29     
- */
-@Component
-public class DeviceOffLineDetector {
-
-	@Autowired
-    private RedisUtil redis;
-
-	@Autowired
-    private UserSetup userSetup;
-	
-	public boolean isOnline(String deviceId) {
-		String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + deviceId;
-		return redis.hasKey(key);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
deleted file mode 100644
index ef39732..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event;
-
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.offline.OfflineEvent;
-import com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire.PlatformKeepaliveExpireEvent;
-import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformCycleRegisterEvent;
-import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
-import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEvent;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent;
-import com.genersoft.iot.vmp.media.zlm.event.ZLMOnlineEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEvent;
-import com.genersoft.iot.vmp.gb28181.event.online.OnlineEvent;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**    
- * @description:Event事件通知推送器,支持推送在线事件、离线事件
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:30:50     
- */
-@Component
-public class EventPublisher {
-
-	@Autowired
-    private ApplicationEventPublisher applicationEventPublisher;
-	
-	public void onlineEventPublish(Device device, String from, int expires) {
-		OnlineEvent onEvent = new OnlineEvent(this);
-		onEvent.setDevice(device);
-		onEvent.setFrom(from);
-		onEvent.setExpires(expires);
-        applicationEventPublisher.publishEvent(onEvent);
-    }
-
-	public void onlineEventPublish(Device device, String from) {
-		OnlineEvent onEvent = new OnlineEvent(this);
-		onEvent.setDevice(device);
-		onEvent.setFrom(from);
-		applicationEventPublisher.publishEvent(onEvent);
-	}
-	
-	public void outlineEventPublish(String deviceId, String from){
-		OfflineEvent outEvent = new OfflineEvent(this);
-		outEvent.setDeviceId(deviceId);
-		outEvent.setFrom(from);
-        applicationEventPublisher.publishEvent(outEvent);
-    }
-
-	/**
-	 * 平台心跳到期事件
-	 * @param platformGbId
-	 */
-	public void platformKeepaliveExpireEventPublish(String platformGbId){
-		PlatformKeepaliveExpireEvent platformNotRegisterEvent = new PlatformKeepaliveExpireEvent(this);
-		platformNotRegisterEvent.setPlatformGbID(platformGbId);
-        applicationEventPublisher.publishEvent(platformNotRegisterEvent);
-    }
-
-	/**
-	 * 平台未注册事件
-	 * @param platformGbId
-	 */
-	public void platformNotRegisterEventPublish(String platformGbId){
-		PlatformNotRegisterEvent platformNotRegisterEvent = new PlatformNotRegisterEvent(this);
-		platformNotRegisterEvent.setPlatformGbID(platformGbId);
-        applicationEventPublisher.publishEvent(platformNotRegisterEvent);
-	}
-
-	/**
-	 * 平台周期注册事件
-	 * @param paltformGbId
-	 */
-	public void platformRegisterCycleEventPublish(String paltformGbId) {
-		PlatformCycleRegisterEvent platformCycleRegisterEvent = new PlatformCycleRegisterEvent(this);
-		platformCycleRegisterEvent.setPlatformGbID(paltformGbId);
-		applicationEventPublisher.publishEvent(platformCycleRegisterEvent);
-	}
-	
-	/**
-	 * 设备报警事件
-	 * @param deviceAlarm
-	 */
-	public void deviceAlarmEventPublish(DeviceAlarm deviceAlarm) {
-		AlarmEvent alarmEvent = new AlarmEvent(this);
-		alarmEvent.setAlarmInfo(deviceAlarm);
-		applicationEventPublisher.publishEvent(alarmEvent);
-	}
-
-	public void zlmOfflineEventPublish(String mediaServerId){
-		ZLMOfflineEvent outEvent = new ZLMOfflineEvent(this);
-		outEvent.setMediaServerId(mediaServerId);
-		applicationEventPublisher.publishEvent(outEvent);
-	}
-
-	public void zlmOnlineEventPublish(String mediaServerId) {
-		ZLMOnlineEvent outEvent = new ZLMOnlineEvent(this);
-		outEvent.setMediaServerId(mediaServerId);
-		applicationEventPublisher.publishEvent(outEvent);
-	}
-
-
-	public void catalogEventPublish(String platformId, DeviceChannel deviceChannel, String type) {
-		List<DeviceChannel> deviceChannelList = new ArrayList<>();
-		deviceChannelList.add(deviceChannel);
-		catalogEventPublish(platformId, deviceChannelList, type);
-	}
-
-
-	/**
-	 *
-	 * @param platformId
-	 * @param deviceChannels
-	 * @param type
-	 */
-	public void catalogEventPublish(String platformId, List<DeviceChannel> deviceChannels, String type) {
-		CatalogEvent outEvent = new CatalogEvent(this);
-		List<DeviceChannel> channels = new ArrayList<>();
-		if (deviceChannels.size() > 1) {
-			// 数据去重
-			Set<String> gbIdSet = new HashSet<>();
-			for (DeviceChannel deviceChannel : deviceChannels) {
-				if (!gbIdSet.contains(deviceChannel.getChannelId())) {
-					gbIdSet.add(deviceChannel.getChannelId());
-					channels.add(deviceChannel);
-				}
-			}
-		}else {
-			channels = deviceChannels;
-		}
-		outEvent.setDeviceChannels(channels);
-		outEvent.setType(type);
-		outEvent.setPlatformId(platformId);
-		applicationEventPublisher.publishEvent(outEvent);
-	}
-
-
-	public void catalogEventPublishForStream(String platformId, List<GbStream> gbStreams, String type) {
-		CatalogEvent outEvent = new CatalogEvent(this);
-		outEvent.setGbStreams(gbStreams);
-		outEvent.setType(type);
-		outEvent.setPlatformId(platformId);
-		applicationEventPublisher.publishEvent(outEvent);
-	}
-
-
-	public void catalogEventPublishForStream(String platformId, GbStream gbStream, String type) {
-		List<GbStream> gbStreamList = new ArrayList<>();
-		gbStreamList.add(gbStream);
-		catalogEventPublishForStream(platformId, gbStreamList, type);
-	}
-
-	public void recordEndEventPush(RecordInfo recordInfo) {
-		RecordEndEvent outEvent = new RecordEndEvent(this);
-		outEvent.setRecordInfo(recordInfo);
-		applicationEventPublisher.publishEvent(outEvent);
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
deleted file mode 100644
index bc775e4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceNotFoundEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import javax.sip.*;
-import javax.sip.header.CallIdHeader;
-import javax.sip.message.Response;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Component
-public class SipSubscribe {
-
-    private final Logger logger = LoggerFactory.getLogger(SipSubscribe.class);
-
-    private Map<String, SipSubscribe.Event> errorSubscribes = new ConcurrentHashMap<>();
-
-    private Map<String, SipSubscribe.Event> okSubscribes = new ConcurrentHashMap<>();
-
-    private Map<String, Date> okTimeSubscribes = new ConcurrentHashMap<>();
-    private Map<String, Date> errorTimeSubscribes = new ConcurrentHashMap<>();
-
-    //    @Scheduled(cron="*/5 * * * * ?")   //每五秒执行一次
-//    @Scheduled(fixedRate= 100 * 60 * 60 )
-    @Scheduled(cron="0 0/5 * * * ?")   //每5分钟执行一次
-    public void execute(){
-        logger.info("[定时任务] 清理过期的SIP订阅信息");
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(new Date());
-        calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) - 5);
-
-        for (String key : okTimeSubscribes.keySet()) {
-            if (okTimeSubscribes.get(key).before(calendar.getTime())){
-//                logger.info("[定时任务] 清理过期的订阅信息: {}", key);
-                okSubscribes.remove(key);
-                okTimeSubscribes.remove(key);
-            }
-        }
-        for (String key : errorTimeSubscribes.keySet()) {
-            if (errorTimeSubscribes.get(key).before(calendar.getTime())){
-//                logger.info("[定时任务] 清理过期的订阅信息: {}", key);
-                errorSubscribes.remove(key);
-                errorTimeSubscribes.remove(key);
-            }
-        }
-        logger.debug("okTimeSubscribes.size:{}",okTimeSubscribes.size());
-        logger.debug("okSubscribes.size:{}",okSubscribes.size());
-        logger.debug("errorTimeSubscribes.size:{}",errorTimeSubscribes.size());
-        logger.debug("errorSubscribes.size:{}",errorSubscribes.size());
-    }
-
-    public interface Event {
-        void response(EventResult eventResult);
-    }
-
-    public static class EventResult<EventObject>{
-        public int statusCode;
-        public String type;
-        public String msg;
-        public String callId;
-        public Dialog dialog;
-        public EventObject event;
-
-        public EventResult() {
-        }
-
-        public EventResult(EventObject event) {
-            this.event = event;
-            if (event instanceof ResponseEvent) {
-                ResponseEvent responseEvent = (ResponseEvent)event;
-                Response response = responseEvent.getResponse();
-                this.dialog = responseEvent.getDialog();
-                this.type = "response";
-                if (response != null) {
-                    this.msg = response.getReasonPhrase();
-                    this.statusCode = response.getStatusCode();
-                }
-                this.callId = ((CallIdHeader)response.getHeader(CallIdHeader.NAME)).getCallId();
-
-            }else if (event instanceof TimeoutEvent) {
-                TimeoutEvent timeoutEvent = (TimeoutEvent)event;
-                this.type = "timeout";
-                this.msg = "消息超时未回复";
-                this.statusCode = -1024;
-                this.callId = timeoutEvent.getClientTransaction().getDialog().getCallId().getCallId();
-                this.dialog = timeoutEvent.getClientTransaction().getDialog();
-            }else if (event instanceof TransactionTerminatedEvent) {
-                TransactionTerminatedEvent transactionTerminatedEvent = (TransactionTerminatedEvent)event;
-                this.type = "transactionTerminated";
-                this.msg = "事务已结束";
-                this.statusCode = -1024;
-                this.callId = transactionTerminatedEvent.getClientTransaction().getDialog().getCallId().getCallId();
-                this.dialog = transactionTerminatedEvent.getClientTransaction().getDialog();
-            }else if (event instanceof DialogTerminatedEvent) {
-                DialogTerminatedEvent dialogTerminatedEvent = (DialogTerminatedEvent)event;
-                this.type = "dialogTerminated";
-                this.msg = "会话已结束";
-                this.statusCode = -1024;
-                this.callId = dialogTerminatedEvent.getDialog().getCallId().getCallId();
-                this.dialog = dialogTerminatedEvent.getDialog();
-            }else if (event instanceof DeviceNotFoundEvent) {
-                DeviceNotFoundEvent deviceNotFoundEvent = (DeviceNotFoundEvent)event;
-                this.type = "deviceNotFoundEvent";
-                this.msg = "设备未找到";
-                this.statusCode = -1024;
-                this.callId = deviceNotFoundEvent.getDialog().getCallId().getCallId();
-                this.dialog = deviceNotFoundEvent.getDialog();
-            }
-        }
-    }
-
-    public void addErrorSubscribe(String key, SipSubscribe.Event event) {
-        errorSubscribes.put(key, event);
-        errorTimeSubscribes.put(key, new Date());
-    }
-
-    public void addOkSubscribe(String key, SipSubscribe.Event event) {
-        okSubscribes.put(key, event);
-        okTimeSubscribes.put(key, new Date());
-    }
-
-    public SipSubscribe.Event getErrorSubscribe(String key) {
-        return errorSubscribes.get(key);
-    }
-
-    public void removeErrorSubscribe(String key) {
-        errorSubscribes.remove(key);
-        errorTimeSubscribes.remove(key);
-    }
-
-    public SipSubscribe.Event getOkSubscribe(String key) {
-        return okSubscribes.get(key);
-    }
-
-    public void removeOkSubscribe(String key) {
-        okSubscribes.remove(key);
-        okTimeSubscribes.remove(key);
-    }
-    public int getErrorSubscribesSize(){
-        return errorSubscribes.size();
-    }
-    public int getOkSubscribesSize(){
-        return okSubscribes.size();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEvent.java
deleted file mode 100644
index 9f91bed..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEvent.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.alarm;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * @description: 报警事件
- * @author: lawrencehj
- * @data: 2021-01-20
- */
-
-public class AlarmEvent extends ApplicationEvent {
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1L;
-
-    public AlarmEvent(Object source) {
-        super(source);
-    }
-
-    private DeviceAlarm deviceAlarm;
-
-    public DeviceAlarm getAlarmInfo() {
-        return deviceAlarm;
-    }
-    
-    public void setAlarmInfo(DeviceAlarm deviceAlarm) {
-        this.deviceAlarm = deviceAlarm;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java
deleted file mode 100644
index 2b56326..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.alarm;
-
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @description: 报警事件监听
- * @author: lawrencehj
- * @data: 2021-01-20
- */
-
-@Component
-public class AlarmEventListener implements ApplicationListener<AlarmEvent> {
-
-    private final static Logger logger = LoggerFactory.getLogger(AlarmEventListener.class);
-
-    private static Map<String, SseEmitter> sseEmitters = new Hashtable<>();
-
-    public void addSseEmitters(String browserId, SseEmitter sseEmitter) {
-        sseEmitters.put(browserId, sseEmitter);
-    }
-
-    @Override
-    public void onApplicationEvent(AlarmEvent event) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("设备报警事件触发,deviceId:" + event.getAlarmInfo().getDeviceId() + ", "
-                    + event.getAlarmInfo().getAlarmDescription());
-        }
-        String msg = "<strong>设备编码:</strong> <i>" + event.getAlarmInfo().getDeviceId() + "</i>"
-                    + "<br><strong>报警描述:</strong> <i>" + event.getAlarmInfo().getAlarmDescription() + "</i>"
-                    + "<br><strong>报警时间:</strong> <i>" + event.getAlarmInfo().getAlarmTime() + "</i>"
-                    + "<br><strong>报警位置:</strong> <i>" + event.getAlarmInfo().getLongitude() + "</i>"
-                    + ", <i>" + event.getAlarmInfo().getLatitude() + "</i>";
-
-        for (Iterator<Map.Entry<String, SseEmitter>> it = sseEmitters.entrySet().iterator(); it.hasNext();) {
-            Map.Entry<String, SseEmitter> emitter = it.next();
-            logger.info("推送到SSE连接,浏览器ID: " + emitter.getKey());
-            try {
-                emitter.getValue().send(msg);
-            } catch (IOException | IllegalStateException e) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("SSE连接已关闭");
-                }
-                // 移除已关闭的连接
-                it.remove();
-                // e.printStackTrace();
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
deleted file mode 100644
index 3b611b5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.offline;
-
-import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.connection.RedisConnection;
-import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import org.springframework.util.StringUtils;
-
-import java.util.Properties;
-
-/**    
- * @description:设备心跳超时监听,借助redis过期特性,进行监听,监听到说明设备心跳超时,发送离线事件
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:35:46     
- */
-@Component
-public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEventMessageListener {
-
-    private Logger logger = LoggerFactory.getLogger(KeepaliveTimeoutListenerForPlatform.class);
-
-	@Autowired
-	private EventPublisher publisher;
-
-	@Autowired
-	private UserSetup userSetup;
-
-	@Autowired
-	private SipSubscribe sipSubscribe;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-    public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
-        super(listenerContainer, userSetup);
-    }
-
-
-    /**
-     * 监听失效的key
-     * @param message
-     * @param pattern
-     */
-    @Override
-    public void onMessage(Message message, byte[] pattern) {
-        //  获取失效的key
-        String expiredKey = message.toString();
-        logger.debug(expiredKey);
-        // 平台心跳到期,需要重发, 判断是否已经多次未收到心跳回复, 多次未收到,则重新发起注册, 注册尝试多次未得到回复,则认为平台离线
-        String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_";
-        String PLATFORM_REGISTER_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_";
-        String KEEPLIVEKEY_PREFIX = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_";
-        String REGISTER_INFO_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_";
-        if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) {
-            String platformGBId = expiredKey.substring(PLATFORM_KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
-            ParentPlatform platform = storager.queryParentPlatByServerGBId(platformGBId);
-            if (platform != null) {
-                publisher.platformKeepaliveExpireEventPublish(platformGBId);
-            }
-        }else if (expiredKey.startsWith(PLATFORM_REGISTER_PREFIX)) {
-            String platformGBId = expiredKey.substring(PLATFORM_REGISTER_PREFIX.length(),expiredKey.length());
-            ParentPlatform platform = storager.queryParentPlatByServerGBId(platformGBId);
-            if (platform != null) {
-                publisher.platformRegisterCycleEventPublish(platformGBId);
-            }
-        }else if (expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
-            String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
-            Device device = storager.queryVideoDevice(deviceId);
-            if (device != null) {
-                publisher.outlineEventPublish(deviceId, KEEPLIVEKEY_PREFIX);
-            }
-        }else if (expiredKey.startsWith(REGISTER_INFO_PREFIX)) {
-            String callid = expiredKey.substring(REGISTER_INFO_PREFIX.length());
-            SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult();
-            eventResult.callId = callid;
-            eventResult.msg = "注册超时";
-            eventResult.type = "register timeout";
-            sipSubscribe.getErrorSubscribe(callid).response(eventResult);
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
deleted file mode 100644
index 24728a3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.offline;
-
-import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-
-/**    
- * @description:设备心跳超时监听,借助redis过期特性,进行监听,监听到说明设备心跳超时,发送离线事件
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:35:46     
- */
-@Component
-public class KeepliveTimeoutListener extends RedisKeyExpirationEventMessageListener {
-
-    private Logger logger = LoggerFactory.getLogger(KeepliveTimeoutListener.class);
-
-	@Autowired
-	private EventPublisher publisher;
-
-	@Autowired
-	private UserSetup userSetup;
-
-    public KeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
-        super(listenerContainer, userSetup);
-    }
-
-    @Override
-    public void init() {
-        if (!userSetup.getRedisConfig()) {
-            // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用
-            setKeyspaceNotificationsConfigParameter("");
-        }
-        super.init();
-    }
-
-
-	/**
-     * 监听失效的key,key格式为keeplive_deviceId
-     * @param message
-     * @param pattern
-     */
-    @Override
-    public void onMessage(Message message, byte[] pattern) {
-        //  获取失效的key
-        String expiredKey = message.toString();
-        String KEEPLIVEKEY_PREFIX = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_";
-        if(!expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
-        	logger.debug("收到redis过期监听,但开头不是"+KEEPLIVEKEY_PREFIX+",忽略");
-        	return;
-        }
-        
-        String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
-        publisher.outlineEventPublish(deviceId, VideoManagerConstants.EVENT_OUTLINE_TIMEOUT);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
deleted file mode 100644
index 8d15f7e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.offline;
-
-import org.springframework.context.ApplicationEvent;
-
-/**    
- * @description: 离线事件类   
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:33:13     
- */
-public class OfflineEvent extends ApplicationEvent {
-	
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public OfflineEvent(Object source) {
-		super(source);
-	}
-
-	private String deviceId;
-	
-	private String from;
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getFrom() {
-		return from;
-	}
-
-	public void setFrom(String from) {
-		this.from = from;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
deleted file mode 100644
index baba145..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.offline;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-
-import java.util.List;
-
-/**
- * @description: 离线事件监听器,监听到离线后,修改设备离在线状态。 设备离线有两个来源:
- *               1、设备主动注销,发送注销指令,{@link com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.RegisterRequestProcessor}
- *               2、设备未知原因离线,心跳超时,{@link com.genersoft.iot.vmp.gb28181.event.offline.OfflineEventListener}
- * @author: swwheihei
- * @date: 2020年5月6日 下午1:51:23
- */
-@Component
-public class OfflineEventListener implements ApplicationListener<OfflineEvent> {
-
-	private final static Logger logger = LoggerFactory.getLogger(OfflineEventListener.class);
-	
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-	
-	@Autowired
-    private RedisUtil redis;
-
-	@Autowired
-    private UserSetup userSetup;
-
-	@Autowired
-    private EventPublisher eventPublisher;
-
-
-	@Autowired
-    private IMediaServerService mediaServerService;
-
-
-	@Autowired
-    private ZLMRTPServerFactory zlmrtpServerFactory;
-
-	@Override
-	public void onApplicationEvent(OfflineEvent event) {
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备离线事件触发,deviceId:" + event.getDeviceId() + ",from:" + event.getFrom());
-		}
-
-		String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDeviceId();
-
-		switch (event.getFrom()) {
-			// 心跳超时触发的离线事件,说明redis中已删除,无需处理
-			case VideoManagerConstants.EVENT_OUTLINE_TIMEOUT:
-				break;
-			// 设备主动注销触发的离线事件,需要删除redis中的超时监听
-			case VideoManagerConstants.EVENT_OUTLINE_UNREGISTER:
-				redis.del(key);
-				break;
-			default:
-				boolean exist = redis.hasKey(key);
-				if (exist) {
-					redis.del(key);
-				}
-		}
-
-		List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(event.getDeviceId());
-		eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.OFF);
-		// 处理离线监听
-		storager.outline(event.getDeviceId());
-
-		// TODO 离线取消订阅
-
-		// 离线释放所有ssrc
-		List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(event.getDeviceId(), null, null, null);
-		if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
-			for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
-				mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
-				mediaServerService.closeRTPServer(event.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
-				streamSession.remove(event.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
-			}
-		}
-
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
deleted file mode 100644
index 8e374b8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.online;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import org.springframework.context.ApplicationEvent;
-
-/**    
- * @description: 在线事件类   
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:32:56     
- */
-public class OnlineEvent extends ApplicationEvent {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public OnlineEvent(Object source) {
-		super(source);
-	}
-
-	private Device device;
-	
-	private String from;
-
-	private int  expires;
-
-	public Device getDevice() {
-		return device;
-	}
-
-	public void setDevice(Device device) {
-		this.device = device;
-	}
-
-	public String getFrom() {
-		return from;
-	}
-
-	public void setFrom(String from) {
-		this.from = from;
-	}
-
-	public int getExpires() {
-		return expires;
-	}
-
-	public void setExpires(int expires) {
-		this.expires = expires;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
deleted file mode 100644
index 84cf04c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.online;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.service.IDeviceService;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-/**
- * @description: 在线事件监听器,监听到离线后,修改设备离在线状态。 设备在线有两个来源:
- *               1、设备主动注销,发送注销指令
- *               2、设备未知原因离线,心跳超时
- * @author: swwheihei
- * @date: 2020年5月6日 下午1:51:23
- */
-@Component
-public class OnlineEventListener implements ApplicationListener<OnlineEvent> {
-	
-	private final static Logger logger = LoggerFactory.getLogger(OnlineEventListener.class);
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IDeviceService deviceService;
-	
-	@Autowired
-    private RedisUtil redis;
-
-	@Autowired
-    private SipConfig sipConfig;
-
-	@Autowired
-    private UserSetup userSetup;
-
-	@Autowired
-    private EventPublisher eventPublisher;
-
-	@Autowired
-	private SIPCommander cmder;
-
-	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-	@Override
-	public void onApplicationEvent(OnlineEvent event) {
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备上线事件触发,deviceId:" + event.getDevice().getDeviceId() + ",from:" + event.getFrom());
-		}
-		Device device = event.getDevice();
-		if (device == null) return;
-		String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDevice().getDeviceId();
-		Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
-		device.setOnline(1);
-		switch (event.getFrom()) {
-		// 注册时触发的在线事件,先在redis中增加超时超时监听
-		case VideoManagerConstants.EVENT_ONLINE_REGISTER:
-			// 超时时间
-			redis.set(key, event.getDevice().getDeviceId(), sipConfig.getKeepaliveTimeOut());
-			device.setRegisterTime(format.format(System.currentTimeMillis()));
-			if (deviceInStore == null) { //第一次上线
-				logger.info("[{}] 首次注册,查询设备信息以及通道信息", device.getDeviceId());
-				cmder.deviceInfoQuery(device);
-				cmder.catalogQuery(device, null);
-			}
-			break;
-		// 设备主动发送心跳触发的在线事件
-		case VideoManagerConstants.EVENT_ONLINE_KEEPLIVE:
-			boolean exist = redis.hasKey(key);
-			// 先判断是否还存在,当设备先心跳超时后又发送心跳时,redis没有监听,需要增加
-			if (!exist) {
-				redis.set(key, event.getDevice().getDeviceId(), sipConfig.getKeepaliveTimeOut());
-			} else {
-				redis.expire(key, sipConfig.getKeepaliveTimeOut());
-			}
-			device.setKeepaliveTime(format.format(System.currentTimeMillis()));
-			break;
-		// 设备主动发送消息触发的在线事件
-		case VideoManagerConstants.EVENT_ONLINE_MESSAGE:
-
-			break;
-		}
-		// 处理上线监听
-		storager.updateDevice(device);
-		List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
-		eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
-		// 上线添加订阅
-		if (device.getSubscribeCycleForCatalog() > 0) {
-			deviceService.addCatalogSubscribe(device);
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java
deleted file mode 100644
index 1e9a2c4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire;
-
-import org.springframework.context.ApplicationEvent;
-
-/**
- *  平台心跳超时事件
- */
-public class PlatformKeepaliveExpireEvent extends ApplicationEvent {
-
-    /**
-     * Add default serial version ID
-     */
-    private static final long serialVersionUID = 1L;
-    
-    private String platformGbID;
-
-    public PlatformKeepaliveExpireEvent(Object source) {
-        super(source);
-    }
-
-    public String getPlatformGbID() {
-        return platformGbID;
-    }
-
-    public void setPlatformGbID(String platformGbID) {
-        this.platformGbID = platformGbID;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
deleted file mode 100644
index 0092657..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-
-import javax.sip.ResponseEvent;
-import javax.sip.message.Response;
-
-/**
- * @description: 平台心跳超时事件
- * @author: panll
- * @date: 2020年11月5日 10:00
- */
-@Component
-public class PlatformKeepaliveExpireEventLister implements ApplicationListener<PlatformKeepaliveExpireEvent> {
-
-
-    private final static Logger logger = LoggerFactory.getLogger(PlatformKeepaliveExpireEventLister.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private ISIPCommanderForPlatform sipCommanderForPlatform;
-
-    @Autowired
-    private SipSubscribe sipSubscribe;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void onApplicationEvent(@NotNull PlatformKeepaliveExpireEvent event) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("平台心跳到期事件事件触发,平台国标ID:" + event.getPlatformGbID());
-        }
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
-        ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(event.getPlatformGbID());
-        if (parentPlatformCatch == null) {
-            return;
-        }
-        if (parentPlatform == null) {
-            logger.debug("平台心跳到期事件事件触发,但平台已经删除!!! 平台国标ID:" + event.getPlatformGbID());
-            return;
-        }
-        parentPlatformCatch.setParentPlatform(parentPlatform);
-        // 发送心跳
-        if (parentPlatformCatch.getKeepAliveReply() >= 3) {
-            // 有3次未收到心跳回复, 设置平台状态为离线, 开始重新注册
-            logger.warn("有3次未收到心跳回复,标记设置平台状态为离线, 并重新注册 平台国标ID:" + event.getPlatformGbID());
-            storager.updateParentPlatformStatus(event.getPlatformGbID(), false);
-            publisher.platformNotRegisterEventPublish(event.getPlatformGbID());
-            parentPlatformCatch.setKeepAliveReply(0);
-            redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-        }else {
-            // 再次发送心跳
-            String callId = sipCommanderForPlatform.keepalive(parentPlatform);
-
-            parentPlatformCatch.setKeepAliveReply( parentPlatformCatch.getKeepAliveReply() + 1);
-            // 存储心跳信息, 并设置状态为未回复, 如果多次过期仍未收到回复,则认为上级平台已经离线
-            redisCatchStorage.updatePlatformKeepalive(parentPlatform);
-            redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-
-            sipSubscribe.addOkSubscribe(callId, (SipSubscribe.EventResult eventResult) ->{
-                if (eventResult.statusCode == Response.OK) {
-                    // 收到心跳响应信息,
-                    parentPlatformCatch.setKeepAliveReply(0);
-                    redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-                }
-            } );
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
deleted file mode 100644
index c2ff61f..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
-
-import org.springframework.context.ApplicationEvent;
-
-public class PlatformCycleRegisterEvent extends ApplicationEvent {
-    /**
-     * Add default serial version ID
-     */
-    private static final long serialVersionUID = 1L;
-
-    private String platformGbID;
-
-    public String getPlatformGbID() {
-        return platformGbID;
-    }
-
-    public void setPlatformGbID(String platformGbID) {
-        this.platformGbID = platformGbID;
-    }
-
-    public PlatformCycleRegisterEvent(Object source) {
-        super(source);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
deleted file mode 100644
index 4df77a0..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-@Component
-public class PlatformCycleRegisterEventLister implements ApplicationListener<PlatformCycleRegisterEvent> {
-
-    private final static Logger logger = LoggerFactory.getLogger(PlatformCycleRegisterEventLister.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-    @Autowired
-    private ISIPCommanderForPlatform sipCommanderFroPlatform;
-
-    @Override
-    public void onApplicationEvent(PlatformCycleRegisterEvent event) {
-        logger.info("上级平台周期注册事件");
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
-        if (parentPlatform == null) {
-            logger.info("[ 平台未注册事件 ] 平台已经删除!!! 平台国标ID:" + event.getPlatformGbID());
-            return;
-        }
-        Timer timer = new Timer();
-        SipSubscribe.Event okEvent = (responseEvent)->{
-            timer.cancel();
-        };
-        sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
-        timer.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                logger.info("[平台注册]再次向平台注册,平台国标ID:" + event.getPlatformGbID());
-                sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
-            }
-        }, 15*1000 ,Long.parseLong(parentPlatform.getExpires())* 1000);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java
deleted file mode 100644
index c936975..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
-
-import org.springframework.context.ApplicationEvent;
-
-public class PlatformNotRegisterEvent extends ApplicationEvent {
-
-    /**
-     * Add default serial version ID
-     */
-    private static final long serialVersionUID = 1L;
-    
-    private String platformGbID;
-
-    public PlatformNotRegisterEvent(Object source) {
-        super(source);
-    }
-
-    public String getPlatformGbID() {
-        return platformGbID;
-    }
-
-    public void setPlatformGbID(String platformGbID) {
-        this.platformGbID = platformGbID;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
deleted file mode 100644
index 1b8e7ae..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-
-import java.util.*;
-
-/**
- * @description: 平台未注册事件,来源有二:
- *               1、平台新添加
- *               2、平台心跳超时
- * @author: panll
- * @date: 2020年11月24日 10:00
- */
-@Component
-public class PlatformNotRegisterEventLister implements ApplicationListener<PlatformNotRegisterEvent> {
-
-    private final static Logger logger = LoggerFactory.getLogger(PlatformNotRegisterEventLister.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private SIPCommanderFroPlatform sipCommanderFroPlatform;
-
-    @Autowired
-    private ZLMRTPServerFactory zlmrtpServerFactory;
-
-    @Autowired
-    private SipConfig config;
-
-    // @Autowired
-    // private RedisUtil redis;
-
-    @Override
-    public void onApplicationEvent(PlatformNotRegisterEvent event) {
-
-        logger.info("[ 平台未注册事件 ]平台国标ID:" + event.getPlatformGbID());
-
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
-        if (parentPlatform == null) {
-            logger.info("[ 平台未注册事件 ] 平台已经删除!!! 平台国标ID:" + event.getPlatformGbID());
-            return;
-        }
-        // 查询是否有推流, 如果有则都停止
-        List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServer(event.getPlatformGbID());
-        logger.info("[ 平台未注册事件 ] 停止[ {} ]的所有推流size", sendRtpItems.size());
-        if (sendRtpItems != null && sendRtpItems.size() > 0) {
-            logger.info("[ 平台未注册事件 ] 停止[ {} ]的所有推流", event.getPlatformGbID());
-            StringBuilder app = new StringBuilder();
-            StringBuilder stream = new StringBuilder();
-            for (SendRtpItem sendRtpItem : sendRtpItems) {
-                if (app.length() != 0) {
-                    app.append(",");
-                }
-                app.append(sendRtpItem.getApp());
-                if (stream.length() != 0) {
-                    stream.append(",");
-                }
-                stream.append(sendRtpItem.getStreamId());
-                redisCatchStorage.deleteSendRTPServer(event.getPlatformGbID(), sendRtpItem.getChannelId(), null, null);
-                MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
-                Map<String, Object> param = new HashMap<>();
-                param.put("vhost", "__defaultVhost__");
-                param.put("app", app.toString());
-                param.put("stream", stream.toString());
-                zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
-            }
-
-        }
-        Timer timer = new Timer();
-        SipSubscribe.Event okEvent = (responseEvent)->{
-            timer.cancel();
-        };
-        logger.info("[平台注册]平台国标ID:" + event.getPlatformGbID());
-        sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
-        // 设置注册失败则每隔15秒发起一次注册
-        timer.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                logger.info("[平台注册]再次向平台注册,平台国标ID:" + event.getPlatformGbID());
-                sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
-            }
-        }, config.getRegisterTimeInterval()* 1000, config.getRegisterTimeInterval()* 1000);//十五秒后再次发起注册
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java
deleted file mode 100644
index cfd2985..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.record;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * @description: 录像查询结束时间
- * @author: pan
- * @data: 2022-02-23
- */
-
-public class RecordEndEvent extends ApplicationEvent {
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1L;
-
-    public RecordEndEvent(Object source) {
-        super(source);
-    }
-
-    private RecordInfo recordInfo;
-
-    public RecordInfo getRecordInfo() {
-        return recordInfo;
-    }
-
-    public void setRecordInfo(RecordInfo recordInfo) {
-        this.recordInfo = recordInfo;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
deleted file mode 100644
index b2eb7ea..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.record;
-
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-import java.io.IOException;
-import java.util.*;
-
-/**
- * @description: 录像查询结束时间
- * @author: pan
- * @data: 2022-02-23
- */
-
-@Component
-public class RecordEndEventListener implements ApplicationListener<RecordEndEvent> {
-
-    private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class);
-
-    private static Map<String, SseEmitter> sseEmitters = new Hashtable<>();
-
-    public interface RecordEndEventHandler{
-        void  handler(RecordInfo recordInfo);
-    }
-
-    private Map<String, RecordEndEventHandler> handlerMap = new HashMap<>();
-    @Override
-    public void onApplicationEvent(RecordEndEvent event) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}条", event.getRecordInfo().getDeviceId(),
-                    event.getRecordInfo().getChannelId(), event.getRecordInfo().getSumNum() );
-        }
-        if (handlerMap.size() > 0) {
-            for (RecordEndEventHandler recordEndEventHandler : handlerMap.values()) {
-                recordEndEventHandler.handler(event.getRecordInfo());
-            }
-        }
-
-    }
-
-    public void addEndEventHandler(String device, String channelId, RecordEndEventHandler recordEndEventHandler) {
-        handlerMap.put(device + channelId, recordEndEventHandler);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/SubscribeListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/SubscribeListenerForPlatform.java
deleted file mode 100644
index 3b2bd23..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/SubscribeListenerForPlatform.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.subscribe;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.stereotype.Component;
-
-/**    
- * 平台订阅到期事件
- */
-@Component
-public class SubscribeListenerForPlatform extends RedisKeyExpirationEventMessageListener {
-
-    private Logger logger = LoggerFactory.getLogger(SubscribeListenerForPlatform.class);
-
-	@Autowired
-	private UserSetup userSetup;
-
-    @Autowired
-    private DynamicTask dynamicTask;
-
-    public SubscribeListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
-        super(listenerContainer, userSetup);
-    }
-
-
-    /**
-     * 监听失效的key
-     * @param message
-     * @param pattern
-     */
-    @Override
-    public void onMessage(Message message, byte[] pattern) {
-        //  获取失效的key
-        String expiredKey = message.toString();
-        logger.debug(expiredKey);
-        // 订阅到期
-        String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_";
-        if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) {
-            // 取消定时任务
-            dynamicTask.stop(expiredKey);
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java
deleted file mode 100644
index c035b80..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import org.springframework.context.ApplicationEvent;
-
-import java.util.List;
-
-public class CatalogEvent  extends ApplicationEvent {
-    public CatalogEvent(Object source) {
-        super(source);
-    }
-
-    public static final String ON = "ON";         // 上线
-    public static final String OFF = "OFF";       // 离线
-    public static final String VLOST = "VLOST";   // 视频丢失
-    public static final String DEFECT = "DEFECT"; // 故障
-    public static final String ADD = "ADD";       // 增加
-    public static final String DEL = "DEL";       // 删除
-    public static final String UPDATE = "UPDATE";       // 更新
-
-    private List<DeviceChannel> deviceChannels;
-    private List<GbStream> gbStreams;
-    private String type;
-    private String platformId;
-
-    public List<DeviceChannel> getDeviceChannels() {
-        return deviceChannels;
-    }
-
-    public void setDeviceChannels(List<DeviceChannel> deviceChannels) {
-        this.deviceChannels = deviceChannels;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public List<GbStream> getGbStreams() {
-        return gbStreams;
-    }
-
-    public void setGbStreams(List<GbStream> gbStreams) {
-        this.gbStreams = gbStreams;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
deleted file mode 100644
index d511f42..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-
-/**
- * catalog事件
- */
-@Component
-public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
-
-    private final static Logger logger = LoggerFactory.getLogger(CatalogEventLister.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private SIPCommanderFroPlatform sipCommanderFroPlatform;
-
-    @Autowired
-    private ZLMRTPServerFactory zlmrtpServerFactory;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IGbStreamService gbStreamService;
-
-    @Autowired
-    private SubscribeHolder subscribeHolder;
-
-    @Override
-    public void onApplicationEvent(CatalogEvent event) {
-        SubscribeInfo subscribe = null;
-        ParentPlatform parentPlatform = null;
-
-        Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>();
-        if (event.getPlatformId() != null) {
-            parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId());
-            if (parentPlatform != null && !parentPlatform.isStatus())return;
-            String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() +  "_Catalog_" + event.getPlatformId();
-//            subscribe = redisCatchStorage.getSubscribe(key);
-            subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
-
-            if (subscribe == null) {
-                logger.debug("发送订阅消息时发现订阅信息已经不存在");
-                return;
-            }
-        }else {
-            // 获取所用订阅
-            List<String> platforms = subscribeHolder.getAllCatalogSubscribePlatform();
-            if (event.getDeviceChannels() != null) {
-                if (platforms.size() > 0) {
-                    for (DeviceChannel deviceChannel : event.getDeviceChannels()) {
-                        List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForGBWithGBId(deviceChannel.getChannelId(), platforms);
-                        parentPlatformMap.put(deviceChannel.getChannelId(), parentPlatformsForGB);
-                    }
-                }
-            }else if (event.getGbStreams() != null) {
-                if (platforms.size() > 0) {
-                    for (GbStream gbStream : event.getGbStreams()) {
-                        if (gbStream == null || StringUtils.isEmpty(gbStream.getGbId())) continue;
-                        List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms);
-                        parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB);
-                    }
-                }
-            }
-        }
-        switch (event.getType()) {
-            case CatalogEvent.ON:
-            case CatalogEvent.OFF:
-            case CatalogEvent.DEL:
-
-                if (parentPlatform != null || subscribe != null) {
-                    List<DeviceChannel> deviceChannelList = new ArrayList<>();
-                    if (event.getDeviceChannels() != null) {
-                        deviceChannelList.addAll(event.getDeviceChannels());
-                    }
-                    if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
-                        for (GbStream gbStream : event.getGbStreams()) {
-                            DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
-                            deviceChannelList.add(deviceChannelByStream);
-                        }
-                    }
-                    if (deviceChannelList.size() > 0) {
-                        logger.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size());
-                        sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
-                    }
-                }else if (parentPlatformMap.keySet().size() > 0) {
-                    for (String gbId : parentPlatformMap.keySet()) {
-                        List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
-                        if (parentPlatforms != null && parentPlatforms.size() > 0) {
-                            for (ParentPlatform platform : parentPlatforms) {
-                                SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId());
-                                if (subscribeInfo == null) continue;
-                                logger.info("[Catalog事件: {}]平台:{},影响通道{}", event.getType(), platform.getServerGBId(), gbId);
-                                List<DeviceChannel> deviceChannelList = new ArrayList<>();
-                                DeviceChannel deviceChannel = new DeviceChannel();
-                                deviceChannel.setChannelId(gbId);
-                                deviceChannelList.add(deviceChannel);
-                                sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo, null);
-                            }
-                        }
-                    }
-                }
-                break;
-            case CatalogEvent.VLOST:
-                break;
-            case CatalogEvent.DEFECT:
-                break;
-            case CatalogEvent.ADD:
-            case CatalogEvent.UPDATE:
-                if (parentPlatform != null || subscribe != null) {
-                     List<DeviceChannel> deviceChannelList = new ArrayList<>();
-                     if (event.getDeviceChannels() != null) {
-                         deviceChannelList.addAll(event.getDeviceChannels());
-                     }
-                    if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
-                        for (GbStream gbStream : event.getGbStreams()) {
-                            DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
-                            deviceChannelList.add(deviceChannelByStream);
-                        }
-                    }
-                    if (deviceChannelList.size() > 0) {
-                        logger.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size());
-                        sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
-                    }
-                }else if (parentPlatformMap.keySet().size() > 0) {
-                    for (String gbId : parentPlatformMap.keySet()) {
-                        List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
-                        if (parentPlatforms != null && parentPlatforms.size() > 0) {
-                            for (ParentPlatform platform : parentPlatforms) {
-//                                String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
-//                                SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
-                                SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
-                                if (subscribeInfo == null) continue;
-                                logger.info("[Catalog事件: {}]平台:{},影响通道{}", event.getType(), platform.getServerGBId(), gbId);
-                                List<DeviceChannel> deviceChannelList = new ArrayList<>();
-                                DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(platform.getServerGBId(), gbId);
-                                deviceChannelList.add(deviceChannel);
-                                GbStream gbStream = storager.queryStreamInParentPlatform(platform.getServerGBId(), gbId);
-                                DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), platform.getDeviceGBId());
-                                deviceChannelList.add(deviceChannelByStream);
-                                sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo, null);
-                            }
-                        }
-                    }
-                }
-                break;
-            default:
-                break;
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
deleted file mode 100644
index e3b3974..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.session;
-
-import com.genersoft.iot.vmp.gb28181.bean.CatalogData;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Component
-public class CatalogDataCatch {
-
-    public static Map<String, CatalogData> data = new ConcurrentHashMap<>();
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    public void put(String key, int total, Device device, List<DeviceChannel> deviceChannelList) {
-        CatalogData catalogData = data.get(key);
-        if (catalogData == null) {
-            catalogData = new CatalogData();
-            catalogData.setTotal(total);
-            catalogData.setDevice(device);
-            catalogData.setChannelList(new ArrayList<>());
-            data.put(key, catalogData);
-        }
-        catalogData.getChannelList().addAll(deviceChannelList);
-        catalogData.setLastTime(new Date(System.currentTimeMillis()));
-    }
-
-    public List<DeviceChannel> get(String key) {
-        CatalogData catalogData = data.get(key);
-        if (catalogData == null) return null;
-        return catalogData.getChannelList();
-    }
-
-    public void del(String key) {
-        data.remove(key);
-    }
-
-    @Scheduled(fixedRate = 5 * 1000)   //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时
-    private void timerTask(){
-        Set<String> keys = data.keySet();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(new Date());
-        calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 5);
-        for (String key : keys) {
-            CatalogData catalogData = data.get(key);
-            if (catalogData.getLastTime().before(calendar.getTime())) {
-
-                storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList());
-                RequestMessage msg = new RequestMessage();
-                msg.setKey(key);
-                WVPResult<Object> result = new WVPResult<>();
-                result.setCode(0);
-                result.setMsg("更新成功,共" + catalogData.getTotal() + "条,已更新" + catalogData.getChannelList().size() + "条");
-                result.setData(catalogData.getDevice());
-                msg.setData(result);
-                deferredResultHolder.invokeAllResult(msg);
-                data.remove(key);
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java
deleted file mode 100644
index ac54c2d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.session;
-
-import com.genersoft.iot.vmp.utils.ConfigConst;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-public class SsrcConfig {
-
-    /**
-     * zlm流媒体服务器Id
-     */
-    private String mediaServerId;
-
-    private String ssrcPrefix;
-    /**
-     * zlm流媒体服务器已用会话句柄
-     */
-    private List<String> isUsed;
-    /**
-     * zlm流媒体服务器可用会话句柄
-     */
-    private List<String> notUsed;
-
-    public SsrcConfig() {
-    }
-
-    public SsrcConfig(String mediaServerId, Set<String> usedSet, String sipDomain) {
-        this.mediaServerId = mediaServerId;
-        this.isUsed = new ArrayList<>();
-        this.ssrcPrefix = sipDomain.substring(3, 8);
-        this.notUsed = new ArrayList<>();
-        for (int i = 1; i < ConfigConst.MAX_STRTEAM_COUNT; i++) {
-            String ssrc;
-            if (i < 10) {
-                ssrc = "000" + i;
-            } else if (i < 100) {
-                ssrc = "00" + i;
-            } else if (i < 1000) {
-                ssrc = "0" + i;
-            } else {
-                ssrc = String.valueOf(i);
-            }
-            if (null == usedSet || !usedSet.contains(ssrc)) {
-                this.notUsed.add(ssrc);
-            } else {
-                this.isUsed.add(ssrc);
-            }
-        }
-    }
-
-
-    /**
-     * 获取视频预览的SSRC值,第一位固定为0
-     * @return ssrc
-     */
-    public String getPlaySsrc() {
-        return "0" + getSsrcPrefix() + getSN();
-    }
-
-    /**
-     * 获取录像回放的SSRC值,第一位固定为1
-     *
-     */
-    public String getPlayBackSsrc() {
-        return "1" + getSsrcPrefix() + getSN();
-    }
-
-    /**
-     * 释放ssrc,主要用完的ssrc一定要释放,否则会耗尽
-     * @param ssrc 需要重置的ssrc
-     */
-    public void releaseSsrc(String ssrc) {
-        if (ssrc == null) {
-            return;
-        }
-        String sn = ssrc.substring(6);
-        try {
-            isUsed.remove(sn);
-            notUsed.add(sn);
-        }catch (NullPointerException e){
-        }
-    }
-
-    /**
-     * 获取后四位数SN,随机数
-     *
-     */
-    private String getSN() {
-        String sn = null;
-        int index = 0;
-        if (notUsed.size() == 0) {
-            throw new RuntimeException("ssrc已经用完");
-        } else if (notUsed.size() == 1) {
-            sn = notUsed.get(0);
-        } else {
-            index = new Random().nextInt(notUsed.size() - 1);
-            sn = notUsed.get(index);
-        }
-        notUsed.remove(index);
-        isUsed.add(sn);
-        return sn;
-    }
-
-    public String getSsrcPrefix() {
-        return ssrcPrefix;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public void setSsrcPrefix(String ssrcPrefix) {
-        this.ssrcPrefix = ssrcPrefix;
-    }
-
-    public List<String> getIsUsed() {
-        return isUsed;
-    }
-
-    public void setIsUsed(List<String> isUsed) {
-        this.isUsed = isUsed;
-    }
-
-    public List<String> getNotUsed() {
-        return notUsed;
-    }
-
-    public void setNotUsed(List<String> notUsed) {
-        this.notUsed = notUsed;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
deleted file mode 100644
index cd7dda3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.session;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.sip.ClientTransaction;
-import javax.sip.Dialog;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import gov.nist.javax.sip.stack.SIPDialog;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-/**    
- * @description:视频流session管理器,管理视频预览、预览回放的通信句柄 
- * @author: swwheihei
- * @date:   2020年5月13日 下午4:03:02     
- */
-@Component
-public class VideoStreamSessionManager {
-
-	@Autowired
-	private RedisUtil redisUtil;
-
-	@Autowired
-	private UserSetup userSetup;
-
-	/**
-	 * 添加一个点播/回放的事务信息
-	 * 后续可以通过流Id/callID
-	 * @param deviceId 设备ID
-	 * @param channelId 通道ID
-	 * @param callId 一次请求的CallID
-	 * @param stream 流名称
-	 * @param mediaServerId 所使用的流媒体ID
-	 * @param transaction 事务
-	 */
-	public void put(String deviceId, String channelId, String callId, String stream, String ssrc, String mediaServerId, ClientTransaction transaction){
-		SsrcTransaction ssrcTransaction = new SsrcTransaction();
-		ssrcTransaction.setDeviceId(deviceId);
-		ssrcTransaction.setChannelId(channelId);
-		ssrcTransaction.setStream(stream);
-		byte[] transactionByteArray = SerializeUtils.serialize(transaction);
-		ssrcTransaction.setTransaction(transactionByteArray);
-		ssrcTransaction.setCallId(callId);
-		ssrcTransaction.setSsrc(ssrc);
-		ssrcTransaction.setMediaServerId(mediaServerId);
-
-		redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId()
-				+ "_" +  deviceId + "_" + channelId + "_" + callId + "_" + stream, ssrcTransaction);
-		redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId()
-				+ "_" +  deviceId + "_" + channelId + "_" + callId + "_" + stream, ssrcTransaction);
-	}
-
-	public void put(String deviceId, String channelId, String callId, Dialog dialog){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callId, null);
-		if (ssrcTransaction != null) {
-			byte[] dialogByteArray = SerializeUtils.serialize(dialog);
-			ssrcTransaction.setDialog(dialogByteArray);
-		}
-		redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId()
-				+ "_" +  deviceId + "_" + channelId + "_" + ssrcTransaction.getCallId() + "_"
-				+ ssrcTransaction.getStream(), ssrcTransaction);
-	}
-
-	
-	public ClientTransaction getTransactionByStream(String deviceId, String channelId, String stream){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
-		if (ssrcTransaction == null) return null;
-		byte[] transactionByteArray = ssrcTransaction.getTransaction();
-		ClientTransaction clientTransaction = (ClientTransaction)SerializeUtils.deSerialize(transactionByteArray);
-		return clientTransaction;
-	}
-
-	public SIPDialog getDialogByStream(String deviceId, String channelId, String stream){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
-		if (ssrcTransaction == null) return null;
-		byte[] dialogByteArray = ssrcTransaction.getDialog();
-		if (dialogByteArray == null) return null;
-		SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray);
-		return dialog;
-	}
-
-	public SIPDialog getDialogByCallId(String deviceId, String channelId, String callID){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callID, null);
-		if (ssrcTransaction == null) return null;
-		byte[] dialogByteArray = ssrcTransaction.getDialog();
-		if (dialogByteArray == null) return null;
-		SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray);
-		return dialog;
-	}
-
-	public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){
-		if (StringUtils.isEmpty(callId)) callId ="*";
-		if (StringUtils.isEmpty(stream)) stream ="*";
-		String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream;
-		List<Object> scanResult = redisUtil.scan(key);
-		if (scanResult.size() == 0) return null;
-		return (SsrcTransaction)redisUtil.get((String) scanResult.get(0));
-	}
-
-	public List<SsrcTransaction> getSsrcTransactionForAll(String deviceId, String channelId, String callId, String stream){
-		if (StringUtils.isEmpty(deviceId)) deviceId ="*";
-		if (StringUtils.isEmpty(channelId)) channelId ="*";
-		if (StringUtils.isEmpty(callId)) callId ="*";
-		if (StringUtils.isEmpty(stream)) stream ="*";
-		String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream;
-		List<Object> scanResult = redisUtil.scan(key);
-		if (scanResult.size() == 0) return null;
-		List<SsrcTransaction> result = new ArrayList<>();
-		for (Object keyObj : scanResult) {
-			result.add((SsrcTransaction)redisUtil.get((String) keyObj));
-		}
-		return result;
-	}
-
-	public String getMediaServerId(String deviceId, String channelId, String stream){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
-		if (ssrcTransaction == null) return null;
-		return ssrcTransaction.getMediaServerId();
-	}
-
-	public String getSSRC(String deviceId, String channelId, String stream){
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
-		if (ssrcTransaction == null) return null;
-		return ssrcTransaction.getSsrc();
-	}
-	
-	public void remove(String deviceId, String channelId, String stream) {
-		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
-		if (ssrcTransaction == null) return;
-		redisUtil.del(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_"
-				+  deviceId + "_" + channelId + "_" + ssrcTransaction.getCallId() + "_" + ssrcTransaction.getStream());
-	}
-
-
-	public List<SsrcTransaction> getAllSsrc() {
-		List<Object> ssrcTransactionKeys = redisUtil.scan(String.format("%s_*_*_*_*", VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX+ userSetup.getServerId() + "_" ));
-		List<SsrcTransaction> result= new ArrayList<>();
-		for (int i = 0; i < ssrcTransactionKeys.size(); i++) {
-			String key = (String)ssrcTransactionKeys.get(i);
-			SsrcTransaction ssrcTransaction = (SsrcTransaction)redisUtil.get(key);
-			result.add(ssrcTransaction);
-		}
-		return result;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
deleted file mode 100644
index 4b21638..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.task;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-public class GPSSubscribeTask implements Runnable{
-
-    private IRedisCatchStorage redisCatchStorage;
-    private IVideoManagerStorager storager;
-    private ISIPCommanderForPlatform sipCommanderForPlatform;
-    private SubscribeHolder subscribeHolder;
-    private String platformId;
-    private String sn;
-    private String key;
-
-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    public GPSSubscribeTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorager storager, String platformId, String sn, String key, SubscribeHolder subscribeInfo) {
-        this.redisCatchStorage = redisCatchStorage;
-        this.storager = storager;
-        this.platformId = platformId;
-        this.sn = sn;
-        this.key = key;
-        this.sipCommanderForPlatform = sipCommanderForPlatform;
-        this.subscribeHolder = subscribeInfo;
-    }
-
-    @Override
-    public void run() {
-
-        SubscribeInfo subscribe = subscribeHolder.getMobilePositionSubscribe(platformId);
-
-        if (subscribe != null) {
-            ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
-            if (parentPlatform == null || parentPlatform.isStatus()) {
-                // TODO 暂时只处理视频流的回复,后续增加对国标设备的支持
-                List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(platformId);
-                if (gbStreams.size() > 0) {
-                    for (GbStream gbStream : gbStreams) {
-                        String gbId = gbStream.getGbId();
-                        GPSMsgInfo gpsMsgInfo = redisCatchStorage.getGpsMsgInfo(gbId);
-                        if (gbStream.isStatus()) {
-                            if (gpsMsgInfo != null) {
-                                // 发送GPS消息
-                                sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
-                            }else {
-                                // 没有在redis找到新的消息就使用数据库的消息
-                                gpsMsgInfo = new GPSMsgInfo();
-                                gpsMsgInfo.setId(gbId);
-                                gpsMsgInfo.setLat(gbStream.getLongitude());
-                                gpsMsgInfo.setLng(gbStream.getLongitude());
-                                // 发送GPS消息
-                                sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
-                            }
-                        }
-
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/ISIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/ISIPProcessorObserver.java
deleted file mode 100644
index 2480f37..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/ISIPProcessorObserver.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit;
-
-import javax.sip.SipListener;
-
-public interface ISIPProcessorObserver extends SipListener {
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
deleted file mode 100644
index 6439e8c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit;
-
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.response.ISIPResponseProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.timeout.ITimeoutProcessor;
-import gov.nist.javax.sip.message.SIPRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-import javax.sip.*;
-import javax.sip.header.CSeqHeader;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.Header;
-import javax.sip.message.Response;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * @description: SIP信令处理类观察者
- * @author: panlinlin
- * @date:   2021年11月5日 下午15:32
- */
-@Component
-public class SIPProcessorObserver implements ISIPProcessorObserver {
-
-    private final static Logger logger = LoggerFactory.getLogger(SIPProcessorObserver.class);
-
-    private static Map<String, ISIPRequestProcessor> requestProcessorMap = new ConcurrentHashMap<>();
-    private static Map<String, ISIPResponseProcessor> responseProcessorMap = new ConcurrentHashMap<>();
-    private static ITimeoutProcessor timeoutProcessor;
-
-    @Autowired
-    private SipSubscribe sipSubscribe;
-
-//    @Autowired
-//    @Qualifier(value = "taskExecutor")
-//    private ThreadPoolTaskExecutor poolTaskExecutor;
-
-    /**
-     * 添加 request订阅
-     * @param method 方法名
-     * @param processor 处理程序
-     */
-    public void addRequestProcessor(String method, ISIPRequestProcessor processor) {
-        requestProcessorMap.put(method, processor);
-    }
-
-    /**
-     * 添加 response订阅
-     * @param method 方法名
-     * @param processor 处理程序
-     */
-    public void addResponseProcessor(String method, ISIPResponseProcessor processor) {
-        responseProcessorMap.put(method, processor);
-    }
-
-    /**
-     * 添加 超时事件订阅
-     * @param processor 处理程序
-     */
-    public void addTimeoutProcessor(ITimeoutProcessor processor) {
-        this.timeoutProcessor = processor;
-    }
-
-    /**
-     * 分发RequestEvent事件
-     * @param requestEvent RequestEvent事件
-     */
-    @Override
-    @Async
-    public void processRequest(RequestEvent requestEvent) {
-        logger.debug("\n收到请求:\n{}", requestEvent.getRequest());
-        String method = requestEvent.getRequest().getMethod();
-        ISIPRequestProcessor sipRequestProcessor = requestProcessorMap.get(method);
-        if (sipRequestProcessor == null) {
-            logger.warn("不支持方法{}的request", method);
-            return;
-        }
-        requestProcessorMap.get(method).process(requestEvent);
-
-    }
-
-    /**
-     * 分发ResponseEvent事件
-     * @param responseEvent responseEvent事件
-     */
-    @Override
-    @Async
-    public void processResponse(ResponseEvent responseEvent) {
-        Response response = responseEvent.getResponse();
-        logger.debug("\n收到响应:\n{}", responseEvent.getResponse());
-        int status = response.getStatusCode();
-
-        if (((status >= 200) && (status < 300)) || status == Response.UNAUTHORIZED) { // Success!
-            CSeqHeader cseqHeader = (CSeqHeader) responseEvent.getResponse().getHeader(CSeqHeader.NAME);
-            String method = cseqHeader.getMethod();
-            ISIPResponseProcessor sipRequestProcessor = responseProcessorMap.get(method);
-            if (sipRequestProcessor != null) {
-                sipRequestProcessor.process(responseEvent);
-            }
-            if (status != Response.UNAUTHORIZED && responseEvent.getResponse() != null && sipSubscribe.getOkSubscribesSize() > 0 ) {
-                CallIdHeader callIdHeader = (CallIdHeader)responseEvent.getResponse().getHeader(CallIdHeader.NAME);
-                if (callIdHeader != null) {
-                    SipSubscribe.Event subscribe = sipSubscribe.getOkSubscribe(callIdHeader.getCallId());
-                    if (subscribe != null) {
-                        SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(responseEvent);
-                        sipSubscribe.removeOkSubscribe(callIdHeader.getCallId());
-                        subscribe.response(eventResult);
-                    }
-                }
-            }
-        } else if ((status >= 100) && (status < 200)) {
-            // 增加其它无需回复的响应,如101、180等
-        } else {
-            logger.warn("接收到失败的response响应!status:" + status + ",message:" + response.getReasonPhrase()/* .getContent().toString()*/);
-            if (responseEvent.getResponse() != null && sipSubscribe.getErrorSubscribesSize() > 0 ) {
-                CallIdHeader callIdHeader = (CallIdHeader)responseEvent.getResponse().getHeader(CallIdHeader.NAME);
-                if (callIdHeader != null) {
-                    SipSubscribe.Event subscribe = sipSubscribe.getErrorSubscribe(callIdHeader.getCallId());
-                    if (subscribe != null) {
-                        SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(responseEvent);
-                        subscribe.response(eventResult);
-                        sipSubscribe.removeErrorSubscribe(callIdHeader.getCallId());
-                    }
-                }
-            }
-            if (responseEvent.getDialog() != null) {
-                responseEvent.getDialog().delete();
-            }
-        }
-
-
-    }
-
-    /**
-     * 向超时订阅发送消息
-     * @param timeoutEvent timeoutEvent事件
-     */
-    @Override
-    public void processTimeout(TimeoutEvent timeoutEvent) {
-        if(timeoutProcessor != null) {
-            timeoutProcessor.process(timeoutEvent);
-        }
-    }
-
-    @Override
-    public void processIOException(IOExceptionEvent exceptionEvent) {
-        System.out.println("processIOException");
-    }
-
-    @Override
-    public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
-//        Transaction transaction = null;
-//        System.out.println("processTransactionTerminated");
-//        if (transactionTerminatedEvent.isServerTransaction()) {
-//            transaction = transactionTerminatedEvent.getServerTransaction();
-//        }else {
-//            transaction = transactionTerminatedEvent.getClientTransaction();
-//        }
-//
-//        System.out.println(transaction.getBranchId());
-//        System.out.println(transaction.getState());
-//        System.out.println(transaction.getRequest().getMethod());
-//        CallIdHeader header = (CallIdHeader)transaction.getRequest().getHeader(CallIdHeader.NAME);
-//        SipSubscribe.EventResult<TransactionTerminatedEvent> terminatedEventEventResult = new SipSubscribe.EventResult<>(transactionTerminatedEvent);
-
-//        sipSubscribe.getErrorSubscribe(header.getCallId()).response(terminatedEventEventResult);
-    }
-
-    @Override
-    public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
-        CallIdHeader callId = dialogTerminatedEvent.getDialog().getCallId();
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java
deleted file mode 100644
index dff74cf..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.callback;
-
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.RecordInfoResponseMessageHandler;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import org.slf4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-@SuppressWarnings("unchecked")
-public class CheckForAllRecordsThread extends Thread {
-
-    private String key;
-
-    private RecordInfo recordInfo;
-
-    private RedisUtil redis;
-
-    private Logger logger;
-
-    private DeferredResultHolder deferredResultHolder;
-
-    public CheckForAllRecordsThread(String key, RecordInfo recordInfo) {
-        this.key = key;
-        this.recordInfo = recordInfo;
-    }
-
-    public void run() {
-
-        String cacheKey = this.key;
-
-        for (long stop = System.nanoTime() + TimeUnit.SECONDS.toNanos(10); stop > System.nanoTime();) {
-            List<Object> cacheKeys = redis.scan(cacheKey + "_*");
-            List<RecordItem> totalRecordList = new ArrayList<RecordItem>();
-            for (int i = 0; i < cacheKeys.size(); i++) {
-                totalRecordList.addAll((List<RecordItem>) redis.get(cacheKeys.get(i).toString()));
-            }
-            if (totalRecordList.size() < this.recordInfo.getSumNum()) {
-                logger.info("已获取" + totalRecordList.size() + "项录像数据,共" + this.recordInfo.getSumNum() + "项");
-            } else {
-                logger.info("录像数据已全部获取,共 {} 项", this.recordInfo.getSumNum());
-                this.recordInfo.setRecordList(totalRecordList);
-                for (int i = 0; i < cacheKeys.size(); i++) {
-                    redis.del(cacheKeys.get(i).toString());
-                }
-                break;
-            }
-        }
-        // 自然顺序排序, 元素进行升序排列
-        this.recordInfo.getRecordList().sort(Comparator.naturalOrder());
-        RequestMessage msg = new RequestMessage();
-        msg.setKey(DeferredResultHolder.CALLBACK_CMD_RECORDINFO + recordInfo.getDeviceId() + recordInfo.getSn());
-        msg.setData(recordInfo);
-        deferredResultHolder.invokeAllResult(msg);
-        logger.info("处理完成,返回结果");
-        RecordInfoResponseMessageHandler.threadNameList.remove(cacheKey);
-    }
-    
-	public void setRedis(RedisUtil redis) {
-		this.redis = redis;
-	}
-
-	public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) {
-		this.deferredResultHolder = deferredResultHolder;
-    }
-
-    public void setLogger(Logger logger) {
-        this.logger = logger;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
deleted file mode 100644
index 1a377cc..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.callback;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.async.DeferredResult;
-
-/**    
- * @description: 异步请求处理
- * @author: swwheihei
- * @date:   2020年5月8日 下午7:59:05     
- */
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-@Component
-public class DeferredResultHolder {
-	
-	public static final String CALLBACK_CMD_DEVICESTATUS = "CALLBACK_DEVICESTATUS";
-	
-	public static final String CALLBACK_CMD_DEVICEINFO = "CALLBACK_DEVICEINFO";
-	
-	public static final String CALLBACK_CMD_DEVICECONTROL = "CALLBACK_DEVICECONTROL";
-	
-	public static final String CALLBACK_CMD_DEVICECONFIG = "CALLBACK_DEVICECONFIG";
-
-	public static final String CALLBACK_CMD_CONFIGDOWNLOAD = "CALLBACK_CONFIGDOWNLOAD";
-	
-	public static final String CALLBACK_CMD_CATALOG = "CALLBACK_CATALOG";
-	
-	public static final String CALLBACK_CMD_RECORDINFO = "CALLBACK_RECORDINFO";
-
-	public static final String CALLBACK_CMD_PLAY = "CALLBACK_PLAY";
-
-	public static final String CALLBACK_CMD_PLAYBACK = "CALLBACK_PLAY";
-
-	public static final String CALLBACK_CMD_DOWNLOAD = "CALLBACK_DOWNLOAD";
-
-	public static final String CALLBACK_CMD_STOP = "CALLBACK_STOP";
-
-	public static final String UPLOAD_FILE_CHANNEL = "UPLOAD_FILE_CHANNEL";
-
-	public static final String CALLBACK_CMD_MOBILEPOSITION = "CALLBACK_MOBILEPOSITION";
-
-	public static final String CALLBACK_CMD_PRESETQUERY = "CALLBACK_PRESETQUERY";
-
-	public static final String CALLBACK_CMD_ALARM = "CALLBACK_ALARM";
-
-	public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
-
-	private Map<String, Map<String, DeferredResult>> map = new ConcurrentHashMap<>();
-
-
-	public void put(String key, String id, DeferredResult result) {
-		Map<String, DeferredResult> deferredResultMap = map.get(key);
-		if (deferredResultMap == null) {
-			deferredResultMap = new ConcurrentHashMap<>();
-			map.put(key, deferredResultMap);
-		}
-		deferredResultMap.put(id, result);
-	}
-	
-	public DeferredResult get(String key, String id) {
-		Map<String, DeferredResult> deferredResultMap = map.get(key);
-		if (deferredResultMap == null) return null;
-		return deferredResultMap.get(id);
-	}
-
-	public boolean exist(String key, String id){
-		if (key == null) return false;
-		Map<String, DeferredResult> deferredResultMap = map.get(key);
-		if (id == null) {
-			return deferredResultMap != null;
-		}else {
-			return deferredResultMap != null && deferredResultMap.get(id) != null;
-		}
-	}
-
-	/**
-	 * 释放单个请求
-	 * @param msg
-	 */
-	public void invokeResult(RequestMessage msg) {
-		Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
-		if (deferredResultMap == null) {
-			return;
-		}
-		DeferredResult result = deferredResultMap.get(msg.getId());
-		if (result == null) {
-			return;
-		}
-		result.setResult(new ResponseEntity<>(msg.getData(),HttpStatus.OK));
-		deferredResultMap.remove(msg.getId());
-		if (deferredResultMap.size() == 0) {
-			map.remove(msg.getKey());
-		}
-	}
-
-	/**
-	 * 释放所有的请求
-	 * @param msg
-	 */
-	public void invokeAllResult(RequestMessage msg) {
-		Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
-		if (deferredResultMap == null) {
-			return;
-		}
-		Set<String> ids = deferredResultMap.keySet();
-		for (String id : ids) {
-			DeferredResult result = deferredResultMap.get(id);
-			if (result == null) {
-				return;
-			}
-			result.setResult(ResponseEntity.ok().body(msg.getData()));
-		}
-		map.remove(msg.getKey());
-
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
deleted file mode 100644
index f4e2d20..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.callback;
-
-/**    
- * @description: 请求信息定义   
- * @author: swwheihei
- * @date:   2020年5月8日 下午1:09:18     
- */
-public class RequestMessage {
-	
-	private String id;
-
-	private String key;
-
-	private Object data;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public void setKey(String key) {
-		this.key = key;
-	}
-
-	public String getKey() {
-		return key;
-	}
-
-	public Object getData() {
-		return data;
-	}
-
-	public void setData(Object data) {
-		this.data = data;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
deleted file mode 100644
index 1affa26..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ /dev/null
@@ -1,341 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamCallback;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-
-/**    
- * @description:设备能力接口,用于定义设备的控制、查询能力   
- * @author: swwheihei
- * @date:   2020年5月3日 下午9:16:34     
- */
-public interface ISIPCommander {
-
-	/**
-	 * 云台方向放控制,使用配置文件中的默认镜头移动速度
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-	 * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-     * @param moveSpeed  镜头移动速度
-	 */
-	boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown);
-	
-	/**
-	 * 云台方向放控制
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-	 * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-     * @param moveSpeed  镜头移动速度
-	 */
-	boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed);
-	
-	/**
-	 * 云台缩放控制,使用配置文件中的默认镜头缩放速度
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-	 */
-	boolean ptzZoomCmd(Device device,String channelId,int inOut);
-	
-	/**
-	 * 云台缩放控制
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-     * @param zoomSpeed  镜头缩放速度
-	 */
-	boolean ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed);
-	
-	/**
-	 * 云台控制,支持方向与缩放控制
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-	 * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-     * @param moveSpeed  镜头移动速度
-     * @param zoomSpeed  镜头缩放速度
-	 */
-	boolean ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed);
-	
-	/**
-	 * 前端控制,包括PTZ指令、FI指令、预置位指令、巡航指令、扫描指令和辅助开关指令
-	 * 
-	 * @param device  		控制设备
-	 * @param channelId		预览通道
-	 * @param cmdCode		指令码
-     * @param parameter1	数据1
-     * @param parameter2	数据2
-     * @param combineCode2	组合码2
-	 */
-	boolean frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2);
-	
-	/**
-	 * 前端控制指令(用于转发上级指令)
-	 * @param device		控制设备
-	 * @param channelId		预览通道
-	 * @param cmdString		前端控制指令串
-	 */
-	boolean fronEndCmd(Device device, String channelId, String cmdString);
-
-	/**
-	 * 请求预览视频流
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 */
-	void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 请求回放视频流
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 */
-	void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime,InviteStreamCallback inviteStreamCallback, InviteStreamCallback event, SipSubscribe.Event errorEvent);
-
-	/**
-	 * 请求历史媒体下载
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param downloadSpeed 下载倍速参数
-	 */ 
-	void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, String startTime, String endTime, String downloadSpeed, InviteStreamCallback event, SipSubscribe.Event errorEvent);
-
-	/**
-	 * 视频流停止
-	 */
-	void streamByeCmd(String deviceId, String channelId, String stream, String callId, SipSubscribe.Event okEvent);
-	void streamByeCmd(String deviceId, String channelId, String stream, String callId);
-
-	/**
-	 * 回放暂停
-	 */
-	void playPauseCmd(Device device, StreamInfo streamInfo);
-
-	/**
-	 * 回放恢复
-	 */
-	void playResumeCmd(Device device, StreamInfo streamInfo);
-
-	/**
-	 * 回放拖动播放
-	 */
-	void playSeekCmd(Device device, StreamInfo streamInfo, long seekTime);
-
-	/**
-	 * 回放倍速播放
-	 */
-	void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed);
-
-	/**
-	 * 语音广播
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 */
-	boolean audioBroadcastCmd(Device device,String channelId);
-	
-	/**
-	 * 语音广播
-	 * 
-	 * @param device  视频设备
-	 */
-	void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent);
-	boolean audioBroadcastCmd(Device device);
-	
-	/**
-	 * 音视频录像控制
-	 * 
-	 * @param device  		视频设备
-	 * @param channelId  	预览通道
-	 * @param recordCmdStr	录像命令:Record / StopRecord
-	 */
-	boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 远程启动控制命令
-	 * 
-	 * @param device	视频设备
-	 */
-	boolean teleBootCmd(Device device);
-
-	/**
-	 * 报警布防/撤防命令
-	 * 
-	 * @param device  	视频设备
-	 * @param setGuard	true: SetGuard, false: ResetGuard
-	 */
-	boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 报警复位命令
-	 * 
-	 * @param device		视频设备
-	 * @param alarmMethod	报警方式(可选)
-	 * @param alarmType		报警类型(可选)
-	 */
-	boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 强制关键帧命令,设备收到此命令应立刻发送一个IDR帧
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 */
-	boolean iFrameCmd(Device device, String channelId);
-	
-	/**
-	 * 看守位控制命令
-	 * 
-	 * @param device		视频设备
-	 * @param enabled		看守位使能:1 = 开启,0 = 关闭
-	 * @param resetTime		自动归位时间间隔,开启看守位时使用,单位:秒(s)
-	 * @param presetIndex	调用预置位编号,开启看守位时使用,取值范围0~255
-	 */
-	boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 设备配置命令
-	 * 
-	 * @param device  视频设备
-	 */
-	boolean deviceConfigCmd(Device device);
-	
-		/**
-	 * 设备配置命令:basicParam
-	 * 
-	 * @param device  			视频设备
-	 * @param channelId			通道编码(可选)
-	 * @param name				设备/通道名称(可选)
-	 * @param expiration		注册过期时间(可选)
-	 * @param heartBeatInterval	心跳间隔时间(可选)
-	 * @param heartBeatCount	心跳超时次数(可选)
-	 */  
-	boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询设备状态
-	 * 
-	 * @param device 视频设备
-	 */
-	boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询设备信息
-	 * 
-	 * @param device 视频设备
-	 * @return 
-	 */
-	boolean deviceInfoQuery(Device device);
-	
-	/**
-	 * 查询目录列表
-	 * 
-	 * @param device 视频设备
-	 */
-	boolean catalogQuery(Device device, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询录像信息
-	 * 
-	 * @param device 视频设备
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param sn
-	 */
-	boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn,  Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询报警信息
-	 * 
-	 * @param device		视频设备
-	 * @param startPriority	报警起始级别(可选)
-	 * @param endPriority	报警终止级别(可选)
-	 * @param alarmMethod	报警方式条件(可选)
-	 * @param alarmType		报警类型
-	 * @param startTime		报警发生起始时间(可选)
-	 * @param endTime		报警发生终止时间(可选)
-	 * @return				true = 命令发送成功
-	 */
-	boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod,
-							String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent);	
-	
-	/**
-	 * 查询设备配置
-	 * 
-	 * @param device 		视频设备
-	 * @param channelId		通道编码(可选)
-	 * @param configType	配置类型:
-	 */
-	boolean deviceConfigQuery(Device device, String channelId, String configType,  SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询设备预置位置
-	 * 
-	 * @param device 视频设备
-	 */
-	boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent);
-	
-	/**
-	 * 查询移动设备位置数据
-	 * 
-	 * @param device 视频设备
-	 */
-	boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent);
-
-	/**
-	 * 订阅、取消订阅移动位置
-	 * 
-	 * @param device	视频设备
-	 * @param expires	订阅超时时间(值=0时为取消订阅)
-	 * @param interval	上报时间间隔
-	 * @return			true = 命令发送成功
-	 */
-	boolean mobilePositionSubscribe(Device device, int expires, int interval);
-
-	/**
-	 * 订阅、取消订阅报警信息
-	 * @param device		视频设备
-	 * @param expires		订阅过期时间(0 = 取消订阅)
-	 * @param startPriority	报警起始级别(可选)
-	 * @param endPriority	报警终止级别(可选)
-	 * @param alarmMethods	报警方式条件(可选)
-	 * @param alarmType		报警类型
-	 * @param startTime		报警发生起始时间(可选)
-	 * @param endTime		报警发生终止时间(可选)
-	 * @return				true = 命令发送成功
-	 */
-	boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime);
-
-	/**
-	 * 订阅、取消订阅目录信息
-	 * @param device		视频设备
-	 * @return				true = 命令发送成功
-	 */
-	boolean catalogSubscribe(Device device, SipSubscribe.Event okEvent ,SipSubscribe.Event errorEvent);
-
-	/**
-	 * 拉框控制命令
-	 *
-	 * @param device    控制设备
-	 * @param channelId 通道id
-	 * @param cmdString 前端控制指令串
-	 */
-	boolean dragZoomCmd(Device device, String channelId, String cmdString);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
deleted file mode 100644
index 1f58a15..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-
-import javax.sip.header.WWWAuthenticateHeader;
-import java.util.List;
-
-public interface ISIPCommanderForPlatform {
-
-    /**
-     * 向上级平台注册
-     * @param parentPlatform
-     * @return
-     */
-    boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent);
-    boolean register(ParentPlatform parentPlatform, String callId, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain);
-
-    /**
-     * 向上级平台注销
-     * @param parentPlatform
-     * @return
-     */
-    boolean unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent);
-
-
-    /**
-     * 向上级平发送心跳信息
-     * @param parentPlatform
-     * @return callId(作为接受回复的判定)
-     */
-    String keepalive(ParentPlatform parentPlatform);
-
-
-    /**
-     * 向上级回复通道信息
-     * @param channel 通道信息
-     * @param parentPlatform 平台信息
-     * @param sn
-     * @param fromTag
-     * @param size
-     * @return
-     */
-    boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size);
-
-    /**
-     * 向上级回复DeviceInfo查询信息
-     * @param parentPlatform 平台信息
-     * @param sn
-     * @param fromTag
-     * @return
-     */
-    boolean deviceInfoResponse(ParentPlatform parentPlatform, String sn, String fromTag);
-
-    /**
-     * 向上级回复DeviceStatus查询信息
-     * @param parentPlatform 平台信息
-     * @param sn
-     * @param fromTag
-     * @return
-     */
-    boolean deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag);
-
-    /**
-     * 向上级回复移动位置订阅消息
-     * @param parentPlatform 平台信息
-     * @param gpsMsgInfo GPS信息
-     * @param subscribeInfo 订阅相关的信息
-     * @return
-     */
-    boolean sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo);
-
-    /**
-     * 回复catalog事件-增加/更新
-     * @param parentPlatform
-     * @param deviceChannels
-     */
-    boolean sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo, Integer index);
-
-    /**
-     * 回复catalog事件-删除
-     * @param parentPlatform
-     * @param deviceChannels
-     */
-    boolean sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo, Integer index);
-
-    /**
-     * 回复recordInfo
-     * @param deviceChannel 通道信息
-     * @param parentPlatform 平台信息
-     * @param fromTag fromTag
-     * @param recordInfo 录像信息
-     */
-    boolean recordInfo(DeviceChannel deviceChannel, ParentPlatform parentPlatform, String fromTag, RecordInfo recordInfo);
-
-    /**
-     * 向发起点播的上级回复bye
-     * @param platform 平台信息
-     * @param callId  callId
-     */
-    void streamByeCmd(ParentPlatform platform, String callId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
deleted file mode 100644
index 7d67e82..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import gov.nist.javax.sip.message.MessageFactoryImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.DigestUtils;
-
-import javax.sip.*;
-import javax.sip.address.Address;
-import javax.sip.address.SipURI;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-import javax.validation.constraints.NotNull;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * @description: 平台命令request创造器 TODO 冗余代码太多待优化
- * @author: panll
- * @date: 2020年5月6日 上午9:29:02
- */
-@Component
-public class SIPRequestHeaderPlarformProvider {
-
-	@Autowired
-	private SipConfig sipConfig;
-	
-	@Autowired
-	private SipFactory sipFactory;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-
-	public Request createKeetpaliveMessageRequest(ParentPlatform parentPlatform, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		// sipuri
-		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
-				parentPlatform.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
-				sipConfig.getIp() + ":" + sipConfig.getPort());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
-		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort() );
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
-
-
-		// Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-		// ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.MESSAGE), Request.MESSAGE);
-
-		request = sipFactory.createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
-				toHeader, viaHeaders, maxForwards);
-
-		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
-
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-
-
-	public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
-		//请求行
-		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(),
-				platform.getServerIP() + ":" + platform.getServerPort());
-		//via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(platform.getServerIP(), platform.getServerPort(), platform.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
-		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
-
-
-
-		//Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-
-		//ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(CSeq, Request.REGISTER);
-		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader,
-				cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
-
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
-				.createSipURI(platform.getDeviceGBId(), sipAddress));
-		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-
-		ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(Integer.parseInt(platform.getExpires()));
-		request.addHeader(expires);
-
-		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
-
-		return request;
-	}
-
-	public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, String fromTag, String viaTag,
-										 String callId, WWWAuthenticateHeader www , CallIdHeader callIdHeader) throws ParseException, PeerUnavailableException, InvalidArgumentException {
-
-
-		Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(Request.REGISTER), fromTag, viaTag, callIdHeader);
-		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
-		if (www == null) {
-			AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader("Digest");
-			authorizationHeader.setUsername(parentPlatform.getDeviceGBId());
-			authorizationHeader.setURI(requestURI);
-			authorizationHeader.setAlgorithm("MD5");
-			registerRequest.addHeader(authorizationHeader);
-			return  registerRequest;
-		}
-		String realm = www.getRealm();
-		String nonce = www.getNonce();
-		String scheme = www.getScheme();
-
-		// 参考 https://blog.csdn.net/y673533511/article/details/88388138
-		// qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略
-		String qop = www.getQop();
-
-		callIdHeader.setCallId(callId);
-
-		String cNonce = null;
-		String nc = "00000001";
-		if (qop != null) {
-			if ("auth".equals(qop)) {
-				// 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。
-				// 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
-				cNonce = UUID.randomUUID().toString();
-
-			}else if ("auth-int".equals(qop)){
-				// TODO
-			}
-		}
-		String HA1 = DigestUtils.md5DigestAsHex((parentPlatform.getDeviceGBId() + ":" + realm + ":" + parentPlatform.getPassword()).getBytes());
-		String HA2=DigestUtils.md5DigestAsHex((Request.REGISTER + ":" + requestURI.toString()).getBytes());
-
-		StringBuffer reStr = new StringBuffer(200);
-		reStr.append(HA1);
-		reStr.append(":");
-		reStr.append(nonce);
-		reStr.append(":");
-		if (qop != null) {
-			reStr.append(nc);
-			reStr.append(":");
-			reStr.append(cNonce);
-			reStr.append(":");
-			reStr.append(qop);
-			reStr.append(":");
-		}
-		reStr.append(HA2);
-
-		String RESPONSE = DigestUtils.md5DigestAsHex(reStr.toString().getBytes());
-
-		AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(scheme);
-		authorizationHeader.setUsername(parentPlatform.getDeviceGBId());
-		authorizationHeader.setRealm(realm);
-		authorizationHeader.setNonce(nonce);
-		authorizationHeader.setURI(requestURI);
-		authorizationHeader.setResponse(RESPONSE);
-		authorizationHeader.setAlgorithm("MD5");
-		if (qop != null) {
-			authorizationHeader.setQop(qop);
-			authorizationHeader.setCNonce(cNonce);
-			authorizationHeader.setNonceCount(1);
-		}
-		registerRequest.addHeader(authorizationHeader);
-
-		return registerRequest;
-	}
-
-
-	public Request createMessageRequest(ParentPlatform parentPlatform, String content, String fromTag, CallIdHeader callIdHeader) throws PeerUnavailableException, ParseException, InvalidArgumentException {
-		Request request = null;
-		// sipuri
-		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
-				parentPlatform.getTransport(), null);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
-				parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
-		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, null);
-
-		// Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-		// ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.MESSAGE), Request.MESSAGE);
-		MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
-		// 设置编码, 防止中文乱码
-		messageFactory.setDefaultContentEncodingCharset(parentPlatform.getCharacterSet());
-		request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
-				toHeader, viaHeaders, maxForwards);
-		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
-
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
deleted file mode 100644
index c41c7c4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-
-import javax.sip.Dialog;
-import javax.sip.InvalidArgumentException;
-import javax.sip.PeerUnavailableException;
-import javax.sip.SipFactory;
-import javax.sip.address.Address;
-import javax.sip.address.SipURI;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-
-/**
- * @description:摄像头命令request创造器 TODO 冗余代码太多待优化
- * @author: swwheihei
- * @date: 2020年5月6日 上午9:29:02
- */
-@Component
-public class SIPRequestHeaderProvider {
-
-	@Autowired
-	private SipConfig sipConfig;
-	
-	@Autowired
-	private SipFactory sipFactory;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-	
-	public Request createMessageRequest(Device device, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		// sipuri
-		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
-				sipConfig.getIp() + ":" + sipConfig.getPort());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
-		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
-
-		// Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-		// ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.MESSAGE);
-
-		request = sipFactory.createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
-				toHeader, viaHeaders, maxForwards);
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-	
-	public Request createInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, String ssrc, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		//请求行
-		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
-		//via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-
-		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
-		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain()); 
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
-		
-		//Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-		
-		//ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.INVITE), Request.INVITE);
-		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
-		
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
-		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
-		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-		// Subject
-		SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
-		request.addHeader(subjectHeader);
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-	
-	public Request createPlaybackInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader, String ssrc) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		//请求行
-		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
-		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, sipConfig.getDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
-		
-		//Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-		
-		//ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.INVITE), Request.INVITE);
-		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
-		
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
-		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
-		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-		// Subject
-		SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
-		request.addHeader(subjectHeader);
-
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-
-	public Request createByteRequest(Device device, String channelId, String viaTag, String fromTag, String toTag, String callId) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		//请求行
-		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
-		viaHeaders.add(viaHeader);
-		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
-		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,toTag);
-
-		//Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-
-		//ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.BYE);
-		CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(callId);
-		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.BYE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
-
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
-
-		return request;
-	}
-
-	public Request createSubscribeRequest(Device device, String content, String viaTag, String fromTag, String toTag, Integer expires, String event, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
-		Request request = null;
-		// sipuri
-		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
-				device.getTransport(), viaTag);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
-				sipConfig.getIp() + ":" + sipConfig.getPort());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
-		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
-
-		// Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-
-		// ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.SUBSCRIBE), Request.SUBSCRIBE);
-
-		request = sipFactory.createMessageFactory().createRequest(requestURI, Request.SUBSCRIBE, callIdHeader, cSeqHeader, fromHeader,
-				toHeader, viaHeaders, maxForwards);
-
-
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
-		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-
-		// Expires
-		ExpiresHeader expireHeader = sipFactory.createHeaderFactory().createExpiresHeader(expires);
-		request.addHeader(expireHeader);
-
-		// Event
-		EventHeader eventHeader = sipFactory.createHeaderFactory().createEventHeader(event);
-
-		int random = (int)Math.random() * 1000000000;
-		eventHeader.setEventId(random + "");
-		request.addHeader(eventHeader);
-
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-
-	public Request createInfoRequest(Device device, StreamInfo streamInfo, String content)
-			throws PeerUnavailableException, ParseException, InvalidArgumentException {
-		Request request = null;
-		if (streamInfo == null) return null;
-		Dialog dialog = streamSession.getDialogByStream(streamInfo.getDeviceID(), streamInfo.getChannelId(), streamInfo.getStream());
-		if (dialog == null) return null;
-
-		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(),
-				device.getHostAddress());
-		// via
-		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getIp(), device.getPort(),
-				device.getTransport(), null);
-		viaHeader.setRPort();
-		viaHeaders.add(viaHeader);
-		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
-				sipConfig.getDomain());
-		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
-		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, dialog.getLocalTag());
-		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(streamInfo.getChannelId(),
-				sipConfig.getDomain());
-		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
-		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, dialog.getRemoteTag());
-
-		// callid
-		CallIdHeader callIdHeader = dialog.getCallId();
-
-		// Forwards
-		MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
-
-		Long cseq = redisCatchStorage.getCSEQ(Request.INVITE);
-		// ceq
-		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory()
-				.createCSeqHeader(cseq, Request.INFO);
-
-		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INFO, callIdHeader, cSeqHeader,
-				fromHeader, toHeader, viaHeaders, maxForwards);
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
-				.createSipURI(sipConfig.getId(), sipConfig.getIp() + ":" + sipConfig.getPort()));
-		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application",
-				"MANSRTSP");
-		request.setContent(content, contentTypeHeader);
-		return request;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
deleted file mode 100644
index fdfeae2..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ /dev/null
@@ -1,1735 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamCallback;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
-import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import gov.nist.javax.sip.SipProviderImpl;
-import gov.nist.javax.sip.SipStackImpl;
-import gov.nist.javax.sip.message.SIPRequest;
-import gov.nist.javax.sip.stack.SIPDialog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.*;
-import javax.sip.address.SipURI;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.Request;
-import java.lang.reflect.Field;
-import java.text.ParseException;
-import java.util.HashSet;
-
-/**    
- * @description:设备能力接口,用于定义设备的控制、查询能力   
- * @author: swwheihei
- * @date:   2020年5月3日 下午9:22:48     
- */
-@Component
-@DependsOn("sipLayer")
-public class SIPCommander implements ISIPCommander {
-
-	private final Logger logger = LoggerFactory.getLogger(SIPCommander.class);
-	
-	@Autowired
-	private SipConfig sipConfig;
-
-	@Autowired
-	@Qualifier(value="tcpSipProvider")
-	private SipProviderImpl tcpSipProvider;
-
-	@Autowired
-	@Qualifier(value="udpSipProvider")
-	private SipProviderImpl udpSipProvider;
-
-	@Autowired
-	private SIPRequestHeaderProvider headerProvider;
-	
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private UserSetup userSetup;
-
-	@Autowired
-	private ZLMHttpHookSubscribe subscribe;
-
-	@Autowired
-	private SipSubscribe sipSubscribe;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-
-	/**
-	 * 云台方向放控制,使用配置文件中的默认镜头移动速度
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-	 * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-	 */
-	@Override
-	public boolean ptzdirectCmd(Device device, String channelId, int leftRight, int upDown) {
-		return ptzCmd(device, channelId, leftRight, upDown, 0, sipConfig.getPtzSpeed(), 0);
-	}
-
-	/**
-	 * 云台方向放控制
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-	 * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-     * @param moveSpeed  镜头移动速度
-	 */
-	@Override
-	public boolean ptzdirectCmd(Device device, String channelId, int leftRight, int upDown, int moveSpeed) {
-		return ptzCmd(device, channelId, leftRight, upDown, 0, moveSpeed, 0);
-	}
-
-	/**
-	 * 云台缩放控制,使用配置文件中的默认镜头缩放速度
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-	 */  
-	@Override
-	public boolean ptzZoomCmd(Device device, String channelId, int inOut) {
-		return ptzCmd(device, channelId, 0, 0, inOut, 0, sipConfig.getPtzSpeed());
-	}
-
-	/**
-	 * 云台缩放控制
-	 * 
-	 * @param device  控制设备
-	 * @param channelId  预览通道
-     * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-     * @param zoomSpeed  镜头缩放速度
-	 */ 
-	@Override
-	public boolean ptzZoomCmd(Device device, String channelId, int inOut, int zoomSpeed) {
-		return ptzCmd(device, channelId, 0, 0, inOut, 0, zoomSpeed);
-	}
-  
-   /**
-	* 云台指令码计算 
-	*
-    * @param leftRight  镜头左移右移 0:停止 1:左移 2:右移
-    * @param upDown     镜头上移下移 0:停止 1:上移 2:下移
-    * @param inOut      镜头放大缩小 0:停止 1:缩小 2:放大
-    * @param moveSpeed  镜头移动速度 默认 0XFF (0-255)
-    * @param zoomSpeed  镜头缩放速度 默认 0X1 (0-255)
-    */
-    public static String cmdString(int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) {
-		int cmdCode = 0;
-		if (leftRight == 2) {
-			cmdCode|=0x01;		// 右移
-		} else if(leftRight == 1) {
-			cmdCode|=0x02;		// 左移
-		}
-		if (upDown == 2) {
-			cmdCode|=0x04;		// 下移
-		} else if(upDown == 1) {
-			cmdCode|=0x08;		// 上移
-		}
-		if (inOut == 2) {
-			cmdCode |= 0x10;	// 放大
-		} else if(inOut == 1) {
-			cmdCode |= 0x20;	// 缩小
-		}
-		StringBuilder builder = new StringBuilder("A50F01");
-		String strTmp;
-		strTmp = String.format("%02X", cmdCode);
-		builder.append(strTmp, 0, 2);
-		strTmp = String.format("%02X", moveSpeed);
-		builder.append(strTmp, 0, 2);
-		builder.append(strTmp, 0, 2);
-		strTmp = String.format("%X", zoomSpeed);
-		builder.append(strTmp, 0, 1).append("0");
-		//计算校验码
-		int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + moveSpeed + moveSpeed + (zoomSpeed /*<< 4*/ & 0XF0)) % 0X100;
-		strTmp = String.format("%02X", checkCode);
-		builder.append(strTmp, 0, 2);
-		return builder.toString();
-}
-
-   /**
-	* 云台指令码计算 
-	*
-	 * @param cmdCode 		指令码
-	 * @param parameter1	数据1
-	 * @param parameter2	数据2
-	 * @param combineCode2	组合码2
-	 */
-    public static String frontEndCmdString(int cmdCode, int parameter1, int parameter2, int combineCode2) {
-		StringBuilder builder = new StringBuilder("A50F01");
-		String strTmp;
-		strTmp = String.format("%02X", cmdCode);
-		builder.append(strTmp, 0, 2);
-		strTmp = String.format("%02X", parameter1);
-		builder.append(strTmp, 0, 2);
-		strTmp = String.format("%02X", parameter2);
-		builder.append(strTmp, 0, 2);
-		strTmp = String.format("%X", combineCode2);
-		builder.append(strTmp, 0, 1).append("0");
-		//计算校验码
-		int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + parameter1 + parameter2 + (combineCode2 & 0XF0)) % 0X100;
-		strTmp = String.format("%02X", checkCode);
-		builder.append(strTmp, 0, 2);
-		return builder.toString();
-	}
-
-	/**
-	 * 云台控制,支持方向与缩放控制
-	 * 
-	 * @param device  	控制设备
-	 * @param channelId	预览通道
-	 * @param leftRight	镜头左移右移 0:停止 1:左移 2:右移
-     * @param upDown	镜头上移下移 0:停止 1:上移 2:下移
-     * @param inOut		镜头放大缩小 0:停止 1:缩小 2:放大
-     * @param moveSpeed	镜头移动速度
-     * @param zoomSpeed	镜头缩放速度
-	 */
-	@Override
-	public boolean ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed,
-			int zoomSpeed) {
-		try {
-			String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
-			StringBuffer ptzXml = new StringBuffer(200);
-			ptzXml.append("<?xml version=\"1.0\" ?>\r\n");
-			ptzXml.append("<Control>\r\n");
-			ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			ptzXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>\r\n");
-			ptzXml.append("<Info>\r\n");
-			ptzXml.append("</Info>\r\n");
-			ptzXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
-			
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		} 
-		return false;
-	}
-
-	/**
-	 * 前端控制,包括PTZ指令、FI指令、预置位指令、巡航指令、扫描指令和辅助开关指令
-	 * 
-	 * @param device  		控制设备
-	 * @param channelId		预览通道
-	 * @param cmdCode		指令码
-     * @param parameter1	数据1
-     * @param parameter2	数据2
-     * @param combineCode2	组合码2
-	 */
-	@Override
-	public boolean frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2) {
-		try {
-			String cmdStr= frontEndCmdString(cmdCode, parameter1, parameter2, combineCode2);
-			logger.debug("控制字符串:" + cmdStr);
-			StringBuffer ptzXml = new StringBuffer(200);
-			ptzXml.append("<?xml version=\"1.0\" ?>\r\n");
-			ptzXml.append("<Control>\r\n");
-			ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			ptzXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>\r\n");
-			ptzXml.append("<Info>\r\n");
-			ptzXml.append("</Info>\r\n");
-			ptzXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		} 
-		return false;
-	}
-
-	/**
-	 * 前端控制指令(用于转发上级指令)
-	 * @param device		控制设备
-	 * @param channelId		预览通道
-	 * @param cmdString		前端控制指令串
-	 */
-	@Override
-	public boolean fronEndCmd(Device device, String channelId, String cmdString) {
-		try {
-			StringBuffer ptzXml = new StringBuffer(200);
-			ptzXml.append("<?xml version=\"1.0\" ?>\r\n");
-			ptzXml.append("<Control>\r\n");
-			ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			ptzXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			ptzXml.append("<PTZCmd>" + cmdString + "</PTZCmd>\r\n");
-			ptzXml.append("<Info>\r\n");
-			ptzXml.append("</Info>\r\n");
-			ptzXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		} 
-		return false;
-	}
-	
-	 /**
-	 * 	请求预览视频流
-	  * @param device  视频设备
-	  * @param channelId  预览通道
-	  * @param event hook订阅
-	  * @param errorEvent sip错误订阅
-	  */
-	@Override
-	public void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
-							  ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) {
-		String streamId = ssrcInfo.getStream();
-		try {
-			if (device == null) return;
-			String streamMode = device.getStreamMode().toUpperCase();
-
-			logger.info("{} 分配的ZLM为: {} [{}:{}]", streamId, mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
-			// 添加订阅
-			JSONObject subscribeKey = new JSONObject();
-			subscribeKey.put("app", "rtp");
-			subscribeKey.put("stream", streamId);
-			subscribeKey.put("regist", true);
-			subscribeKey.put("schema", "rtmp");
-			subscribeKey.put("mediaServerId", mediaServerItem.getId());
-			subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
-					(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-				if (event != null) {
-					event.response(mediaServerItemInUse, json);
-				}
-			});
-			//
-			StringBuffer content = new StringBuffer(200);
-			content.append("v=0\r\n");
-			content.append("o="+ sipConfig.getId()+" 0 0 IN IP4 "+ mediaServerItem.getSdpIp() +"\r\n");
-			content.append("s=Play\r\n");
-			content.append("c=IN IP4 "+ mediaServerItem.getSdpIp() +"\r\n");
-			content.append("t=0 0\r\n");
-
-			if (userSetup.isSeniorSdp()) {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:126 H264/90000\r\n");
-				content.append("a=rtpmap:125 H264S/90000\r\n");
-				content.append("a=fmtp:125 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:99 MP4V-ES/90000\r\n");
-				content.append("a=fmtp:99 profile-level-id=3\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}else {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if ("TCP-PASSIVE".equals(streamMode)) { // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				} else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}
-
-			content.append("y="+ssrcInfo.getSsrc()+"\r\n");//ssrc
-			// f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率
-//			content.append("f=v/2/5/25/1/4000a/1/8/1" + "\r\n"); // 未发现支持此特性的设备
-
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrcInfo.getSsrc(), callIdHeader);
-
-			transmitRequest(device, request, (e -> {
-				streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-				mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-				errorEvent.response(e);
-			}), e ->{
-				// 这里为例避免一个通道的点播只有一个callID这个参数使用一个固定值
-				streamSession.put(device.getDeviceId(), channelId ,"play", streamId, ssrcInfo.getSsrc(), mediaServerItem.getId(), ((ResponseEvent)e.event).getClientTransaction());
-				streamSession.put(device.getDeviceId(), channelId ,"play", e.dialog);
-			});
-
-			
-		} catch ( SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * 请求回放视频流
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 */ 
-	@Override
-	public void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
-								  String startTime, String endTime, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
-								  SipSubscribe.Event errorEvent) {
-		try {
-
-			logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
-
-			StringBuffer content = new StringBuffer(200);
-	        content.append("v=0\r\n");
-	        content.append("o="+sipConfig.getId()+" 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
-	        content.append("s=Playback\r\n");
-	        content.append("u="+channelId+":0\r\n");
-	        content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-	        content.append("t="+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime)+" "
-					+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n");
-
-			String streamMode = device.getStreamMode().toUpperCase();
-
-			if (userSetup.isSeniorSdp()) {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:126 H264/90000\r\n");
-				content.append("a=rtpmap:125 H264S/90000\r\n");
-				content.append("a=fmtp:125 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:99 MP4V-ES/90000\r\n");
-				content.append("a=fmtp:99 profile-level-id=3\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}else {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}
-
-	        content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
-	        
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			// 添加订阅
-			JSONObject subscribeKey = new JSONObject();
-			subscribeKey.put("app", "rtp");
-			subscribeKey.put("stream", ssrcInfo.getStream());
-			subscribeKey.put("regist", true);
-			subscribeKey.put("schema", "rtmp");
-			subscribeKey.put("mediaServerId", mediaServerItem.getId());
-			logger.debug("录像回放添加订阅,订阅内容:" + subscribeKey);
-			subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
-					(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-						if (hookEvent != null) {
-							InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream());
-							hookEvent.call(inviteStreamInfo);
-						}
-					});
-	        Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
-
-	        transmitRequest(device, request, errorEvent, okEvent -> {
-				ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
-	        	streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), responseEvent.getClientTransaction());
-				streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), okEvent.dialog);
-			});
-			if (inviteStreamCallback != null) {
-				inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
-			}
-		} catch ( SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 请求历史媒体下载
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param downloadSpeed 下载倍速参数
-	 */ 
-	@Override
-	public void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, String startTime, String endTime, String downloadSpeed, InviteStreamCallback event
-			, SipSubscribe.Event errorEvent) {
-		try {
-			logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
-
-			StringBuffer content = new StringBuffer(200);
-	        content.append("v=0\r\n");
-	        content.append("o="+sipConfig.getId()+" 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
-	        content.append("s=Download\r\n");
-	        content.append("u="+channelId+":0\r\n");
-	        content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-	        content.append("t="+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime)+" "
-					+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n");
-
-
-
-			String streamMode = device.getStreamMode().toUpperCase();
-
-			if (userSetup.isSeniorSdp()) {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 126 125 99 34 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:126 H264/90000\r\n");
-				content.append("a=rtpmap:125 H264S/90000\r\n");
-				content.append("a=fmtp:125 profile-level-id=42e01e\r\n");
-				content.append("a=rtpmap:99 MP4V-ES/90000\r\n");
-				content.append("a=fmtp:99 profile-level-id=3\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}else {
-				if("TCP-PASSIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" TCP/RTP/AVP 96 98 97\r\n");
-				}else if("UDP".equals(streamMode)) {
-					content.append("m=video "+ ssrcInfo.getPort() +" RTP/AVP 96 98 97\r\n");
-				}
-				content.append("a=recvonly\r\n");
-				content.append("a=rtpmap:96 PS/90000\r\n");
-				content.append("a=rtpmap:98 H264/90000\r\n");
-				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式
-					content.append("a=setup:passive\r\n");
-					content.append("a=connection:new\r\n");
-				}else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式
-					content.append("a=setup:active\r\n");
-					content.append("a=connection:new\r\n");
-				}
-			}
-			content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
-
-	        content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
-	        
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			// 添加订阅
-			JSONObject subscribeKey = new JSONObject();
-			subscribeKey.put("app", "rtp");
-			subscribeKey.put("stream", ssrcInfo.getStream());
-			subscribeKey.put("regist", true);
-			subscribeKey.put("mediaServerId", mediaServerItem.getId());
-			logger.debug("录像回放添加订阅,订阅内容:" + subscribeKey.toString());
-			subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
-					(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-						event.call(new InviteStreamInfo(mediaServerItem, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
-						subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey);
-					});
-
-	        Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
-
-	        ClientTransaction transaction = transmitRequest(device, request, errorEvent);
-	        streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), transaction);
-	        streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), transaction);
-
-		} catch ( SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 视频流停止, 不使用回调
-	 */
-	@Override
-	public void streamByeCmd(String deviceId, String channelId, String stream, String callId) {
-		streamByeCmd(deviceId, channelId, stream, callId, null);
-	}
-
-	/**
-	 * 视频流停止
-	 */
-	@Override
-	public void streamByeCmd(String deviceId, String channelId, String stream, String callId, SipSubscribe.Event okEvent) {
-		try {
-			SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(deviceId, channelId, null, stream);
-			ClientTransaction transaction = streamSession.getTransactionByStream(deviceId, channelId, stream);
-
-			if (transaction == null) {
-				logger.warn("[ {} -> {}]停止视频流的时候发现事务已丢失", deviceId, channelId);
-				SipSubscribe.EventResult<Object> eventResult = new SipSubscribe.EventResult<>();
-				if (okEvent != null) {
-					okEvent.response(eventResult);
-				}
-				return;
-			}
-			SIPDialog dialog;
-			if (callId != null) {
-				dialog = streamSession.getDialogByCallId(deviceId, channelId, callId);
-			}else {
-				if (stream == null) return;
-				dialog = streamSession.getDialogByStream(deviceId, channelId, stream);
-			}
-			if (ssrcTransaction != null) {
-				MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
-				mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
-				mediaServerService.closeRTPServer(deviceId, channelId, ssrcTransaction.getStream());
-				streamSession.remove(deviceId, channelId, ssrcTransaction.getStream());
-			}
-
-			if (dialog == null) {
-				logger.warn("[ {} -> {}]停止视频流的时候发现对话已丢失", deviceId, channelId);
-				return;
-			}
-			SipStack sipStack = udpSipProvider.getSipStack();
-			SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
-			if (dialog != sipDialog) {
-				dialog = sipDialog;
-			}else {
-				dialog.setSipProvider(udpSipProvider);
-				try {
-					Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
-					sipStackField.setAccessible(true);
-					sipStackField.set(dialog, sipStack);
-					Field eventListenersField = SIPDialog.class.getDeclaredField("eventListeners");
-					eventListenersField.setAccessible(true);
-					eventListenersField.set(dialog, new HashSet<>());
-				} catch (NoSuchFieldException | IllegalAccessException e) {
-					e.printStackTrace();
-				}
-			}
-
-			Request byeRequest = dialog.createRequest(Request.BYE);
-			SipURI byeURI = (SipURI) byeRequest.getRequestURI();
-			SIPRequest request = (SIPRequest)transaction.getRequest();
-			byeURI.setHost(request.getRemoteAddress().getHostName());
-			byeURI.setPort(request.getRemotePort());
-			ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
-			String protocol = viaHeader.getTransport().toUpperCase();
-			ClientTransaction clientTransaction = null;
-			if("TCP".equals(protocol)) {
-				clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
-			} else if("UDP".equals(protocol)) {
-				clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
-			}
-
-			CallIdHeader callIdHeader = (CallIdHeader) byeRequest.getHeader(CallIdHeader.NAME);
-			if (okEvent != null) {
-				sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), okEvent);
-			}
-
-			dialog.sendRequest(clientTransaction);
-
-		} catch (SipException | ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 语音广播
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 */
-	@Override
-	public boolean audioBroadcastCmd(Device device, String channelId) {
-		// 改为新的实现
-		return false;
-	}
-
-	/**
-	 * 语音广播
-	 * 
-	 * @param device  视频设备
-	 */
-	@Override
-	public boolean audioBroadcastCmd(Device device) {
-		try {
-			StringBuffer broadcastXml = new StringBuffer(200);
-			broadcastXml.append("<?xml version=\"1.0\" ?>\r\n");
-			broadcastXml.append("<Notify>\r\n");
-			broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
-			broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
-			broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
-			broadcastXml.append("</Notify>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-			
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-								
-			Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader);
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		} 
-		return false;
-	}
-	@Override
-	public void audioBroadcastCmd(Device device, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer broadcastXml = new StringBuffer(200);
-			broadcastXml.append("<?xml version=\"1.0\" ?>\r\n");
-			broadcastXml.append("<Notify>\r\n");
-			broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
-			broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
-			broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
-			broadcastXml.append("</Notify>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-								
-			Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		} 
-	} 
-	
-	
-	/**
-	 * 音视频录像控制
-	 * 
-	 * @param device		视频设备
-	 * @param channelId  	预览通道
-	 * @param recordCmdStr	录像命令:Record / StopRecord
-	 */  
-	@Override
-	public boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromRecord" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 远程启动控制命令
-	 * 
-	 * @param device	视频设备
-	 */
-	@Override
-	public boolean teleBootCmd(Device device) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null, callIdHeader);
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-	
-	/**
-	 * 报警布防/撤防命令
-	 * 
-	 * @param device  		视频设备
-	 * @param guardCmdStr	"SetGuard"/"ResetGuard"
-	 */
-	@Override
-	public boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 报警复位命令
-	 * 
-	 * @param device  视频设备
-	 */  
-	@Override
-	public boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			cmdXml.append("<AlarmCmd>ResetAlarm</AlarmCmd>\r\n");
-			if (!StringUtils.isEmpty(alarmMethod) || !StringUtils.isEmpty(alarmType)) {
-				cmdXml.append("<Info>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmMethod)) {
-				cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmType)) {
-				cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmMethod) || !StringUtils.isEmpty(alarmType)) {
-				cmdXml.append("</Info>\r\n");
-			}
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 强制关键帧命令,设备收到此命令应立刻发送一个IDR帧
-	 * 
-	 * @param device  视频设备
-	 * @param channelId  预览通道
-	 */ 
-	@Override
-	public boolean iFrameCmd(Device device, String channelId) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null, callIdHeader);
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 看守位控制命令
-	 * 
-	 * @param device		视频设备
-	 * @param enabled		看守位使能:1 = 开启,0 = 关闭
-	 * @param resetTime		自动归位时间间隔,开启看守位时使用,单位:秒(s)
-	 * @param presetIndex	调用预置位编号,开启看守位时使用,取值范围0~255
-	 */  
-	@Override
-	public boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("<HomePosition>\r\n");
-			if (NumericUtil.isInteger(enabled) && (!enabled.equals("0"))) {
-				cmdXml.append("<Enabled>1</Enabled>\r\n");
-				if (NumericUtil.isInteger(resetTime)) {
-					cmdXml.append("<ResetTime>" + resetTime + "</ResetTime>\r\n");
-				} else {
-					cmdXml.append("<ResetTime>0</ResetTime>\r\n");
-				}
-				if (NumericUtil.isInteger(presetIndex)) {
-					cmdXml.append("<PresetIndex>" + presetIndex + "</PresetIndex>\r\n");
-				} else {
-					cmdXml.append("<PresetIndex>0</PresetIndex>\r\n");
-				}
-			} else {
-				cmdXml.append("<Enabled>0</Enabled>\r\n");
-			}
-			cmdXml.append("</HomePosition>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 设备配置命令
-	 * 
-	 * @param device  视频设备
-	 */  
-	@Override
-	public boolean deviceConfigCmd(Device device) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	/**
-	 * 设备配置命令:basicParam
-	 * 
-	 * @param device  			视频设备
-	 * @param channelId			通道编码(可选)
-	 * @param name				设备/通道名称(可选)
-	 * @param expiration		注册过期时间(可选)
-	 * @param heartBeatInterval	心跳间隔时间(可选)
-	 * @param heartBeatCount	心跳超时次数(可选)
-	 */  
-	@Override
-	public boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, 
-										String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Control>\r\n");
-			cmdXml.append("<CmdType>DeviceConfig</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("<BasicParam>\r\n");
-			if (!StringUtils.isEmpty(name)) {
-				cmdXml.append("<Name>" + name + "</Name>\r\n");
-			}
-			if (NumericUtil.isInteger(expiration)) {
-				if (Integer.valueOf(expiration) > 0) {
-					cmdXml.append("<Expiration>" + expiration + "</Expiration>\r\n");
-				}
-			}
-			if (NumericUtil.isInteger(heartBeatInterval)) {
-				if (Integer.valueOf(heartBeatInterval) > 0) {
-					cmdXml.append("<HeartBeatInterval>" + heartBeatInterval + "</HeartBeatInterval>\r\n");
-				}
-			}
-			if (NumericUtil.isInteger(heartBeatCount)) {
-				if (Integer.valueOf(heartBeatCount) > 0) {
-					cmdXml.append("<HeartBeatCount>" + heartBeatCount + "</HeartBeatCount>\r\n");
-				}
-			}
-			cmdXml.append("</BasicParam>\r\n");
-			cmdXml.append("</Control>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 查询设备状态
-	 * 
-	 * @param device 视频设备
-	 */  
-	@Override
-	public boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent) {
-		try {
-			String charset = device.getCharset();
-			StringBuffer catalogXml = new StringBuffer(200);
-			catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			catalogXml.append("<Query>\r\n");
-			catalogXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
-			catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			catalogXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, "FromStatus" + tm, null, callIdHeader);
-
-			transmitRequest(device, request, errorEvent);
-			return true;
-			
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-	/**
-	 * 查询设备信息
-	 * 
-	 * @param device 视频设备
-	 */  
-	@Override
-	public boolean deviceInfoQuery(Device device) {
-		try {
-			StringBuffer catalogXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			catalogXml.append("<Query>\r\n");
-			catalogXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
-			catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			catalogXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK-ViaDeviceInfo-" + tm, "FromDev" + tm, null, callIdHeader);
-
-			transmitRequest(device, request);
-			
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * 查询目录列表
-	 * 
-	 * @param device 视频设备
-	 */ 
-	@Override
-	public boolean catalogQuery(Device device, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer catalogXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			catalogXml.append("<Query>\r\n");
-			catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
-			catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			catalogXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK-ViaCatalog-" + tm, "FromCat" + tm, null, callIdHeader);
-
-			transmitRequest(device, request, errorEvent);
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * 查询录像信息
-	 * 
-	 * @param device 视频设备
-	 * @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 * @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
-	 */  
-	@Override
-	public boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) {
-		if (secrecy == null) {
-			secrecy = 0;
-		}
-		if (type == null) {
-			type = "all";
-		}
-		try {
-			StringBuffer recordInfoXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			recordInfoXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			recordInfoXml.append("<Query>\r\n");
-			recordInfoXml.append("<CmdType>RecordInfo</CmdType>\r\n");
-			recordInfoXml.append("<SN>" + sn + "</SN>\r\n");
-			recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			if (startTime != null) {
-				recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>\r\n");
-			}
-			if (endTime != null) {
-				recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>\r\n");
-			}
-			if (secrecy != null) {
-				recordInfoXml.append("<Secrecy> "+ secrecy + " </Secrecy>\r\n");
-			}
-			if (type != null) {
-				// 大华NVR要求必须增加一个值为all的文本元素节点Type
-				recordInfoXml.append("<Type>" + type+"</Type>\r\n");
-			}
-			recordInfoXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
-					"z9hG4bK-ViaRecordInfo-" + tm, "fromRec" + tm, null, callIdHeader);
-
-			transmitRequest(device, request, errorEvent, okEvent);
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * 查询报警信息
-	 * 
-	 * @param device		视频设备
-	 * @param startPriority	报警起始级别(可选)
-	 * @param endPriority	报警终止级别(可选)
-	 * @param alarmMethod	报警方式条件(可选)
-	 * @param alarmType		报警类型
-	 * @param startTime		报警发生起始时间(可选)
-	 * @param endTime		报警发生终止时间(可选)
-	 * @return				true = 命令发送成功
-	 */
-	@Override
-	public boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod, String alarmType,
-								 String startTime, String endTime, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Query>\r\n");
-			cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			if (!StringUtils.isEmpty(startPriority)) {
-				cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
-			}
-			if (!StringUtils.isEmpty(endPriority)) {
-				cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmMethod)) {
-				cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmType)) {
-				cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
-			}
-			if (!StringUtils.isEmpty(startTime)) {
-				cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
-			}
-			if (!StringUtils.isEmpty(endTime)) {
-				cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
-			}
-			cmdXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 查询设备配置
-	 * 
-	 * @param device 		视频设备
-	 * @param channelId		通道编码(可选)
-	 * @param configType	配置类型:
-	 */
-	@Override
-	public boolean deviceConfigQuery(Device device, String channelId, String configType,  SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Query>\r\n");
-			cmdXml.append("<CmdType>ConfigDownload</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
-			cmdXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 查询设备预置位置
-	 * 
-	 * @param device 视频设备
-	 */  
-	@Override
-	public boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
-			cmdXml.append("<Query>\r\n");
-			cmdXml.append("<CmdType>PresetQuery</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			cmdXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
-			transmitRequest(device, request, errorEvent);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		} 
-	}
-
-	/**
-	 * 查询移动设备位置数据
-	 * 
-	 * @param device 视频设备
-	 */  
-	@Override
-	public boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer mobilePostitionXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			mobilePostitionXml.append("<Query>\r\n");
-			mobilePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
-			mobilePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			mobilePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			mobilePostitionXml.append("<Interval>60</Interval>\r\n");
-			mobilePostitionXml.append("</Query>\r\n");
-			
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, callIdHeader);
-
-			transmitRequest(device, request, errorEvent);
-			
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * 订阅、取消订阅移动位置
-	 * 
-	 * @param device	视频设备
-	 * @param expires	订阅超时时间
-	 * @param interval	上报时间间隔
-	 * @return			true = 命令发送成功
-	 */
-	public boolean mobilePositionSubscribe(Device device, int expires, int interval) {
-		try {
-			StringBuffer subscribePostitionXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			subscribePostitionXml.append("<Query>\r\n");
-			subscribePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
-			subscribePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			subscribePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			if (expires > 0) {
-				subscribePostitionXml.append("<Interval>" + String.valueOf(interval) + "</Interval>\r\n");
-			}
-			subscribePostitionXml.append("</Query>\r\n");
-
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, expires, "presence" ,callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
-			transmitRequest(device, request);
-
-			return true;
-
-		} catch ( NumberFormatException | ParseException | InvalidArgumentException	| SipException e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-	/**
-	 * 订阅、取消订阅报警信息
-	 * 
-	 * @param device		视频设备
-	 * @param expires		订阅过期时间(0 = 取消订阅)
-	 * @param startPriority	报警起始级别(可选)
-	 * @param endPriority	报警终止级别(可选)
-	 * @param alarmMethod	报警方式条件(可选)
-	 * @param alarmType		报警类型
-	 * @param startTime		报警发生起始时间(可选)
-	 * @param endTime		报警发生终止时间(可选)
-	 * @return				true = 命令发送成功
-	 */
-	public boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			cmdXml.append("<Query>\r\n");
-			cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			if (!StringUtils.isEmpty(startPriority)) {
-				cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
-			}
-			if (!StringUtils.isEmpty(endPriority)) {
-				cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmMethod)) {
-				cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
-			}
-			if (!StringUtils.isEmpty(alarmType)) {
-				cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
-			}
-			if (!StringUtils.isEmpty(startTime)) {
-				cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
-			}
-			if (!StringUtils.isEmpty(endTime)) {
-				cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
-			}
-			cmdXml.append("</Query>\r\n");
-
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, expires, "presence" , callIdHeader);
-			transmitRequest(device, request);
-
-			return true;
-
-		} catch ( NumberFormatException | ParseException | InvalidArgumentException	| SipException e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-	@Override
-	public boolean catalogSubscribe(Device device, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) {
-		try {
-			StringBuffer cmdXml = new StringBuffer(200);
-			String charset = device.getCharset();
-			cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
-			cmdXml.append("<Query>\r\n");
-			cmdXml.append("<CmdType>Catalog</CmdType>\r\n");
-			cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			cmdXml.append("</Query>\r\n");
-
-			String tm = Long.toString(System.currentTimeMillis());
-
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-
-			// 有效时间默认为60秒以上
-			Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "z9hG4bK-viaPos-" + tm,
-					"fromTagPos" + tm, null, device.getSubscribeCycleForCatalog(), "Catalog" ,
-					callIdHeader);
-			transmitRequest(device, request, errorEvent, okEvent);
-
-			return true;
-
-		} catch ( NumberFormatException | ParseException | InvalidArgumentException	| SipException e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-	@Override
-	public boolean dragZoomCmd(Device device, String channelId, String cmdString) {
-		try {
-			StringBuffer dragXml = new StringBuffer(200);
-			dragXml.append("<?xml version=\"1.0\" ?>\r\n");
-			dragXml.append("<Control>\r\n");
-			dragXml.append("<CmdType>DeviceControl</CmdType>\r\n");
-			dragXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
-			if (StringUtils.isEmpty(channelId)) {
-				dragXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
-			} else {
-				dragXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
-			}
-			dragXml.append(cmdString);
-			dragXml.append("</Control>\r\n");
-			String tm = Long.toString(System.currentTimeMillis());
-			CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-					: udpSipProvider.getNewCallId();
-			Request request = headerProvider.createMessageRequest(device, dragXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
-			logger.debug("拉框信令: " + request.toString());
-			transmitRequest(device, request);
-			return true;
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-		return false;
-	}
-
-
-	private ClientTransaction transmitRequest(Device device, Request request) throws SipException {
-		return transmitRequest(device, request, null, null);
-	}
-
-	private ClientTransaction transmitRequest(Device device, Request request, SipSubscribe.Event errorEvent) throws SipException {
-		return transmitRequest(device, request, errorEvent, null);
-	}
-
-	private ClientTransaction transmitRequest(Device device, Request request, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws SipException {
-		ClientTransaction clientTransaction = null;
-		if("TCP".equals(device.getTransport())) {
-			clientTransaction = tcpSipProvider.getNewClientTransaction(request);
-		} else if("UDP".equals(device.getTransport())) {
-			clientTransaction = udpSipProvider.getNewClientTransaction(request);
-		}
-
-		CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
-		// 添加错误订阅
-		if (errorEvent != null) {
-			sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {
-				errorEvent.response(eventResult);
-				sipSubscribe.removeErrorSubscribe(eventResult.callId);
-			}));
-		}
-		// 添加订阅
-		if (okEvent != null) {
-			sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult ->{
-				okEvent.response(eventResult);
-				sipSubscribe.removeOkSubscribe(eventResult.callId);
-			});
-		}
-
-		clientTransaction.sendRequest();
-		return clientTransaction;
-	}
-
-	/**
-	 * 回放暂停
-	 */
-	@Override
-	public void playPauseCmd(Device device, StreamInfo streamInfo) {
-		try {
-			Long cseq = redisCatchStorage.getCSEQ(Request.INFO);
-			StringBuffer content = new StringBuffer(200);
-			content.append("PAUSE RTSP/1.0\r\n");
-			content.append("CSeq: " + cseq + "\r\n");
-			content.append("PauseTime: now\r\n");
-			Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString());
-			if (request == null) {
-				return;
-			}
-			logger.info(request.toString());
-			ClientTransaction clientTransaction = null;
-			if ("TCP".equals(device.getTransport())) {
-				clientTransaction = tcpSipProvider.getNewClientTransaction(request);
-			} else if ("UDP".equals(device.getTransport())) {
-				clientTransaction = udpSipProvider.getNewClientTransaction(request);
-			}
-			if (clientTransaction != null) {
-				clientTransaction.sendRequest();
-			}
-
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 回放恢复
-	 */
-	@Override
-	public void playResumeCmd(Device device, StreamInfo streamInfo) {
-		try {
-			Long cseq = redisCatchStorage.getCSEQ(Request.INFO);
-			StringBuffer content = new StringBuffer(200);
-			content.append("PLAY RTSP/1.0\r\n");
-			content.append("CSeq: " + cseq + "\r\n");
-			content.append("Range: npt=now-\r\n");
-			Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString());
-			if (request == null) return;
-			logger.info(request.toString());
-			ClientTransaction clientTransaction = null;
-			if ("TCP".equals(device.getTransport())) {
-				clientTransaction = tcpSipProvider.getNewClientTransaction(request);
-			} else if ("UDP".equals(device.getTransport())) {
-				clientTransaction = udpSipProvider.getNewClientTransaction(request);
-			}
-
-			clientTransaction.sendRequest();
-
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 回放拖动播放
-	 */
-	@Override
-	public void playSeekCmd(Device device, StreamInfo streamInfo, long seekTime) {
-		try {
-			Long cseq = redisCatchStorage.getCSEQ(Request.INFO);
-			StringBuffer content = new StringBuffer(200);
-			content.append("PLAY RTSP/1.0\r\n");
-			content.append("CSeq: " + cseq + "\r\n");
-			content.append("Range: npt=" + Math.abs(seekTime) + "-\r\n");
-
-			Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString());
-			if (request == null) return;
-			logger.info(request.toString());
-			ClientTransaction clientTransaction = null;
-			if ("TCP".equals(device.getTransport())) {
-				clientTransaction = tcpSipProvider.getNewClientTransaction(request);
-			} else if ("UDP".equals(device.getTransport())) {
-				clientTransaction = udpSipProvider.getNewClientTransaction(request);
-			}
-
-			clientTransaction.sendRequest();
-
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 回放倍速播放
-	 */
-	@Override
-	public void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed) {
-		try {
-			Long cseq = redisCatchStorage.getCSEQ(Request.INFO);
-			StringBuffer content = new StringBuffer(200);
-			content.append("PLAY RTSP/1.0\r\n");
-			content.append("CSeq: " + cseq + "\r\n");
-			content.append("Scale: " + String.format("%.1f",speed) + "\r\n");
-			Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString());
-			if (request == null) return;
-			logger.info(request.toString());
-			ClientTransaction clientTransaction = null;
-			if ("TCP".equals(device.getTransport())) {
-				clientTransaction = tcpSipProvider.getNewClientTransaction(request);
-			} else if ("UDP".equals(device.getTransport())) {
-				clientTransaction = udpSipProvider.getNewClientTransaction(request);
-			}
-
-			clientTransaction.sendRequest();
-
-		} catch (SipException | ParseException | InvalidArgumentException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
deleted file mode 100644
index a67bbbd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ /dev/null
@@ -1,679 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider;
-import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-import gov.nist.javax.sip.SipProviderImpl;
-import gov.nist.javax.sip.SipStackImpl;
-import gov.nist.javax.sip.message.MessageFactoryImpl;
-import gov.nist.javax.sip.message.SIPRequest;
-import gov.nist.javax.sip.stack.SIPDialog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.*;
-import javax.sip.address.SipURI;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-import java.lang.reflect.Field;
-import java.text.ParseException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.UUID;
-
-@Component
-@DependsOn("sipLayer")
-public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
-
-    private final Logger logger = LoggerFactory.getLogger(SIPCommanderFroPlatform.class);
-
-    @Autowired
-    private SIPRequestHeaderPlarformProvider headerProviderPlarformProvider;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private SipSubscribe sipSubscribe;
-
-    @Autowired
-    private ZLMRTPServerFactory zlmrtpServerFactory;
-
-    @Lazy
-    @Autowired
-    @Qualifier(value="tcpSipProvider")
-    private SipProviderImpl tcpSipProvider;
-
-    @Lazy
-    @Autowired
-    @Qualifier(value="udpSipProvider")
-    private SipProviderImpl udpSipProvider;
-
-    @Autowired
-    private SipFactory sipFactory;
-
-    @Override
-    public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
-        return register(parentPlatform, null, null, errorEvent, okEvent, false);
-    }
-
-    @Override
-    public boolean unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
-        ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId());
-        parentPlatform.setExpires("0");
-        if (parentPlatformCatch != null) {
-            parentPlatformCatch.setParentPlatform(parentPlatform);
-            redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-        }
-        return register(parentPlatform, null, null, errorEvent, okEvent, false);
-    }
-
-    @Override
-    public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable WWWAuthenticateHeader www,
-                            SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain) {
-        try {
-            Request request;
-            String tm = Long.toString(System.currentTimeMillis());
-            if (!registerAgain ) {
-                //		//callid
-                CallIdHeader callIdHeader = null;
-                if(parentPlatform.getTransport().equals("TCP")) {
-                    callIdHeader = tcpSipProvider.getNewCallId();
-                }
-                if(parentPlatform.getTransport().equals("UDP")) {
-                    callIdHeader = udpSipProvider.getNewCallId();
-                }
-
-                request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform,
-                        redisCatchStorage.getCSEQ(Request.REGISTER), "FromRegister" + tm,
-                        "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), callIdHeader);
-                // 将 callid 写入缓存, 等注册成功可以更新状态
-                String callIdFromHeader = callIdHeader.getCallId();
-                redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, parentPlatform.getServerGBId());
-
-                sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{
-                    if (event != null) {
-                        logger.info("向上级平台 [ {} ] 注册发生错误: {} ",
-                                parentPlatform.getServerGBId(),
-                                event.msg);
-                    }
-                    redisCatchStorage.delPlatformRegisterInfo(callIdFromHeader);
-                    if (errorEvent != null ) {
-                        errorEvent.response(event);
-                    }
-                });
-
-            }else {
-                CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                        : udpSipProvider.getNewCallId();
-                request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, "FromRegister" + tm, null, callId, www, callIdHeader);
-            }
-
-            transmitRequest(parentPlatform, request, null, okEvent);
-            return true;
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (PeerUnavailableException e) {
-            e.printStackTrace();
-        } catch (SipException e) {
-            e.printStackTrace();
-        }
-        return false;
-    }
-
-    @Override
-    public String keepalive(ParentPlatform parentPlatform) {
-        String callId = null;
-        try {
-
-            StringBuffer keepaliveXml = new StringBuffer(200);
-            keepaliveXml.append("<?xml version=\"1.0\"?>\r\n");
-            keepaliveXml.append("<Notify>\r\n");
-            keepaliveXml.append("<CmdType>Keepalive</CmdType>\r\n");
-            keepaliveXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-            keepaliveXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-            keepaliveXml.append("<Status>OK</Status>\r\n");
-            keepaliveXml.append("</Notify>\r\n");
-
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-
-            Request request = headerProviderPlarformProvider.createKeetpaliveMessageRequest(
-                    parentPlatform,
-                    keepaliveXml.toString(),
-                    "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""),
-                    UUID.randomUUID().toString().replace("-", ""),
-                    null,
-                    callIdHeader);
-            transmitRequest(parentPlatform, request);
-            callId = callIdHeader.getCallId();
-        } catch (ParseException | InvalidArgumentException | SipException e) {
-            e.printStackTrace();
-        }
-        return callId;
-    }
-
-    private void transmitRequest(ParentPlatform parentPlatform, Request request) throws SipException {
-        transmitRequest(parentPlatform, request, null, null);
-    }
-
-    private void transmitRequest(ParentPlatform parentPlatform, Request request, SipSubscribe.Event errorEvent) throws SipException {
-        transmitRequest(parentPlatform, request, errorEvent, null);
-    }
-
-    private void transmitRequest(ParentPlatform parentPlatform, Request request, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws SipException {
-        logger.debug("\n发送消息:\n{}", request);
-        if("TCP".equals(parentPlatform.getTransport())) {
-            tcpSipProvider.sendRequest(request);
-
-        } else if("UDP".equals(parentPlatform.getTransport())) {
-            udpSipProvider.sendRequest(request);
-        }
-
-        CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
-        // 添加错误订阅
-        if (errorEvent != null) {
-            sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), errorEvent);
-        }
-        // 添加订阅
-        if (okEvent != null) {
-            sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), okEvent);
-        }
-
-    }
-
-    /**
-     * 向上级回复通道信息
-     * @param channel 通道信息
-     * @param parentPlatform 平台信息
-     * @return
-     */
-    @Override
-    public boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size) {
-
-        if ( parentPlatform ==null) {
-            return false;
-        }
-        try {
-            String characterSet = parentPlatform.getCharacterSet();
-            StringBuffer catalogXml = new StringBuffer(600);
-            catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet +"\"?>\r\n");
-            catalogXml.append("<Response>\r\n");
-            catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
-            catalogXml.append("<SN>" +sn + "</SN>\r\n");
-            catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-            catalogXml.append("<SumNum>" + size + "</SumNum>\r\n");
-            catalogXml.append("<DeviceList Num=\"1\">\r\n");
-            catalogXml.append("<Item>\r\n");
-            if (channel != null) {
-                catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
-                catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
-                catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
-                catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
-                catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
-                catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
-                catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
-                catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
-                if (channel.getParentId() != null) {
-                    catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
-                }
-                catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
-                catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
-                catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
-                catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
-                catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
-                catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
-                catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
-                catalogXml.append("<Info>\r\n");
-                catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
-                catalogXml.append("</Info>\r\n");
-            }
-
-
-            catalogXml.append("</Item>\r\n");
-            catalogXml.append("</DeviceList>\r\n");
-            catalogXml.append("</Response>\r\n");
-
-            // callid
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-
-            Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, callIdHeader);
-            transmitRequest(parentPlatform, request);
-
-        } catch (SipException | ParseException | InvalidArgumentException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 向上级回复DeviceInfo查询信息
-     * @param parentPlatform 平台信息
-     * @param sn
-     * @param fromTag
-     * @return
-     */
-    @Override
-    public boolean deviceInfoResponse(ParentPlatform parentPlatform, String sn, String fromTag) {
-        if (parentPlatform == null) {
-            return false;
-        }
-        try {
-            String characterSet = parentPlatform.getCharacterSet();
-            StringBuffer deviceInfoXml = new StringBuffer(600);
-            deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-            deviceInfoXml.append("<Response>\r\n");
-            deviceInfoXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
-            deviceInfoXml.append("<SN>" +sn + "</SN>\r\n");
-            deviceInfoXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-            deviceInfoXml.append("<DeviceName>" + parentPlatform.getName() + "</DeviceName>\r\n");
-            deviceInfoXml.append("<Manufacturer>wvp</Manufacturer>\r\n");
-            deviceInfoXml.append("<Model>wvp-28181-2.0</Model>\r\n");
-            deviceInfoXml.append("<Firmware>2.0.202107</Firmware>\r\n");
-            deviceInfoXml.append("<Result>OK</Result>\r\n");
-            deviceInfoXml.append("</Response>\r\n");
-
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-
-            Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, callIdHeader);
-            transmitRequest(parentPlatform, request);
-
-        } catch (SipException | ParseException | InvalidArgumentException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 向上级回复DeviceStatus查询信息
-     * @param parentPlatform 平台信息
-     * @param sn
-     * @param fromTag
-     * @return
-     */
-    @Override
-    public boolean deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag) {
-        if (parentPlatform == null) {
-            return false;
-        }
-        try {
-            String characterSet = parentPlatform.getCharacterSet();
-            StringBuffer deviceStatusXml = new StringBuffer(600);
-            deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-            deviceStatusXml.append("<Response>\r\n");
-            deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
-            deviceStatusXml.append("<SN>" +sn + "</SN>\r\n");
-            deviceStatusXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-            deviceStatusXml.append("<Result>OK</Result>\r\n");
-            deviceStatusXml.append("<Online>ONLINE</Online>\r\n");
-            deviceStatusXml.append("<Status>OK</Status>\r\n");
-            deviceStatusXml.append("</Response>\r\n");
-
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-
-            Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, callIdHeader);
-            transmitRequest(parentPlatform, request);
-
-        } catch (SipException | ParseException | InvalidArgumentException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public boolean sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo) {
-        if (parentPlatform == null) {
-            return false;
-        }
-
-        try {
-            String characterSet = parentPlatform.getCharacterSet();
-            StringBuffer deviceStatusXml = new StringBuffer(600);
-            deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-            deviceStatusXml.append("<Notify>\r\n");
-            deviceStatusXml.append("<CmdType>MobilePosition</CmdType>\r\n");
-            deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-            deviceStatusXml.append("<DeviceID>" + gpsMsgInfo.getId() + "</DeviceID>\r\n");
-            deviceStatusXml.append("<Time>" + gpsMsgInfo.getTime() + "</Time>\r\n");
-            deviceStatusXml.append("<Longitude>" + gpsMsgInfo.getLng() + "</Longitude>\r\n");
-            deviceStatusXml.append("<Latitude>" + gpsMsgInfo.getLat() + "</Latitude>\r\n");
-            deviceStatusXml.append("<Speed>" + gpsMsgInfo.getSpeed() + "</Speed>\r\n");
-            deviceStatusXml.append("<Direction>" + gpsMsgInfo.getDirection() + "</Direction>\r\n");
-            deviceStatusXml.append("<Altitude>" + gpsMsgInfo.getAltitude() + "</Altitude>\r\n");
-            deviceStatusXml.append("</Notify>\r\n");
-
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-            callIdHeader.setCallId(subscribeInfo.getCallId());
-
-//
-            sendNotify(parentPlatform, deviceStatusXml.toString(), subscribeInfo, eventResult -> {
-                logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
-            }, null);
-
-        } catch (SipException | ParseException  e) {
-            e.printStackTrace();
-            return false;
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-        return true;
-    }
-
-    @Override
-    public boolean sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo, Integer index) {
-        if (parentPlatform == null || deviceChannels == null || deviceChannels.size() == 0 || subscribeInfo == null) {
-            return false;
-        }
-        if (index == null) {
-            index = 0;
-        }
-        if (index >= deviceChannels.size()) {
-            return true;
-        }
-        try {
-            Integer finalIndex = index;
-            String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, deviceChannels.get(index ), deviceChannels.size(), type, subscribeInfo);
-            sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
-                logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
-            }, (eventResult -> {
-                sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
-            }));
-        } catch (SipException | ParseException e) {
-            e.printStackTrace();
-            return false;
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-        return true;
-    }
-
-    private void sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
-                                   SubscribeInfo subscribeInfo, SipSubscribe.Event errorEvent,  SipSubscribe.Event okEvent )
-            throws NoSuchFieldException, IllegalAccessException, SipException, ParseException {
-		MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
-        String characterSet = parentPlatform.getCharacterSet();
- 		// 设置编码, 防止中文乱码
-		messageFactory.setDefaultContentEncodingCharset(characterSet);
-        Dialog dialog  = subscribeInfo.getDialog();
-        if (dialog == null) return;
-        SIPRequest notifyRequest = (SIPRequest)dialog.createRequest(Request.NOTIFY);
-        ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-        notifyRequest.setContent(catalogXmlContent, contentTypeHeader);
-
-        SubscriptionStateHeader subscriptionState = sipFactory.createHeaderFactory()
-                .createSubscriptionStateHeader(SubscriptionStateHeader.ACTIVE);
-        notifyRequest.addHeader(subscriptionState);
-
-        EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
-        if (subscribeInfo.getEventId() != null) {
-            event.setEventId(subscribeInfo.getEventId());
-        }
-        notifyRequest.addHeader(event);
-
-        SipURI sipURI = (SipURI) notifyRequest.getRequestURI();
-        SIPRequest request = (SIPRequest) subscribeInfo.getTransaction().getRequest();
-        sipURI.setHost(request.getRemoteAddress().getHostName());
-        sipURI.setPort(request.getRemotePort());
-        ClientTransaction transaction = null;
-        if ("TCP".equals(parentPlatform.getTransport())) {
-            transaction = tcpSipProvider.getNewClientTransaction(notifyRequest);
-        } else if ("UDP".equals(parentPlatform.getTransport())) {
-            transaction = udpSipProvider.getNewClientTransaction(notifyRequest);
-        }
-        // 添加错误订阅
-        if (errorEvent != null) {
-            sipSubscribe.addErrorSubscribe(subscribeInfo.getCallId(), errorEvent);
-        }
-        // 添加订阅
-        if (okEvent != null) {
-            sipSubscribe.addOkSubscribe(subscribeInfo.getCallId(), okEvent);
-        }
-        if (transaction == null) {
-            logger.error("平台{}的Transport错误:{}",parentPlatform.getServerGBId(), parentPlatform.getTransport());
-            return;
-        }
-        dialog.sendRequest(transaction);
-
-    }
-
-    private  String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int sumNum, String type, SubscribeInfo subscribeInfo) {
-        StringBuffer catalogXml = new StringBuffer(600);
-        if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
-            channel.setParentId(parentPlatform.getDeviceGBId());
-        }
-        String characterSet = parentPlatform.getCharacterSet();
-        catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-        catalogXml.append("<Notify>\r\n");
-        catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
-        catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
-        catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-        catalogXml.append("<SumNum>1</SumNum>\r\n");
-        catalogXml.append("<DeviceList Num=\"1\">\r\n");
-        catalogXml.append("<Item>\r\n");
-        catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
-        catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
-        catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
-        catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
-        catalogXml.append("<Owner>0</Owner>\r\n");
-        catalogXml.append("<CivilCode>CivilCode</CivilCode>\r\n");
-        catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
-        catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
-        if (channel.getParentId() != null) {
-            catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
-        }
-        catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
-        catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
-        catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
-        if (!"presence".equals(subscribeInfo.getEventType())) {
-            catalogXml.append("<Event>" + type + "</Event>\r\n");
-        }
-        catalogXml.append("</Item>\r\n");
-        catalogXml.append("</DeviceList>\r\n");
-        catalogXml.append("</Notify>\r\n");
-        return catalogXml.toString();
-    }
-
-    @Override
-    public boolean sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels,
-                                             SubscribeInfo subscribeInfo, Integer index) {
-        if (parentPlatform == null
-                || deviceChannels == null
-                || deviceChannels.size() == 0
-                || subscribeInfo == null) {
-            return false;
-        }
-
-        if (index == null) {
-            index = 0;
-        }
-        if (index >= deviceChannels.size()) {
-            return true;
-        }
-        try {
-            Integer finalIndex = index;
-            String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, deviceChannels.get(index), type);
-            sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
-                logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
-            }, (eventResult -> {
-                sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
-            }));
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-
-        return true;
-    }
-
-    private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, DeviceChannel channel, String type) {
-        if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
-            channel.setParentId(parentPlatform.getDeviceGBId());
-        }
-        String characterSet = parentPlatform.getCharacterSet();
-        StringBuffer catalogXml = new StringBuffer(600);
-        catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-        catalogXml.append("<Notify>\r\n");
-        catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
-        catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
-        catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
-        catalogXml.append("<SumNum>1</SumNum>\r\n");
-        catalogXml.append("<DeviceList Num=\"1\">\r\n");
-        catalogXml.append("<Item>\r\n");
-        catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
-        catalogXml.append("<Event>" + type + "</Event>\r\n");
-        catalogXml.append("</Item>\r\n");
-        catalogXml.append("</DeviceList>\r\n");
-        catalogXml.append("</Notify>\r\n");
-        return catalogXml.toString();
-    }
-    @Override
-    public boolean recordInfo(DeviceChannel deviceChannel, ParentPlatform parentPlatform, String fromTag, RecordInfo recordInfo) {
-        if ( parentPlatform ==null) {
-            return false;
-        }
-        try {
-            String characterSet = parentPlatform.getCharacterSet();
-            StringBuffer recordXml = new StringBuffer(600);
-            recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
-            recordXml.append("<Response>\r\n");
-            recordXml.append("<CmdType>RecordInfo</CmdType>\r\n");
-            recordXml.append("<SN>" +recordInfo.getSn() + "</SN>\r\n");
-            recordXml.append("<DeviceID>" + recordInfo.getDeviceId() + "</DeviceID>\r\n");
-            recordXml.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
-            if (recordInfo.getRecordList() == null ) {
-                recordXml.append("<RecordList Num=\"0\">\r\n");
-            }else {
-                recordXml.append("<RecordList Num=\"" + recordInfo.getRecordList().size()+"\">\r\n");
-                if (recordInfo.getRecordList().size() > 0) {
-                    for (RecordItem recordItem : recordInfo.getRecordList()) {
-                        recordXml.append("<Item>\r\n");
-                        if (deviceChannel != null) {
-                            recordXml.append("<DeviceID>" + recordItem.getDeviceId() + "</DeviceID>\r\n");
-                            recordXml.append("<Name>" + recordItem.getName() + "</Name>\r\n");
-                            recordXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getStartTime()) + "</StartTime>\r\n");
-                            recordXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getEndTime()) + "</EndTime>\r\n");
-                            recordXml.append("<Secrecy>" + recordItem.getSecrecy() + "</Secrecy>\r\n");
-                            recordXml.append("<Type>" + recordItem.getType() + "</Type>\r\n");
-                            if (!StringUtils.isEmpty(recordItem.getFileSize())) {
-                                recordXml.append("<FileSize>" + recordItem.getFileSize() + "</FileSize>\r\n");
-                            }
-                            if (!StringUtils.isEmpty(recordItem.getFilePath())) {
-                                recordXml.append("<FilePath>" + recordItem.getFilePath() + "</FilePath>\r\n");
-                            }
-                        }
-                        recordXml.append("</Item>\r\n");
-                    }
-                }
-            }
-
-            recordXml.append("</RecordList>\r\n");
-            recordXml.append("</Response>\r\n");
-
-            // callid
-            CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
-                    : udpSipProvider.getNewCallId();
-            Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, callIdHeader);
-            transmitRequest(parentPlatform, request);
-
-        } catch (SipException | ParseException | InvalidArgumentException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public void streamByeCmd(ParentPlatform platform, String callId) {
-        if (platform == null) {
-            return;
-        }
-        SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platform.getServerGBId(), null, null, callId);
-        if (sendRtpItem != null) {
-            String mediaServerId = sendRtpItem.getMediaServerId();
-            MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-            if (mediaServerItem != null) {
-                mediaServerService.releaseSsrc(mediaServerItem.getId(), sendRtpItem.getSsrc());
-                zlmrtpServerFactory.closeRTPServer(mediaServerItem, sendRtpItem.getStreamId());
-            }
-            byte[] dialogByteArray = sendRtpItem.getDialog();
-            if (dialogByteArray != null) {
-                SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
-                SipStack sipStack = udpSipProvider.getSipStack();
-                SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
-                if (dialog != sipDialog) {
-                    dialog = sipDialog;
-                } else {
-                    try {
-                        dialog.setSipProvider(udpSipProvider);
-                        Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
-                        sipStackField.setAccessible(true);
-                        sipStackField.set(dialog, sipStack);
-                        Field eventListenersField = SIPDialog.class.getDeclaredField("eventListeners");
-                        eventListenersField.setAccessible(true);
-                        eventListenersField.set(dialog, new HashSet<>());
-
-                        byte[] transactionByteArray = sendRtpItem.getTransaction();
-                        ClientTransaction clientTransaction = (ClientTransaction) SerializeUtils.deSerialize(transactionByteArray);
-                        Request byeRequest = dialog.createRequest(Request.BYE);
-
-                        SipURI byeURI = (SipURI) byeRequest.getRequestURI();
-                        SIPRequest request = (SIPRequest) clientTransaction.getRequest();
-                        byeURI.setHost(request.getRemoteAddress().getHostName());
-                        byeURI.setPort(request.getRemotePort());
-                        if ("TCP".equals(platform.getTransport())) {
-                            clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
-                        } else if ("UDP".equals(platform.getTransport())) {
-                            clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
-                        }
-                        dialog.sendRequest(clientTransaction);
-                    } catch (SipException e) {
-                        e.printStackTrace();
-                    } catch (ParseException e) {
-                        e.printStackTrace();
-                    } catch (NoSuchFieldException e) {
-                        e.printStackTrace();
-                    } catch (IllegalAccessException e) {
-                        e.printStackTrace();
-                    }
-
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/ISIPRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/ISIPRequestProcessor.java
deleted file mode 100644
index 8e79941..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/ISIPRequestProcessor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request;
-
-import javax.sip.RequestEvent;
-
-/**
- * @description: 对SIP事件进行处理,包括request, response, timeout, ioException, transactionTerminated,dialogTerminated
- * @author: panlinlin
- * @date:   2021年11月5日 15:47
- */
-public interface ISIPRequestProcessor {
-
-	void process(RequestEvent event);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java
deleted file mode 100644
index dd098f7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request;
-
-import gov.nist.javax.sip.SipProviderImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-
-/**    
- * @description:处理接收IPCamera发来的SIP协议请求消息
- * @author: songww
- * @date:   2020年5月3日 下午4:42:22     
- */
-public abstract class SIPRequestProcessorAbstract  {
-
-
-	@Autowired
-	@Qualifier(value="tcpSipProvider")
-	private SipProviderImpl tcpSipProvider;
-
-	@Autowired
-	@Qualifier(value="udpSipProvider")
-	private SipProviderImpl udpSipProvider;
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
deleted file mode 100644
index 34d4536..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import gov.nist.javax.sip.SipProviderImpl;
-import gov.nist.javax.sip.SipStackImpl;
-import gov.nist.javax.sip.message.SIPRequest;
-import gov.nist.javax.sip.stack.SIPServerTransaction;
-import org.apache.commons.lang3.ArrayUtils;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-
-import javax.sip.*;
-import javax.sip.address.Address;
-import javax.sip.address.AddressFactory;
-import javax.sip.address.SipURI;
-import javax.sip.header.ContentTypeHeader;
-import javax.sip.header.ExpiresHeader;
-import javax.sip.header.HeaderFactory;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.MessageFactory;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-import java.io.ByteArrayInputStream;
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**    
- * @description:处理接收IPCamera发来的SIP协议请求消息
- * @author: songww
- * @date:   2020年5月3日 下午4:42:22     
- */
-public abstract class SIPRequestProcessorParent {
-
-	private final static Logger logger = LoggerFactory.getLogger(SIPRequestProcessorParent.class);
-
-	@Autowired
-	@Qualifier(value="tcpSipProvider")
-	private SipProviderImpl tcpSipProvider;
-
-	@Autowired
-	@Qualifier(value="udpSipProvider")
-	private SipProviderImpl udpSipProvider;
-
-	/**
-	 * 根据 RequestEvent 获取 ServerTransaction
-	 * @param evt
-	 * @return
-	 */
-	public ServerTransaction getServerTransaction(RequestEvent evt) {
-		Request request = evt.getRequest();
-		ServerTransaction serverTransaction = evt.getServerTransaction();
-		// 判断TCP还是UDP
-		boolean isTcp = false;
-		ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-		String transport = reqViaHeader.getTransport();
-		if (transport.equals("TCP")) {
-			isTcp = true;
-		}
-
-		if (serverTransaction == null) {
-			try {
-				if (isTcp) {
-					SipStackImpl stack = (SipStackImpl)tcpSipProvider.getSipStack();
-					serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true);
-					if (serverTransaction == null) {
-						serverTransaction = tcpSipProvider.getNewServerTransaction(request);
-					}
-				} else {
-					SipStackImpl stack = (SipStackImpl)udpSipProvider.getSipStack();
-					serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true);
-					if (serverTransaction == null) {
-						serverTransaction = udpSipProvider.getNewServerTransaction(request);
-					}
-				}
-			} catch (TransactionAlreadyExistsException e) {
-				logger.error(e.getMessage());
-			} catch (TransactionUnavailableException e) {
-				logger.error(e.getMessage());
-			}
-		}
-		return serverTransaction;
-	}
-	
-	public AddressFactory getAddressFactory() {
-		try {
-			return SipFactory.getInstance().createAddressFactory();
-		} catch (PeerUnavailableException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	public HeaderFactory getHeaderFactory() {
-		try {
-			return SipFactory.getInstance().createHeaderFactory();
-		} catch (PeerUnavailableException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	public MessageFactory getMessageFactory() {
-		try {
-			return SipFactory.getInstance().createMessageFactory();
-		} catch (PeerUnavailableException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	/***
-	 * 回复状态码
-	 * 100 trying
-	 * 200 OK
-	 * 400
-	 * 404
-	 * @param evt
-	 * @throws SipException
-	 * @throws InvalidArgumentException
-	 * @throws ParseException
-	 */
-	public void responseAck(RequestEvent evt, int statusCode) throws SipException, InvalidArgumentException, ParseException {
-		Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
-		ServerTransaction serverTransaction = getServerTransaction(evt);
-		if (serverTransaction == null) {
-			logger.warn("回复失败:{}", response);
-			return;
-		}
-		serverTransaction.sendResponse(response);
-		if (statusCode >= 200 && !"NOTIFY".equals(evt.getRequest().getMethod())) {
-
-			if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
-		}
-	}
-
-	public void responseAck(RequestEvent evt, int statusCode, String msg) throws SipException, InvalidArgumentException, ParseException {
-		Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
-		response.setReasonPhrase(msg);
-		ServerTransaction serverTransaction = getServerTransaction(evt);
-		serverTransaction.sendResponse(response);
-		if (statusCode >= 200 && !"NOTIFY".equals(evt.getRequest().getMethod())) {
-			if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
-		}
-	}
-
-	/**
-	 * 回复带sdp的200
-	 * @param evt
-	 * @param sdp
-	 * @throws SipException
-	 * @throws InvalidArgumentException
-	 * @throws ParseException
-	 */
-	public void responseSdpAck(RequestEvent evt, String sdp, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
-		Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
-		SipFactory sipFactory = SipFactory.getInstance();
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
-		response.setContent(sdp, contentTypeHeader);
-
-		// 兼容国标中的使用编码@域名作为RequestURI的情况
-		SipURI sipURI = (SipURI)evt.getRequest().getRequestURI();
-		if (sipURI.getPort() == -1) {
-			sipURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(),  platform.getServerIP()+":"+platform.getServerPort());
-		}
-		logger.debug("responseSdpAck SipURI: {}:{}", sipURI.getHost(), sipURI.getPort());
-
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(
-				sipFactory.createAddressFactory().createSipURI(sipURI.getUser(),  sipURI.getHost()+":"+sipURI.getPort()
-				));
-		response.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-		getServerTransaction(evt).sendResponse(response);
-	}
-
-	/**
-	 * 回复带xml的200
-	 * @param evt
-	 * @param xml
-	 * @throws SipException
-	 * @throws InvalidArgumentException
-	 * @throws ParseException
-	 */
-	public Response responseXmlAck(RequestEvent evt, String xml, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
-		Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
-		SipFactory sipFactory = SipFactory.getInstance();
-		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
-		response.setContent(xml, contentTypeHeader);
-
-		// 兼容国标中的使用编码@域名作为RequestURI的情况
-		SipURI sipURI = (SipURI)evt.getRequest().getRequestURI();
-		if (sipURI.getPort() == -1) {
-			sipURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(),  platform.getServerIP()+":"+platform.getServerPort());
-		}
-		logger.debug("responseXmlAck SipURI: {}:{}", sipURI.getHost(), sipURI.getPort());
-
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(
-				sipFactory.createAddressFactory().createSipURI(sipURI.getUser(),  sipURI.getHost()+":"+sipURI.getPort()
-				));
-		response.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-		response.addHeader(evt.getRequest().getHeader(ExpiresHeader.NAME));
-		getServerTransaction(evt).sendResponse(response);
-		return response;
-	}
-
-	public Element getRootElement(RequestEvent evt) throws DocumentException {
-		return getRootElement(evt, "gb2312");
-	}
-	public Element getRootElement(RequestEvent evt, String charset) throws DocumentException {
-		if (charset == null) charset = "gb2312";
-		Request request = evt.getRequest();
-		SAXReader reader = new SAXReader();
-		reader.setEncoding(charset);
-		// 对海康出现的未转义字符做处理。
-		String[] destStrArray = new String[]{"&lt;","&gt;","&amp;","&apos;","&quot;"};
-		char despChar = '&'; // 或许可扩展兼容其他字符
-		byte destBye = (byte) despChar;
-		List<Byte> result = new ArrayList<>();
-		byte[] rawContent = request.getRawContent();
-		for (int i = 0; i < rawContent.length; i++) {
-			if (rawContent[i] == destBye) {
-				boolean resul = false;
-				for (String destStr : destStrArray) {
-					if (i + destStr.length() <= rawContent.length) {
-						byte[] bytes = Arrays.copyOfRange(rawContent, i, i + destStr.length());
-						resul = resul || (Arrays.equals(bytes,destStr.getBytes()));
-					}
-				}
-				if (resul) {
-					result.add(rawContent[i]);
-				}
-			}else {
-				result.add(rawContent[i]);
-			}
-		}
-		Byte[] bytes = new Byte[0];
-		byte[] bytesResult = ArrayUtils.toPrimitive(result.toArray(bytes));
-
-		Document xml = reader.read(new ByteArrayInputStream(bytesResult));
-		return xml.getRootElement();
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
deleted file mode 100644
index ec83fa8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.Dialog;
-import javax.sip.DialogState;
-import javax.sip.RequestEvent;
-import javax.sip.address.SipURI;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.header.HeaderAddress;
-import javax.sip.header.ToHeader;
-import java.util.*;
-
-/**
- * SIP命令类型: ACK请求
- */
-@Component
-public class AckRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private Logger logger = LoggerFactory.getLogger(AckRequestProcessor.class);
-	private String method = "ACK";
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	@Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private ZLMRTPServerFactory zlmrtpServerFactory;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private ZLMHttpHookSubscribe subscribe;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-
-	/**   
-	 * 处理  ACK请求
-	 * 
-	 * @param evt
-	 */
-	@Override
-	public void process(RequestEvent evt) {
-		Dialog dialog = evt.getDialog();
-		CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
-		if (dialog == null) return;
-		if (dialog.getState()== DialogState.CONFIRMED) {
-			String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
-			logger.info("ACK请求: platformGbId->{}", platformGbId);
-			// 取消设置的超时任务
-			dynamicTask.stop(callIdHeader.getCallId());
-			String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
-			SendRtpItem sendRtpItem =  redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
-			String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
-			MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
-			logger.info("收到ACK,开始向上级推流 rtp/{}", sendRtpItem.getStreamId());
-			Map<String, Object> param = new HashMap<>();
-			param.put("vhost","__defaultVhost__");
-			param.put("app",sendRtpItem.getApp());
-			param.put("stream",sendRtpItem.getStreamId());
-			param.put("ssrc", sendRtpItem.getSsrc());
-			param.put("dst_url",sendRtpItem.getIp());
-			param.put("dst_port", sendRtpItem.getPort());
-			param.put("is_udp", is_Udp);
-			param.put("src_port", sendRtpItem.getLocalPort());
-			zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
-
-
-
-//			if (streamInfo == null) { // 流还没上来,对方就回复ack
-//				logger.info("监听流以等待流上线1 rtp/{}", sendRtpItem.getStreamId());
-//				// 监听流上线
-//				// 添加订阅
-//				JSONObject subscribeKey = new JSONObject();
-//				subscribeKey.put("app", "rtp");
-//				subscribeKey.put("stream", sendRtpItem.getStreamId());
-//				subscribeKey.put("regist", true);
-//				subscribeKey.put("schema", "rtmp");
-//				subscribeKey.put("mediaServerId", sendRtpItem.getMediaServerId());
-//				subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
-//						(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-//							Map<String, Object> param = new HashMap<>();
-//							param.put("vhost","__defaultVhost__");
-//							param.put("app",json.getString("app"));
-//							param.put("stream",json.getString("stream"));
-//							param.put("ssrc", sendRtpItem.getSsrc());
-//							param.put("dst_url",sendRtpItem.getIp());
-//							param.put("dst_port", sendRtpItem.getPort());
-//							param.put("is_udp", is_Udp);
-//							param.put("src_port", sendRtpItem.getLocalPort());
-//							zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
-//						});
-//			}else {
-//				Map<String, Object> param = new HashMap<>();
-//				param.put("vhost","__defaultVhost__");
-//				param.put("app",streamInfo.getApp());
-//				param.put("stream",streamInfo.getStream());
-//				param.put("ssrc", sendRtpItem.getSsrc());
-//				param.put("dst_url",sendRtpItem.getIp());
-//				param.put("dst_port", sendRtpItem.getPort());
-//				param.put("is_udp", is_Udp);
-//				param.put("src_port", sendRtpItem.getLocalPort());
-//
-//				JSONObject jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
-//				if (jsonObject.getInteger("code") != 0) {
-//					logger.info("监听流以等待流上线2 {}/{}", streamInfo.getApp(), streamInfo.getStream());
-//					// 监听流上线
-//					// 添加订阅
-//					JSONObject subscribeKey = new JSONObject();
-//					subscribeKey.put("app", "rtp");
-//					subscribeKey.put("stream", streamInfo.getStream());
-//					subscribeKey.put("regist", true);
-//					subscribeKey.put("schema", "rtmp");
-//					subscribeKey.put("mediaServerId", sendRtpItem.getMediaServerId());
-//					subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
-//							(MediaServerItem mediaServerItemInUse, JSONObject json)->{
-//								zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
-//							});
-//				}
-//			}
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
deleted file mode 100644
index e487447..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-import gov.nist.javax.sip.stack.SIPDialog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.*;
-import javax.sip.address.SipURI;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.header.HeaderAddress;
-import javax.sip.header.ToHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * SIP命令类型: BYE请求
- */
-@Component
-public class ByeRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private final Logger logger = LoggerFactory.getLogger(ByeRequestProcessor.class);
-	private final String method = "BYE";
-
-	@Autowired
-	private ISIPCommander cmder;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private ZLMRTPServerFactory zlmrtpServerFactory;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	/**
-	 * 处理BYE请求
-	 * @param evt
-	 */
-	@Override
-	public void process(RequestEvent evt) {
-		try {
-			responseAck(evt, Response.OK);
-			Dialog dialog = evt.getDialog();
-			CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
-			if (dialog == null) return;
-			if (dialog.getState().equals(DialogState.TERMINATED)) {
-				String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
-				String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
-				SendRtpItem sendRtpItem =  redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
-				logger.info("收到bye, [{}/{}]", platformGbId, channelId);
-				if (sendRtpItem != null){
-					String streamId = sendRtpItem.getStreamId();
-					Map<String, Object> param = new HashMap<>();
-					param.put("vhost","__defaultVhost__");
-					param.put("app",sendRtpItem.getApp());
-					param.put("stream",streamId);
-					param.put("ssrc",sendRtpItem.getSsrc());
-					logger.info("收到bye:停止向上级推流:" + streamId);
-					MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
-					zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
-					redisCatchStorage.deleteSendRTPServer(platformGbId, channelId, callIdHeader.getCallId(), null);
-					int totalReaderCount = zlmrtpServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId);
-					if (totalReaderCount <= 0) {
-						logger.info("收到bye: {}无其它观看者,通知设备停止推流", streamId);
-						if (sendRtpItem.isPlay()) {
-							cmder.streamByeCmd(sendRtpItem.getDeviceId(), channelId, streamId, null);
-						}
-					}
-				}
-				// 可能是设备主动停止
-				Device device = storager.queryVideoDeviceByChannelId(platformGbId);
-                if (device != null) {
-					storager.stopPlay(device.getDeviceId(), channelId);
-					StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
-					if (streamInfo != null) {
-						redisCatchStorage.stopPlay(streamInfo);
-						mediaServerService.closeRTPServer(device.getDeviceId(), channelId, streamInfo.getStream());
-					}
-					SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
-					if (ssrcTransactionForPlay != null){
-						SIPDialog dialogForPlay = (SIPDialog) SerializeUtils.deSerialize(ssrcTransactionForPlay.getDialog());
-						if (dialogForPlay.getCallId().equals(callIdHeader.getCallId())){
-							// 释放ssrc
-							MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlay.getMediaServerId());
-							if (mediaServerItem != null) {
-								mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlay.getSsrc());
-							}
-							streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlay.getStream());
-						}
-					}
-					SsrcTransaction ssrcTransactionForPlayBack = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, callIdHeader.getCallId(), null);
-					if (ssrcTransactionForPlayBack != null) {
-						// 释放ssrc
-						MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlayBack.getMediaServerId());
-						if (mediaServerItem != null) {
-							mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlayBack.getSsrc());
-						}
-						streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlayBack.getStream());
-					}
-				}
-			}
-		} catch (SipException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			e.printStackTrace();
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/CancelRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/CancelRequestProcessor.java
deleted file mode 100644
index 0a818ee..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/CancelRequestProcessor.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.RequestEvent;
-
-/**
- * SIP命令类型: CANCEL请求
- */
-@Component
-public class CancelRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private String method = "CANCEL";
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	/**   
-	 * 处理CANCEL请求
-	 *  
-	 * @param evt 事件
-	 */
-	@Override
-	public void process(RequestEvent evt) {
-		// TODO 优先级99 Cancel Request消息实现,此消息一般为级联消息,上级给下级发送请求取消指令
-		
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
deleted file mode 100644
index 77b4b32..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ /dev/null
@@ -1,523 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IPlayService;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
-import gov.nist.javax.sdp.TimeDescriptionImpl;
-import gov.nist.javax.sdp.fields.TimeField;
-import gov.nist.javax.sip.address.AddressImpl;
-import gov.nist.javax.sip.address.SipUri;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sdp.*;
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipException;
-import javax.sip.address.SipURI;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Vector;
-
-/**
- * SIP命令类型: INVITE请求
- */
-@SuppressWarnings("rawtypes")
-@Component
-public class InviteRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private final static Logger logger = LoggerFactory.getLogger(InviteRequestProcessor.class);
-
-	private String method = "INVITE";
-
-	@Autowired
-	private SIPCommanderFroPlatform cmderFroPlatform;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage  redisCatchStorage;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IPlayService playService;
-
-	@Autowired
-	private ISIPCommander commander;
-
-	@Autowired
-	private ZLMRTPServerFactory zlmrtpServerFactory;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Autowired
-	private VideoStreamSessionManager sessionManager;
-
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	/**
-	 * 处理invite请求
-	 * 
-	 * @param evt
-	 *            请求消息
-	 */ 
-	@Override
-	public void process(RequestEvent evt) {
-		//  Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令
-		try {
-			Request request = evt.getRequest();
-			SipURI sipURI = (SipURI) request.getRequestURI();
-			String channelId = sipURI.getUser();
-			String requesterId = SipUtils.getUserIdFromFromHeader(request);
-			CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
-			if (requesterId == null || channelId == null) {
-				logger.info("无法从FromHeader的Address中获取到平台id,返回400");
-				responseAck(evt, Response.BAD_REQUEST); // 参数不全, 发400,请求错误
-				return;
-			}
-
-			// 查询请求是否来自上级平台\设备
-			ParentPlatform platform = storager.queryParentPlatByServerGBId(requesterId);
-			if (platform == null) {
-				inviteFromDeviceHandle(evt, requesterId);
-			}else {
-				// 查询平台下是否有该通道
-				DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId);
-				GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
-				PlatformCatalog catalog = storager.getCatalog(channelId);
-				MediaServerItem mediaServerItem = null;
-				// 不是通道可能是直播流
-				if (channel != null && gbStream == null ) {
-					if (channel.getStatus() == 0) {
-						logger.info("通道离线,返回400");
-						responseAck(evt, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
-						return;
-					}
-					responseAck(evt, Response.CALL_IS_BEING_FORWARDED); // 通道存在,发181,呼叫转接中
-				}else if(channel == null && gbStream != null){
-					String mediaServerId = gbStream.getMediaServerId();
-					mediaServerItem = mediaServerService.getOne(mediaServerId);
-					if (mediaServerItem == null) {
-						logger.info("[ app={}, stream={} ]找不到zlm {},返回410",gbStream.getApp(), gbStream.getStream(), mediaServerId);
-						responseAck(evt, Response.GONE);
-						return;
-					}
-					Boolean streamReady = zlmrtpServerFactory.isStreamReady(mediaServerItem, gbStream.getApp(), gbStream.getStream());
-					if (!streamReady ) {
-						logger.info("[ app={}, stream={} ]通道离线,返回400",gbStream.getApp(), gbStream.getStream());
-						responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
-						return;
-					}
-					responseAck(evt, Response.CALL_IS_BEING_FORWARDED); // 通道存在,发181,呼叫转接中
-				}else if (catalog != null) {
-					responseAck(evt, Response.BAD_REQUEST, "catalog channel can not play"); // 目录不支持点播
-					return;
-				} else {
-					logger.info("通道不存在,返回404");
-					responseAck(evt, Response.NOT_FOUND); // 通道不存在,发404,资源不存在
-					return;
-				}
-				// 解析sdp消息, 使用jainsip 自带的sdp解析方式
-				String contentString = new String(request.getRawContent());
-
-				// jainSip不支持y=字段, 移除以解析。
-				int ssrcIndex = contentString.indexOf("y=");
-				// 检查是否有y字段
-				String ssrcDefault = "0000000000";
-				String ssrc;
-				SessionDescription sdp;
-				if (ssrcIndex >= 0) {
-					//ssrc规定长度为10字节,不取余下长度以避免后续还有“f=”字段
-					ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
-					String substring = contentString.substring(0, contentString.indexOf("y="));
-					sdp = SdpFactory.getInstance().createSessionDescription(substring);
-				}else {
-					ssrc = ssrcDefault;
-					sdp = SdpFactory.getInstance().createSessionDescription(contentString);
-				}
-				String sessionName = sdp.getSessionName().getValue();
-
-				Long startTime = null;
-				Long stopTime = null;
-				Date start = null;
-				Date end = null;
-				if (sdp.getTimeDescriptions(false) != null && sdp.getTimeDescriptions(false).size() > 0) {
-					TimeDescriptionImpl timeDescription = (TimeDescriptionImpl)(sdp.getTimeDescriptions(false).get(0));
-					TimeField startTimeFiled = (TimeField)timeDescription.getTime();
-					startTime = startTimeFiled.getStartTime();
-					stopTime = startTimeFiled.getStopTime();
-
-					start = new Date(startTime*1000);
-					end = new Date(stopTime*1000);
-				}
-				//  获取支持的格式
-				Vector mediaDescriptions = sdp.getMediaDescriptions(true);
-				// 查看是否支持PS 负载96
-				//String ip = null;
-				int port = -1;
-				boolean mediaTransmissionTCP = false;
-				Boolean tcpActive = null;
-				for (Object description : mediaDescriptions) {
-					MediaDescription mediaDescription = (MediaDescription) description;
-					Media media = mediaDescription.getMedia();
-
-					Vector mediaFormats = media.getMediaFormats(false);
-					if (mediaFormats.contains("96")) {
-						port = media.getMediaPort();
-						//String mediaType = media.getMediaType();
-						String protocol = media.getProtocol();
-
-						// 区分TCP发流还是udp, 当前默认udp
-						if ("TCP/RTP/AVP".equals(protocol)) {
-							String setup = mediaDescription.getAttribute("setup");
-							if (setup != null) {
-								mediaTransmissionTCP = true;
-								if ("active".equals(setup)) {
-									tcpActive = true;
-								} else if ("passive".equals(setup)) {
-									tcpActive = false;
-								}
-							}
-						}
-						break;
-					}
-				}
-				if (port == -1) {
-					logger.info("不支持的媒体格式,返回415");
-					// 回复不支持的格式
-					responseAck(evt, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415
-					return;
-				}
-				String username = sdp.getOrigin().getUsername();
-				String addressStr = sdp.getOrigin().getAddress();
-
-				logger.info("[上级点播]用户:{}, 地址:{}:{}, ssrc:{}", username, addressStr, port, ssrc);
-				Device device  = null;
-				// 通过 channel 和 gbStream 是否为null 值判断来源是直播流合适国标
-				if (channel != null) {
-					device = storager.queryVideoDeviceByPlatformIdAndChannelId(requesterId, channelId);
-					if (device == null) {
-						logger.warn("点播平台{}的通道{}时未找到设备信息", requesterId, channel);
-						responseAck(evt, Response.SERVER_INTERNAL_ERROR);
-						return;
-					}
-					mediaServerItem = playService.getNewMediaServerItem(device);
-					if (mediaServerItem == null) {
-						logger.warn("未找到可用的zlm");
-						responseAck(evt, Response.BUSY_HERE);
-						return;
-					}
-					SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
-							device.getDeviceId(), channelId,
-							mediaTransmissionTCP);
-					if (tcpActive != null) {
-						sendRtpItem.setTcpActive(tcpActive);
-					}
-					if (sendRtpItem == null) {
-						logger.warn("服务器端口资源不足");
-						responseAck(evt, Response.BUSY_HERE);
-						return;
-					}
-					sendRtpItem.setCallId(callIdHeader.getCallId());
-					sendRtpItem.setPlay("Play".equals(sessionName));
-					byte[] dialogByteArray = SerializeUtils.serialize(evt.getDialog());
-					sendRtpItem.setDialog(dialogByteArray);
-					byte[] transactionByteArray = SerializeUtils.serialize(evt.getServerTransaction());
-					sendRtpItem.setTransaction(transactionByteArray);
-
-
-					Long finalStartTime = startTime;
-					Long finalStopTime = stopTime;
-					ZLMHttpHookSubscribe.Event hookEvent = (mediaServerItemInUSe, responseJSON)->{
-						String app = responseJSON.getString("app");
-						String stream = responseJSON.getString("stream");
-						logger.info("[上级点播]下级已经开始推流。 回复200OK(SDP), {}/{}", app, stream);
-						//     * 0 等待设备推流上来
-						//     * 1 下级已经推流,等待上级平台回复ack
-						//     * 2 推流中
-						sendRtpItem.setStatus(1);
-						redisCatchStorage.updateSendRTPSever(sendRtpItem);
-
-						StringBuffer content = new StringBuffer(200);
-						content.append("v=0\r\n");
-						content.append("o="+ channelId +" 0 0 IN IP4 "+mediaServerItemInUSe.getSdpIp()+"\r\n");
-						content.append("s=" + sessionName+"\r\n");
-						content.append("c=IN IP4 "+mediaServerItemInUSe.getSdpIp()+"\r\n");
-						if ("Playback".equals(sessionName)) {
-							content.append("t=" + finalStartTime + " " + finalStopTime + "\r\n");
-						}else {
-							content.append("t=0 0\r\n");
-						}
-						content.append("m=video "+ sendRtpItem.getLocalPort()+" RTP/AVP 96\r\n");
-						content.append("a=sendonly\r\n");
-						content.append("a=rtpmap:96 PS/90000\r\n");
-						content.append("y="+ ssrc + "\r\n");
-						content.append("f=\r\n");
-
-						try {
-							// 超时未收到Ack应该回复bye,当前等待时间为10秒
-							dynamicTask.startDelay(callIdHeader.getCallId(), ()->{
-								logger.info("Ack 等待超时");
-								mediaServerService.releaseSsrc(mediaServerItemInUSe.getId(), ssrc);
-								// 回复bye
-								cmderFroPlatform.streamByeCmd(platform, callIdHeader.getCallId());
-							}, 60);
-							responseSdpAck(evt, content.toString(), platform);
-
-						} catch (SipException e) {
-							e.printStackTrace();
-						} catch (InvalidArgumentException e) {
-							e.printStackTrace();
-						} catch (ParseException e) {
-							e.printStackTrace();
-						}
-					};
-					SipSubscribe.Event errorEvent = ((event) -> {
-						// 未知错误。直接转发设备点播的错误
-						Response response = null;
-						try {
-							response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
-							ServerTransaction serverTransaction = getServerTransaction(evt);
-							serverTransaction.sendResponse(response);
-							if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
-						} catch (ParseException | SipException | InvalidArgumentException e) {
-							e.printStackTrace();
-						}
-					});
-					sendRtpItem.setApp("rtp");
-					if ("Playback".equals(sessionName)) {
-						sendRtpItem.setPlay(false);
-						SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, null, true);
-						sendRtpItem.setStreamId(ssrcInfo.getStream());
-						// 写入redis, 超时时回复
-						redisCatchStorage.updateSendRTPSever(sendRtpItem);
-						SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-						playService.playBack(mediaServerItem, ssrcInfo, device.getDeviceId(), channelId, format.format(start),
-								format.format(end), null, result -> {
-								if (result.getCode() != 0){
-									logger.warn("录像回放失败");
-									if (result.getEvent() != null) {
-										errorEvent.response(result.getEvent());
-									}
-									redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
-									try {
-										responseAck(evt, Response.REQUEST_TIMEOUT);
-									} catch (SipException e) {
-										e.printStackTrace();
-									} catch (InvalidArgumentException e) {
-										e.printStackTrace();
-									} catch (ParseException e) {
-										e.printStackTrace();
-									}
-								}else {
-									if (result.getMediaServerItem() != null) {
-										hookEvent.response(result.getMediaServerItem(), result.getResponse());
-									}
-								}
-							});
-					}else {
-						sendRtpItem.setPlay(true);
-						SsrcTransaction playTransaction = sessionManager.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
-						if (playTransaction != null) {
-							Boolean streamReady = zlmrtpServerFactory.isStreamReady(mediaServerItem, "rtp", playTransaction.getStream());
-							if (!streamReady) {
-								playTransaction = null;
-							}
-						}
-						if (playTransaction == null) {
-							String streamId = null;
-							if (mediaServerItem.isRtpEnable()) {
-								streamId = String.format("%s_%s", device.getDeviceId(), channelId);
-							}
-							SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, true);
-							sendRtpItem.setStreamId(ssrcInfo.getStream());
-							// 写入redis, 超时时回复
-							redisCatchStorage.updateSendRTPSever(sendRtpItem);
-							playService.play(mediaServerItem, ssrcInfo, device, channelId, hookEvent, errorEvent, (code, msg)->{
-								redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
-							}, null);
-						}else {
-							sendRtpItem.setStreamId(playTransaction.getStream());
-							// 写入redis, 超时时回复
-							redisCatchStorage.updateSendRTPSever(sendRtpItem);
-							JSONObject jsonObject = new JSONObject();
-							jsonObject.put("app", sendRtpItem.getApp());
-							jsonObject.put("stream", sendRtpItem.getStreamId());
-							hookEvent.response(mediaServerItem, jsonObject);
-						}
-					}
-				}else if (gbStream != null) {
-					SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
-							gbStream.getApp(), gbStream.getStream(), channelId,
-							mediaTransmissionTCP);
-
-					if (tcpActive != null) {
-						sendRtpItem.setTcpActive(tcpActive);
-					}
-					if (sendRtpItem == null) {
-						logger.warn("服务器端口资源不足");
-						responseAck(evt, Response.BUSY_HERE);
-						return;
-					}
-
-					// 写入redis, 超时时回复
-					sendRtpItem.setStatus(1);
-					sendRtpItem.setCallId(callIdHeader.getCallId());
-					byte[] dialogByteArray = SerializeUtils.serialize(evt.getDialog());
-					sendRtpItem.setDialog(dialogByteArray);
-					byte[] transactionByteArray = SerializeUtils.serialize(evt.getServerTransaction());
-					sendRtpItem.setTransaction(transactionByteArray);
-					redisCatchStorage.updateSendRTPSever(sendRtpItem);
-					StringBuffer content = new StringBuffer(200);
-					content.append("v=0\r\n");
-					content.append("o="+ channelId +" 0 0 IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-					content.append("s=Play\r\n");
-					content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
-					content.append("t=0 0\r\n");
-					content.append("m=video "+ sendRtpItem.getLocalPort()+" RTP/AVP 96\r\n");
-					content.append("a=sendonly\r\n");
-					content.append("a=rtpmap:96 PS/90000\r\n");
-					content.append("y="+ ssrc + "\r\n");
-					content.append("f=\r\n");
-
-					try {
-						responseSdpAck(evt, content.toString(), platform);
-					} catch (SipException e) {
-						e.printStackTrace();
-					} catch (InvalidArgumentException e) {
-						e.printStackTrace();
-					} catch (ParseException e) {
-						e.printStackTrace();
-					}
-				}
-
-			}
-
-		} catch (SipException | InvalidArgumentException | ParseException e) {
-			e.printStackTrace();
-			logger.warn("sdp解析错误");
-			e.printStackTrace();
-		} catch (SdpParseException e) {
-			e.printStackTrace();
-		} catch (SdpException e) {
-			e.printStackTrace();
-		}
-	}
-
-	public void inviteFromDeviceHandle(RequestEvent evt, String requesterId) throws InvalidArgumentException, ParseException, SipException, SdpException {
-
-		// 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备)
-		Device device = redisCatchStorage.getDevice(requesterId);
-		Request request = evt.getRequest();
-		if (device != null) {
-			logger.info("收到设备" + requesterId + "的语音广播Invite请求");
-			responseAck(evt, Response.TRYING);
-
-			String contentString = new String(request.getRawContent());
-			// jainSip不支持y=字段, 移除移除以解析。
-			String substring = contentString;
-			String ssrc = "0000000404";
-			int ssrcIndex = contentString.indexOf("y=");
-			if (ssrcIndex > 0) {
-				substring = contentString.substring(0, ssrcIndex);
-				ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
-			}
-			ssrcIndex = substring.indexOf("f=");
-			if (ssrcIndex > 0) {
-				substring = contentString.substring(0, ssrcIndex);
-			}
-			SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(substring);
-
-			//  获取支持的格式
-			Vector mediaDescriptions = sdp.getMediaDescriptions(true);
-			// 查看是否支持PS 负载96
-			int port = -1;
-			//boolean recvonly = false;
-			boolean mediaTransmissionTCP = false;
-			Boolean tcpActive = null;
-			for (int i = 0; i < mediaDescriptions.size(); i++) {
-				MediaDescription mediaDescription = (MediaDescription)mediaDescriptions.get(i);
-				Media media = mediaDescription.getMedia();
-
-				Vector mediaFormats = media.getMediaFormats(false);
-				if (mediaFormats.contains("8")) {
-					port = media.getMediaPort();
-					String protocol = media.getProtocol();
-					// 区分TCP发流还是udp, 当前默认udp
-					if ("TCP/RTP/AVP".equals(protocol)) {
-						String setup = mediaDescription.getAttribute("setup");
-						if (setup != null) {
-							mediaTransmissionTCP = true;
-							if ("active".equals(setup)) {
-								tcpActive = true;
-							} else if ("passive".equals(setup)) {
-								tcpActive = false;
-							}
-						}
-					}
-					break;
-				}
-			}
-			if (port == -1) {
-				logger.info("不支持的媒体格式,返回415");
-				// 回复不支持的格式
-				responseAck(evt, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415
-				return;
-			}
-			String username = sdp.getOrigin().getUsername();
-			String addressStr = sdp.getOrigin().getAddress();
-			logger.info("设备{}请求语音流,地址:{}:{},ssrc:{}", username, addressStr, port, ssrc);
-
-		} else {
-			logger.warn("来自无效设备/平台的请求");
-			responseAck(evt, Response.BAD_REQUEST);
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
deleted file mode 100644
index 8ecd732..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ /dev/null
@@ -1,365 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.GpsUtil;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.Iterator;
-
-/**
- * SIP命令类型: NOTIFY请求
- */
-@Component
-public class NotifyRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-
-    private final static Logger logger = LoggerFactory.getLogger(NotifyRequestProcessor.class);
-
-	@Autowired
-	private UserSetup userSetup;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private EventPublisher eventPublisher;
-
-	@Autowired
-	private SipConfig sipConfig;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private EventPublisher publisher;
-
-	@Autowired
-	private DeviceOffLineDetector offLineDetector;
-
-
-	private String method = "NOTIFY";
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	@Override
-	public void process(RequestEvent evt) {
-		try {
-			Element rootElement = getRootElement(evt);
-			String cmd = XmlUtil.getText(rootElement, "CmdType");
-
-			if (CmdType.CATALOG.equals(cmd)) {
-				logger.info("接收到Catalog通知");
-				processNotifyCatalogList(evt);
-			} else if (CmdType.ALARM.equals(cmd)) {
-				logger.info("接收到Alarm通知");
-				processNotifyAlarm(evt);
-			} else if (CmdType.MOBILE_POSITION.equals(cmd)) {
-				logger.info("接收到MobilePosition通知");
-				processNotifyMobilePosition(evt);
-			} else {
-				logger.info("接收到消息:" + cmd);
-				responseAck(evt, Response.OK);
-			}
-		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * 处理MobilePosition移动位置Notify
-	 *
-	 * @param evt
-	 */
-	private void processNotifyMobilePosition(RequestEvent evt) {
-		try {
-			// 回复 200 OK
-			Element rootElement = getRootElement(evt);
-			MobilePosition mobilePosition = new MobilePosition();
-			Element deviceIdElement = rootElement.element("DeviceID");
-			String deviceId = deviceIdElement.getTextTrim().toString();
-			Device device = redisCatchStorage.getDevice(deviceId);
-			if (device != null) {
-				if (!StringUtils.isEmpty(device.getName())) {
-					mobilePosition.setDeviceName(device.getName());
-				}
-			}
-			mobilePosition.setDeviceId(XmlUtil.getText(rootElement, "DeviceID"));
-			mobilePosition.setTime(XmlUtil.getText(rootElement, "Time"));
-			mobilePosition.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
-			mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
-			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Speed"))) {
-				mobilePosition.setSpeed(Double.parseDouble(XmlUtil.getText(rootElement, "Speed")));
-			} else {
-				mobilePosition.setSpeed(0.0);
-			}
-			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Direction"))) {
-				mobilePosition.setDirection(Double.parseDouble(XmlUtil.getText(rootElement, "Direction")));
-			} else {
-				mobilePosition.setDirection(0.0);
-			}
-			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Altitude"))) {
-				mobilePosition.setAltitude(Double.parseDouble(XmlUtil.getText(rootElement, "Altitude")));
-			} else {
-				mobilePosition.setAltitude(0.0);
-			}
-			mobilePosition.setReportSource("Mobile Position");
-
-			//外网转换坐标
-//			BaiduPoint bp = new BaiduPoint();
-//			bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
-//			logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
-//			mobilePosition.setGeodeticSystem("BD-09");
-//			mobilePosition.setCnLng(bp.getBdLng());
-//			mobilePosition.setCnLat(bp.getBdLat());
-
-			//内网不转换坐标
-			mobilePosition.setGeodeticSystem("BD-09");
-			mobilePosition.setCnLng(String.valueOf(mobilePosition.getLongitude()));
-			mobilePosition.setCnLat(String.valueOf(mobilePosition.getLatitude()));
-
-			if (!userSetup.getSavePositionHistory()) {
-				storager.clearMobilePositionsByDeviceId(deviceId);
-			}
-			storager.insertMobilePosition(mobilePosition);
-			responseAck(evt, Response.OK);
-		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/***
-	 * 处理alarm设备报警Notify
-	 *
-	 * @param evt
-	 */
-	private void processNotifyAlarm(RequestEvent evt) {
-		if (!sipConfig.isAlarm()) {
-			return;
-		}
-		try {
-			Element rootElement = getRootElement(evt);
-			Element deviceIdElement = rootElement.element("DeviceID");
-			String deviceId = deviceIdElement.getText().toString();
-
-			Device device = redisCatchStorage.getDevice(deviceId);
-			if (device == null) {
-				return;
-			}
-			rootElement = getRootElement(evt, device.getCharset());
-			DeviceAlarm deviceAlarm = new DeviceAlarm();
-			deviceAlarm.setDeviceId(deviceId);
-			deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
-			deviceAlarm.setAlarmMethod(XmlUtil.getText(rootElement, "AlarmMethod"));
-			deviceAlarm.setAlarmTime(XmlUtil.getText(rootElement, "AlarmTime"));
-			if (XmlUtil.getText(rootElement, "AlarmDescription") == null) {
-				deviceAlarm.setAlarmDescription("");
-			} else {
-				deviceAlarm.setAlarmDescription(XmlUtil.getText(rootElement, "AlarmDescription"));
-			}
-			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Longitude"))) {
-				deviceAlarm.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
-			} else {
-				deviceAlarm.setLongitude(0.00);
-			}
-			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Latitude"))) {
-				deviceAlarm.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
-			} else {
-				deviceAlarm.setLatitude(0.00);
-			}
-
-			if (deviceAlarm.getAlarmMethod().equals("4")) {
-				MobilePosition mobilePosition = new MobilePosition();
-				mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
-				mobilePosition.setTime(deviceAlarm.getAlarmTime());
-				mobilePosition.setLongitude(deviceAlarm.getLongitude());
-				mobilePosition.setLatitude(deviceAlarm.getLatitude());
-				mobilePosition.setReportSource("GPS Alarm");
-				BaiduPoint bp = new BaiduPoint();
-
-				//外网转换坐标
-//				bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
-//				logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
-//				mobilePosition.setGeodeticSystem("BD-09");
-//				mobilePosition.setCnLng(bp.getBdLng());
-//				mobilePosition.setCnLat(bp.getBdLat());
-
-				//内网不转换坐标
-				mobilePosition.setGeodeticSystem("BD-09");
-				mobilePosition.setCnLng(String.valueOf(mobilePosition.getLongitude()));
-				mobilePosition.setCnLat(String.valueOf(mobilePosition.getLatitude()));
-
-				if (!userSetup.getSavePositionHistory()) {
-					storager.clearMobilePositionsByDeviceId(deviceId);
-				}
-				storager.insertMobilePosition(mobilePosition);
-			}
-			// TODO: 需要实现存储报警信息、报警分类
-
-			// 回复200 OK
-			responseAck(evt, Response.OK);
-			if (offLineDetector.isOnline(deviceId)) {
-				publisher.deviceAlarmEventPublish(deviceAlarm);
-			}
-		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/***
-	 * 处理catalog设备目录列表Notify
-	 *
-	 * @param evt
-	 */
-	private void processNotifyCatalogList(RequestEvent evt) {
-		try {
-			FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-			String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader);
-
-			Element rootElement = getRootElement(evt);
-			Device device = redisCatchStorage.getDevice(deviceId);
-			if (device == null) {
-				return;
-			}
-			if (device != null ) {
-				rootElement = getRootElement(evt, device.getCharset());
-			}
-			Element deviceListElement = rootElement.element("DeviceList");
-			if (deviceListElement == null) {
-				return;
-			}
-			Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
-			if (deviceListIterator != null) {
-
-				// 遍历DeviceList
-				while (deviceListIterator.hasNext()) {
-					Element itemDevice = deviceListIterator.next();
-					Element channelDeviceElement = itemDevice.element("DeviceID");
-					if (channelDeviceElement == null) {
-						continue;
-					}
-					Element eventElement = itemDevice.element("Event");
-					DeviceChannel channel = XmlUtil.channelContentHander(itemDevice);
-					channel.setDeviceId(device.getDeviceId());
-					logger.debug("收到来自设备【{}】的通道: {}【{}】", device.getDeviceId(), channel.getName(), channel.getChannelId());
-					switch (eventElement.getText().toUpperCase()) {
-						case CatalogEvent.ON: // 上线
-							logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId());
-							storager.deviceChannelOnline(deviceId, channel.getChannelId());
-							// 回复200 OK
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.OFF : // 离线
-							logger.info("收到来自设备【{}】的通道【{}】离线通知", device.getDeviceId(), channel.getChannelId());
-							storager.deviceChannelOffline(deviceId, channel.getChannelId());
-							// 回复200 OK
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.VLOST: // 视频丢失
-							logger.info("收到来自设备【{}】的通道【{}】视频丢失通知", device.getDeviceId(), channel.getChannelId());
-							storager.deviceChannelOffline(deviceId, channel.getChannelId());
-							// 回复200 OK
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.DEFECT: // 故障
-							// 回复200 OK
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.ADD: // 增加
-							logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channel.getChannelId());
-							storager.updateChannel(deviceId, channel);
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.DEL: // 删除
-							logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channel.getChannelId());
-							storager.delChannel(deviceId, channel.getChannelId());
-							responseAck(evt, Response.OK);
-							break;
-						case CatalogEvent.UPDATE: // 更新
-							logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channel.getChannelId());
-							storager.updateChannel(deviceId, channel);
-							responseAck(evt, Response.OK);
-							break;
-						default:
-							responseAck(evt, Response.BAD_REQUEST, "event not found");
-
-					}
-					// 转发变化信息
-					eventPublisher.catalogEventPublish(null, channel, eventElement.getText().toUpperCase());
-
-				}
-
-				if (offLineDetector.isOnline(deviceId)) {
-					publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
-				}
-			}
-		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	public void setCmder(SIPCommander cmder) {
-	}
-
-	public void setStorager(IVideoManagerStorager storager) {
-		this.storager = storager;
-	}
-
-	public void setPublisher(EventPublisher publisher) {
-		this.publisher = publisher;
-	}
-
-	public void setRedis(RedisUtil redis) {
-	}
-
-	public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) {
-	}
-
-	public void setOffLineDetector(DeviceOffLineDetector offLineDetector) {
-		this.offLineDetector = offLineDetector;
-	}
-
-	public IRedisCatchStorage getRedisCatchStorage() {
-		return redisCatchStorage;
-	}
-
-	public void setRedisCatchStorage(IRedisCatchStorage redisCatchStorage) {
-		this.redisCatchStorage = redisCatchStorage;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
deleted file mode 100644
index cb8b723..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
-import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import gov.nist.javax.sip.RequestEventExt;
-import gov.nist.javax.sip.address.AddressImpl;
-import gov.nist.javax.sip.address.SipUri;
-import gov.nist.javax.sip.header.Expires;
-import gov.nist.javax.sip.header.SIPDateHeader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipException;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-import java.security.NoSuchAlgorithmException;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Locale;
-
-/**
- * SIP命令类型: REGISTER请求
- */
-@Component
-public class RegisterRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class);
-
-	public String method = "REGISTER";
-
-	@Autowired
-	private SipConfig sipConfig;
-
-	@Autowired
-	private RegisterLogicHandler handler;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private EventPublisher publisher;
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	/**
-	 * 收到注册请求 处理
- 	 * @param evt
-	 */
-	@Override
-	public void process(RequestEvent evt) {
-		try {
-			RequestEventExt evtExt = (RequestEventExt)evt;
-			String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
-			logger.info("[{}] 收到注册请求,开始处理", requestAddress);
-			Request request = evt.getRequest();
-			ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
-			Response response = null; 
-			boolean passwordCorrect = false;
-			// 注册标志  0:未携带授权头或者密码错误  1:注册成功   2:注销成功
-			int registerFlag = 0;
-			FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
-			AddressImpl address = (AddressImpl) fromHeader.getAddress();
-			SipUri uri = (SipUri) address.getURI();
-			String deviceId = uri.getUser();
-			Device deviceInRedis = redisCatchStorage.getDevice(deviceId);
-			Device device = storager.queryVideoDevice(deviceId);
-			if (deviceInRedis != null && device == null) {
-				// redis 存在脏数据
-				redisCatchStorage.clearCatchByDeviceId(deviceId);
-			}
-			AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
-			// 校验密码是否正确
-			if (authorhead != null) {
-				passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request,
-						sipConfig.getPassword());
-			}
-			if (StringUtils.isEmpty(sipConfig.getPassword())){
-				passwordCorrect = true;
-			}
-
-			// 未携带授权头或者密码错误 回复401
-			if (authorhead == null ) {
-
-				logger.info("[{}] 未携带授权头 回复401", requestAddress);
-				response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
-				new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
-			}else {
-				if (!passwordCorrect){
-					// 注册失败
-					response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
-					response.setReasonPhrase("wrong password");
-					logger.info("[{}] 密码/SIP服务器ID错误, 回复403", requestAddress);
-				}else {
-					// 携带授权头并且密码正确
-					response = getMessageFactory().createResponse(Response.OK, request);
-					// 添加date头
-					SIPDateHeader dateHeader = new SIPDateHeader();
-					// 使用自己修改的
-					WvpSipDate wvpSipDate = new WvpSipDate(Calendar.getInstance(Locale.ENGLISH).getTimeInMillis());
-					dateHeader.setDate(wvpSipDate);
-					response.addHeader(dateHeader);
-
-
-					if (expiresHeader == null) {
-						response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
-						ServerTransaction serverTransaction = getServerTransaction(evt);
-						serverTransaction.sendResponse(response);
-						if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
-						return;
-					}
-					// 添加Contact头
-					response.addHeader(request.getHeader(ContactHeader.NAME));
-					// 添加Expires头
-					response.addHeader(request.getExpires());
-
-					// 获取到通信地址等信息
-					ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-					String received = viaHeader.getReceived();
-					int rPort = viaHeader.getRPort();
-					// 解析本地地址替代
-					if (StringUtils.isEmpty(received) || rPort == -1) {
-						received = viaHeader.getHost();
-						rPort = viaHeader.getPort();
-					}
-					//
-
-					if (device == null) {
-						device = new Device();
-						device.setStreamMode("UDP");
-						device.setCharset("GB2312");
-						device.setDeviceId(deviceId);
-						device.setFirsRegister(true);
-					}else {
-						if (device.getOnline() == 0) {
-							device.setFirsRegister(true);
-						}
-					}
-					device.setIp(received);
-					device.setPort(rPort);
-					device.setHostAddress(received.concat(":").concat(String.valueOf(rPort)));
-					// 注销成功
-					if (expiresHeader.getExpires() == 0) {
-						registerFlag = 2;
-					}
-					// 注册成功
-					else {
-						device.setExpires(expiresHeader.getExpires());
-						registerFlag = 1;
-						// 判断TCP还是UDP
-						boolean isTcp = false;
-						ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-						String transport = reqViaHeader.getTransport();
-						if (transport.equals("TCP")) {
-							isTcp = true;
-						}
-						device.setTransport(isTcp ? "TCP" : "UDP");
-					}
-				}
-			}
-
-			ServerTransaction serverTransaction = getServerTransaction(evt);
-			serverTransaction.sendResponse(response);
-			if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
-			// 注册成功
-			// 保存到redis
-			if (registerFlag == 1 ) {
-				logger.info("[{}] 注册成功! deviceId:" + device.getDeviceId(), requestAddress);
-				publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER, expiresHeader.getExpires());
-			} else if (registerFlag == 2) {
-				logger.info("[{}] 注销成功! deviceId:" + device.getDeviceId(), requestAddress);
-				publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER);
-			}
-		} catch (SipException | InvalidArgumentException | NoSuchAlgorithmException | ParseException e) {
-			e.printStackTrace();
-		}
-		
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
deleted file mode 100644
index 4acec14..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.CmdType;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
-import com.genersoft.iot.vmp.gb28181.task.GPSSubscribeTask;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
-import gov.nist.javax.sip.SipProviderImpl;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-
-import javax.sip.*;
-import javax.sip.header.ExpiresHeader;
-import javax.sip.header.ToHeader;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-/**
- * SIP命令类型: SUBSCRIBE请求
- */
-@Component
-public class SubscribeRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-	private Logger logger = LoggerFactory.getLogger(SubscribeRequestProcessor.class);
-	private String method = "SUBSCRIBE";
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private ISIPCommanderForPlatform sipCommanderForPlatform;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Lazy
-	@Autowired
-	@Qualifier(value="tcpSipProvider")
-	private SipProviderImpl tcpSipProvider;
-
-	@Lazy
-	@Autowired
-	@Qualifier(value="udpSipProvider")
-	private SipProviderImpl udpSipProvider;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-	@Autowired
-	private UserSetup userSetup;
-
-
-	@Autowired
-	private SubscribeHolder subscribeHolder;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addRequestProcessor(method, this);
-	}
-
-	/**   
-	 * 处理SUBSCRIBE请求  
-	 * 
-	 * @param evt
-	 */
-	@Override
-	public void process(RequestEvent evt) {
-		Request request = evt.getRequest();
-
-		try {
-			Element rootElement = getRootElement(evt);
-			String cmd = XmlUtil.getText(rootElement, "CmdType");
-			if (CmdType.MOBILE_POSITION.equals(cmd)) {
-				processNotifyMobilePosition(evt, rootElement);
-//			} else if (CmdType.ALARM.equals(cmd)) {
-//				logger.info("接收到Alarm订阅");
-//				processNotifyAlarm(evt, rootElement);
-			} else if (CmdType.CATALOG.equals(cmd)) {
-				processNotifyCatalogList(evt, rootElement);
-			} else {
-				logger.info("接收到消息:" + cmd);
-
-				Response response = null;
-				response = getMessageFactory().createResponse(200, request);
-				if (response != null) {
-					ExpiresHeader expireHeader = getHeaderFactory().createExpiresHeader(30);
-					response.setExpires(expireHeader);
-				}
-				logger.info("response : " + response.toString());
-				ServerTransaction transaction = getServerTransaction(evt);
-				if (transaction != null) {
-					transaction.sendResponse(response);
-					transaction.getDialog().delete();
-					transaction.terminate();
-				} else {
-					logger.info("processRequest serverTransactionId is null.");
-				}
-			}
-		} catch (ParseException e) {
-			e.printStackTrace();
-		} catch (SipException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			e.printStackTrace();
-		} catch (DocumentException e) {
-			e.printStackTrace();
-		}
-
-	}
-
-	/**
-	 * 处理移动位置订阅消息
-	 */
-	private void processNotifyMobilePosition(RequestEvent evt, Element rootElement) {
-		String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
-		String deviceID = XmlUtil.getText(rootElement, "DeviceID");
-		SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
-		String sn = XmlUtil.getText(rootElement, "SN");
-		String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() +  "_MobilePosition_" + platformId;
-		logger.info("接收到{}的MobilePosition订阅", platformId);
-		StringBuilder resultXml = new StringBuilder(200);
-		resultXml.append("<?xml version=\"1.0\" ?>\r\n")
-				.append("<Response>\r\n")
-				.append("<CmdType>MobilePosition</CmdType>\r\n")
-				.append("<SN>" + sn + "</SN>\r\n")
-				.append("<DeviceID>" + deviceID + "</DeviceID>\r\n")
-				.append("<Result>OK</Result>\r\n")
-				.append("</Response>\r\n");
-
-		if (subscribeInfo.getExpires() > 0) {
-			if (subscribeHolder.getMobilePositionSubscribe(platformId) != null) {
-				dynamicTask.stop(key);
-			}
-			String interval = XmlUtil.getText(rootElement, "Interval"); // GPS上报时间间隔
-			dynamicTask.startCron(key, new GPSSubscribeTask(redisCatchStorage, sipCommanderForPlatform, storager,  platformId, sn, key, subscribeHolder), Integer.parseInt(interval));
-			subscribeHolder.putMobilePositionSubscribe(platformId, subscribeInfo);
-		}else if (subscribeInfo.getExpires() == 0) {
-			dynamicTask.stop(key);
-			subscribeHolder.removeMobilePositionSubscribe(platformId);
-		}
-
-		try {
-			ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
-			responseXmlAck(evt, resultXml.toString(), parentPlatform);
-		} catch (SipException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			e.printStackTrace();
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private void processNotifyAlarm(RequestEvent evt, Element rootElement) {
-
-	}
-
-	private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException {
-		String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
-		String deviceID = XmlUtil.getText(rootElement, "DeviceID");
-		ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
-		SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
-		if (evt.getServerTransaction() == null) {
-			ServerTransaction serverTransaction = platform.getTransport().equals("TCP") ? tcpSipProvider.getNewServerTransaction(evt.getRequest())
-					: udpSipProvider.getNewServerTransaction(evt.getRequest());
-			subscribeInfo.setTransaction(serverTransaction);
-			Dialog dialog = serverTransaction.getDialog();
-			dialog.terminateOnBye(false);
-			subscribeInfo.setDialog(dialog);
-		}
-		String sn = XmlUtil.getText(rootElement, "SN");
-		String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() +  "_Catalog_" + platformId;
-		logger.info("接收到{}的Catalog订阅", platformId);
-		StringBuilder resultXml = new StringBuilder(200);
-		resultXml.append("<?xml version=\"1.0\" ?>\r\n")
-				.append("<Response>\r\n")
-				.append("<CmdType>Catalog</CmdType>\r\n")
-				.append("<SN>" + sn + "</SN>\r\n")
-				.append("<DeviceID>" + deviceID + "</DeviceID>\r\n")
-				.append("<Result>OK</Result>\r\n")
-				.append("</Response>\r\n");
-
-		if (subscribeInfo.getExpires() > 0) {
-			subscribeHolder.putCatalogSubscribe(platformId, subscribeInfo);
-		}else if (subscribeInfo.getExpires() == 0) {
-			subscribeHolder.removeCatalogSubscribe(platformId);
-		}
-
-		try {
-			ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
-			responseXmlAck(evt, resultXml.toString(), parentPlatform);
-		} catch (SipException e) {
-			e.printStackTrace();
-		} catch (InvalidArgumentException e) {
-			e.printStackTrace();
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/IMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/IMessageHandler.java
deleted file mode 100644
index 7eba0d5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/IMessageHandler.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import org.dom4j.Element;
-
-import javax.sip.RequestEvent;
-
-public interface IMessageHandler {
-    /**
-     * 处理来自设备的信息
-     * @param evt
-     * @param device
-     */
-    void handForDevice(RequestEvent evt, Device device, Element element);
-
-    /**
-     * 处理来自平台的信息
-     * @param evt
-     * @param parentPlatform
-     */
-    void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageHandlerAbstract.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageHandlerAbstract.java
deleted file mode 100644
index afaa7cb..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageHandlerAbstract.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import org.dom4j.Element;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.sip.RequestEvent;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-public abstract class MessageHandlerAbstract extends SIPRequestProcessorParent implements IMessageHandler{
-
-    public Map<String, IMessageHandler> messageHandlerMap = new ConcurrentHashMap<>();
-
-    public void addHandler(String cmdType, IMessageHandler messageHandler) {
-        messageHandlerMap.put(cmdType, messageHandler);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        String cmd = getText(element, "CmdType");
-        IMessageHandler messageHandler = messageHandlerMap.get(cmd);
-        if (messageHandler != null) {
-            messageHandler.handForDevice(evt, device, element);
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-        String cmd = getText(element, "CmdType");
-        IMessageHandler messageHandler = messageHandlerMap.get(cmd);
-        if (messageHandler != null) {
-            messageHandler.handForPlatform(evt, parentPlatform, element);
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
deleted file mode 100644
index e126fba..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceNotFoundEvent;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.CSeqHeader;
-import javax.sip.header.CallIdHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Component
-public class MessageRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
-
-    private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class);
-
-    private final String method = "MESSAGE";
-
-    private static Map<String, IMessageHandler> messageHandlerMap = new ConcurrentHashMap<>();
-
-    @Autowired
-    private SIPProcessorObserver sipProcessorObserver;
-
-    @Autowired
-    private IVideoManagerStorager storage;
-
-    @Autowired
-    private SipSubscribe sipSubscribe;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        // 添加消息处理的订阅
-        sipProcessorObserver.addRequestProcessor(method, this);
-    }
-
-    public void addHandler(String name, IMessageHandler handler) {
-        messageHandlerMap.put(name, handler);
-    }
-
-    @Override
-    public void process(RequestEvent evt) {
-        logger.debug("接收到消息:" + evt.getRequest());
-        String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
-        CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
-        // 查询设备是否存在
-        CSeqHeader cseqHeader = (CSeqHeader) evt.getRequest().getHeader(CSeqHeader.NAME);
-        String method = cseqHeader.getMethod();
-        Device device = redisCatchStorage.getDevice(deviceId);
-        // 查询上级平台是否存在
-        ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
-        try {
-            if (device == null && parentPlatform == null) {
-                // 不存在则回复404
-                responseAck(evt, Response.NOT_FOUND, "device "+ deviceId +" not found");
-                logger.warn("[设备未找到 ]: {}", deviceId);
-                if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){
-                    SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new DeviceNotFoundEvent(evt.getDialog()));
-                    sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()).response(eventResult);
-                };
-            }else {
-                Element rootElement = null;
-                try {
-                    rootElement = getRootElement(evt);
-                } catch (DocumentException e) {
-                    logger.warn("解析XML消息内容异常", e);
-                    // 不存在则回复404
-                    responseAck(evt, Response.BAD_REQUEST, e.getMessage());
-                }
-                String name = rootElement.getName();
-                IMessageHandler messageHandler = messageHandlerMap.get(name);
-                if (messageHandler != null) {
-                    if (device != null) {
-                        messageHandler.handForDevice(evt, device, rootElement);
-                    }else { // 由于上面已经判断都为null则直接返回,所以这里device和parentPlatform必有一个不为null
-                        messageHandler.handForPlatform(evt, parentPlatform, rootElement);
-                    }
-                }else {
-                    // 不支持的message
-                    // 不存在则回复415
-                    responseAck(evt, Response.UNSUPPORTED_MEDIA_TYPE, "Unsupported message type, must Control/Notify/Query/Response");
-                }
-            }
-        } catch (SipException e) {
-            logger.warn("SIP 回复错误", e);
-        } catch (InvalidArgumentException e) {
-            logger.warn("参数无效", e);
-        } catch (ParseException e) {
-            logger.warn("SIP回复时解析异常", e);
-        }
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/ControlMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/ControlMessageHandler.java
deleted file mode 100644
index 235a477..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/ControlMessageHandler.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control;
-
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageHandlerAbstract;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageRequestProcessor;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 命令类型: 控制命令
- * 命令类型: 设备控制: 远程启动, 录像控制(TODO), 报警布防/撤防命令(TODO), 报警复位命令(TODO),
- *                   强制关键帧命令(TODO), 拉框放大/缩小控制命令(TODO), 看守位控制(TODO), 报警复位(TODO)
- * 命令类型: 设备配置: SVAC编码配置(TODO), 音频参数(TODO), SVAC解码配置(TODO)
- */
-@Component
-public class ControlMessageHandler extends MessageHandlerAbstract implements InitializingBean  {
-
-    private final String messageType = "Control";
-
-    @Autowired
-    private MessageRequestProcessor messageRequestProcessor;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        messageRequestProcessor.addHandler(messageType, this);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
deleted file mode 100644
index 980ec5d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control.cmd;
-
-import com.genersoft.iot.vmp.VManageBootstrap;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control.ControlMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.SpringBeanFactory;
-import gov.nist.javax.sip.SipStackImpl;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.ListeningPoint;
-import javax.sip.ObjectInUseException;
-import javax.sip.RequestEvent;
-import javax.sip.SipProvider;
-import javax.sip.address.SipURI;
-import javax.sip.header.HeaderAddress;
-import javax.sip.header.ToHeader;
-import java.util.Iterator;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceControlQueryMessageHandler.class);
-    private final String cmdType = "DeviceControl";
-
-    @Autowired
-    private ControlMessageHandler controlMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        controlMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        // 此处是上级发出的DeviceControl指令
-        String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
-        String channelId = getText(rootElement, "DeviceID");
-        // 远程启动功能
-        if (!StringUtils.isEmpty(getText(rootElement, "TeleBoot"))) {
-            if (parentPlatform.getServerGBId().equals(targetGBId)) {
-                // 远程启动本平台:需要在重新启动程序后先对SipStack解绑
-                logger.info("执行远程启动本平台命令");
-                cmderFroPlatform.unregister(parentPlatform, null, null);
-
-                Thread restartThread = new Thread(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            Thread.sleep(3000);
-                            SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
-                            SipStackImpl stack = (SipStackImpl)up.getSipStack();
-                            stack.stop();
-                            Iterator listener = stack.getListeningPoints();
-                            while (listener.hasNext()) {
-                                stack.deleteListeningPoint((ListeningPoint) listener.next());
-                            }
-                            Iterator providers = stack.getSipProviders();
-                            while (providers.hasNext()) {
-                                stack.deleteSipProvider((SipProvider) providers.next());
-                            }
-                            VManageBootstrap.restart();
-                        } catch (InterruptedException ignored) {
-                        } catch (ObjectInUseException e) {
-                            e.printStackTrace();
-                        }
-                    }
-                });
-
-                restartThread.setDaemon(false);
-                restartThread.start();
-            } else {
-                // 远程启动指定设备
-            }
-        }
-        // 云台/前端控制命令
-        if (!StringUtils.isEmpty(getText(rootElement,"PTZCmd")) && !parentPlatform.getServerGBId().equals(targetGBId)) {
-            String cmdString = getText(rootElement,"PTZCmd");
-            Device deviceForPlatform = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
-            cmder.fronEndCmd(deviceForPlatform, channelId, cmdString);
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/NotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/NotifyMessageHandler.java
deleted file mode 100644
index c546057..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/NotifyMessageHandler.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify;
-
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageHandlerAbstract;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageRequestProcessor;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 命令类型: 通知命令
- * 命令类型: 状态信息(心跳)报送, 报警通知, 媒体通知, 移动设备位置数据,语音广播通知(TODO), 设备预置位(TODO)
- */
-@Component
-public class NotifyMessageHandler extends MessageHandlerAbstract implements InitializingBean  {
-
-    private final String messageType = "Notify";
-
-    @Autowired
-    private MessageRequestProcessor messageRequestProcessor;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        messageRequestProcessor.addHandler(messageType, this);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
deleted file mode 100644
index 8f412f7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.GpsUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.RequestEvent;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.*;
-
-@Component
-public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
-    private final String cmdType = "Alarm";
-
-    @Autowired
-    private NotifyMessageHandler notifyMessageHandler;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private SipConfig sipConfig;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IDeviceAlarmService deviceAlarmService;
-
-    @Autowired
-    private DeviceOffLineDetector offLineDetector;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        notifyMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-        if (!sipConfig.isAlarm()) {
-            return;
-        }
-        Element deviceIdElement = rootElement.element("DeviceID");
-        String channelId = deviceIdElement.getText().toString();
-        DeviceAlarm deviceAlarm = new DeviceAlarm();
-        deviceAlarm.setDeviceId(device.getDeviceId());
-        deviceAlarm.setChannelId(channelId);
-        deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority"));
-        deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod"));
-        deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime"));
-        if (getText(rootElement, "AlarmDescription") == null) {
-            deviceAlarm.setAlarmDescription("");
-        } else {
-            deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription"));
-        }
-        if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) {
-            deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
-        } else {
-            deviceAlarm.setLongitude(0.00);
-        }
-        if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) {
-            deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
-        } else {
-            deviceAlarm.setLatitude(0.00);
-        }
-
-        if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) {
-            if ( deviceAlarm.getAlarmMethod().equals("4")) {
-                MobilePosition mobilePosition = new MobilePosition();
-                mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
-                mobilePosition.setTime(deviceAlarm.getAlarmTime());
-                mobilePosition.setLongitude(deviceAlarm.getLongitude());
-                mobilePosition.setLatitude(deviceAlarm.getLatitude());
-                mobilePosition.setReportSource("GPS Alarm");
-                BaiduPoint bp = new BaiduPoint();
-                bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
-                logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
-                mobilePosition.setGeodeticSystem("BD-09");
-                mobilePosition.setCnLng(bp.getBdLng());
-                mobilePosition.setCnLat(bp.getBdLat());
-                if (!userSetup.getSavePositionHistory()) {
-                    storager.clearMobilePositionsByDeviceId(device.getDeviceId());
-                }
-                storager.insertMobilePosition(mobilePosition);
-            }
-        }
-        if (!StringUtils.isEmpty(deviceAlarm.getDeviceId())) {
-            if (deviceAlarm.getAlarmMethod().equals("5")) {
-                deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType"));
-            }
-        }
-        logger.debug("存储报警信息、报警分类");
-        // 存储报警信息、报警分类
-        deviceAlarmService.add(deviceAlarm);
-
-        if (offLineDetector.isOnline(device.getDeviceId())) {
-            publisher.deviceAlarmEventPublish(deviceAlarm);
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
deleted file mode 100644
index 21f36b3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.List;
-
-@Component
-public class CatalogNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(CatalogNotifyMessageHandler.class);
-    private final String cmdType = "Catalog";
-
-    @Autowired
-    private NotifyMessageHandler notifyMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Autowired
-    private SipConfig config;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        notifyMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + parentPlatform.getServerGBId();
-        FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-        try {
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-            Element snElement = rootElement.element("SN");
-            String sn = snElement.getText();
-            // 准备回复通道信息
-            List<ChannelReduce> channelReduces = storager.queryChannelListInParentPlatform(parentPlatform.getServerGBId());
-            // 查询关联的直播通道
-            List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(parentPlatform.getServerGBId());
-            int size = channelReduces.size() + gbStreams.size();
-            // 回复目录信息
-            List<PlatformCatalog> catalogs =  storager.queryCatalogInPlatform(parentPlatform.getServerGBId());
-            if (catalogs.size() > 0) {
-                for (PlatformCatalog catalog : catalogs) {
-                    if (catalog.getParentId().equals(catalog.getPlatformId())) {
-                        catalog.setParentId(parentPlatform.getDeviceGBId());
-                    }
-                    DeviceChannel deviceChannel = new DeviceChannel();
-                    deviceChannel.setChannelId(catalog.getId());
-                    deviceChannel.setName(catalog.getName());
-                    deviceChannel.setLongitude(0.0);
-                    deviceChannel.setLatitude(0.0);
-                    deviceChannel.setDeviceId(parentPlatform.getDeviceGBId());
-                    deviceChannel.setManufacture("wvp-pro");
-                    deviceChannel.setStatus(1);
-                    deviceChannel.setParental(1);
-                    deviceChannel.setParentId(catalog.getParentId());
-                    deviceChannel.setRegisterWay(1);
-                    deviceChannel.setCivilCode(config.getDomain().substring(0, config.getDomain().length() - 2));
-                    deviceChannel.setModel("live");
-                    deviceChannel.setOwner("wvp-pro");
-                    deviceChannel.setSecrecy("0");
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            // 回复级联的通道
-            if (channelReduces.size() > 0) {
-                for (ChannelReduce channelReduce : channelReduces) {
-                    if (channelReduce.getCatalogId().equals(parentPlatform.getServerGBId())) {
-                        channelReduce.setCatalogId(parentPlatform.getDeviceGBId());
-                    }
-                    DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
-                    deviceChannel.setParental(0);
-                    deviceChannel.setParentId(channelReduce.getCatalogId());
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            // 回复直播的通道
-            if (gbStreams.size() > 0) {
-                for (GbStream gbStream : gbStreams) {
-                    if (gbStream.getCatalogId().equals(parentPlatform.getServerGBId())) {
-                        gbStream.setCatalogId(null);
-                    }
-                    DeviceChannel deviceChannel = new DeviceChannel();
-                    deviceChannel.setChannelId(gbStream.getGbId());
-                    deviceChannel.setName(gbStream.getName());
-                    deviceChannel.setLongitude(gbStream.getLongitude());
-                    deviceChannel.setLatitude(gbStream.getLatitude());
-                    deviceChannel.setDeviceId(parentPlatform.getDeviceGBId());
-                    deviceChannel.setManufacture("wvp-pro");
-                    deviceChannel.setStatus(gbStream.isStatus()?1:0);
-    				deviceChannel.setParentId(gbStream.getCatalogId());
-                    deviceChannel.setRegisterWay(1);
-                    deviceChannel.setCivilCode(config.getDomain().substring(0, config.getDomain().length() - 2));
-                    deviceChannel.setModel("live");
-                    deviceChannel.setOwner("wvp-pro");
-                    deviceChannel.setParental(0);
-                    deviceChannel.setSecrecy("0");
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            if (size == 0) {
-                // 回复无通道
-                cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size);
-            }
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
deleted file mode 100644
index edd9fe8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
-import com.genersoft.iot.vmp.service.IDeviceService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import springfox.documentation.service.Header;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-@Component
-public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(KeepaliveNotifyMessageHandler.class);
-    private final String cmdType = "Keepalive";
-
-    @Autowired
-    private NotifyMessageHandler notifyMessageHandler;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    private IVideoManagerStorager videoManagerStorager;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        notifyMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        // 检查设备是否存在并在线, 不在线则设置为在线
-        try {
-            if (device != null ) {
-                // 回复200 OK
-                responseAck(evt, Response.OK);
-                // 判断RPort是否改变,改变则说明路由nat信息变化,修改设备信息
-                // 获取到通信地址等信息
-                ViaHeader viaHeader = (ViaHeader) evt.getRequest().getHeader(ViaHeader.NAME);
-                String received = viaHeader.getReceived();
-                int rPort = viaHeader.getRPort();
-                // 解析本地地址替代
-                if (StringUtils.isEmpty(received) || rPort == -1) {
-                    received = viaHeader.getHost();
-                    rPort = viaHeader.getPort();
-                }
-                if (device.getPort() != rPort) {
-                    device.setPort(rPort);
-                    device.setHostAddress(received.concat(":").concat(String.valueOf(rPort)));
-                    videoManagerStorager.updateDevice(device);
-                    redisCatchStorage.updateDevice(device);
-                }
-                publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
-            }
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-        // 不会收到上级平台的心跳信息
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java
deleted file mode 100644
index 8235ade..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.CallIdHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class MediaStatusNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(MediaStatusNotifyMessageHandler.class);
-    private final String cmdType = "MediaStatus";
-
-    @Autowired
-    private NotifyMessageHandler notifyMessageHandler;
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        notifyMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-
-        // 回复200 OK
-        try {
-            responseAck(evt, Response.OK);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
-        String NotifyType =getText(rootElement, "NotifyType");
-        if (NotifyType.equals("121")){
-            logger.info("媒体播放完毕,通知关流");
-            String channelId =getText(rootElement, "DeviceID");
-            redisCatchStorage.stopPlayback(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
-            cmder.streamByeCmd(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
-            // TODO 如果级联播放,需要给上级发送此通知
-
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java
deleted file mode 100644
index ab7e5f6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.BaiduPoint;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.GpsUtil;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(MobilePositionNotifyMessageHandler.class);
-    private final String cmdType = "MobilePosition";
-
-    @Autowired
-    private NotifyMessageHandler notifyMessageHandler;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        notifyMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-
-        try {
-            rootElement = getRootElement(evt, device.getCharset());
-
-            MobilePosition mobilePosition = new MobilePosition();
-            if (!StringUtils.isEmpty(device.getName())) {
-                mobilePosition.setDeviceName(device.getName());
-            }
-            mobilePosition.setDeviceId(device.getDeviceId());
-            mobilePosition.setChannelId(getText(rootElement, "DeviceID"));
-            mobilePosition.setTime(getText(rootElement, "Time"));
-            mobilePosition.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
-            mobilePosition.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
-            if (NumericUtil.isDouble(getText(rootElement, "Speed"))) {
-                mobilePosition.setSpeed(Double.parseDouble(getText(rootElement, "Speed")));
-            } else {
-                mobilePosition.setSpeed(0.0);
-            }
-            if (NumericUtil.isDouble(getText(rootElement, "Direction"))) {
-                mobilePosition.setDirection(Double.parseDouble(getText(rootElement, "Direction")));
-            } else {
-                mobilePosition.setDirection(0.0);
-            }
-            if (NumericUtil.isDouble(getText(rootElement, "Altitude"))) {
-                mobilePosition.setAltitude(Double.parseDouble(getText(rootElement, "Altitude")));
-            } else {
-                mobilePosition.setAltitude(0.0);
-            }
-            mobilePosition.setReportSource("Mobile Position");
-            BaiduPoint bp = new BaiduPoint();
-            bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
-            logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
-            mobilePosition.setGeodeticSystem("BD-09");
-            mobilePosition.setCnLng(bp.getBdLng());
-            mobilePosition.setCnLat(bp.getBdLat());
-            if (!userSetup.getSavePositionHistory()) {
-                storager.clearMobilePositionsByDeviceId(device.getDeviceId());
-            }
-            storager.insertMobilePosition(mobilePosition);
-            //回复 200 OK
-            responseAck(evt, Response.OK);
-        } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/QueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/QueryMessageHandler.java
deleted file mode 100644
index 9a29955..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/QueryMessageHandler.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query;
-
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageHandlerAbstract;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageRequestProcessor;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 命令类型: 查询指令
- * 命令类型: 设备状态, 设备目录信息, 设备信息, 文件目录检索(TODO), 报警(TODO), 设备配置(TODO), 设备预置位(TODO), 移动设备位置数据(TODO)
- */
-@Component
-public class QueryMessageHandler extends MessageHandlerAbstract implements InitializingBean  {
-
-    private final String messageType = "Query";
-
-    @Autowired
-    private MessageRequestProcessor messageRequestProcessor;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        messageRequestProcessor.addHandler(messageType, this);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/AlarmQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/AlarmQueryMessageHandler.java
deleted file mode 100644
index 60cf4d0..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/AlarmQueryMessageHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.List;
-
-@Component
-public class AlarmQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(AlarmQueryMessageHandler.class);
-    private final String cmdType = "Alarm";
-
-    @Autowired
-    private QueryMessageHandler queryMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        queryMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        logger.info("不支持alarm查询");
-        try {
-            responseAck(evt, Response.NOT_FOUND, "not support alarm query");
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
deleted file mode 100644
index 925a21e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.List;
-
-@Component
-public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(CatalogQueryMessageHandler.class);
-    private final String cmdType = "Catalog";
-
-    @Autowired
-    private QueryMessageHandler queryMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        queryMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + parentPlatform.getServerGBId();
-        FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-        try {
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-            Element snElement = rootElement.element("SN");
-            String sn = snElement.getText();
-            // 准备回复通道信息
-            List<ChannelReduce> channelReduces = storager.queryChannelListInParentPlatform(parentPlatform.getServerGBId());
-            // 查询关联的直播通道
-            List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(parentPlatform.getServerGBId());
-            // 回复目录信息
-            List<PlatformCatalog> catalogs =  storager.queryCatalogInPlatform(parentPlatform.getServerGBId());
-            int size = catalogs.size() + channelReduces.size() + gbStreams.size();
-            if (catalogs.size() > 0) {
-                for (PlatformCatalog catalog : catalogs) {
-                    if (catalog.getParentId().equals(parentPlatform.getServerGBId())) {
-                        catalog.setParentId(parentPlatform.getDeviceGBId());
-                    }
-                    DeviceChannel deviceChannel = new DeviceChannel();
-                    deviceChannel.setChannelId(catalog.getId());
-                    deviceChannel.setName(catalog.getName());
-                    deviceChannel.setLongitude(0.0);
-                    deviceChannel.setLatitude(0.0);
-                    deviceChannel.setDeviceId(parentPlatform.getDeviceGBId());
-                    deviceChannel.setManufacture("wvp-pro");
-                    deviceChannel.setStatus(1);
-                    deviceChannel.setParental(1);
-                    deviceChannel.setParentId(catalog.getParentId());
-                    deviceChannel.setRegisterWay(1);
-                    deviceChannel.setCivilCode(config.getDomain().substring(0, config.getDomain().length() - 2));
-                    deviceChannel.setModel("live");
-                    deviceChannel.setOwner("wvp-pro");
-                    deviceChannel.setSecrecy("0");
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            // 回复级联的通道
-            if (channelReduces.size() > 0) {
-                for (ChannelReduce channelReduce : channelReduces) {
-                    if (channelReduce.getCatalogId().equals(parentPlatform.getServerGBId())) {
-                        channelReduce.setCatalogId(parentPlatform.getDeviceGBId());
-                    }
-                    DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
-                    deviceChannel.setParental(0);
-                    deviceChannel.setParentId(channelReduce.getCatalogId());
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            // 回复直播的通道
-            if (gbStreams.size() > 0) {
-                for (GbStream gbStream : gbStreams) {
-                    if (gbStream.getCatalogId().equals(parentPlatform.getServerGBId())) {
-                        gbStream.setCatalogId(parentPlatform.getDeviceGBId());
-                    }
-                    DeviceChannel deviceChannel = new DeviceChannel();
-                    deviceChannel.setChannelId(gbStream.getGbId());
-                    deviceChannel.setName(gbStream.getName());
-                    deviceChannel.setLongitude(gbStream.getLongitude());
-                    deviceChannel.setLatitude(gbStream.getLatitude());
-                    deviceChannel.setDeviceId(parentPlatform.getDeviceGBId());
-                    deviceChannel.setManufacture("wvp-pro");
-                    deviceChannel.setStatus(gbStream.isStatus()?1:0);
-                    deviceChannel.setParentId(gbStream.getCatalogId());
-                    deviceChannel.setRegisterWay(1);
-                    deviceChannel.setCivilCode(config.getDomain().substring(0, config.getDomain().length() - 2));
-                    deviceChannel.setModel("live");
-                    deviceChannel.setOwner("wvp-pro");
-                    deviceChannel.setParental(0);
-                    deviceChannel.setSecrecy("0");
-
-                    cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
-                    // 防止发送过快
-                    Thread.sleep(100);
-                }
-            }
-            if (size == 0) {
-                // 回复无通道
-                cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size);
-            }
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java
deleted file mode 100644
index 8234cb1..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-@Component
-public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceInfoQueryMessageHandler.class);
-    private final String cmdType = "DeviceInfo";
-
-    @Autowired
-    private QueryMessageHandler queryMessageHandler;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        queryMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-        logger.info("接收到DeviceInfo查询消息");
-        FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-        try {
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        String sn = rootElement.element("SN").getText();
-        cmderFroPlatform.deviceInfoResponse(parentPlatform, sn, fromHeader.getTag());
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
deleted file mode 100644
index c56151c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-@Component
-public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceStatusQueryMessageHandler.class);
-    private final String cmdType = "DeviceStatus";
-
-    @Autowired
-    private QueryMessageHandler queryMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        queryMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        logger.info("接收到DeviceStatus查询消息");
-        FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-        // 回复200 OK
-        try {
-            responseAck(evt, Response.OK);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        String sn = rootElement.element("SN").getText();
-        cmderFroPlatform.deviceStatusResponse(parentPlatform, sn, fromHeader.getTag());
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
deleted file mode 100644
index 460f0f9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEventListener;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.header.FromHeader;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.List;
-
-@Component
-public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(RecordInfoQueryMessageHandler.class);
-    private final String cmdType = "RecordInfo";
-
-    @Autowired
-    private QueryMessageHandler queryMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommanderFroPlatform cmderFroPlatform;
-
-    @Autowired
-    private SIPCommander commander;
-
-    @Autowired
-    private RecordEndEventListener recordEndEventListener;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        queryMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-        FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
-
-        Element snElement = rootElement.element("SN");
-        int sn = Integer.parseInt(snElement.getText());
-        Element deviceIDElement = rootElement.element("DeviceID");
-        String channelId = deviceIDElement.getText();
-        Element startTimeElement = rootElement.element("StartTime");
-        String startTime = null;
-        if (startTimeElement != null) {
-            startTime = startTimeElement.getText();
-        }
-        Element endTimeElement = rootElement.element("EndTime");
-        String endTime = null;
-        if (endTimeElement != null) {
-            endTime = endTimeElement.getText();
-        }
-        Element secrecyElement = rootElement.element("Secrecy");
-        int secrecy = 0;
-        if (secrecyElement != null) {
-            secrecy = Integer.parseInt(secrecyElement.getText().trim());
-        }
-        String type = "all";
-        Element typeElement = rootElement.element("Type");
-        if (typeElement != null) {
-            type =  typeElement.getText();
-        }
-        // 确认是直播还是国标, 国标直接请求下级,直播请求录像管理服务
-        List<ChannelSourceInfo> channelSources = storager.getChannelSource(parentPlatform.getServerGBId(), channelId);
-
-        if (channelSources.get(0).getCount() > 0) { // 国标
-            // 向国标设备请求录像数据
-            Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
-            DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(parentPlatform.getServerGBId(), channelId);
-            // 接收录像数据
-            recordEndEventListener.addEndEventHandler(deviceChannel.getDeviceId(), channelId, (recordInfo)->{
-                cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, fromHeader.getTag(), recordInfo);
-            });
-            commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime),
-                    DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> {
-                        // 回复200 OK
-                        try {
-                            responseAck(evt, Response.OK);
-                        } catch (SipException e) {
-                            e.printStackTrace();
-                        } catch (InvalidArgumentException e) {
-                            e.printStackTrace();
-                        } catch (ParseException e) {
-                            e.printStackTrace();
-                        }
-                    }),(eventResult -> {
-                        // 查询失败
-                        try {
-                            responseAck(evt, eventResult.statusCode, eventResult.msg);
-                        } catch (SipException e) {
-                            e.printStackTrace();
-                        } catch (InvalidArgumentException e) {
-                            e.printStackTrace();
-                        } catch (ParseException e) {
-                            e.printStackTrace();
-                        }
-                    }));
-
-        }else if (channelSources.get(1).getCount() > 0) { // 直播流
-            // TODO
-            try {
-                responseAck(evt, Response.NOT_IMPLEMENTED); // 回复未实现
-            } catch (SipException e) {
-                e.printStackTrace();
-            } catch (InvalidArgumentException e) {
-                e.printStackTrace();
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
-        }else { // 错误的请求
-            try {
-                responseAck(evt, Response.BAD_REQUEST);
-            } catch (SipException e) {
-                e.printStackTrace();
-            } catch (InvalidArgumentException e) {
-                e.printStackTrace();
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/ResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/ResponseMessageHandler.java
deleted file mode 100644
index 18da9cd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/ResponseMessageHandler.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response;
-
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageHandlerAbstract;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.MessageRequestProcessor;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 命令类型: 请求动作的应答
- * 命令类型: 设备控制, 报警通知, 设备目录信息查询, 目录信息查询, 目录收到, 设备信息查询, 设备状态信息查询 ......
- */
-@Component
-public class ResponseMessageHandler extends MessageHandlerAbstract implements InitializingBean  {
-
-    private final String messageType = "Response";
-
-    @Autowired
-    private MessageRequestProcessor messageRequestProcessor;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        messageRequestProcessor.addHandler(messageType, this);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/AlarmResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/AlarmResponseMessageHandler.java
deleted file mode 100644
index 8492bd9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/AlarmResponseMessageHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.RequestEvent;
-
-@Component
-public class AlarmResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(AlarmResponseMessageHandler.class);
-    private final String cmdType = "Alarm";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-        Element deviceIdElement = rootElement.element("DeviceID");
-        String channelId = deviceIdElement.getText().toString();
-        String key = DeferredResultHolder.CALLBACK_CMD_ALARM + device.getDeviceId() + channelId;
-        JSONObject json = new JSONObject();
-        XmlUtil.node2Json(rootElement, json);
-        if (logger.isDebugEnabled()) {
-            logger.debug(json.toJSONString());
-        }
-        RequestMessage msg = new RequestMessage();
-        msg.setKey(key);
-        msg.setData(json);
-        deferredResultHolder.invokeAllResult(msg);
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/BroadcastResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/BroadcastResponseMessageHandler.java
deleted file mode 100644
index ac94655..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/BroadcastResponseMessageHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class BroadcastResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(BroadcastResponseMessageHandler.class);
-    private final String cmdType = "Broadcast";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-        try {
-            String channelId = getText(rootElement, "DeviceID");
-            String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId() + channelId;
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-            // 此处是对本平台发出Broadcast指令的应答
-            JSONObject json = new JSONObject();
-            XmlUtil.node2Json(rootElement, json);
-            if (logger.isDebugEnabled()) {
-                logger.debug(json.toJSONString());
-            }
-            RequestMessage msg = new RequestMessage();
-            msg.setKey(key);
-            msg.setData(json);
-            deferredResultHolder.invokeAllResult(msg);
-
-
-        } catch (ParseException | SipException | InvalidArgumentException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
deleted file mode 100644
index 62ec5e9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.session.CatalogDataCatch;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class CatalogResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(CatalogResponseMessageHandler.class);
-    private final String cmdType = "Catalog";
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Autowired
-    private CatalogDataCatch catalogDataCatch;
-
-    @Autowired
-    private DeviceOffLineDetector offLineDetector;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + device.getDeviceId();
-        Element rootElement = null;
-        try {
-            rootElement = getRootElement(evt, device.getCharset());
-            Element deviceListElement = rootElement.element("DeviceList");
-            Element sumNumElement = rootElement.element("SumNum");
-            if (sumNumElement == null || deviceListElement == null) {
-                responseAck(evt, Response.BAD_REQUEST, "xml error");
-                return;
-            }
-            int sumNum = Integer.parseInt(sumNumElement.getText());
-            if (sumNum == 0) {
-                // 数据已经完整接收
-                storager.cleanChannelsForDevice(device.getDeviceId());
-                RequestMessage msg = new RequestMessage();
-                msg.setKey(key);
-                WVPResult<Object> result = new WVPResult<>();
-                result.setCode(0);
-                result.setData(device);
-                msg.setData(result);
-                result.setMsg("更新成功,共0条");
-                deferredResultHolder.invokeAllResult(msg);
-                catalogDataCatch.del(key);
-            }else {
-                Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
-                if (deviceListIterator != null) {
-                    List<DeviceChannel> channelList = new ArrayList<>();
-                    // 遍历DeviceList
-                    while (deviceListIterator.hasNext()) {
-                        Element itemDevice = deviceListIterator.next();
-                        Element channelDeviceElement = itemDevice.element("DeviceID");
-                        if (channelDeviceElement == null) {
-                            continue;
-                        }
-                        DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice);
-                        deviceChannel.setDeviceId(device.getDeviceId());
-                        logger.debug("收到来自设备【{}】的通道: {}【{}】", device.getDeviceId(), deviceChannel.getName(), deviceChannel.getChannelId());
-                        channelList.add(deviceChannel);
-                    }
-
-                    catalogDataCatch.put(key, sumNum, device, channelList);
-                    if (catalogDataCatch.get(key).size() == sumNum) {
-                        // 数据已经完整接收
-                        boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key));
-                        RequestMessage msg = new RequestMessage();
-                        msg.setKey(key);
-                        WVPResult<Object> result = new WVPResult<>();
-                        result.setCode(0);
-                        result.setData(device);
-                        if (resetChannelsResult || sumNum ==0) {
-                            result.setMsg("更新成功,共" + sumNum + "条,已更新" + catalogDataCatch.get(key).size() + "条");
-                        }else {
-                            result.setMsg("接收成功,写入失败,共" + sumNum + "条,已接收" + catalogDataCatch.get(key).size() + "条");
-                        }
-                        msg.setData(result);
-                        deferredResultHolder.invokeAllResult(msg);
-                        catalogDataCatch.del(key);
-                    }
-                }
-                // 回复200 OK
-                responseAck(evt, Response.OK);
-                if (offLineDetector.isOnline(device.getDeviceId())) {
-                    publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
-                }
-            }
-        } catch (DocumentException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (SipException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/ConfigDownloadResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/ConfigDownloadResponseMessageHandler.java
deleted file mode 100644
index d1a2893..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/ConfigDownloadResponseMessageHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class ConfigDownloadResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(ConfigDownloadResponseMessageHandler.class);
-    private final String cmdType = "ConfigDownload";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        String channelId = getText(element, "DeviceID");
-        String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + device.getDeviceId() + channelId;
-        try {
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-            // 此处是对本平台发出DeviceControl指令的应答
-            JSONObject json = new JSONObject();
-            XmlUtil.node2Json(element, json);
-            if (logger.isDebugEnabled()) {
-                logger.debug(json.toJSONString());
-            }
-            RequestMessage msg = new RequestMessage();
-            msg.setKey(key);
-            msg.setData(json);
-            deferredResultHolder.invokeAllResult(msg);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-        // 不会收到上级平台的心跳信息
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceConfigResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceConfigResponseMessageHandler.java
deleted file mode 100644
index 68ffe39..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceConfigResponseMessageHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.RequestEvent;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class DeviceConfigResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceConfigResponseMessageHandler.class);
-    private final String cmdType = "DeviceConfig";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        JSONObject json = new JSONObject();
-        XmlUtil.node2Json(element, json);
-        String channelId = getText(element, "DeviceID");
-        if (logger.isDebugEnabled()) {
-            logger.debug(json.toJSONString());
-        }
-        String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + device.getDeviceId() + channelId;
-        RequestMessage msg = new RequestMessage();
-        msg.setKey(key);
-        msg.setData(json);
-        deferredResultHolder.invokeAllResult(msg);
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceControlResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceControlResponseMessageHandler.java
deleted file mode 100644
index 0c9b835..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceControlResponseMessageHandler.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class DeviceControlResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceControlResponseMessageHandler.class);
-    private final String cmdType = "DeviceControl";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        // 此处是对本平台发出DeviceControl指令的应答
-        try {
-            responseAck(evt, Response.OK);
-            JSONObject json = new JSONObject();
-            String channelId = getText(element, "DeviceID");
-            XmlUtil.node2Json(element, json);
-            if (logger.isDebugEnabled()) {
-                logger.debug(json.toJSONString());
-            }
-            RequestMessage msg = new RequestMessage();
-            String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL +  device.getDeviceId() + channelId;
-            msg.setKey(key);
-            msg.setData(json);
-            deferredResultHolder.invokeAllResult(msg);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java
deleted file mode 100644
index 78fc936..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceInfoResponseMessageHandler.class);
-    private final String cmdType = "DeviceInfo";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Autowired
-    private DeviceOffLineDetector offLineDetector;
-
-    @Autowired
-    private SipConfig config;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-        logger.debug("接收到DeviceInfo应答消息");
-        try {
-            rootElement = getRootElement(evt, device.getCharset());
-            Element deviceIdElement = rootElement.element("DeviceID");
-            String channelId = deviceIdElement.getTextTrim();
-            String key = DeferredResultHolder.CALLBACK_CMD_DEVICEINFO + device.getDeviceId() + channelId;
-            device.setName(getText(rootElement, "DeviceName"));
-
-            device.setManufacturer(getText(rootElement, "Manufacturer"));
-            device.setModel(getText(rootElement, "Model"));
-            device.setFirmware(getText(rootElement, "Firmware"));
-            if (StringUtils.isEmpty(device.getStreamMode())) {
-                device.setStreamMode("UDP");
-            }
-            storager.updateDevice(device);
-
-            RequestMessage msg = new RequestMessage();
-            msg.setKey(key);
-            msg.setData(device);
-            deferredResultHolder.invokeAllResult(msg);
-            // 回复200 OK
-            responseAck(evt, Response.OK);
-            if (offLineDetector.isOnline(device.getDeviceId())) {
-                publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
-            }
-        } catch (DocumentException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (SipException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java
deleted file mode 100644
index 1a7ab64..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-@Component
-public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(DeviceStatusResponseMessageHandler.class);
-    private final String cmdType = "DeviceStatus";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private DeviceOffLineDetector offLineDetector;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element element) {
-        logger.info("接收到DeviceStatus应答消息");
-        // 检查设备是否存在, 不存在则不回复
-        // 回复200 OK
-        try {
-            responseAck(evt, Response.OK);
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        Element deviceIdElement = element.element("DeviceID");
-        String channelId = deviceIdElement.getText();
-        JSONObject json = new JSONObject();
-        XmlUtil.node2Json(element, json);
-        if (logger.isDebugEnabled()) {
-            logger.debug(json.toJSONString());
-        }
-        RequestMessage msg = new RequestMessage();
-        msg.setKey(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + device.getDeviceId() + channelId);
-        msg.setData(json);
-        deferredResultHolder.invokeAllResult(msg);
-
-        if (offLineDetector.isOnline(device.getDeviceId())) {
-            publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
-        } else {
-
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
-
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java
deleted file mode 100644
index b456386..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.BaiduPoint;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.GpsUtil;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class MobilePositionResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(MobilePositionResponseMessageHandler.class);
-    private final String cmdType = "MobilePosition";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-
-        try {
-            rootElement = getRootElement(evt, device.getCharset());
-
-            MobilePosition mobilePosition = new MobilePosition();
-            if (!StringUtils.isEmpty(device.getName())) {
-                mobilePosition.setDeviceName(device.getName());
-            }
-            mobilePosition.setDeviceId(device.getDeviceId());
-            mobilePosition.setChannelId(getText(rootElement, "DeviceID"));
-            mobilePosition.setTime(getText(rootElement, "Time"));
-            mobilePosition.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
-            mobilePosition.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
-            if (NumericUtil.isDouble(getText(rootElement, "Speed"))) {
-                mobilePosition.setSpeed(Double.parseDouble(getText(rootElement, "Speed")));
-            } else {
-                mobilePosition.setSpeed(0.0);
-            }
-            if (NumericUtil.isDouble(getText(rootElement, "Direction"))) {
-                mobilePosition.setDirection(Double.parseDouble(getText(rootElement, "Direction")));
-            } else {
-                mobilePosition.setDirection(0.0);
-            }
-            if (NumericUtil.isDouble(getText(rootElement, "Altitude"))) {
-                mobilePosition.setAltitude(Double.parseDouble(getText(rootElement, "Altitude")));
-            } else {
-                mobilePosition.setAltitude(0.0);
-            }
-            mobilePosition.setReportSource("Mobile Position");
-            BaiduPoint bp = new BaiduPoint();
-            bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
-            logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
-            mobilePosition.setGeodeticSystem("BD-09");
-            mobilePosition.setCnLng(bp.getBdLng());
-            mobilePosition.setCnLat(bp.getBdLat());
-            if (!userSetup.getSavePositionHistory()) {
-                storager.clearMobilePositionsByDeviceId(device.getDeviceId());
-            }
-            storager.insertMobilePosition(mobilePosition);
-            //回复 200 OK
-            responseAck(evt, Response.OK);
-        } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
deleted file mode 100644
index 45b7e56..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.CheckForAllRecordsThread;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.SipException;
-import javax.sip.message.Response;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
-
-import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
-
-@Component
-public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
-
-    private Logger logger = LoggerFactory.getLogger(RecordInfoResponseMessageHandler.class);
-    public static volatile List<String> threadNameList = new ArrayList();
-    private final String cmdType = "RecordInfo";
-    private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_";
-
-    @Autowired
-    private ResponseMessageHandler responseMessageHandler;
-
-    @Autowired
-    private RedisUtil redis;
-
-    @Autowired
-    private DeferredResultHolder deferredResultHolder;
-
-    @Autowired
-    private EventPublisher eventPublisher;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        responseMessageHandler.addHandler(cmdType, this);
-    }
-
-    @Override
-    public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
-
-        // 回复200 OK
-        try {
-            responseAck(evt, Response.OK);
-
-            rootElement = getRootElement(evt, device.getCharset());
-            String uuid = UUID.randomUUID().toString().replace("-", "");
-            RecordInfo recordInfo = new RecordInfo();
-            String sn = getText(rootElement, "SN");
-            String key = DeferredResultHolder.CALLBACK_CMD_RECORDINFO + device.getDeviceId() + sn;
-            recordInfo.setDeviceId(device.getDeviceId());
-            recordInfo.setSn(sn);
-            recordInfo.setName(getText(rootElement, "Name"));
-            if (getText(rootElement, "SumNum") == null || getText(rootElement, "SumNum") == "") {
-                recordInfo.setSumNum(0);
-            } else {
-                recordInfo.setSumNum(Integer.parseInt(getText(rootElement, "SumNum")));
-            }
-            Element recordListElement = rootElement.element("RecordList");
-            if (recordListElement == null || recordInfo.getSumNum() == 0) {
-                logger.info("无录像数据");
-                eventPublisher.recordEndEventPush(recordInfo);
-                RequestMessage msg = new RequestMessage();
-                msg.setKey(key);
-                msg.setData(recordInfo);
-                deferredResultHolder.invokeAllResult(msg);
-            } else {
-                Iterator<Element> recordListIterator = recordListElement.elementIterator();
-                List<RecordItem> recordList = new ArrayList<RecordItem>();
-                if (recordListIterator != null) {
-                    RecordItem record = new RecordItem();
-                    logger.info("处理录像列表数据...");
-                    // 遍历DeviceList
-                    while (recordListIterator.hasNext()) {
-                        Element itemRecord = recordListIterator.next();
-                        Element recordElement = itemRecord.element("DeviceID");
-                        if (recordElement == null) {
-                            logger.info("记录为空,下一个...");
-                            continue;
-                        }
-                        record = new RecordItem();
-                        record.setDeviceId(getText(itemRecord, "DeviceID"));
-                        record.setName(getText(itemRecord, "Name"));
-                        record.setFilePath(getText(itemRecord, "FilePath"));
-                        record.setFileSize(getText(itemRecord, "FileSize"));
-                        record.setAddress(getText(itemRecord, "Address"));
-                        record.setStartTime(
-                                DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "StartTime")));
-                        record.setEndTime(
-                                DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "EndTime")));
-                        record.setSecrecy(itemRecord.element("Secrecy") == null ? 0
-                                : Integer.parseInt(getText(itemRecord, "Secrecy")));
-                        record.setType(getText(itemRecord, "Type"));
-                        record.setRecorderId(getText(itemRecord, "RecorderID"));
-                        recordList.add(record);
-                    }
-                    recordInfo.setRecordList(recordList);
-                }
-                eventPublisher.recordEndEventPush(recordInfo);
-                // 改用单独线程统计已获取录像文件数量,避免多包并行分别统计不完整的问题
-                String cacheKey = CACHE_RECORDINFO_KEY + device.getDeviceId() + sn;
-                redis.set(cacheKey + "_" + uuid, recordList, 90);
-                if (!threadNameList.contains(cacheKey)) {
-                    threadNameList.add(cacheKey);
-                    CheckForAllRecordsThread chk = new CheckForAllRecordsThread(cacheKey, recordInfo);
-                    chk.setName(cacheKey);
-                    chk.setDeferredResultHolder(deferredResultHolder);
-                    chk.setRedis(redis);
-                    chk.setLogger(logger);
-                    chk.start();
-                    if (logger.isDebugEnabled()) {
-                        logger.debug("Start Thread " + cacheKey + ".");
-                    }
-                } else {
-                    if (logger.isDebugEnabled()) {
-                        logger.debug("Thread " + cacheKey + " already started.");
-                    }
-                }
-            }
-        } catch (SipException e) {
-            e.printStackTrace();
-        } catch (InvalidArgumentException e) {
-            e.printStackTrace();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        } catch (DocumentException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/ISIPResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/ISIPResponseProcessor.java
deleted file mode 100644
index 50fb202..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/ISIPResponseProcessor.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response;
-
-import javax.sip.ResponseEvent;
-
-/**    
- * @description:处理接收IPCamera发来的SIP协议响应消息
- * @author: swwheihei
- * @date:   2020年5月3日 下午4:42:22     
- */
-public interface ISIPResponseProcessor {
-
-	void process(ResponseEvent evt);
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/SIPResponseProcessorAbstract.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/SIPResponseProcessorAbstract.java
deleted file mode 100644
index 9f2a10b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/SIPResponseProcessorAbstract.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response;
-
-import org.springframework.beans.factory.InitializingBean;
-
-public abstract class SIPResponseProcessorAbstract implements InitializingBean, ISIPResponseProcessor {
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/ByeResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/ByeResponseProcessor.java
deleted file mode 100644
index 64933b8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/ByeResponseProcessor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.SipLayer;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.ResponseEvent;
-
-/**    
- * @description: BYE请求响应器
- * @author: swwheihei
- * @date:   2020年5月3日 下午5:32:05     
- */
-@Component
-public class ByeResponseProcessor extends SIPResponseProcessorAbstract {
-
-	private String method = "BYE";
-
-	@Autowired
-	private SipLayer sipLayer;
-
-	@Autowired
-	private SipConfig config;
-
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addResponseProcessor(method, this);
-	}
-	/**
-	 * 处理BYE响应
-	 * 
-	 * @param evt
-	 */
-	@Override
-	public void process(ResponseEvent evt) {
-		// TODO Auto-generated method stub
-	}
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/CancelResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/CancelResponseProcessor.java
deleted file mode 100644
index 80d7e2b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/CancelResponseProcessor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.SipLayer;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.ResponseEvent;
-
-/**    
- * @description: CANCEL响应处理器
- * @author: panlinlin
- * @date:   2021年11月5日 16:35
- */
-@Component
-public class CancelResponseProcessor extends SIPResponseProcessorAbstract {
-
-	private String method = "CANCEL";
-
-	@Autowired
-	private SipLayer sipLayer;
-
-	@Autowired
-	private SipConfig config;
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addResponseProcessor(method, this);
-	}
-	/**   
-	 * 处理CANCEL响应
-	 *  
-	 * @param evt
-	 */
-	@Override
-	public void process(ResponseEvent evt) {
-		// TODO Auto-generated method stub
-		
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
deleted file mode 100644
index 1b5081b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.SipLayer;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
-import gov.nist.javax.sip.ResponseEventExt;
-import gov.nist.javax.sip.stack.SIPDialog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.InvalidArgumentException;
-import javax.sip.ResponseEvent;
-import javax.sip.SipException;
-import javax.sip.address.SipURI;
-import javax.sip.header.CSeqHeader;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-import java.text.ParseException;
-
-
-/**
- * @description: 处理INVITE响应
- * @author: panlinlin
- * @date: 2021年11月5日 16:40
- */
-@Component
-public class InviteResponseProcessor extends SIPResponseProcessorAbstract {
-
-	private final static Logger logger = LoggerFactory.getLogger(InviteResponseProcessor.class);
-	private String method = "INVITE";
-
-	@Autowired
-	private SipLayer sipLayer;
-
-	@Autowired
-	private SipConfig config;
-
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addResponseProcessor(method, this);
-	}
-
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-
-	/**
-	 * 处理invite响应
-	 * 
-	 * @param evt 响应消息
-	 * @throws ParseException
-	 */
-	@Override
-	public void process(ResponseEvent evt ){
-		try {
-			Response response = evt.getResponse();
-			int statusCode = response.getStatusCode();
-			// trying不会回复
-			if (statusCode == Response.TRYING) {
-			}
-			// 成功响应
-			// 下发ack
-			if (statusCode == Response.OK) {
-				ResponseEventExt event = (ResponseEventExt)evt;
-				SIPDialog dialog = (SIPDialog)evt.getDialog();
-				CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
-				Request reqAck = dialog.createAck(cseq.getSeqNumber());
-				SipURI requestURI = (SipURI) reqAck.getRequestURI();
-				try {
-					requestURI.setHost(event.getRemoteIpAddress());
-				} catch (ParseException e) {
-					e.printStackTrace();
-				}
-				requestURI.setPort(event.getRemotePort());
-				reqAck.setRequestURI(requestURI);
-				logger.info("向 " + event.getRemoteIpAddress() + ":" + event.getRemotePort() + "回复ack");
-
-				dialog.sendAck(reqAck);
-
-			}
-		} catch (InvalidArgumentException | SipException e) {
-			e.printStackTrace();
-		}
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
deleted file mode 100644
index 6c33406..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.ResponseEvent;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.WWWAuthenticateHeader;
-import javax.sip.message.Response;
-
-/**    
- * @description:Register响应处理器
- * @author: swwheihei
- * @date:   2020年5月3日 下午5:32:23     
- */
-@Component
-public class RegisterResponseProcessor extends SIPResponseProcessorAbstract {
-
-	private Logger logger = LoggerFactory.getLogger(RegisterResponseProcessor.class);
-	private String method = "REGISTER";
-
-	@Autowired
-	private ISIPCommanderForPlatform sipCommanderForPlatform;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private SIPProcessorObserver sipProcessorObserver;
-
-	@Autowired
-	private SubscribeHolder subscribeHolder;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		// 添加消息处理的订阅
-		sipProcessorObserver.addResponseProcessor(method, this);
-	}
-
-	/**
-	 * 处理Register响应
-	 *
- 	 * @param evt 事件
-	 */
-	@Override
-	public void process(ResponseEvent evt) {
-		Response response = evt.getResponse();
-		CallIdHeader callIdHeader = (CallIdHeader) response.getHeader(CallIdHeader.NAME);
-		String callId = callIdHeader.getCallId();
-
-		String platformGBId = redisCatchStorage.queryPlatformRegisterInfo(callId);
-		if (platformGBId == null) {
-			logger.info(String.format("未找到callId: %s 的注册/注销平台id", callId ));
-			return;
-		}
-
-		ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(platformGBId);
-		if (parentPlatformCatch == null) {
-			logger.warn(String.format("收到 %s 的注册/注销%S请求, 但是平台缓存信息未查询到!!!", platformGBId, response.getStatusCode()));
-			return;
-		}
-		String action = parentPlatformCatch.getParentPlatform().getExpires().equals("0") ? "注销" : "注册";
-		logger.info(String.format("收到 %s %s的%S响应", platformGBId, action, response.getStatusCode() ));
-		ParentPlatform parentPlatform = parentPlatformCatch.getParentPlatform();
-		if (parentPlatform == null) {
-			logger.warn(String.format("收到 %s %s的%S请求, 但是平台信息未查询到!!!", platformGBId, action, response.getStatusCode()));
-			return;
-		}
-
-		if (response.getStatusCode() == 401) {
-			WWWAuthenticateHeader www = (WWWAuthenticateHeader)response.getHeader(WWWAuthenticateHeader.NAME);
-			sipCommanderForPlatform.register(parentPlatform, callId, www, null, null, true);
-		}else if (response.getStatusCode() == 200){
-			// 注册/注销成功
-			logger.info(String.format("%s %s成功", platformGBId, action));
-			redisCatchStorage.delPlatformRegisterInfo(callId);
-			redisCatchStorage.delPlatformCatchInfo(platformGBId);
-			// 取回Expires设置,避免注销过程中被置为0
-			ParentPlatform parentPlatformTmp = storager.queryParentPlatByServerGBId(platformGBId);
-			parentPlatformTmp.setStatus("注册".equals(action));
-			redisCatchStorage.updatePlatformRegister(parentPlatformTmp);
-			redisCatchStorage.updatePlatformKeepalive(parentPlatformTmp);
-			parentPlatformCatch.setParentPlatform(parentPlatformTmp);
-			redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-			storager.updateParentPlatformStatus(platformGBId, "注册".equals(action));
-			if ("注销".equals(action)) {
-				subscribeHolder.removeCatalogSubscribe(platformGBId);
-				subscribeHolder.removeMobilePositionSubscribe(platformGBId);
-			}
-		}
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/ITimeoutProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/ITimeoutProcessor.java
deleted file mode 100644
index e0bb1f8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/ITimeoutProcessor.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.timeout;
-
-import javax.sip.TimeoutEvent;
-
-public interface ITimeoutProcessor {
-    void process(TimeoutEvent event);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/impl/TimeoutProcessorImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/impl/TimeoutProcessorImpl.java
deleted file mode 100644
index 4165004..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/timeout/impl/TimeoutProcessorImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.timeout.impl;
-
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.timeout.ITimeoutProcessor;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.sip.TimeoutEvent;
-import javax.sip.header.CallIdHeader;
-
-@Component
-public class TimeoutProcessorImpl implements InitializingBean, ITimeoutProcessor {
-
-    @Autowired
-    private SIPProcessorObserver processorObserver;
-
-    @Autowired
-    private SipSubscribe sipSubscribe;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        processorObserver.addTimeoutProcessor(this);
-    }
-
-    @Override
-    public void process(TimeoutEvent event) {
-        // TODO Auto-generated method stub
-        CallIdHeader callIdHeader = event.getClientTransaction().getDialog().getCallId();
-        String callId = callIdHeader.getCallId();
-        SipSubscribe.Event errorSubscribe = sipSubscribe.getErrorSubscribe(callId);
-        SipSubscribe.EventResult<TimeoutEvent> timeoutEventEventResult = new SipSubscribe.EventResult<>(event);
-        errorSubscribe.response(timeoutEventEventResult);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java
deleted file mode 100644
index 402a661..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.utils;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-/**    
- * @description:时间工具类,主要处理ISO 8601格式转换
- * @author: swwheihei
- * @date:   2020年5月8日 下午3:24:42     
- */
-public class DateUtil {
-
-	//private static final String yyyy_MM_dd_T_HH_mm_ss_SSSXXX = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
-	private static final String yyyy_MM_dd_T_HH_mm_ss_SSSXXX = "yyyy-MM-dd'T'HH:mm:ss";
-    private static final String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
-    
-	public static String yyyy_MM_dd_HH_mm_ssToISO8601(String formatTime) {
-
-        SimpleDateFormat oldsdf = new SimpleDateFormat(yyyy_MM_dd_HH_mm_ss, Locale.getDefault());
-        SimpleDateFormat newsdf = new SimpleDateFormat(yyyy_MM_dd_T_HH_mm_ss_SSSXXX, Locale.getDefault());
-        try {
-            return newsdf.format(oldsdf.parse(formatTime));
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return "";
-    }
-	
-	public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) {
-
-        SimpleDateFormat oldsdf = new SimpleDateFormat(yyyy_MM_dd_T_HH_mm_ss_SSSXXX, Locale.getDefault());
-        SimpleDateFormat newsdf = new SimpleDateFormat(yyyy_MM_dd_HH_mm_ss, Locale.getDefault());
-        try {
-            return newsdf.format(oldsdf.parse(formatTime));
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return "";
-    }
-	
-	public static long yyyy_MM_dd_HH_mm_ssToTimestamp(String formatTime) {
-		SimpleDateFormat format=new SimpleDateFormat(yyyy_MM_dd_HH_mm_ss);
-		//设置要读取的时间字符串格式
-		Date date;
-		try {
-			date = format.parse(formatTime);
-			Long timestamp=date.getTime()/1000;
-			//转换为Date类
-			return timestamp;
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-		return 0;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/NumericUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/NumericUtil.java
deleted file mode 100644
index d990db9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/NumericUtil.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.utils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 数值格式判断和处理
- * @author lawrencehj
- * @date 2021年1月27日
- */
-public class NumericUtil {
-
-    private static Logger logger = LoggerFactory.getLogger(NumericUtil.class);
-
-    /**
-     * 判断是否Double格式
-     * @param str
-     * @return true/false
-     */
-    public static boolean isDouble(String str) {
-        try { 
-            Double num2 = Double.valueOf(str);
-//            logger.debug(num2 + " is a valid numeric string!");
-            return true;
-        } catch (Exception e) { 
-//            logger.debug(str + " is an invalid numeric string!");
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否Double格式
-     * @param str
-     * @return true/false
-     */
-    public static boolean isInteger(String str) {
-        try { 
-            int num2 = Integer.valueOf(str); 
-//            logger.debug(num2 + " is an integer!");
-            return true;
-        } catch (Exception e) { 
-//            logger.debug(str + " is not an integer!");
-            return false;
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
deleted file mode 100644
index 9dd0271..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.utils;
-
-import gov.nist.javax.sip.address.AddressImpl;
-import gov.nist.javax.sip.address.SipUri;
-
-import javax.sip.header.FromHeader;
-import javax.sip.message.Request;
-
-/**
- * @author panlinlin
- * @version 1.0.0
- * @description JAIN SIP的工具类
- * @createTime 2021年09月27日 15:12:00
- */
-public class SipUtils {
-
-    public static String getUserIdFromFromHeader(Request request) {
-        FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME);
-        return getUserIdFromFromHeader(fromHeader);
-    }
-
-    public static String getUserIdFromFromHeader(FromHeader fromHeader) {
-        AddressImpl address = (AddressImpl)fromHeader.getAddress();
-        SipUri uri = (SipUri) address.getURI();
-        return uri.getUser();
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
deleted file mode 100644
index 38dadbf..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
+++ /dev/null
@@ -1,272 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.utils;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import org.dom4j.Attribute;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-
-import javax.sip.RequestEvent;
-import javax.sip.message.Request;
-import java.io.ByteArrayInputStream;
-import java.io.StringReader;
-import java.util.*;
-
-/**
- * 基于dom4j的工具包
- * 
- * 
- */
-public class XmlUtil {
-    /**
-     * 日志服务
-     */
-    private static Logger LOG = LoggerFactory.getLogger(XmlUtil.class);
-
-    /**
-     * 解析XML为Document对象
-     * 
-     * @param xml 被解析的XMl
-     * 
-     * @return Document
-     */
-    public static Element parseXml(String xml) {
-        Document document = null;
-        //
-        StringReader sr = new StringReader(xml);
-        SAXReader saxReader = new SAXReader();
-        try {
-            document = saxReader.read(sr);
-        } catch (DocumentException e) {
-            LOG.error("解析失败", e);
-        }
-        return null == document ? null : document.getRootElement();
-    }
-
-    /**
-     * 获取element对象的text的值
-     * 
-     * @param em  节点的对象
-     * @param tag 节点的tag
-     * @return 节点
-     */
-    public static String getText(Element em, String tag) {
-        if (null == em) {
-            return null;
-        }
-        Element e = em.element(tag);
-        //
-        return null == e ? null : e.getText();
-    }
-
-    /**
-     * 递归解析xml节点,适用于 多节点数据
-     * 
-     * @param node     node
-     * @param nodeName nodeName
-     * @return List<Map<String, Object>>
-     */
-    public static List<Map<String, Object>> listNodes(Element node, String nodeName) {
-        if (null == node) {
-            return null;
-        }
-        // 初始化返回
-        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
-        // 首先获取当前节点的所有属性节点
-        List<Attribute> list = node.attributes();
-
-        Map<String, Object> map = null;
-        // 遍历属性节点
-        for (Attribute attribute : list) {
-            if (nodeName.equals(node.getName())) {
-                if (null == map) {
-                    map = new HashMap<String, Object>();
-                    listMap.add(map);
-                }
-                // 取到的节点属性放到map中
-                map.put(attribute.getName(), attribute.getValue());
-            }
-
-        }
-        // 遍历当前节点下的所有节点 ,nodeName 要解析的节点名称
-        // 使用递归
-        Iterator<Element> iterator = node.elementIterator();
-        while (iterator.hasNext()) {
-            Element e = iterator.next();
-            listMap.addAll(listNodes(e, nodeName));
-        }
-        return listMap;
-    }
-
-    /**
-     * xml转json
-     * 
-     * @param element
-     * @param json
-     */
-    public static void node2Json(Element element, JSONObject json) {
-        // 如果是属性
-        for (Object o : element.attributes()) {
-            Attribute attr = (Attribute) o;
-            if (!StringUtils.isEmpty(attr.getValue())) {
-                json.put("@" + attr.getName(), attr.getValue());
-            }
-        }
-        List<Element> chdEl = element.elements();
-        if (chdEl.isEmpty() && !StringUtils.isEmpty(element.getText())) {// 如果没有子元素,只有一个值
-            json.put(element.getName(), element.getText());
-        }
-
-        for (Element e : chdEl) {   // 有子元素
-            if (!e.elements().isEmpty()) {  // 子元素也有子元素
-                JSONObject chdjson = new JSONObject();
-                node2Json(e, chdjson);
-                Object o = json.get(e.getName());
-                if (o != null) {
-                    JSONArray jsona = null;
-                    if (o instanceof JSONObject) {  // 如果此元素已存在,则转为jsonArray
-                        JSONObject jsono = (JSONObject) o;
-                        json.remove(e.getName());
-                        jsona = new JSONArray();
-                        jsona.add(jsono);
-                        jsona.add(chdjson);
-                    }
-                    if (o instanceof JSONArray) {
-                        jsona = (JSONArray) o;
-                        jsona.add(chdjson);
-                    }
-                    json.put(e.getName(), jsona);
-                } else {
-                    if (!chdjson.isEmpty()) {
-                        json.put(e.getName(), chdjson);
-                    }
-                }
-            } else { // 子元素没有子元素
-                for (Object o : element.attributes()) {
-                    Attribute attr = (Attribute) o;
-                    if (!StringUtils.isEmpty(attr.getValue())) {
-                        json.put("@" + attr.getName(), attr.getValue());
-                    }
-                }
-                if (!e.getText().isEmpty()) {
-                    json.put(e.getName(), e.getText());
-                }
-            }
-        }
-    }
-    public static  Element getRootElement(RequestEvent evt) throws DocumentException {
-
-        return getRootElement(evt, "gb2312");
-    }
-
-    public static Element getRootElement(RequestEvent evt, String charset) throws DocumentException {
-        Request request = evt.getRequest();
-        return getRootElement(request.getRawContent(), charset);
-    }
-
-    public static Element getRootElement(byte[] content, String charset) throws DocumentException {
-        if (charset == null) {
-            charset = "gb2312";
-        }
-        SAXReader reader = new SAXReader();
-        reader.setEncoding(charset);
-        Document xml = reader.read(new ByteArrayInputStream(content));
-        return xml.getRootElement();
-    }
-
-    public static DeviceChannel channelContentHander(Element itemDevice){
-        Element channdelNameElement = itemDevice.element("Name");
-        String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
-        Element statusElement = itemDevice.element("Status");
-        String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
-        DeviceChannel deviceChannel = new DeviceChannel();
-        deviceChannel.setName(channelName);
-        Element channdelIdElement = itemDevice.element("DeviceID");
-        String channelId = channdelIdElement != null ? channdelIdElement.getTextTrim().toString() : "";
-        deviceChannel.setChannelId(channelId);
-        // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理
-        if (status.equals("ON") || status.equals("On") || status.equals("ONLINE") || status.equals("OK")) {
-            deviceChannel.setStatus(1);
-        }
-        if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
-            deviceChannel.setStatus(0);
-        }
-
-        deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
-        deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
-        deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
-        deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
-        deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
-        deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
-        if (XmlUtil.getText(itemDevice, "Parental") == null
-                || XmlUtil.getText(itemDevice, "Parental") == "") {
-            deviceChannel.setParental(0);
-        } else {
-            deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
-        }
-        deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
-        if (XmlUtil.getText(itemDevice, "SafetyWay") == null
-                || XmlUtil.getText(itemDevice, "SafetyWay") == "") {
-            deviceChannel.setSafetyWay(0);
-        } else {
-            deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
-        }
-        if (XmlUtil.getText(itemDevice, "RegisterWay") == null
-                || XmlUtil.getText(itemDevice, "RegisterWay") == "") {
-            deviceChannel.setRegisterWay(1);
-        } else {
-            deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
-        }
-        deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
-        if (XmlUtil.getText(itemDevice, "Certifiable") == null
-                || XmlUtil.getText(itemDevice, "Certifiable") == "") {
-            deviceChannel.setCertifiable(0);
-        } else {
-            deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
-        }
-        if (XmlUtil.getText(itemDevice, "ErrCode") == null
-                || XmlUtil.getText(itemDevice, "ErrCode") == "") {
-            deviceChannel.setErrCode(0);
-        } else {
-            deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
-        }
-        deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
-        deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
-        deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
-        if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") {
-            deviceChannel.setPort(0);
-        } else {
-            deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
-        }
-        deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
-        if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {
-            deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
-        } else {
-            deviceChannel.setLongitude(0.00);
-        }
-        if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
-            deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
-        } else {
-            deviceChannel.setLatitude(0.00);
-        }
-        if (XmlUtil.getText(itemDevice, "PTZType") == null || "".equals(XmlUtil.getText(itemDevice, "PTZType"))) {
-            //兼容INFO中的信息
-            Element info = itemDevice.element("Info");
-            if(XmlUtil.getText(info, "PTZType") == null || "".equals(XmlUtil.getText(info, "PTZType"))){
-                deviceChannel.setPTZType(0);
-            }else{
-                deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(info, "PTZType")));
-            }
-        } else {
-            deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
-        }
-        deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
-        return deviceChannel;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
deleted file mode 100644
index 487f38b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ /dev/null
@@ -1,546 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import com.alibaba.fastjson.JSON;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.MediaConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.media.zlm.dto.*;
-import com.genersoft.iot.vmp.service.*;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**    
- * @description:针对 ZLMediaServer的hook事件监听
- * @author: swwheihei
- * @date:   2020年5月8日 上午10:46:48     
- */
-@RestController
-@RequestMapping("/index/hook")
-public class ZLMHttpHookListener {
-
-	private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookListener.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IPlayService playService;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private IStreamProxyService streamProxyService;
-
-	@Autowired
-	private IStreamPushService streamPushService;
-
-	@Autowired
-	private IMediaService mediaService;
-
-	@Autowired
-	private EventPublisher eventPublisher;
-
-	 @Autowired
-	 private ZLMMediaListManager zlmMediaListManager;
-
-	@Autowired
-	private ZLMHttpHookSubscribe subscribe;
-
-	@Autowired
-	private UserSetup userSetup;
-
-	@Autowired
-	private VideoStreamSessionManager sessionManager;
-
-	/**
-	 * 服务器定时上报时间,上报间隔可配置,默认10s上报一次
-	 *
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_server_keepalive", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onServerKeepalive(@RequestBody JSONObject json){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_server_keepalive API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-
-		List<ZLMHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(ZLMHttpHookSubscribe.HookType.on_server_keepalive);
-		if (subscribes != null  && subscribes.size() > 0) {
-			for (ZLMHttpHookSubscribe.Event subscribe : subscribes) {
-				subscribe.response(null, json);
-			}
-		}
-
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-
-	/**
-	 * 流量统计事件,播放器或推流器断开时并且耗用流量超过特定阈值时会触发此事件,阈值通过配置文件general.flowThreshold配置;此事件对回复不敏感。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_flow_report", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onFlowReport(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_flow_report API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * 访问http文件服务器上hls之外的文件时触发。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_http_access", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onHttpAccess(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_http_access API 调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("err", "");
-		ret.put("path", "");
-		ret.put("second", 600);
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * 播放器鉴权事件,rtsp/rtmp/http-flv/ws-flv/hls的播放都将触发此鉴权事件。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_play", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onPlay(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_play API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_play, json);
-		if (subscribe != null ) {
-			MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-			if (mediaInfo != null) {
-				subscribe.response(mediaInfo, json);
-			}
-
-		}
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * rtsp/rtmp/rtp推流鉴权事件。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_publish", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onPublish(@RequestBody JSONObject json) {
-
-		logger.info("[ ZLM HOOK ]on_publish API调用,参数:" + json.toString());
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		ret.put("enable_hls", true);
-		String mediaServerId = json.getString("mediaServerId");
-		ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json);
-		if (subscribe != null) {
-			MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-			if (mediaInfo != null) {
-				subscribe.response(mediaInfo, json);
-			}else {
-				ret.put("code", 1);
-				ret.put("msg", "zlm not register");
-			}
-		}
-	 	String app = json.getString("app");
-	 	String stream = json.getString("stream");
-		if ("rtp".equals(app)) {
-			ret.put("enable_mp4", userSetup.getRecordSip());
-		}else {
-			ret.put("enable_mp4", userSetup.isRecordPushLive());
-		}
-		List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, stream);
-		if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) {
-			String deviceId = ssrcTransactionForAll.get(0).getDeviceId();
-			String channelId = ssrcTransactionForAll.get(0).getChannelId();
-			DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
-			if (deviceChannel != null) {
-				ret.put("enable_audio", deviceChannel.isHasAudio());
-			}
-		}
-		return new ResponseEntity<String>(ret.toString(), HttpStatus.OK);
-	}
-	
-	/**
-	 * 录制mp4完成后通知事件;此事件对回复不敏感。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_record_mp4", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onRecordMp4(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_record_mp4 API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * rtsp专用的鉴权事件,先触发on_rtsp_realm事件然后才会触发on_rtsp_auth事件。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_rtsp_realm", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onRtspRealm(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_rtsp_realm API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("realm", "");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	
-	/**
-	 * 该rtsp流是否开启rtsp专用方式的鉴权事件,开启后才会触发on_rtsp_auth事件。需要指出的是rtsp也支持url参数鉴权,它支持两种方式鉴权。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_rtsp_auth", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onRtspAuth(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_rtsp_auth API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("encrypted", false);
-		ret.put("passwd", "test");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * shell登录鉴权,ZLMediaKit提供简单的telnet调试方式,使用telnet 127.0.0.1 9000能进入MediaServer进程的shell界面。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_shell_login", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onShellLogin(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_shell_login API调用,参数:" + json.toString());
-		}
-		// TODO 如果是带有rtpstream则开启按需拉流
-		// String app = json.getString("app");
-		// String stream = json.getString("stream");
-		String mediaServerId = json.getString("mediaServerId");
-		ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_shell_login, json);
-		if (subscribe != null ) {
-			MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-			if (mediaInfo != null) {
-				subscribe.response(mediaInfo, json);
-			}
-
-		}
-
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * rtsp/rtmp流注册或注销时触发此事件;此事件对回复不敏感。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_stream_changed", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onStreamChanged(@RequestBody MediaItem item){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_stream_changed API调用,参数:" + JSONObject.toJSONString(item));
-		}
-		String mediaServerId = item.getMediaServerId();
-		JSONObject json = (JSONObject) JSON.toJSON(item);
-		ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json);
-		if (subscribe != null ) {
-			MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-			if (mediaInfo != null) {
-				subscribe.response(mediaInfo, json);
-			}
-
-		}
-		// 流消失移除redis play
-		String app = item.getApp();
-		String streamId = item.getStream();
-		String schema = item.getSchema();
-		List<MediaItem.MediaTrack> tracks = item.getTracks();
-		boolean regist = item.isRegist();
-		if ("rtmp".equals(schema)){
-			logger.info("on_stream_changed:注册->{}, app->{}, stream->{}", regist, app, streamId);
-			if (regist) {
-				mediaServerService.addCount(mediaServerId);
-			}else {
-				mediaServerService.removeCount(mediaServerId);
-			}
-			if (item.getOriginType() == OriginType.PULL.ordinal()
-					|| item.getOriginType() == OriginType.FFMPEG_PULL.ordinal()) {
-				// 设置拉流代理上线/离线
-				streamProxyService.updateStatus(regist, app, streamId);
-			}
-			if ("rtp".equals(app) && !regist ) {
-				StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
-				if (streamInfo!=null){
-					redisCatchStorage.stopPlay(streamInfo);
-					storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
-				}else{
-					streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-					if (streamInfo != null) {
-						redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(),
-								streamInfo.getStream(), null);
-					}
-
-				}
-			}else {
-				if (!"rtp".equals(app)){
-					String type = OriginType.values()[item.getOriginType()].getType();
-					MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-
-					if (mediaServerItem != null){
-						if (regist) {
-							StreamPushItem streamPushItem = null;
-							StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
-							item.setStreamInfo(streamInfoByAppAndStream);
-
-							redisCatchStorage.addStream(mediaServerItem, type, app, streamId, item);
-							if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
-									|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
-									|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
-								streamPushItem = zlmMediaListManager.addPush(item);
-							}
-
-							List<GbStream> gbStreams = new ArrayList<>();
-							if (streamPushItem == null || streamPushItem.getGbId() == null) {
-								GbStream gbStream = storager.getGbStream(app, streamId);
-								gbStreams.add(gbStream);
-							}else {
-								if (streamPushItem.getGbId() != null) {
-									gbStreams.add(streamPushItem);
-								}
-							}
-							if (gbStreams.size() > 0) {
-								eventPublisher.catalogEventPublishForStream(null, gbStreams, CatalogEvent.ON);
-							}
-
-						}else {
-							// 兼容流注销时类型从redis记录获取
-							MediaItem mediaItem = redisCatchStorage.getStreamInfo(app, streamId, mediaServerId);
-							if (mediaItem != null) {
-								type = OriginType.values()[mediaItem.getOriginType()].getType();
-								redisCatchStorage.removeStream(mediaServerItem.getId(), type, app, streamId);
-							}
-							GbStream gbStream = storager.getGbStream(app, streamId);
-							if (gbStream != null) {
-								eventPublisher.catalogEventPublishForStream(null, gbStream, CatalogEvent.OFF);
-							}
-							zlmMediaListManager.removeMedia(app, streamId);
-						}
-						if (type != null) {
-							// 发送流变化redis消息
-							JSONObject jsonObject = new JSONObject();
-							jsonObject.put("serverId", userSetup.getServerId());
-							jsonObject.put("app", app);
-							jsonObject.put("stream", streamId);
-							jsonObject.put("register", regist);
-							jsonObject.put("mediaServerId", mediaServerId);
-							redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
-						}
-					}
-				}
-			}
-		}
-
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * 流无人观看时事件,用户可以通过此事件选择是否关闭无人看的流。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onStreamNoneReader(@RequestBody JSONObject json){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_stream_none_reader API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		String streamId = json.getString("stream");
-		String app = json.getString("app");
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		if ("rtp".equals(app)){
-			ret.put("close", true);
-			StreamInfo streamInfoForPlayCatch = redisCatchStorage.queryPlayByStreamId(streamId);
-			if (streamInfoForPlayCatch != null) {
-				// 如果在给上级推流,也不停止。
-				if (redisCatchStorage.isChannelSendingRTP(streamInfoForPlayCatch.getChannelId())) {
-					ret.put("close", false);
-				} else {
-					cmder.streamByeCmd(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId(),
-							streamInfoForPlayCatch.getStream(), null);
-					redisCatchStorage.stopPlay(streamInfoForPlayCatch);
-					storager.stopPlay(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId());
-				}
-			}else{
-				StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null, streamId, null);
-				if (streamInfoForPlayBackCatch != null) {
-					cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(),
-							streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
-					redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(),
-							streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
-				}else {
-					StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null, streamId, null);
-					// 进行录像下载时无人观看不断流
-					if (streamInfoForDownload != null) {
-						ret.put("close", false);
-					}
-				}
-			}
-			MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-			if (mediaServerItem != null && mediaServerItem.getStreamNoneReaderDelayMS() == -1) {
-				ret.put("close", false);
-			}
-			return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-		}else {
-			StreamProxyItem streamProxyItem = streamProxyService.getStreamProxyByAppAndStream(app, streamId);
-			if (streamProxyItem != null && streamProxyItem.isEnable_remove_none_reader()) {
-				ret.put("close", true);
-				streamProxyService.del(app, streamId);
-				String url = streamProxyItem.getUrl() != null?streamProxyItem.getUrl():streamProxyItem.getSrc_url();
-				logger.info("[{}/{}]<-[{}] 拉流代理无人观看已经移除",  app, streamId, url);
-			}else {
-				ret.put("close", false);
-			}
-			return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-		}
-	}
-	
-	/**
-	 * 流未找到事件,用户可以在此事件触发时,立即去拉流,这样可以实现按需拉流;此事件对回复不敏感。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_stream_not_found", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onStreamNotFound(@RequestBody JSONObject json){
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_stream_not_found API调用,参数:" + json.toString());
-		}
-		String mediaServerId = json.getString("mediaServerId");
-		MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-		if (userSetup.isAutoApplyPlay() && mediaInfo != null && mediaInfo.isRtpEnable()) {
-			String app = json.getString("app");
-			String streamId = json.getString("stream");
-			if ("rtp".equals(app)) {
-				String[] s = streamId.split("_");
-				if (s.length == 2) {
-					String deviceId = s[0];
-					String channelId = s[1];
-					Device device = redisCatchStorage.getDevice(deviceId);
-					if (device != null) {
-						playService.play(mediaInfo,deviceId, channelId, null, null, null);
-					}
-				}
-			}
-		}
-
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<>(ret.toString(),HttpStatus.OK);
-	}
-	
-	/**
-	 * 服务器启动事件,可以用于监听服务器崩溃重启;此事件对回复不敏感。
-	 *  
-	 */
-	@ResponseBody
-	@PostMapping(value = "/on_server_started", produces = "application/json;charset=UTF-8")
-	public ResponseEntity<String> onServerStarted(HttpServletRequest request, @RequestBody JSONObject jsonObject){
-		
-		if (logger.isDebugEnabled()) {
-			logger.debug("[ ZLM HOOK ]on_server_started API调用,参数:" + jsonObject.toString());
-		}
-		String remoteAddr = request.getRemoteAddr();
-		jsonObject.put("ip", remoteAddr);
-		List<ZLMHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(ZLMHttpHookSubscribe.HookType.on_server_started);
-		if (subscribes != null  && subscribes.size() > 0) {
-			for (ZLMHttpHookSubscribe.Event subscribe : subscribes) {
-				subscribe.response(null, jsonObject);
-			}
-		}
-		JSONObject ret = new JSONObject();
-		ret.put("code", 0);
-		ret.put("msg", "success");
-		return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
deleted file mode 100644
index 84b36e3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import org.springframework.stereotype.Component;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * @description:针对 ZLMediaServer的hook事件订阅
- * @author: pan
- * @date:   2020年12月2日 21:17:32
- */
-@Component
-public class ZLMHttpHookSubscribe {
-
-    public enum HookType{
-        on_flow_report,
-        on_http_access,
-        on_play,
-        on_publish,
-        on_record_mp4,
-        on_rtsp_auth,
-        on_rtsp_realm,
-        on_shell_login,
-        on_stream_changed,
-        on_stream_none_reader,
-        on_stream_not_found,
-        on_server_started,
-        on_server_keepalive
-    }
-
-    public interface Event{
-        void response(MediaServerItem mediaServerItem, JSONObject response);
-    }
-
-    private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>();
-
-    public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) {
-        Map<JSONObject, Event> eventMap = allSubscribes.get(type);
-        if (eventMap == null) {
-            eventMap = new HashMap<JSONObject, Event>();
-            allSubscribes.put(type,eventMap);
-        }
-        eventMap.put(hookResponse, event);
-    }
-
-    public ZLMHttpHookSubscribe.Event getSubscribe(HookType type, JSONObject hookResponse) {
-        ZLMHttpHookSubscribe.Event event= null;
-        Map<JSONObject, Event> eventMap = allSubscribes.get(type);
-        if (eventMap == null) {
-            return null;
-        }
-        for (JSONObject key : eventMap.keySet()) {
-            Boolean result = null;
-            for (String s : key.keySet()) {
-                if (result == null) {
-                    result = key.getString(s).equals(hookResponse.getString(s));
-                }else {
-                    if (key.getString(s) == null) {
-                        continue;
-                    }
-                    result = result && key.getString(s).equals(hookResponse.getString(s));
-                }
-
-            }
-            if (null != result && result) {
-                event = eventMap.get(key);
-            }
-        }
-        return event;
-    }
-
-    public void removeSubscribe(HookType type, JSONObject hookResponse) {
-        Map<JSONObject, Event> eventMap = allSubscribes.get(type);
-        if (eventMap == null) {
-            return;
-        }
-
-        Set<Map.Entry<JSONObject, Event>> entries = eventMap.entrySet();
-        if (entries.size() > 0) {
-            for (Map.Entry<JSONObject, Event> entry : entries) {
-                JSONObject key = entry.getKey();
-                Boolean result = null;
-                for (String s : key.keySet()) {
-                    if (result == null) {
-                        result = key.getString(s).equals(hookResponse.getString(s));
-                    }else {
-                        if (key.getString(s) == null) continue;
-                        result = result && key.getString(s).equals(hookResponse.getString(s));
-                    }
-                }
-                if (null != result && result){
-                    entries.remove(entry);
-                }
-            }
-        }
-    }
-
-    /**
-     * 获取某个类型的所有的订阅
-     * @param type
-     * @return
-     */
-    public List<ZLMHttpHookSubscribe.Event> getSubscribes(HookType type) {
-        // ZLMHttpHookSubscribe.Event event= null;
-        Map<JSONObject, Event> eventMap = allSubscribes.get(type);
-        if (eventMap == null) {
-            return null;
-        }
-        List<ZLMHttpHookSubscribe.Event> result = new ArrayList<>();
-        for (JSONObject key : eventMap.keySet()) {
-            result.add(eventMap.get(key));
-        }
-        return result;
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
deleted file mode 100644
index fa4aa35..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
+++ /dev/null
@@ -1,233 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
-import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
-import com.genersoft.iot.vmp.storager.dao.StreamPushMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@Component
-public class ZLMMediaListManager {
-
-    private Logger logger = LoggerFactory.getLogger("ZLMMediaListManager");
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private GbStreamMapper gbStreamMapper;
-
-    @Autowired
-    private PlatformGbStreamMapper platformGbStreamMapper;
-
-    @Autowired
-    private IStreamPushService streamPushService;
-
-    @Autowired
-    private IStreamProxyService streamProxyService;
-
-    @Autowired
-    private StreamPushMapper streamPushMapper;
-
-    @Autowired
-    private ZLMHttpHookSubscribe subscribe;
-
-    @Autowired
-    private UserSetup userSetup;
-
-
-    public void updateMediaList(MediaServerItem mediaServerItem) {
-        storager.clearMediaList();
-
-        // 使用异步的当时更新媒体流列表
-        zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
-            if (mediaList == null) return;
-            String dataStr = mediaList.getString("data");
-
-            Integer code = mediaList.getInteger("code");
-            Map<String, StreamPushItem> result = new HashMap<>();
-            List<StreamPushItem> streamPushItems = null;
-            // 获取所有的国标关联
-//            List<GbStream> gbStreams = gbStreamMapper.selectAllByMediaServerId(mediaServerItem.getId());
-            if (code == 0 ) {
-                if (dataStr != null) {
-                    streamPushItems = streamPushService.handleJSON(dataStr, mediaServerItem);
-                }
-            }else {
-                logger.warn("更新视频流失败,错误code: " + code);
-            }
-
-            if (streamPushItems != null) {
-                storager.updateMediaList(streamPushItems);
-                for (StreamPushItem streamPushItem : streamPushItems) {
-                    JSONObject jsonObject = new JSONObject();
-                    jsonObject.put("app", streamPushItem.getApp());
-                    jsonObject.put("stream", streamPushItem.getStream());
-                    jsonObject.put("mediaServerId", mediaServerItem.getId());
-                    subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_play,jsonObject,
-                            (MediaServerItem mediaServerItemInuse, JSONObject response)->{
-                                updateMedia(mediaServerItem, response.getString("app"), response.getString("stream"));
-                            }
-                    );
-                }
-            }
-        }));
-
-    }
-
-    public void addMedia(MediaServerItem mediaServerItem, String app, String streamId) {
-        //使用异步更新推流
-        updateMedia(mediaServerItem, app, streamId);
-    }
-
-    public StreamPushItem addPush(MediaItem mediaItem) {
-        // 查找此直播流是否存在redis预设gbId
-        StreamPushItem transform = streamPushService.transform(mediaItem);
-        // 从streamId取出查询关键值
-        Pattern pattern = Pattern.compile(userSetup.getThirdPartyGBIdReg());
-        Matcher matcher = pattern.matcher(mediaItem.getStream());// 指定要匹配的字符串
-        String queryKey = null;
-        if (matcher.find()) { //此处find()每次被调用后,会偏移到下一个匹配
-            queryKey = matcher.group();
-        }
-        if (queryKey != null) {
-            ThirdPartyGB thirdPartyGB = redisCatchStorage.queryMemberNoGBId(queryKey);
-            if (thirdPartyGB != null && !StringUtils.isEmpty(thirdPartyGB.getNationalStandardNo())) {
-                transform.setGbId(thirdPartyGB.getNationalStandardNo());
-                transform.setName(thirdPartyGB.getName());
-            }
-        }
-        if (!StringUtils.isEmpty(transform.getGbId())) {
-            // 如果这个国标ID已经给了其他推流且流已离线,则移除其他推流
-            List<GbStream> gbStreams = gbStreamMapper.selectByGBId(transform.getGbId());
-            if (gbStreams.size() > 0) {
-                for (GbStream gbStream : gbStreams) {
-                    // 出现使用相同国标Id的视频流时,使用新流替换旧流,
-                    if (queryKey != null && gbStream.getApp().equals(mediaItem.getApp())) {
-                        Matcher matcherForStream = pattern.matcher(gbStream.getStream());
-                        String queryKeyForStream = null;
-                        if (matcherForStream.find()) { //此处find()每次被调用后,会偏移到下一个匹配
-                            queryKeyForStream = matcherForStream.group();
-                        }
-                        if (queryKeyForStream == null || !queryKeyForStream.equals(queryKey)) {
-                            // 此时不是同一个流
-                            gbStreamMapper.del(gbStream.getApp(), gbStream.getStream());
-                            if (!gbStream.isStatus()) {
-                                streamPushMapper.del(gbStream.getApp(), gbStream.getStream());
-                            }
-                        }
-                    }
-                }
-            }
-            //            StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(transform.getApp(), transform.getStream());
-            List<GbStream> gbStreamList = gbStreamMapper.selectByGBId(transform.getGbId());
-            if (gbStreamList != null && gbStreamList.size() == 1) {
-                transform.setGbStreamId(gbStreamList.get(0).getGbStreamId());
-                transform.setPlatformId(gbStreamList.get(0).getPlatformId());
-                transform.setCatalogId(gbStreamList.get(0).getCatalogId());
-                transform.setGbId(gbStreamList.get(0).getGbId());
-                gbStreamMapper.update(transform);
-                streamPushMapper.del(gbStreamList.get(0).getApp(), gbStreamList.get(0).getStream());
-            }else {
-                transform.setCreateStamp(System.currentTimeMillis());
-                gbStreamMapper.add(transform);
-            }
-        }
-        storager.updateMedia(transform);
-        return transform;
-    }
-
-
-    public void updateMedia(MediaServerItem mediaServerItem, String app, String streamId) {
-        //使用异步更新推流
-        zlmresTfulUtils.getMediaList(mediaServerItem, app, streamId, "rtmp", json->{
-
-            if (json == null) return;
-            String dataStr = json.getString("data");
-
-            Integer code = json.getInteger("code");
-            Map<String, StreamPushItem> result = new HashMap<>();
-            List<StreamPushItem> streamPushItems = null;
-            if (code == 0 ) {
-                if (dataStr != null) {
-                    streamPushItems = streamPushService.handleJSON(dataStr, mediaServerItem);
-                }
-            }else {
-                logger.warn("更新视频流失败,错误code: " + code);
-            }
-
-            if (streamPushItems != null && streamPushItems.size() == 1) {
-                storager.updateMedia(streamPushItems.get(0));
-            }
-        });
-    }
-
-
-    public int removeMedia(String app, String streamId) {
-        // 查找是否关联了国标, 关联了不删除, 置为离线
-        StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(app, streamId);
-        int result = 0;
-        if (streamProxyItem == null) {
-            result = storager.removeMedia(app, streamId);
-        }else {
-            result =storager.mediaOutline(app, streamId);
-        }
-        return result;
-    }
-
-
-
-//    public void clearAllSessions() {
-//        logger.info("清空所有国标相关的session");
-//        JSONObject allSessionJSON = zlmresTfulUtils.getAllSession();
-//        ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
-//        HashSet<String> allLocalPorts = new HashSet();
-//        if (allSessionJSON.getInteger("code") == 0) {
-//            JSONArray data = allSessionJSON.getJSONArray("data");
-//            if (data.size() > 0) {
-//                for (int i = 0; i < data.size(); i++) {
-//                    JSONObject sessionJOSN = data.getJSONObject(i);
-//                    Integer local_port = sessionJOSN.getInteger("local_port");
-//                    if (!local_port.equals(Integer.valueOf(mediaInfo.getHttpPort())) &&
-//                        !local_port.equals(Integer.valueOf(mediaInfo.getHttpSSLport())) &&
-//                        !local_port.equals(Integer.valueOf(mediaInfo.getRtmpPort())) &&
-//                        !local_port.equals(Integer.valueOf(mediaInfo.getRtspPort())) &&
-//                        !local_port.equals(Integer.valueOf(mediaInfo.getRtspSSlport())) &&
-//                        !local_port.equals(Integer.valueOf(mediaInfo.getHookOnFlowReport()))){
-//                        allLocalPorts.add(sessionJOSN.getInteger("local_port") + "");
-//                     }
-//                }
-//            }
-//        }
-//        if (allLocalPorts.size() > 0) {
-//            List<String> result = new ArrayList<>(allLocalPorts);
-//            String localPortSStr = String.join(",", result);
-//            zlmresTfulUtils.kickSessions(localPortSStr);
-//        }
-//    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
deleted file mode 100644
index d0b1cb2..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import okhttp3.*;
-import okhttp3.logging.HttpLoggingInterceptor;
-import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import java.io.*;
-import java.net.ConnectException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
-
-@Component
-public class ZLMRESTfulUtils {
-
-    private final static Logger logger = LoggerFactory.getLogger(ZLMRESTfulUtils.class);
-
-    public interface RequestCallback{
-        void run(JSONObject response);
-    }
-
-    private OkHttpClient getClient(){
-        OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
-        if (logger.isDebugEnabled()) {
-            HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> {
-                logger.debug("http请求参数:" + message);
-            });
-            logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
-            // OkHttp進行添加攔截器loggingInterceptor
-            httpClientBuilder.addInterceptor(logging);
-        }
-        return httpClientBuilder.build();
-    }
-
-
-    public JSONObject sendPost(MediaServerItem mediaServerItem, String api, Map<String, Object> param, RequestCallback callback) {
-        OkHttpClient client = getClient();
-
-        if (mediaServerItem == null) {
-            return null;
-        }
-        String url = String.format("http://%s:%s/index/api/%s",  mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api);
-        JSONObject responseJSON = null;
-
-        FormBody.Builder builder = new FormBody.Builder();
-        builder.add("secret",mediaServerItem.getSecret());
-        if (param != null && param.keySet().size() > 0) {
-            for (String key : param.keySet()){
-                if (param.get(key) != null) {
-                    builder.add(key, param.get(key).toString());
-                }
-            }
-        }
-
-        FormBody body = builder.build();
-
-        Request request = new Request.Builder()
-                .post(body)
-                .url(url)
-                .build();
-            if (callback == null) {
-                try {
-                    Response response = client.newCall(request).execute();
-                    if (response.isSuccessful()) {
-                        ResponseBody responseBody = response.body();
-                        if (responseBody != null) {
-                            String responseStr = responseBody.string();
-                            responseJSON = JSON.parseObject(responseStr);
-                        }
-                    }else {
-                        response.close();
-                        Objects.requireNonNull(response.body()).close();
-                    }
-                } catch (ConnectException e) {
-                    logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage()));
-                    logger.info("请检查media配置并确认ZLM已启动...");
-                }catch (IOException e) {
-                    logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage()));
-                }
-            }else {
-                client.newCall(request).enqueue(new Callback(){
-
-                    @Override
-                    public void onResponse(@NotNull Call call, @NotNull Response response){
-                        if (response.isSuccessful()) {
-                            try {
-                                String responseStr = Objects.requireNonNull(response.body()).string();
-                                callback.run(JSON.parseObject(responseStr));
-                            } catch (IOException e) {
-                                logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage()));
-                            }
-
-                        }else {
-                            response.close();
-                            Objects.requireNonNull(response.body()).close();
-                        }
-                    }
-
-                    @Override
-                    public void onFailure(@NotNull Call call, @NotNull IOException e) {
-                        logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage()));
-                        logger.info("请检查media配置并确认ZLM已启动...");
-                    }
-                });
-            }
-
-
-
-        return responseJSON;
-    }
-
-    public void sendGetForImg(MediaServerItem mediaServerItem, String api, Map<String, Object> params, String targetPath, String fileName) {
-        String url = String.format("http://%s:%s/index/api/%s", mediaServerItem.getIp(), mediaServerItem.getHttpPort(), api);
-        logger.debug(url);
-        HttpUrl parseUrl = HttpUrl.parse(url);
-        if (parseUrl == null) {
-            return;
-        }
-        HttpUrl.Builder httpBuilder = parseUrl.newBuilder();
-
-        httpBuilder.addQueryParameter("secret", mediaServerItem.getSecret());
-        if (params != null) {
-            for (Map.Entry<String, Object> param : params.entrySet()) {
-                httpBuilder.addQueryParameter(param.getKey(), param.getValue().toString());
-            }
-        }
-
-        Request request = new Request.Builder()
-                .url(httpBuilder.build())
-                .build();
-        logger.info(request.toString());
-        try {
-            OkHttpClient client = new OkHttpClient.Builder()
-                    .readTimeout(10, TimeUnit.SECONDS)
-                    .build();
-            Response response = client.newCall(request).execute();
-            if (response.isSuccessful()) {
-                logger.info("response body contentType: " + Objects.requireNonNull(response.body()).contentType());
-                if (targetPath != null) {
-                    File snapFolder = new File(targetPath);
-                    if (!snapFolder.exists()) {
-                        if (!snapFolder.mkdirs()) {
-                            logger.warn("{}路径创建失败", snapFolder.getAbsolutePath());
-                        }
-
-                    }
-                    File snapFile = new File(targetPath + "/" + fileName);
-                    FileOutputStream outStream = new FileOutputStream(snapFile);
-
-                    outStream.write(Objects.requireNonNull(response.body()).bytes());
-                    outStream.close();
-                } else {
-                    logger.error(String.format("[ %s ]请求失败: %s %s", url, response.code(), response.message()));
-                }
-                Objects.requireNonNull(response.body()).close();
-            } else {
-                logger.error(String.format("[ %s ]请求失败: %s %s", url, response.code(), response.message()));
-            }
-        } catch (ConnectException e) {
-            logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage()));
-            logger.info("请检查media配置并确认ZLM已启动...");
-        } catch (IOException e) {
-            logger.error(String.format("[ %s ]请求失败: %s", url, e.getMessage()));
-        }
-    }
-
-    public JSONObject getMediaList(MediaServerItem mediaServerItem, String app, String stream, String schema, RequestCallback callback){
-        Map<String, Object> param = new HashMap<>();
-        if (app != null) {
-            param.put("app",app);
-        }
-        if (stream != null) {
-            param.put("stream",stream);
-        }
-        if (schema != null) {
-            param.put("schema",schema);
-        }
-        param.put("vhost","__defaultVhost__");
-        return sendPost(mediaServerItem, "getMediaList",param, callback);
-    }
-
-    public JSONObject getMediaList(MediaServerItem mediaServerItem, String app, String stream){
-        return getMediaList(mediaServerItem, app, stream,null,  null);
-    }
-
-    public JSONObject getMediaList(MediaServerItem mediaServerItem, RequestCallback callback){
-        return sendPost(mediaServerItem, "getMediaList",null, callback);
-    }
-
-    public JSONObject getMediaInfo(MediaServerItem mediaServerItem, String app, String schema, String stream){
-        Map<String, Object> param = new HashMap<>();
-        param.put("app",app);
-        param.put("schema",schema);
-        param.put("stream",stream);
-        param.put("vhost","__defaultVhost__");
-        return sendPost(mediaServerItem, "getMediaInfo",param, null);
-    }
-
-    public JSONObject getRtpInfo(MediaServerItem mediaServerItem, String stream_id){
-        Map<String, Object> param = new HashMap<>();
-        param.put("stream_id",stream_id);
-        return sendPost(mediaServerItem, "getRtpInfo",param, null);
-    }
-
-    public JSONObject addFFmpegSource(MediaServerItem mediaServerItem, String src_url, String dst_url, String timeout_ms,
-                                      boolean enable_hls, boolean enable_mp4, String ffmpeg_cmd_key){
-        logger.info(src_url);
-        logger.info(dst_url);
-        Map<String, Object> param = new HashMap<>();
-        param.put("src_url", src_url);
-        param.put("dst_url", dst_url);
-        param.put("timeout_ms", timeout_ms);
-        param.put("enable_hls", enable_hls);
-        param.put("enable_mp4", enable_mp4);
-        param.put("ffmpeg_cmd_key", ffmpeg_cmd_key);
-        return sendPost(mediaServerItem, "addFFmpegSource",param, null);
-    }
-
-    public JSONObject delFFmpegSource(MediaServerItem mediaServerItem, String key){
-        Map<String, Object> param = new HashMap<>();
-        param.put("key", key);
-        return sendPost(mediaServerItem, "delFFmpegSource",param, null);
-    }
-
-    public JSONObject getMediaServerConfig(MediaServerItem mediaServerItem){
-        return sendPost(mediaServerItem, "getServerConfig",null, null);
-    }
-
-    public JSONObject setServerConfig(MediaServerItem mediaServerItem, Map<String, Object> param){
-        return sendPost(mediaServerItem,"setServerConfig",param, null);
-    }
-
-    public JSONObject openRtpServer(MediaServerItem mediaServerItem, Map<String, Object> param){
-        return sendPost(mediaServerItem, "openRtpServer",param, null);
-    }
-
-    public JSONObject closeRtpServer(MediaServerItem mediaServerItem, Map<String, Object> param) {
-        return sendPost(mediaServerItem, "closeRtpServer",param, null);
-    }
-
-    public JSONObject listRtpServer(MediaServerItem mediaServerItem) {
-        return sendPost(mediaServerItem, "listRtpServer",null, null);
-    }
-
-    public JSONObject startSendRtp(MediaServerItem mediaServerItem, Map<String, Object> param) {
-        return sendPost(mediaServerItem, "startSendRtp",param, null);
-    }
-
-    public JSONObject stopSendRtp(MediaServerItem mediaServerItem, Map<String, Object> param) {
-        return sendPost(mediaServerItem, "stopSendRtp",param, null);
-    }
-
-    public JSONObject restartServer(MediaServerItem mediaServerItem) {
-        return sendPost(mediaServerItem, "restartServer",null, null);
-    }
-
-    public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_hls, boolean enable_mp4, String rtp_type) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("vhost", "__defaultVhost__");
-        param.put("app", app);
-        param.put("stream", stream);
-        param.put("url", url);
-        param.put("enable_hls", enable_hls?1:0);
-        param.put("enable_mp4", enable_mp4?1:0);
-        param.put("rtp_type", rtp_type);
-        return sendPost(mediaServerItem, "addStreamProxy",param, null);
-    }
-
-    public JSONObject closeStreams(MediaServerItem mediaServerItem, String app, String stream) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("vhost", "__defaultVhost__");
-        param.put("app", app);
-        param.put("stream", stream);
-        param.put("force", 1);
-        return sendPost(mediaServerItem, "close_streams",param, null);
-    }
-
-    public JSONObject getAllSession(MediaServerItem mediaServerItem) {
-        return sendPost(mediaServerItem, "getAllSession",null, null);
-    }
-
-    public void kickSessions(MediaServerItem mediaServerItem, String localPortSStr) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("local_port", localPortSStr);
-        sendPost(mediaServerItem, "kick_sessions",param, null);
-    }
-
-    public void getSnap(MediaServerItem mediaServerItem, String flvUrl, int timeout_sec, int expire_sec, String targetPath, String fileName) {
-        Map<String, Object> param = new HashMap<>();
-        param.put("url", flvUrl);
-        param.put("timeout_sec", timeout_sec);
-        param.put("expire_sec", expire_sec);
-        sendGetForImg(mediaServerItem, "getSnap", param, targetPath, fileName);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
deleted file mode 100644
index 9f22f82..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-
-@Component
-public class ZLMRTPServerFactory {
-
-    private Logger logger = LoggerFactory.getLogger("ZLMRTPServerFactory");
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    private int[] portRangeArray = new int[2];
-
-    public int getFreePort(MediaServerItem mediaServerItem, int startPort, int endPort, List<Integer> usedFreelist) {
-        if (endPort <= startPort) return -1;
-        if (usedFreelist == null) {
-            usedFreelist = new ArrayList<>();
-        }
-        JSONObject listRtpServerJsonResult = zlmresTfulUtils.listRtpServer(mediaServerItem);
-        if (listRtpServerJsonResult != null) {
-            JSONArray data = listRtpServerJsonResult.getJSONArray("data");
-            if (data != null) {
-                for (int i = 0; i < data.size(); i++) {
-                    JSONObject dataItem = data.getJSONObject(i);
-                    usedFreelist.add(dataItem.getInteger("port"));
-                }
-            }
-        }
-
-        Map<String, Object> param = new HashMap<>();
-        int result = -1;
-        // 设置推流端口
-        if (startPort%2 == 1) {
-            startPort ++;
-        }
-        boolean checkPort = false;
-        for (int i = startPort; i < endPort  + 1; i+=2) {
-            if (!usedFreelist.contains(i)){
-                checkPort = true;
-                startPort = i;
-                break;
-            }
-        }
-        if (!checkPort) {
-            logger.warn("未找到节点{}上范围[{}-{}]的空闲端口", mediaServerItem.getId(), startPort, endPort);
-            return -1;
-        }
-        param.put("port", startPort);
-        String stream = UUID.randomUUID().toString();
-        param.put("enable_tcp", 1);
-        param.put("stream_id", stream);
-        param.put("port", 0);
-        JSONObject openRtpServerResultJson = zlmresTfulUtils.openRtpServer(mediaServerItem, param);
-
-        if (openRtpServerResultJson != null) {
-            if (openRtpServerResultJson.getInteger("code") == 0) {
-                result= openRtpServerResultJson.getInteger("port");
-                Map<String, Object> closeRtpServerParam = new HashMap<>();
-                closeRtpServerParam.put("stream_id", stream);
-                zlmresTfulUtils.closeRtpServer(mediaServerItem, closeRtpServerParam);
-            }else {
-                usedFreelist.add(startPort);
-                startPort +=2;
-                result = getFreePort(mediaServerItem, startPort, endPort,usedFreelist);
-            }
-        }else {
-            //  检查ZLM状态
-            logger.error("创建RTP Server 失败 {}: 请检查ZLM服务", param.get("port"));
-        }
-        return result;
-    }
-
-    public int createRTPServer(MediaServerItem mediaServerItem, String streamId) {
-
-        Map<String, Object> param = new HashMap<>();
-        int result = -1;
-        // 推流端口设置0则使用随机端口
-        param.put("enable_tcp", 1);
-        param.put("stream_id", streamId);
-        param.put("port", 0);
-        JSONObject openRtpServerResultJson = zlmresTfulUtils.openRtpServer(mediaServerItem, param);
-
-        if (openRtpServerResultJson != null) {
-            if (openRtpServerResultJson.getInteger("code") == 0) {
-                result= openRtpServerResultJson.getInteger("port");
-            }else {
-                logger.error("创建RTP Server 失败 {}: ", openRtpServerResultJson.getString("msg"));
-            }
-        }else {
-            //  检查ZLM状态
-            logger.error("创建RTP Server 失败 {}: 请检查ZLM服务", param.get("port"));
-        }
-        return result;
-    }
-
-    public boolean closeRTPServer(MediaServerItem serverItem, String streamId) {
-        boolean result = false;
-        if (serverItem !=null){
-            Map<String, Object> param = new HashMap<>();
-            param.put("stream_id", streamId);
-            JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(serverItem, param);
-            if (jsonObject != null ) {
-                if (jsonObject.getInteger("code") == 0) {
-                    result = jsonObject.getInteger("hit") == 1;
-                }else {
-                    logger.error("关闭RTP Server 失败: " + jsonObject.getString("msg"));
-                }
-            }else {
-                //  检查ZLM状态
-                logger.error("关闭RTP Server 失败: 请检查ZLM服务");
-            }
-        }
-        return result;
-    }
-
-//    private int getPortFromportRange(MediaServerItem mediaServerItem) {
-//        int currentPort = mediaServerItem.getCurrentPort();
-//        if (currentPort == 0) {
-//            String[] portRangeStrArray = mediaServerItem.getSendRtpPortRange().split(",");
-//            if (portRangeStrArray.length != 2) {
-//                portRangeArray[0] = 30000;
-//                portRangeArray[1] = 30500;
-//            }else {
-//                portRangeArray[0] = Integer.parseInt(portRangeStrArray[0]);
-//                portRangeArray[1] = Integer.parseInt(portRangeStrArray[1]);
-//            }
-//        }
-//
-//        if (currentPort == 0 || currentPort++ > portRangeArray[1]) {
-//            currentPort = portRangeArray[0];
-//            mediaServerItem.setCurrentPort(currentPort);
-//            return portRangeArray[0];
-//        } else {
-//            if (currentPort % 2 == 1) {
-//                currentPort++;
-//            }
-//            currentPort++;
-//            mediaServerItem.setCurrentPort(currentPort);
-//            return currentPort;
-//        }
-//    }
-
-    /**
-     * 创建一个国标推流
-     * @param ip 推流ip
-     * @param port 推流端口
-     * @param ssrc 推流唯一标识
-     * @param platformId 平台id
-     * @param channelId 通道id
-     * @param tcp 是否为tcp
-     * @return SendRtpItem
-     */
-    public SendRtpItem createSendRtpItem(MediaServerItem serverItem, String ip, int port, String ssrc, String platformId, String deviceId, String channelId, boolean tcp){
-
-        // 使用RTPServer 功能找一个可用的端口
-        String sendRtpPortRange = serverItem.getSendRtpPortRange();
-        if (StringUtils.isEmpty(sendRtpPortRange)) {
-            return null;
-        }
-        String[] portRangeStrArray = serverItem.getSendRtpPortRange().split(",");
-        int localPort = -1;
-        if (portRangeStrArray.length != 2) {
-            localPort = getFreePort(serverItem, 30000, 30500, null);
-        }else {
-            localPort = getFreePort(serverItem, Integer.parseInt(portRangeStrArray[0]),  Integer.parseInt(portRangeStrArray[1]), null);
-        }
-        if (localPort == -1) {
-            logger.error("没有可用的端口");
-            return null;
-        }
-        SendRtpItem sendRtpItem = new SendRtpItem();
-        sendRtpItem.setIp(ip);
-        sendRtpItem.setPort(port);
-        sendRtpItem.setSsrc(ssrc);
-        sendRtpItem.setPlatformId(platformId);
-        sendRtpItem.setDeviceId(deviceId);
-        sendRtpItem.setChannelId(channelId);
-        sendRtpItem.setTcp(tcp);
-        sendRtpItem.setApp("rtp");
-        sendRtpItem.setLocalPort(localPort);
-        sendRtpItem.setMediaServerId(serverItem.getId());
-        return sendRtpItem;
-    }
-
-    /**
-     * 创建一个直播推流
-     * @param ip 推流ip
-     * @param port 推流端口
-     * @param ssrc 推流唯一标识
-     * @param platformId 平台id
-     * @param channelId 通道id
-     * @param tcp 是否为tcp
-     * @return SendRtpItem
-     */
-    public SendRtpItem createSendRtpItem(MediaServerItem serverItem, String ip, int port, String ssrc, String platformId, String app, String stream, String channelId, boolean tcp){
-        // 使用RTPServer 功能找一个可用的端口
-        String sendRtpPortRange = serverItem.getSendRtpPortRange();
-        if (StringUtils.isEmpty(sendRtpPortRange)) {
-            return null;
-        }
-        String[] portRangeStrArray = serverItem.getSendRtpPortRange().split(",");
-        int localPort = -1;
-        if (portRangeStrArray.length != 2) {
-            localPort = getFreePort(serverItem, 30000, 30500, null);
-        }else {
-            localPort = getFreePort(serverItem, Integer.parseInt(portRangeStrArray[0]),  Integer.parseInt(portRangeStrArray[1]), null);
-        }
-        if (localPort == -1) {
-            logger.error("没有可用的端口");
-            return null;
-        }
-        SendRtpItem sendRtpItem = new SendRtpItem();
-        sendRtpItem.setIp(ip);
-        sendRtpItem.setPort(port);
-        sendRtpItem.setSsrc(ssrc);
-        sendRtpItem.setApp(app);
-        sendRtpItem.setStreamId(stream);
-        sendRtpItem.setPlatformId(platformId);
-        sendRtpItem.setChannelId(channelId);
-        sendRtpItem.setTcp(tcp);
-        sendRtpItem.setLocalPort(localPort);
-        sendRtpItem.setMediaServerId(serverItem.getId());
-        return sendRtpItem;
-    }
-
-    /**
-     * 调用zlm RESTFUL API —— startSendRtp
-     */
-    public JSONObject startSendRtpStream(MediaServerItem mediaServerItem, Map<String, Object>param) {
-        Boolean result = false;
-        JSONObject jsonObject = zlmresTfulUtils.startSendRtp(mediaServerItem, param);
-        if (jsonObject == null) {
-            logger.error("RTP推流失败: 请检查ZLM服务");
-        } else if (jsonObject.getInteger("code") == 0) {
-            result= true;
-            logger.info("RTP推流成功[ {}/{} ],本地推流端口:{}" ,param.get("app"), param.get("stream"), jsonObject.getString("local_port"));
-        } else {
-            logger.error("RTP推流失败: {}, 参数:{}",jsonObject.getString("msg"),JSONObject.toJSON(param));
-        }
-        return jsonObject;
-    }
-
-    /**
-     * 查询待转推的流是否就绪
-     */
-    public Boolean isRtpReady(MediaServerItem mediaServerItem, String streamId) {
-        JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem,"rtp", "rtmp", streamId);
-        return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online"));
-    }
-
-    /**
-     * 查询待转推的流是否就绪
-     */
-    public Boolean isStreamReady(MediaServerItem mediaServerItem, String app, String streamId) {
-        JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtmp", streamId);
-        return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online"));
-    }
-
-    /**
-     * 查询转推的流是否有其它观看者
-     * @param streamId
-     * @return
-     */
-    public int totalReaderCount(MediaServerItem mediaServerItem, String app, String streamId) {
-        JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtmp", streamId);
-        Integer code = mediaInfo.getInteger("code");
-        if (mediaInfo == null) {
-            return 0;
-        }
-        if ( code < 0) {
-            logger.warn("查询流({}/{})是否有其它观看者时得到: {}", app, streamId, mediaInfo.getString("msg"));
-            return -1;
-        }
-        if ( code == 0 && ! mediaInfo.getBoolean("online")) {
-            logger.warn("查询流({}/{})是否有其它观看者时得到: {}", app, streamId, mediaInfo.getString("msg"));
-            return -1;
-        }
-        return mediaInfo.getInteger("totalReaderCount");
-    }
-
-    /**
-     * 调用zlm RESTful API —— stopSendRtp
-     */
-    public Boolean stopSendRtpStream(MediaServerItem mediaServerItem, Map<String, Object>param) {
-        Boolean result = false;
-        JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param);
-        if (jsonObject == null) {
-            logger.error("停止RTP推流失败: 请检查ZLM服务");
-        } else if (jsonObject.getInteger("code") == 0) {
-            result= true;
-            logger.info("停止RTP推流成功");
-        } else {
-            logger.error("RTP推流失败: {}, 参数:{}",jsonObject.getString("msg"),JSONObject.toJSON(param));
-        }
-        return result;
-    }
-
-    public void closeAllSendRtpStream() {
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
deleted file mode 100644
index 9d0e354..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.conf.MediaConfig;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-
-@Component
-@Order(value=1)
-public class ZLMRunner implements CommandLineRunner {
-
-    private final static Logger logger = LoggerFactory.getLogger(ZLMRunner.class);
-
-    private Map<String, Boolean> startGetMedia;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    @Autowired
-    private ZLMHttpHookSubscribe hookSubscribe;
-
-    @Autowired
-    private IStreamProxyService streamProxyService;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private MediaConfig mediaConfig;
-
-    @Qualifier("taskExecutor")
-    @Autowired
-    private ThreadPoolTaskExecutor taskExecutor;
-
-    @Override
-    public void run(String... strings) throws Exception {
-        mediaServerService.clearMediaServerForOnline();
-        MediaServerItem defaultMediaServer = mediaServerService.getDefaultMediaServer();
-        if (defaultMediaServer == null) {
-            mediaServerService.addToDatabase(mediaConfig.getMediaSerItem());
-        }else {
-            MediaServerItem mediaSerItem = mediaConfig.getMediaSerItem();
-            mediaServerService.updateToDatabase(mediaSerItem);
-        }
-        mediaServerService.syncCatchFromDatabase();
-        // 订阅 zlm启动事件, 新的zlm也会从这里进入系统
-        hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_started,null,
-                (MediaServerItem mediaServerItem, JSONObject response)->{
-            ZLMServerConfig zlmServerConfig = JSONObject.toJavaObject(response, ZLMServerConfig.class);
-            if (zlmServerConfig !=null ) {
-                if (startGetMedia != null) {
-                    startGetMedia.remove(zlmServerConfig.getGeneralMediaServerId());
-                }
-                mediaServerService.zlmServerOnline(zlmServerConfig);
-            }
-        });
-
-        // 订阅 zlm保活事件, 当zlm离线时做业务的处理
-        hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_keepalive,null,
-                (MediaServerItem mediaServerItem, JSONObject response)->{
-                    String mediaServerId = response.getString("mediaServerId");
-                    if (mediaServerId !=null ) {
-                        mediaServerService.updateMediaServerKeepalive(mediaServerId, response.getJSONObject("data"));
-                    }
-                });
-
-        // 获取zlm信息
-        logger.info("[zlm接入]等待默认zlm中...");
-
-        // 获取所有的zlm, 并开启主动连接
-        List<MediaServerItem> all = mediaServerService.getAllFromDatabase();
-        mediaServerService.updateVmServer(all);
-        if (all.size() == 0) {
-            all.add(mediaConfig.getMediaSerItem());
-        }
-        for (MediaServerItem mediaServerItem : all) {
-            if (startGetMedia == null) startGetMedia = new HashMap<>();
-            startGetMedia.put(mediaServerItem.getId(), true);
-            taskExecutor.execute(()->{
-                connectZlmServer(mediaServerItem);
-            });
-        }
-        Timer timer = new Timer();
-        // 10分钟后未连接到则不再去主动连接, TODO 并对重启前使用此在zlm的通道发送bye
-        timer.schedule(new TimerTask() {
-            @Override
-            public void run() {
-            if (startGetMedia != null) {
-                Set<String> allZlmId = startGetMedia.keySet();
-                for (String id : allZlmId) {
-                    logger.error("[ {} ]]主动连接失败,不再主动连接", id);
-                }
-                startGetMedia = null;
-            }
-            //  TODO 清理数据库中与redis不匹配的zlm
-            }
-        }, 60 * 1000 * 10);
-    }
-
-    @Async
-    public void connectZlmServer(MediaServerItem mediaServerItem){
-        ZLMServerConfig zlmServerConfig = getMediaServerConfig(mediaServerItem, 1);
-        if (zlmServerConfig != null) {
-            zlmServerConfig.setIp(mediaServerItem.getIp());
-            zlmServerConfig.setHttpPort(mediaServerItem.getHttpPort());
-            startGetMedia.remove(mediaServerItem.getId());
-            mediaServerService.zlmServerOnline(zlmServerConfig);
-        }
-    }
-
-    public ZLMServerConfig getMediaServerConfig(MediaServerItem mediaServerItem, int index) {
-        if (startGetMedia == null) { return null;}
-        if (!mediaServerItem.isDefaultServer() && mediaServerService.getOne(mediaServerItem.getId()) == null) {
-            return null;
-        }
-        if ( startGetMedia.get(mediaServerItem.getId()) == null || !startGetMedia.get(mediaServerItem.getId())) {
-            return null;
-        }
-        JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
-        ZLMServerConfig ZLMServerConfig = null;
-        if (responseJSON != null) {
-            JSONArray data = responseJSON.getJSONArray("data");
-            if (data != null && data.size() > 0) {
-                ZLMServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
-            }
-        } else {
-            logger.error("[ {} ]-[ {}:{} ]第{}次主动连接失败, 2s后重试",
-                    mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort(), index);
-            if (index == 1 && !StringUtils.isEmpty(mediaServerItem.getId())) {
-                logger.info("[ {} ]-[ {}:{} ]第{}次主动连接失败, 开始清理相关资源",
-                        mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort(), index);
-                publisher.zlmOfflineEventPublish(mediaServerItem.getId());
-            }
-            try {
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-            ZLMServerConfig = getMediaServerConfig(mediaServerItem, index += 1);
-        }
-        return ZLMServerConfig;
-
-    }
-
-    /**
-     * zlm 连接成功或者zlm重启后
-     */
-//    private void zLmRunning(ZLMServerConfig zlmServerConfig){
-//        logger.info( "[ id: " + zlmServerConfig.getGeneralMediaServerId() + "] zlm接入成功...");
-//        // 关闭循环获取zlm配置
-//        startGetMedia = false;
-//        MediaServerItem mediaServerItem = new MediaServerItem(zlmServerConfig, sipIp);
-//        storager.updateMediaServer(mediaServerItem);
-//
-//        if (mediaServerItem.isAutoConfig()) setZLMConfig(mediaServerItem);
-//        zlmServerManger.updateServerCatchFromHook(zlmServerConfig);
-//
-//        // 清空所有session
-////        zlmMediaListManager.clearAllSessions();
-//
-//        // 更新流列表
-//        zlmMediaListManager.updateMediaList(mediaServerItem);
-//        // 恢复流代理, 只查找这个这个流媒体
-//        List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer(
-//                mediaServerItem.getId(), true);
-//        for (StreamProxyItem streamProxyDto : streamProxyListForEnable) {
-//            logger.info("恢复流代理," + streamProxyDto.getApp() + "/" + streamProxyDto.getStream());
-//            JSONObject jsonObject = streamProxyService.addStreamProxyToZlm(streamProxyDto);
-//            if (jsonObject == null) {
-//                // 设置为未启用
-//                logger.info("恢复流代理失败,请检查流地址后重新启用" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream());
-//                streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream());
-//            }
-//        }
-//    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java
deleted file mode 100644
index db4ab76..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerConfig.java
+++ /dev/null
@@ -1,816 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm;
-
-import com.alibaba.fastjson.annotation.JSONField;
-
-public class ZLMServerConfig {
-
-    @JSONField(name = "api.apiDebug")
-    private String apiDebug;
-
-    @JSONField(name = "api.secret")
-    private String apiSecret;
-
-    @JSONField(name = "ffmpeg.bin")
-    private String ffmpegBin;
-
-    @JSONField(name = "ffmpeg.cmd")
-    private String ffmpegCmd;
-
-    @JSONField(name = "ffmpeg.log")
-    private String ffmpegLog;
-
-    @JSONField(name = "general.enableVhost")
-    private String generalEnableVhost;
-
-    @JSONField(name = "general.mediaServerId")
-    private String generalMediaServerId;
-
-    @JSONField(name = "general.flowThreshold")
-    private String generalFlowThreshold;
-
-    @JSONField(name = "general.maxStreamWaitMS")
-    private String generalMaxStreamWaitMS;
-
-    @JSONField(name = "general.streamNoneReaderDelayMS")
-    private int generalStreamNoneReaderDelayMS;
-
-    @JSONField(name = "ip")
-    private String ip;
-
-    private String sdpIp;
-
-    private String streamIp;
-
-    private String hookIp;
-
-    private String updateTime;
-
-    private String createTime;
-
-    @JSONField(name = "hls.fileBufSize")
-    private String hlsFileBufSize;
-
-    @JSONField(name = "hls.filePath")
-    private String hlsFilePath;
-
-    @JSONField(name = "hls.segDur")
-    private String hlsSegDur;
-
-    @JSONField(name = "hls.segNum")
-    private String hlsSegNum;
-
-    @JSONField(name = "hook.access_file_except_hls")
-    private String hookAccessFileExceptHLS;
-
-    @JSONField(name = "hook.admin_params")
-    private String hookAdminParams;
-
-    @JSONField(name = "hook.alive_interval")
-    private int hookAliveInterval;
-
-    @JSONField(name = "hook.enable")
-    private String hookEnable;
-
-    @JSONField(name = "hook.on_flow_report")
-    private String hookOnFlowReport;
-
-    @JSONField(name = "hook.on_http_access")
-    private String hookOnHttpAccess;
-
-    @JSONField(name = "hook.on_play")
-    private String hookOnPlay;
-
-    @JSONField(name = "hook.on_publish")
-    private String hookOnPublish;
-
-    @JSONField(name = "hook.on_record_mp4")
-    private String hookOnRecordMp4;
-
-    @JSONField(name = "hook.on_rtsp_auth")
-    private String hookOnRtspAuth;
-
-    @JSONField(name = "hook.on_rtsp_realm")
-    private String hookOnRtspRealm;
-
-    @JSONField(name = "hook.on_shell_login")
-    private String hookOnShellLogin;
-
-    @JSONField(name = "hook.on_stream_changed")
-    private String hookOnStreamChanged;
-
-    @JSONField(name = "hook.on_stream_none_reader")
-    private String hookOnStreamNoneReader;
-
-    @JSONField(name = "hook.on_stream_not_found")
-    private String hookOnStreamNotFound;
-
-    @JSONField(name = "hook.timeoutSec")
-    private String hookTimeoutSec;
-
-    @JSONField(name = "http.charSet")
-    private String httpCharSet;
-
-    @JSONField(name = "http.keepAliveSecond")
-    private String httpKeepAliveSecond;
-
-    @JSONField(name = "http.maxReqCount")
-    private String httpMaxReqCount;
-
-    @JSONField(name = "http.maxReqSize")
-    private String httpMaxReqSize;
-
-    @JSONField(name = "http.notFound")
-    private String httpNotFound;
-
-    @JSONField(name = "http.port")
-    private int httpPort;
-
-    @JSONField(name = "http.rootPath")
-    private String httpRootPath;
-
-    @JSONField(name = "http.sendBufSize")
-    private String httpSendBufSize;
-
-    @JSONField(name = "http.sslport")
-    private int httpSSLport;
-
-    @JSONField(name = "multicast.addrMax")
-    private String multicastAddrMax;
-
-    @JSONField(name = "multicast.addrMin")
-    private String multicastAddrMin;
-
-    @JSONField(name = "multicast.udpTTL")
-    private String multicastUdpTTL;
-
-    @JSONField(name = "record.appName")
-    private String recordAppName;
-
-    @JSONField(name = "record.filePath")
-    private String recordFilePath;
-
-    @JSONField(name = "record.fileSecond")
-    private String recordFileSecond;
-
-    @JSONField(name = "record.sampleMS")
-    private String recordFileSampleMS;
-
-    @JSONField(name = "rtmp.handshakeSecond")
-    private String rtmpHandshakeSecond;
-
-    @JSONField(name = "rtmp.keepAliveSecond")
-    private String rtmpKeepAliveSecond;
-
-    @JSONField(name = "rtmp.modifyStamp")
-    private String rtmpModifyStamp;
-
-    @JSONField(name = "rtmp.port")
-    private int rtmpPort;
-
-    @JSONField(name = "rtmp.sslport")
-    private int rtmpSslPort;
-
-    @JSONField(name = "rtp.audioMtuSize")
-    private String rtpAudioMtuSize;
-
-    @JSONField(name = "rtp.clearCount")
-    private String rtpClearCount;
-
-    @JSONField(name = "rtp.cycleMS")
-    private String rtpCycleMS;
-
-    @JSONField(name = "rtp.maxRtpCount")
-    private String rtpMaxRtpCount;
-
-    @JSONField(name = "rtp.videoMtuSize")
-    private String rtpVideoMtuSize;
-
-    @JSONField(name = "rtp_proxy.checkSource")
-    private String rtpProxyCheckSource;
-
-    @JSONField(name = "rtp_proxy.dumpDir")
-    private String rtpProxyDumpDir;
-
-    @JSONField(name = "rtp_proxy.port")
-    private int rtpProxyPort;
-
-    @JSONField(name = "rtp_proxy.port_range")
-    private String portRange;
-
-    @JSONField(name = "rtp_proxy.timeoutSec")
-    private String rtpProxyTimeoutSec;
-
-    @JSONField(name = "rtsp.authBasic")
-    private String rtspAuthBasic;
-
-    @JSONField(name = "rtsp.handshakeSecond")
-    private String rtspHandshakeSecond;
-
-    @JSONField(name = "rtsp.keepAliveSecond")
-    private String rtspKeepAliveSecond;
-
-    @JSONField(name = "rtsp.port")
-    private int rtspPort;
-
-    @JSONField(name = "rtsp.sslport")
-    private int rtspSSlport;
-
-    @JSONField(name = "shell.maxReqSize")
-    private String shellMaxReqSize;
-
-    @JSONField(name = "shell.shell")
-    private String shellPhell;
-
-
-    public String getHookIp() {
-        return hookIp;
-    }
-
-    public void setHookIp(String hookIp) {
-        this.hookIp = hookIp;
-    }
-
-    public String getApiDebug() {
-        return apiDebug;
-    }
-
-    public void setApiDebug(String apiDebug) {
-        this.apiDebug = apiDebug;
-    }
-
-    public String getApiSecret() {
-        return apiSecret;
-    }
-
-    public void setApiSecret(String apiSecret) {
-        this.apiSecret = apiSecret;
-    }
-
-    public String getFfmpegBin() {
-        return ffmpegBin;
-    }
-
-    public void setFfmpegBin(String ffmpegBin) {
-        this.ffmpegBin = ffmpegBin;
-    }
-
-    public String getFfmpegCmd() {
-        return ffmpegCmd;
-    }
-
-    public void setFfmpegCmd(String ffmpegCmd) {
-        this.ffmpegCmd = ffmpegCmd;
-    }
-
-    public String getFfmpegLog() {
-        return ffmpegLog;
-    }
-
-    public void setFfmpegLog(String ffmpegLog) {
-        this.ffmpegLog = ffmpegLog;
-    }
-
-    public String getGeneralEnableVhost() {
-        return generalEnableVhost;
-    }
-
-    public void setGeneralEnableVhost(String generalEnableVhost) {
-        this.generalEnableVhost = generalEnableVhost;
-    }
-
-    public String getGeneralMediaServerId() {
-        return generalMediaServerId;
-    }
-
-    public void setGeneralMediaServerId(String generalMediaServerId) {
-        this.generalMediaServerId = generalMediaServerId;
-    }
-
-    public String getGeneralFlowThreshold() {
-        return generalFlowThreshold;
-    }
-
-    public void setGeneralFlowThreshold(String generalFlowThreshold) {
-        this.generalFlowThreshold = generalFlowThreshold;
-    }
-
-    public String getGeneralMaxStreamWaitMS() {
-        return generalMaxStreamWaitMS;
-    }
-
-    public void setGeneralMaxStreamWaitMS(String generalMaxStreamWaitMS) {
-        this.generalMaxStreamWaitMS = generalMaxStreamWaitMS;
-    }
-
-    public int getGeneralStreamNoneReaderDelayMS() {
-        return generalStreamNoneReaderDelayMS;
-    }
-
-    public void setGeneralStreamNoneReaderDelayMS(int generalStreamNoneReaderDelayMS) {
-        this.generalStreamNoneReaderDelayMS = generalStreamNoneReaderDelayMS;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public String getSdpIp() {
-        return sdpIp;
-    }
-
-    public void setSdpIp(String sdpIp) {
-        this.sdpIp = sdpIp;
-    }
-
-    public String getStreamIp() {
-        return streamIp;
-    }
-
-    public void setStreamIp(String streamIp) {
-        this.streamIp = streamIp;
-    }
-
-    public String getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(String updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getHlsFileBufSize() {
-        return hlsFileBufSize;
-    }
-
-    public void setHlsFileBufSize(String hlsFileBufSize) {
-        this.hlsFileBufSize = hlsFileBufSize;
-    }
-
-    public String getHlsFilePath() {
-        return hlsFilePath;
-    }
-
-    public void setHlsFilePath(String hlsFilePath) {
-        this.hlsFilePath = hlsFilePath;
-    }
-
-    public String getHlsSegDur() {
-        return hlsSegDur;
-    }
-
-    public void setHlsSegDur(String hlsSegDur) {
-        this.hlsSegDur = hlsSegDur;
-    }
-
-    public String getHlsSegNum() {
-        return hlsSegNum;
-    }
-
-    public void setHlsSegNum(String hlsSegNum) {
-        this.hlsSegNum = hlsSegNum;
-    }
-
-    public String getHookAccessFileExceptHLS() {
-        return hookAccessFileExceptHLS;
-    }
-
-    public void setHookAccessFileExceptHLS(String hookAccessFileExceptHLS) {
-        this.hookAccessFileExceptHLS = hookAccessFileExceptHLS;
-    }
-
-    public String getHookAdminParams() {
-        return hookAdminParams;
-    }
-
-    public void setHookAdminParams(String hookAdminParams) {
-        this.hookAdminParams = hookAdminParams;
-    }
-
-    public String getHookEnable() {
-        return hookEnable;
-    }
-
-    public void setHookEnable(String hookEnable) {
-        this.hookEnable = hookEnable;
-    }
-
-    public String getHookOnFlowReport() {
-        return hookOnFlowReport;
-    }
-
-    public void setHookOnFlowReport(String hookOnFlowReport) {
-        this.hookOnFlowReport = hookOnFlowReport;
-    }
-
-    public String getHookOnHttpAccess() {
-        return hookOnHttpAccess;
-    }
-
-    public void setHookOnHttpAccess(String hookOnHttpAccess) {
-        this.hookOnHttpAccess = hookOnHttpAccess;
-    }
-
-    public String getHookOnPlay() {
-        return hookOnPlay;
-    }
-
-    public void setHookOnPlay(String hookOnPlay) {
-        this.hookOnPlay = hookOnPlay;
-    }
-
-    public String getHookOnPublish() {
-        return hookOnPublish;
-    }
-
-    public void setHookOnPublish(String hookOnPublish) {
-        this.hookOnPublish = hookOnPublish;
-    }
-
-    public String getHookOnRecordMp4() {
-        return hookOnRecordMp4;
-    }
-
-    public void setHookOnRecordMp4(String hookOnRecordMp4) {
-        this.hookOnRecordMp4 = hookOnRecordMp4;
-    }
-
-    public String getHookOnRtspAuth() {
-        return hookOnRtspAuth;
-    }
-
-    public void setHookOnRtspAuth(String hookOnRtspAuth) {
-        this.hookOnRtspAuth = hookOnRtspAuth;
-    }
-
-    public String getHookOnRtspRealm() {
-        return hookOnRtspRealm;
-    }
-
-    public void setHookOnRtspRealm(String hookOnRtspRealm) {
-        this.hookOnRtspRealm = hookOnRtspRealm;
-    }
-
-    public String getHookOnShellLogin() {
-        return hookOnShellLogin;
-    }
-
-    public void setHookOnShellLogin(String hookOnShellLogin) {
-        this.hookOnShellLogin = hookOnShellLogin;
-    }
-
-    public String getHookOnStreamChanged() {
-        return hookOnStreamChanged;
-    }
-
-    public void setHookOnStreamChanged(String hookOnStreamChanged) {
-        this.hookOnStreamChanged = hookOnStreamChanged;
-    }
-
-    public String getHookOnStreamNoneReader() {
-        return hookOnStreamNoneReader;
-    }
-
-    public void setHookOnStreamNoneReader(String hookOnStreamNoneReader) {
-        this.hookOnStreamNoneReader = hookOnStreamNoneReader;
-    }
-
-    public String getHookOnStreamNotFound() {
-        return hookOnStreamNotFound;
-    }
-
-    public void setHookOnStreamNotFound(String hookOnStreamNotFound) {
-        this.hookOnStreamNotFound = hookOnStreamNotFound;
-    }
-
-    public String getHookTimeoutSec() {
-        return hookTimeoutSec;
-    }
-
-    public void setHookTimeoutSec(String hookTimeoutSec) {
-        this.hookTimeoutSec = hookTimeoutSec;
-    }
-
-    public String getHttpCharSet() {
-        return httpCharSet;
-    }
-
-    public void setHttpCharSet(String httpCharSet) {
-        this.httpCharSet = httpCharSet;
-    }
-
-    public String getHttpKeepAliveSecond() {
-        return httpKeepAliveSecond;
-    }
-
-    public void setHttpKeepAliveSecond(String httpKeepAliveSecond) {
-        this.httpKeepAliveSecond = httpKeepAliveSecond;
-    }
-
-    public String getHttpMaxReqCount() {
-        return httpMaxReqCount;
-    }
-
-    public void setHttpMaxReqCount(String httpMaxReqCount) {
-        this.httpMaxReqCount = httpMaxReqCount;
-    }
-
-    public String getHttpMaxReqSize() {
-        return httpMaxReqSize;
-    }
-
-    public void setHttpMaxReqSize(String httpMaxReqSize) {
-        this.httpMaxReqSize = httpMaxReqSize;
-    }
-
-    public String getHttpNotFound() {
-        return httpNotFound;
-    }
-
-    public void setHttpNotFound(String httpNotFound) {
-        this.httpNotFound = httpNotFound;
-    }
-
-    public int getHttpPort() {
-        return httpPort;
-    }
-
-    public void setHttpPort(int httpPort) {
-        this.httpPort = httpPort;
-    }
-
-    public String getHttpRootPath() {
-        return httpRootPath;
-    }
-
-    public void setHttpRootPath(String httpRootPath) {
-        this.httpRootPath = httpRootPath;
-    }
-
-    public String getHttpSendBufSize() {
-        return httpSendBufSize;
-    }
-
-    public void setHttpSendBufSize(String httpSendBufSize) {
-        this.httpSendBufSize = httpSendBufSize;
-    }
-
-    public int getHttpSSLport() {
-        return httpSSLport;
-    }
-
-    public void setHttpSSLport(int httpSSLport) {
-        this.httpSSLport = httpSSLport;
-    }
-
-    public String getMulticastAddrMax() {
-        return multicastAddrMax;
-    }
-
-    public void setMulticastAddrMax(String multicastAddrMax) {
-        this.multicastAddrMax = multicastAddrMax;
-    }
-
-    public String getMulticastAddrMin() {
-        return multicastAddrMin;
-    }
-
-    public void setMulticastAddrMin(String multicastAddrMin) {
-        this.multicastAddrMin = multicastAddrMin;
-    }
-
-    public String getMulticastUdpTTL() {
-        return multicastUdpTTL;
-    }
-
-    public void setMulticastUdpTTL(String multicastUdpTTL) {
-        this.multicastUdpTTL = multicastUdpTTL;
-    }
-
-    public String getRecordAppName() {
-        return recordAppName;
-    }
-
-    public void setRecordAppName(String recordAppName) {
-        this.recordAppName = recordAppName;
-    }
-
-    public String getRecordFilePath() {
-        return recordFilePath;
-    }
-
-    public void setRecordFilePath(String recordFilePath) {
-        this.recordFilePath = recordFilePath;
-    }
-
-    public String getRecordFileSecond() {
-        return recordFileSecond;
-    }
-
-    public void setRecordFileSecond(String recordFileSecond) {
-        this.recordFileSecond = recordFileSecond;
-    }
-
-    public String getRecordFileSampleMS() {
-        return recordFileSampleMS;
-    }
-
-    public void setRecordFileSampleMS(String recordFileSampleMS) {
-        this.recordFileSampleMS = recordFileSampleMS;
-    }
-
-    public String getRtmpHandshakeSecond() {
-        return rtmpHandshakeSecond;
-    }
-
-    public void setRtmpHandshakeSecond(String rtmpHandshakeSecond) {
-        this.rtmpHandshakeSecond = rtmpHandshakeSecond;
-    }
-
-    public String getRtmpKeepAliveSecond() {
-        return rtmpKeepAliveSecond;
-    }
-
-    public void setRtmpKeepAliveSecond(String rtmpKeepAliveSecond) {
-        this.rtmpKeepAliveSecond = rtmpKeepAliveSecond;
-    }
-
-    public String getRtmpModifyStamp() {
-        return rtmpModifyStamp;
-    }
-
-    public void setRtmpModifyStamp(String rtmpModifyStamp) {
-        this.rtmpModifyStamp = rtmpModifyStamp;
-    }
-
-    public int getRtmpPort() {
-        return rtmpPort;
-    }
-
-    public void setRtmpPort(int rtmpPort) {
-        this.rtmpPort = rtmpPort;
-    }
-
-    public int getRtmpSslPort() {
-        return rtmpSslPort;
-    }
-
-    public void setRtmpSslPort(int rtmpSslPort) {
-        this.rtmpSslPort = rtmpSslPort;
-    }
-
-    public String getRtpAudioMtuSize() {
-        return rtpAudioMtuSize;
-    }
-
-    public void setRtpAudioMtuSize(String rtpAudioMtuSize) {
-        this.rtpAudioMtuSize = rtpAudioMtuSize;
-    }
-
-    public String getRtpClearCount() {
-        return rtpClearCount;
-    }
-
-    public void setRtpClearCount(String rtpClearCount) {
-        this.rtpClearCount = rtpClearCount;
-    }
-
-    public String getRtpCycleMS() {
-        return rtpCycleMS;
-    }
-
-    public void setRtpCycleMS(String rtpCycleMS) {
-        this.rtpCycleMS = rtpCycleMS;
-    }
-
-    public String getRtpMaxRtpCount() {
-        return rtpMaxRtpCount;
-    }
-
-    public void setRtpMaxRtpCount(String rtpMaxRtpCount) {
-        this.rtpMaxRtpCount = rtpMaxRtpCount;
-    }
-
-    public String getRtpVideoMtuSize() {
-        return rtpVideoMtuSize;
-    }
-
-    public void setRtpVideoMtuSize(String rtpVideoMtuSize) {
-        this.rtpVideoMtuSize = rtpVideoMtuSize;
-    }
-
-    public String getRtpProxyCheckSource() {
-        return rtpProxyCheckSource;
-    }
-
-    public void setRtpProxyCheckSource(String rtpProxyCheckSource) {
-        this.rtpProxyCheckSource = rtpProxyCheckSource;
-    }
-
-    public String getRtpProxyDumpDir() {
-        return rtpProxyDumpDir;
-    }
-
-    public void setRtpProxyDumpDir(String rtpProxyDumpDir) {
-        this.rtpProxyDumpDir = rtpProxyDumpDir;
-    }
-
-    public int getRtpProxyPort() {
-        return rtpProxyPort;
-    }
-
-    public void setRtpProxyPort(int rtpProxyPort) {
-        this.rtpProxyPort = rtpProxyPort;
-    }
-
-    public String getRtpProxyTimeoutSec() {
-        return rtpProxyTimeoutSec;
-    }
-
-    public void setRtpProxyTimeoutSec(String rtpProxyTimeoutSec) {
-        this.rtpProxyTimeoutSec = rtpProxyTimeoutSec;
-    }
-
-    public String getRtspAuthBasic() {
-        return rtspAuthBasic;
-    }
-
-    public void setRtspAuthBasic(String rtspAuthBasic) {
-        this.rtspAuthBasic = rtspAuthBasic;
-    }
-
-    public String getRtspHandshakeSecond() {
-        return rtspHandshakeSecond;
-    }
-
-    public void setRtspHandshakeSecond(String rtspHandshakeSecond) {
-        this.rtspHandshakeSecond = rtspHandshakeSecond;
-    }
-
-    public String getRtspKeepAliveSecond() {
-        return rtspKeepAliveSecond;
-    }
-
-    public void setRtspKeepAliveSecond(String rtspKeepAliveSecond) {
-        this.rtspKeepAliveSecond = rtspKeepAliveSecond;
-    }
-
-    public int getRtspPort() {
-        return rtspPort;
-    }
-
-    public void setRtspPort(int rtspPort) {
-        this.rtspPort = rtspPort;
-    }
-
-    public int getRtspSSlport() {
-        return rtspSSlport;
-    }
-
-    public void setRtspSSlport(int rtspSSlport) {
-        this.rtspSSlport = rtspSSlport;
-    }
-
-    public String getShellMaxReqSize() {
-        return shellMaxReqSize;
-    }
-
-    public void setShellMaxReqSize(String shellMaxReqSize) {
-        this.shellMaxReqSize = shellMaxReqSize;
-    }
-
-    public String getShellPhell() {
-        return shellPhell;
-    }
-
-    public void setShellPhell(String shellPhell) {
-        this.shellPhell = shellPhell;
-    }
-
-    public int getHookAliveInterval() {
-        return hookAliveInterval;
-    }
-
-    public void setHookAliveInterval(int hookAliveInterval) {
-        this.hookAliveInterval = hookAliveInterval;
-    }
-
-    public String getPortRange() {
-        return portRange;
-    }
-
-    public void setPortRange(String portRange) {
-        this.portRange = portRange;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaItem.java
deleted file mode 100644
index ad158ec..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaItem.java
+++ /dev/null
@@ -1,417 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-
-import java.util.List;
-
-public class MediaItem {
-
-    /**
-     * 注册/注销
-     */
-    private boolean regist;
-
-    /**
-     * 应用名
-     */
-    private String app;
-
-    /**
-     * 流id
-     */
-    private String stream;
-
-    /**
-     * 观看总人数,包括hls/rtsp/rtmp/http-flv/ws-flv
-     */
-    private String totalReaderCount;
-
-    /**
-     * 协议 包括hls/rtsp/rtmp/http-flv/ws-flv
-     */
-    private String schema;
-
-
-    /**
-     * 产生源类型,
-     * unknown = 0,
-     * rtmp_push=1,
-     * rtsp_push=2,
-     * rtp_push=3,
-     * pull=4,
-     * ffmpeg_pull=5,
-     * mp4_vod=6,
-     * device_chn=7
-     */
-    private int originType;
-
-    /**
-     * 客户端和服务器网络信息,可能为null类型
-     */
-    private OriginSock originSock;
-
-    /**
-     * 产生源类型的字符串描述
-     */
-    private String originTypeStr;
-
-    /**
-     * 产生源的url
-     */
-    private String originUrl;
-
-    /**
-     * 服务器id
-     */
-    private String mediaServerId;
-
-    /**
-     * GMT unix系统时间戳,单位秒
-     */
-    private Long createStamp;
-
-    /**
-     * 存活时间,单位秒
-     */
-    private Long aliveSecond;
-
-    /**
-     * 数据产生速度,单位byte/s
-     */
-    private Long bytesSpeed;
-
-    /**
-     * 音视频轨道
-     */
-    private List<MediaTrack> tracks;
-
-    /**
-     * 音视频轨道
-     */
-    private String vhost;
-
-    public boolean isRegist() {
-        return regist;
-    }
-
-    public void setRegist(boolean regist) {
-        this.regist = regist;
-    }
-
-    /**
-     * 是否是docker部署, docker部署不会自动更新zlm使用的端口,需要自己手动修改
-     */
-    private boolean docker;
-
-    public static class MediaTrack {
-        /**
-         * 音频通道数
-         */
-        private int channels;
-
-        /**
-         *  H264 = 0, H265 = 1, AAC = 2, G711A = 3, G711U = 4
-         */
-        private int codecId;
-
-        /**
-         * 编码类型名称 CodecAAC CodecH264
-         */
-        private String codecIdName;
-
-        /**
-         * Video = 0, Audio = 1
-         */
-        private int codecType;
-
-        /**
-         * 轨道是否准备就绪
-         */
-        private boolean ready;
-
-        /**
-         * 音频采样位数
-         */
-        private int sampleBit;
-
-        /**
-         * 音频采样率
-         */
-        private int sampleRate;
-
-        /**
-         * 视频fps
-         */
-        private int fps;
-
-        /**
-         * 视频高
-         */
-        private int height;
-
-        /**
-         * 视频宽
-         */
-        private int width;
-
-        public int getChannels() {
-            return channels;
-        }
-
-        public void setChannels(int channels) {
-            this.channels = channels;
-        }
-
-        public int getCodecId() {
-            return codecId;
-        }
-
-        public void setCodecId(int codecId) {
-            this.codecId = codecId;
-        }
-
-        public String getCodecIdName() {
-            return codecIdName;
-        }
-
-        public void setCodecIdName(String codecIdName) {
-            this.codecIdName = codecIdName;
-        }
-
-        public int getCodecType() {
-            return codecType;
-        }
-
-        public void setCodecType(int codecType) {
-            this.codecType = codecType;
-        }
-
-        public boolean isReady() {
-            return ready;
-        }
-
-        public void setReady(boolean ready) {
-            this.ready = ready;
-        }
-
-        public int getSampleBit() {
-            return sampleBit;
-        }
-
-        public void setSampleBit(int sampleBit) {
-            this.sampleBit = sampleBit;
-        }
-
-        public int getSampleRate() {
-            return sampleRate;
-        }
-
-        public void setSampleRate(int sampleRate) {
-            this.sampleRate = sampleRate;
-        }
-
-        public int getFps() {
-            return fps;
-        }
-
-        public void setFps(int fps) {
-            this.fps = fps;
-        }
-
-        public int getHeight() {
-            return height;
-        }
-
-        public void setHeight(int height) {
-            this.height = height;
-        }
-
-        public int getWidth() {
-            return width;
-        }
-
-        public void setWidth(int width) {
-            this.width = width;
-        }
-    }
-
-    public static class OriginSock{
-        private String identifier;
-        private String local_ip;
-        private int local_port;
-        private String peer_ip;
-        private int peer_port;
-
-        public String getIdentifier() {
-            return identifier;
-        }
-
-        public void setIdentifier(String identifier) {
-            this.identifier = identifier;
-        }
-
-        public String getLocal_ip() {
-            return local_ip;
-        }
-
-        public void setLocal_ip(String local_ip) {
-            this.local_ip = local_ip;
-        }
-
-        public int getLocal_port() {
-            return local_port;
-        }
-
-        public void setLocal_port(int local_port) {
-            this.local_port = local_port;
-        }
-
-        public String getPeer_ip() {
-            return peer_ip;
-        }
-
-        public void setPeer_ip(String peer_ip) {
-            this.peer_ip = peer_ip;
-        }
-
-        public int getPeer_port() {
-            return peer_port;
-        }
-
-        public void setPeer_port(int peer_port) {
-            this.peer_port = peer_port;
-        }
-    }
-
-    private StreamInfo streamInfo;
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getTotalReaderCount() {
-        return totalReaderCount;
-    }
-
-    public void setTotalReaderCount(String totalReaderCount) {
-        this.totalReaderCount = totalReaderCount;
-    }
-
-
-    public int getOriginType() {
-        return originType;
-    }
-
-    public void setOriginType(int originType) {
-        this.originType = originType;
-    }
-
-
-    public String getOriginTypeStr() {
-        return originTypeStr;
-    }
-
-    public void setOriginTypeStr(String originTypeStr) {
-        this.originTypeStr = originTypeStr;
-    }
-
-    public String getOriginUrl() {
-        return originUrl;
-    }
-
-    public void setOriginUrl(String originUrl) {
-        this.originUrl = originUrl;
-    }
-
-    public Long getCreateStamp() {
-        return createStamp;
-    }
-
-    public void setCreateStamp(Long createStamp) {
-        this.createStamp = createStamp;
-    }
-
-    public Long getAliveSecond() {
-        return aliveSecond;
-    }
-
-    public void setAliveSecond(Long aliveSecond) {
-        this.aliveSecond = aliveSecond;
-    }
-
-    public List<MediaTrack> getTracks() {
-        return tracks;
-    }
-
-    public void setTracks(List<MediaTrack> tracks) {
-        this.tracks = tracks;
-    }
-
-    public String getSchema() {
-        return schema;
-    }
-
-    public void setSchema(String schema) {
-        this.schema = schema;
-    }
-
-    public void setOriginSock(OriginSock originSock) {
-        this.originSock = originSock;
-    }
-
-    public Long getBytesSpeed() {
-        return bytesSpeed;
-    }
-
-    public void setBytesSpeed(Long bytesSpeed) {
-        this.bytesSpeed = bytesSpeed;
-    }
-
-    public String getVhost() {
-        return vhost;
-    }
-
-    public void setVhost(String vhost) {
-        this.vhost = vhost;
-    }
-
-    public OriginSock getOriginSock() {
-        return originSock;
-    }
-
-    public boolean isDocker() {
-        return docker;
-    }
-
-    public void setDocker(boolean docker) {
-        this.docker = docker;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public StreamInfo getStreamInfo() {
-        return streamInfo;
-    }
-
-    public void setStreamInfo(StreamInfo streamInfo) {
-        this.streamInfo = streamInfo;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
deleted file mode 100644
index 181fc5b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-
-import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import org.springframework.util.StringUtils;
-
-import java.util.HashMap;
-
-public class MediaServerItem{
-
-    private String id;
-
-    private String ip;
-
-    private String hookIp;
-
-    private String sdpIp;
-
-    private String streamIp;
-
-    private int httpPort;
-
-    private int httpSSlPort;
-
-    private int rtmpPort;
-
-    private int rtmpSSlPort;
-
-    private int rtpProxyPort;
-
-    private int rtspPort;
-
-    private int rtspSSLPort;
-
-    private boolean autoConfig;
-
-    private String secret;
-
-    private int streamNoneReaderDelayMS;
-
-    private int hookAliveInterval;
-
-    private boolean rtpEnable;
-
-    private boolean status;
-
-    private String rtpPortRange;
-
-    private String sendRtpPortRange;
-
-    private int recordAssistPort;
-
-    private String createTime;
-
-    private String updateTime;
-
-    private String lastKeepaliveTime;
-
-    private boolean defaultServer;
-
-    private SsrcConfig ssrcConfig;
-
-    private int currentPort;
-
-
-    /**
-     * 每一台ZLM都有一套独立的SSRC列表
-     * 在ApplicationCheckRunner里对mediaServerSsrcMap进行初始化
-     */
-    private HashMap<String, SsrcConfig> mediaServerSsrcMap;
-
-    public MediaServerItem() {
-    }
-
-    public MediaServerItem(ZLMServerConfig zlmServerConfig, String sipIp) {
-        id = zlmServerConfig.getGeneralMediaServerId();
-        ip = zlmServerConfig.getIp();
-        hookIp = StringUtils.isEmpty(zlmServerConfig.getHookIp())? sipIp: zlmServerConfig.getHookIp();
-        sdpIp = StringUtils.isEmpty(zlmServerConfig.getSdpIp())? zlmServerConfig.getIp(): zlmServerConfig.getSdpIp();
-        streamIp = StringUtils.isEmpty(zlmServerConfig.getStreamIp())? zlmServerConfig.getIp(): zlmServerConfig.getStreamIp();
-        httpPort = zlmServerConfig.getHttpPort();
-        httpSSlPort = zlmServerConfig.getHttpSSLport();
-        rtmpPort = zlmServerConfig.getRtmpPort();
-        rtmpSSlPort = zlmServerConfig.getRtmpSslPort();
-        rtpProxyPort = zlmServerConfig.getRtpProxyPort();
-        rtspPort = zlmServerConfig.getRtspPort();
-        rtspSSLPort = zlmServerConfig.getRtspSSlport();
-        autoConfig = true; // 默认值true;
-        secret = zlmServerConfig.getApiSecret();
-        streamNoneReaderDelayMS = zlmServerConfig.getGeneralStreamNoneReaderDelayMS();
-        hookAliveInterval = zlmServerConfig.getHookAliveInterval();
-        rtpEnable = false; // 默认使用单端口;直到用户自己设置开启多端口
-        rtpPortRange = zlmServerConfig.getPortRange().replace("_",","); // 默认使用30000,30500作为级联时发送流的端口号
-        sendRtpPortRange = "30000,30500"; // 默认使用30000,30500作为级联时发送流的端口号
-        recordAssistPort = 0; // 默认关闭
-
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public String getHookIp() {
-        return hookIp;
-    }
-
-    public void setHookIp(String hookIp) {
-        this.hookIp = hookIp;
-    }
-
-    public String getSdpIp() {
-        return sdpIp;
-    }
-
-    public void setSdpIp(String sdpIp) {
-        this.sdpIp = sdpIp;
-    }
-
-    public String getStreamIp() {
-        return streamIp;
-    }
-
-    public void setStreamIp(String streamIp) {
-        this.streamIp = streamIp;
-    }
-
-    public int getHttpPort() {
-        return httpPort;
-    }
-
-    public void setHttpPort(int httpPort) {
-        this.httpPort = httpPort;
-    }
-
-    public int getHttpSSlPort() {
-        return httpSSlPort;
-    }
-
-    public void setHttpSSlPort(int httpSSlPort) {
-        this.httpSSlPort = httpSSlPort;
-    }
-
-    public int getRtmpPort() {
-        return rtmpPort;
-    }
-
-    public void setRtmpPort(int rtmpPort) {
-        this.rtmpPort = rtmpPort;
-    }
-
-    public int getRtmpSSlPort() {
-        return rtmpSSlPort;
-    }
-
-    public void setRtmpSSlPort(int rtmpSSlPort) {
-        this.rtmpSSlPort = rtmpSSlPort;
-    }
-
-    public int getRtpProxyPort() {
-        return rtpProxyPort;
-    }
-
-    public void setRtpProxyPort(int rtpProxyPort) {
-        this.rtpProxyPort = rtpProxyPort;
-    }
-
-    public int getRtspPort() {
-        return rtspPort;
-    }
-
-    public void setRtspPort(int rtspPort) {
-        this.rtspPort = rtspPort;
-    }
-
-    public int getRtspSSLPort() {
-        return rtspSSLPort;
-    }
-
-    public void setRtspSSLPort(int rtspSSLPort) {
-        this.rtspSSLPort = rtspSSLPort;
-    }
-
-    public boolean isAutoConfig() {
-        return autoConfig;
-    }
-
-    public void setAutoConfig(boolean autoConfig) {
-        this.autoConfig = autoConfig;
-    }
-
-    public String getSecret() {
-        return secret;
-    }
-
-    public void setSecret(String secret) {
-        this.secret = secret;
-    }
-
-    public int getStreamNoneReaderDelayMS() {
-        return streamNoneReaderDelayMS;
-    }
-
-    public void setStreamNoneReaderDelayMS(int streamNoneReaderDelayMS) {
-        this.streamNoneReaderDelayMS = streamNoneReaderDelayMS;
-    }
-
-    public boolean isRtpEnable() {
-        return rtpEnable;
-    }
-
-    public void setRtpEnable(boolean rtpEnable) {
-        this.rtpEnable = rtpEnable;
-    }
-
-    public String getRtpPortRange() {
-        return rtpPortRange;
-    }
-
-    public void setRtpPortRange(String rtpPortRange) {
-        this.rtpPortRange = rtpPortRange;
-    }
-
-    public int getRecordAssistPort() {
-        return recordAssistPort;
-    }
-
-    public void setRecordAssistPort(int recordAssistPort) {
-        this.recordAssistPort = recordAssistPort;
-    }
-
-    public boolean isDefaultServer() {
-        return defaultServer;
-    }
-
-    public void setDefaultServer(boolean defaultServer) {
-        this.defaultServer = defaultServer;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(String updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public HashMap<String, SsrcConfig> getMediaServerSsrcMap() {
-        return mediaServerSsrcMap;
-    }
-
-    public void setMediaServerSsrcMap(HashMap<String, SsrcConfig> mediaServerSsrcMap) {
-        this.mediaServerSsrcMap = mediaServerSsrcMap;
-    }
-
-    public SsrcConfig getSsrcConfig() {
-        return ssrcConfig;
-    }
-
-    public void setSsrcConfig(SsrcConfig ssrcConfig) {
-        this.ssrcConfig = ssrcConfig;
-    }
-
-    public int getCurrentPort() {
-        return currentPort;
-    }
-
-    public void setCurrentPort(int currentPort) {
-        this.currentPort = currentPort;
-    }
-
-    public boolean isStatus() {
-        return status;
-    }
-
-    public void setStatus(boolean status) {
-        this.status = status;
-    }
-
-    public String getLastKeepaliveTime() {
-        return lastKeepaliveTime;
-    }
-
-    public void setLastKeepaliveTime(String lastKeepaliveTime) {
-        this.lastKeepaliveTime = lastKeepaliveTime;
-    }
-
-    public String getSendRtpPortRange() {
-        return sendRtpPortRange;
-    }
-
-    public void setSendRtpPortRange(String sendRtpPortRange) {
-        this.sendRtpPortRange = sendRtpPortRange;
-    }
-
-    public int getHookAliveInterval() {
-        return hookAliveInterval;
-    }
-
-    public void setHookAliveInterval(int hookAliveInterval) {
-        this.hookAliveInterval = hookAliveInterval;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java
deleted file mode 100644
index 630e825..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-public enum OriginType {
-    // 不可调整顺序
-    UNKNOWN("UNKNOWN"),
-    RTMP_PUSH("PUSH"),
-    RTSP_PUSH("PUSH"),
-    RTP_PUSH("RTP"),
-    PULL("PULL"),
-    FFMPEG_PULL("PULL"),
-    MP4_VOD("MP4_VOD"),
-    DEVICE_CHN("DEVICE_CHN"),
-    RTC_PUSH("PUSH");
-
-    private final String type;
-    OriginType(String type) {
-        this.type = type;
-    }
-
-    public String getType() {
-        return type;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
deleted file mode 100644
index 39685b0..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-
-public class StreamProxyItem extends GbStream {
-
-    private String type;
-    private String app;
-    private String stream;
-    private String mediaServerId;
-    private String url;
-    private String src_url;
-    private String dst_url;
-    private int timeout_ms;
-    private String ffmpeg_cmd_key;
-    private String rtp_type;
-    private boolean enable;
-    private boolean enable_hls;
-    private boolean enable_mp4;
-    private boolean enable_remove_none_reader; // 无人观看时删除
-    private String platformGbId;
-    private String createTime;
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    @Override
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    @Override
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public String getSrc_url() {
-        return src_url;
-    }
-
-    public void setSrc_url(String src_url) {
-        this.src_url = src_url;
-    }
-
-    public String getDst_url() {
-        return dst_url;
-    }
-
-    public void setDst_url(String dst_url) {
-        this.dst_url = dst_url;
-    }
-
-    public int getTimeout_ms() {
-        return timeout_ms;
-    }
-
-    public void setTimeout_ms(int timeout_ms) {
-        this.timeout_ms = timeout_ms;
-    }
-
-    public String getFfmpeg_cmd_key() {
-        return ffmpeg_cmd_key;
-    }
-
-    public void setFfmpeg_cmd_key(String ffmpeg_cmd_key) {
-        this.ffmpeg_cmd_key = ffmpeg_cmd_key;
-    }
-
-    public String getRtp_type() {
-        return rtp_type;
-    }
-
-    public void setRtp_type(String rtp_type) {
-        this.rtp_type = rtp_type;
-    }
-
-    public boolean isEnable() {
-        return enable;
-    }
-
-    public void setEnable(boolean enable) {
-        this.enable = enable;
-    }
-
-    public boolean isEnable_hls() {
-        return enable_hls;
-    }
-
-    public void setEnable_hls(boolean enable_hls) {
-        this.enable_hls = enable_hls;
-    }
-
-    public boolean isEnable_mp4() {
-        return enable_mp4;
-    }
-
-    public void setEnable_mp4(boolean enable_mp4) {
-        this.enable_mp4 = enable_mp4;
-    }
-
-
-    public String getPlatformGbId() {
-        return platformGbId;
-    }
-
-    public void setPlatformGbId(String platformGbId) {
-        this.platformGbId = platformGbId;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public boolean isEnable_remove_none_reader() {
-        return enable_remove_none_reader;
-    }
-
-    public void setEnable_remove_none_reader(boolean enable_remove_none_reader) {
-        this.enable_remove_none_reader = enable_remove_none_reader;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java
deleted file mode 100644
index 1336807..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.List;
-
-
-public class StreamPushItem extends GbStream implements Comparable<StreamPushItem>{
-
-    /**
-     * id
-     */
-    private Integer id;
-
-    /**
-     * 应用名
-     */
-    private String app;
-
-    /**
-     * 流id
-     */
-    private String stream;
-
-    /**
-     * 观看总人数,包括hls/rtsp/rtmp/http-flv/ws-flv
-     */
-    private String totalReaderCount;
-
-    /**
-     * 协议 包括hls/rtsp/rtmp/http-flv/ws-flv
-     */
-    private List<MediaSchema> schemas;
-
-    /**
-     * 产生源类型,
-     * unknown = 0,
-     * rtmp_push=1,
-     * rtsp_push=2,
-     * rtp_push=3,
-     * pull=4,
-     * ffmpeg_pull=5,
-     * mp4_vod=6,
-     * device_chn=7
-     */
-    private int originType;
-
-    /**
-     * 客户端和服务器网络信息,可能为null类型
-     */
-    private MediaItem.OriginSock originSock;
-
-    /**
-     * 产生源类型的字符串描述
-     */
-    private String originTypeStr;
-
-    /**
-     * 产生源的url
-     */
-    private String originUrl;
-
-    /**
-     * 存活时间,单位秒
-     */
-    private Long aliveSecond;
-
-    /**
-     * 音视频轨道
-     */
-    private List<MediaItem.MediaTrack> tracks;
-
-    /**
-     * 音视频轨道
-     */
-    private String vhost;
-
-    /**
-     * 使用的流媒体ID
-     */
-    private String mediaServerId;
-
-    public String getVhost() {
-        return vhost;
-    }
-
-    public void setVhost(String vhost) {
-        this.vhost = vhost;
-    }
-
-
-    @Override
-    public int compareTo(@NotNull StreamPushItem streamPushItem) {
-        return Long.valueOf(super.createStamp - streamPushItem.getCreateStamp().intValue()).intValue();
-    }
-
-    public static class MediaSchema {
-        private String schema;
-        private Long bytesSpeed;
-
-        public String getSchema() {
-            return schema;
-        }
-
-        public void setSchema(String schema) {
-            this.schema = schema;
-        }
-
-        public Long getBytesSpeed() {
-            return bytesSpeed;
-        }
-
-        public void setBytesSpeed(Long bytesSpeed) {
-            this.bytesSpeed = bytesSpeed;
-        }
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getTotalReaderCount() {
-        return totalReaderCount;
-    }
-
-    public void setTotalReaderCount(String totalReaderCount) {
-        this.totalReaderCount = totalReaderCount;
-    }
-
-    public List<MediaSchema> getSchemas() {
-        return schemas;
-    }
-
-    public void setSchemas(List<MediaSchema> schemas) {
-        this.schemas = schemas;
-    }
-
-    public int getOriginType() {
-        return originType;
-    }
-
-    public void setOriginType(int originType) {
-        this.originType = originType;
-    }
-
-    public MediaItem.OriginSock getOriginSock() {
-        return originSock;
-    }
-
-    public void setOriginSock(MediaItem.OriginSock originSock) {
-        this.originSock = originSock;
-    }
-
-
-    public String getOriginTypeStr() {
-        return originTypeStr;
-    }
-
-    public void setOriginTypeStr(String originTypeStr) {
-        this.originTypeStr = originTypeStr;
-    }
-
-    public String getOriginUrl() {
-        return originUrl;
-    }
-
-    public void setOriginUrl(String originUrl) {
-        this.originUrl = originUrl;
-    }
-
-    public Long getAliveSecond() {
-        return aliveSecond;
-    }
-
-    public void setAliveSecond(Long aliveSecond) {
-        this.aliveSecond = aliveSecond;
-    }
-
-    public List<MediaItem.MediaTrack> getTracks() {
-        return tracks;
-    }
-
-    public void setTracks(List<MediaItem.MediaTrack> tracks) {
-        this.tracks = tracks;
-    }
-
-
-    @Override
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    @Override
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-}
-
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java
deleted file mode 100644
index 624e4e1..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/ZLMRunInfo.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.dto;
-
-/**
- * 记录zlm运行中一些参数
- */
-public class ZLMRunInfo {
-
-    /**
-     * zlm当前流数量
-     */
-    private int mediaCount;
-
-    /**
-     * 在线状态
-     */
-    private boolean online;
-
-    public int getMediaCount() {
-        return mediaCount;
-    }
-
-    public void setMediaCount(int mediaCount) {
-        this.mediaCount = mediaCount;
-    }
-
-    public boolean isOnline() {
-        return online;
-    }
-
-    public void setOnline(boolean online) {
-        this.online = online;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java
deleted file mode 100644
index 8ffbdde..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMEventAbstract.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.event;
-
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import org.springframework.context.ApplicationEvent;
-
-public abstract class ZLMEventAbstract extends ApplicationEvent {
-
-
-    private static final long serialVersionUID = 1L;
-
-    private String mediaServerId;
-
-
-    public ZLMEventAbstract(Object source) {
-        super(source);
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java
deleted file mode 100644
index 042b2d1..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMKeepliveTimeoutListener.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.event;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.stereotype.Component;
-
-/**    
- * @description:设备心跳超时监听,借助redis过期特性,进行监听,监听到说明设备心跳超时,发送离线事件
- * @author: swwheihei
- * @date:   2020年5月6日 上午11:35:46     
- */
-@Component
-public class ZLMKeepliveTimeoutListener extends RedisKeyExpirationEventMessageListener {
-
-    private Logger logger = LoggerFactory.getLogger(ZLMKeepliveTimeoutListener.class);
-
-	@Autowired
-	private EventPublisher publisher;
-
-	@Autowired
-	private ZLMRESTfulUtils zlmresTfulUtils;
-
-	@Autowired
-	private UserSetup userSetup;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-    public ZLMKeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
-        super(listenerContainer, userSetup);
-    }
-
-
-    /**
-     * 监听失效的key,key格式为keeplive_deviceId
-     * @param message
-     * @param pattern
-     */
-    @Override
-    public void onMessage(Message message, byte[] pattern) {
-        //  获取失效的key
-        String expiredKey = message.toString();
-        String KEEPLIVEKEY_PREFIX = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetup.getServerId() + "_";
-        if(!expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
-        	return;
-        }
-        
-        String mediaServerId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
-        logger.info("[zlm心跳到期]:" + mediaServerId);
-        // 发起http请求验证zlm是否确实无法连接,如果确实无法连接则发送离线事件,否则不作处理
-        MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-        JSONObject mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
-        if (mediaServerConfig == null) {
-            publisher.zlmOfflineEventPublish(mediaServerId);
-        }else {
-            logger.info("[zlm心跳到期]:{}验证后zlm仍在线,恢复心跳信息", mediaServerId);
-            // 添加zlm信息
-            mediaServerService.updateMediaServerKeepalive(mediaServerId, mediaServerConfig);
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java
deleted file mode 100644
index 8207bdd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOfflineEvent.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.event;
-
-/**
- * zlm离线事件类
- */
-public class ZLMOfflineEvent extends ZLMEventAbstract {
-
-	public ZLMOfflineEvent(Object source) {
-		super(source);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java
deleted file mode 100644
index 612ff9d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMOnlineEvent.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.event;
-
-/**
- * zlm在线事件
- */
-public class ZLMOnlineEvent extends ZLMEventAbstract {
-
-	public ZLMOnlineEvent(Object source) {
-		super(source);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java
deleted file mode 100644
index ca6fdfe..0000000
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/event/ZLMStatusEventListener.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.genersoft.iot.vmp.media.zlm.event;
-
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IPlayService;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-import java.text.SimpleDateFormat;
-
-/**
- * @description: 在线事件监听器,监听到离线后,修改设备离在线状态。 设备在线有两个来源:
- *               1、设备主动注销,发送注销指令
- *               2、设备未知原因离线,心跳超时
- * @author: swwheihei
- * @date: 2020年5月6日 下午1:51:23
- */
-@Component
-public class ZLMStatusEventListener {
-	
-	private final static Logger logger = LoggerFactory.getLogger(ZLMStatusEventListener.class);
-
-	@Autowired
-	private IStreamPushService streamPushService;
-
-	@Autowired
-	private IStreamProxyService streamProxyService;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@Autowired
-	private IPlayService playService;
-
-	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-	@Async
-	@EventListener
-	public void onApplicationEvent(ZLMOnlineEvent event) {
-
-		logger.info("ZLM上线事件触发,ID:" + event.getMediaServerId());
-		streamPushService.zlmServerOnline(event.getMediaServerId());
-		streamProxyService.zlmServerOnline(event.getMediaServerId());
-
-	}
-
-	@Async
-	@EventListener
-	public void onApplicationEvent(ZLMOfflineEvent event) {
-
-		logger.info("ZLM离线事件触发,ID:" + event.getMediaServerId());
-		// 处理ZLM离线
-		mediaServerService.zlmServerOffline(event.getMediaServerId());
-		streamProxyService.zlmServerOffline(event.getMediaServerId());
-		streamPushService.zlmServerOffline(event.getMediaServerId());
-		playService.zlmServerOffline(event.getMediaServerId());
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipment.java b/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipment.java
deleted file mode 100644
index bb0a154..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipment.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.genersoft.iot.vmp.netty.business.entity;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 对接设备信息表 实体类
- *
- * @author zhongrj
- * @since 2023-02-23
- */
-@Data
-@ApiModel(value = "TalkBackEquipment对象", description = "对接设备信息表")
-public class TalkBackEquipment implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键id
-	 */
-	@ApiModelProperty(value = "主键id")
-	private Long id;
-
-	/**
-	 * 设备名称
-	 */
-	@ApiModelProperty(value = "设备名称")
-	private String name;
-
-	/**
-	 * 设备编号
-	 */
-	@ApiModelProperty(value = "设备编号")
-	private String code;
-
-	/**
-	 * 设备状态 0:离线  1:在线
-	 */
-	@ApiModelProperty(value = "设备状态")
-	private Integer status;
-
-	/**
-	 * 终端编号
-	 */
-	@ApiModelProperty(value = "终端编号")
-	private String terminalNumber;
-
-	/**
-	 * 经度
-	 */
-	@ApiModelProperty(value = "经度")
-	private String longitude;
-
-	/**
-	 * 纬度
-	 */
-	@ApiModelProperty(value = "纬度")
-	private String latitude;
-
-	/**
-	 * 速度,单位 米/秒
-	 */
-	@ApiModelProperty(value = "速度,单位 米/秒")
-	private String speed;
-
-	/**
-	 * 方向,以正北方向为 0 角度,顺时针方向偏转
-	 */
-	@ApiModelProperty(value = "方向,以正北方向为 0 角度,顺时针方向偏转")
-	private String direction;
-
-	/**
-	 * 高程,单位:米
-	 */
-	@ApiModelProperty(value = "高程,单位:米")
-	private String elevation;
-
-	/**
-	 * 精度
-	 */
-	@ApiModelProperty(value = "精度")
-	private String precisions;
-
-	/**
-	 * 日期
-	 */
-	@ApiModelProperty(value = "日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date receiveTime;
-
-	/**
-	 * 创建时间
-	 */
-	@ApiModelProperty(value = "创建时间")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createTime;
-
-	/**
-	 * 更新时间
-	 */
-	@ApiModelProperty(value = "更新时间")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date updateTime;
-
-	/**
-	 * 说明
-	 */
-//	@ApiModelProperty(value = "说明")
-//	private String remark;
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipmentRecord.java b/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipmentRecord.java
deleted file mode 100644
index c45be1a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/entity/TalkBackEquipmentRecord.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.genersoft.iot.vmp.netty.business.entity;
-
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 对接设备信息记录表 实体类
- *
- * @author zhongrj
- * @since 2023-02-23
- */
-@Data
-@ApiModel(value = "TalkBackEquipment对象", description = "对接设备信息记录表")
-public class TalkBackEquipmentRecord implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键id
-	 */
-	@ApiModelProperty(value = "主键id")
-	private Long id;
-
-	/**
-	 * 设备id
-	 */
-	@ApiModelProperty(value = "设备id")
-	private Long talkBackEquipmentId;
-
-	/**
-	 * 设备状态 0:离线  1:在线
-	 */
-	@ApiModelProperty(value = "设备状态")
-	private Integer status;
-
-	/**
-	 * 终端编号
-	 */
-	@ApiModelProperty(value = "终端编号")
-	private String terminalNumber;
-
-	/**
-	 * 经度
-	 */
-	@ApiModelProperty(value = "经度")
-	private String longitude;
-
-	/**
-	 * 纬度
-	 */
-	@ApiModelProperty(value = "纬度")
-	private String latitude;
-
-	/**
-	 * 速度,单位 米/秒
-	 */
-	@ApiModelProperty(value = "速度,单位 米/秒")
-	private String speed;
-
-	/**
-	 * 方向,以正北方向为 0 角度,顺时针方向偏转
-	 */
-	@ApiModelProperty(value = "方向,以正北方向为 0 角度,顺时针方向偏转")
-	private String direction;
-
-	/**
-	 * 高程,单位:米
-	 */
-	@ApiModelProperty(value = "高程,单位:米")
-	private String elevation;
-
-	/**
-	 * 精度
-	 */
-	@ApiModelProperty(value = "精度")
-	private String precisions;
-
-	/**
-	 * 日期
-	 */
-	@ApiModelProperty(value = "日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date receiveTime;
-
-	/**
-	 * 创建时间
-	 */
-	@ApiModelProperty(value = "创建时间")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createTime;
-
-//	/**
-//	 * 说明
-//	 */
-//	@ApiModelProperty(value = "说明")
-//	private String remark;
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.java b/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.java
deleted file mode 100644
index e6ef615..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.netty.business.mapper;
-
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipment;
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipmentRecord;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.SelectKey;
-
-/**
- * 对讲设备mapper映射层
- * @author zhongrj
- * @date 2023-03-02
- */
-@Mapper
-public interface TalkBackEquipmentMapper {
-
-    /**
-     * 新增对讲设备数据
-     * @param talkBackEquipment
-     */
-    void saveTalkBackEquipment(TalkBackEquipment talkBackEquipment);
-
-    /**
-     * 新增对讲设备历史数据
-     * @param talkBackEquipmentRecord
-     */
-    void saveTalkBackEquipmentRecord(TalkBackEquipmentRecord talkBackEquipmentRecord);
-
-    /**
-     * 查询设备信息
-     * @param code
-     * @return
-     */
-    @Select("select * from sys_talk_back_equipment where terminal_number = #{code}")
-    TalkBackEquipment getTalkBackEquipment(String code);
-
-    /**
-     * 修改对讲设备信息
-     * @param talkBackEquipment
-     */
-    void updateTalkBackEquipment(TalkBackEquipment talkBackEquipment);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.xml b/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.xml
deleted file mode 100644
index a372daf..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/mapper/TalkBackEquipmentMapper.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.genersoft.iot.vmp.netty.business.mapper.TalkBackEquipmentMapper">
-
-    <!--新增对讲设备信息-->
-    <insert id="saveTalkBackEquipment" useGeneratedKeys="true" keyProperty="id">
-        insert into sys_talk_back_equipment
-        (
-        name,code,status,terminal_number,longitude,latitude,
-        speed,direction,elevation,precisions,receive_time,create_time,update_time
-        )
-        values
-        (
-        #{name},#{code},#{status},#{terminalNumber},#{longitude},#{latitude},
-        #{speed},#{direction},#{elevation},#{precisions},#{receiveTime},#{createTime},#{updateTime}
-        )
-    </insert>
-
-    <!--新增对接设备历史记录信息-->
-    <insert id="saveTalkBackEquipmentRecord">
-        insert into sys_talk_back_equipment_record
-        (
-        talk_back_equipment_id,status,terminal_number,
-        longitude,latitude,speed,direction,elevation,precisions,receive_time,create_time
-        )
-        values
-        (
-        #{talkBackEquipmentId},#{status},#{terminalNumber},
-        #{longitude},#{latitude},#{speed},#{direction},#{elevation},#{precisions},#{receiveTime},#{createTime}
-        )
-    </insert>
-
-    <!--修改对讲设备信息-->
-    <update id="updateTalkBackEquipment">
-        update sys_talk_back_equipment
-        set
-        code = #{code},
-        name = #{name},
-        status = #{status},
-        <if test="null!=terminalNumber and terminalNumber!=''">
-            terminal_number = #{terminalNumber},
-        </if>
-        <if test="null!=longitude and longitude!=''">
-            longitude = #{longitude},
-        </if>
-        <if test="null!=latitude and latitude!=''">
-            latitude = #{latitude},
-        </if>
-        <if test="null!=speed and speed!=''">
-            speed = #{speed},
-        </if>
-        <if test="null!=direction and direction!=''">
-            direction = #{direction},
-        </if>
-        <if test="null!=elevation and elevation!=''">
-            elevation = #{elevation},
-        </if>
-        <if test="null!=precisions and precisions!=''">
-            precisions = #{precisions},
-        </if>
-        <if test="null!=receiveTime">
-            receive_time = #{receiveTime},
-        </if>
-        update_time = #{updateTime}
-        where id = #{id}
-    </update>
-
-</mapper>
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/service/TalkBackEquipmentService.java b/src/main/java/com/genersoft/iot/vmp/netty/business/service/TalkBackEquipmentService.java
deleted file mode 100644
index 3b7383f..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/service/TalkBackEquipmentService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.genersoft.iot.vmp.netty.business.service;
-
-
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipment;
-
-/**
- * 对讲设备信息表 服务类
- *
- * @author zhongrj
- * @date 2023-03-02
- */
-public interface TalkBackEquipmentService{
-
-    /**
-     * 保存对讲设备数据
-     * @param talkBackEquipment
-     */
-    void save(TalkBackEquipment talkBackEquipment);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/business/service/impl/TalkBackEquipmentServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/netty/business/service/impl/TalkBackEquipmentServiceImpl.java
deleted file mode 100644
index 92c8d0f..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/business/service/impl/TalkBackEquipmentServiceImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.genersoft.iot.vmp.netty.business.service.impl;
-
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipment;
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipmentRecord;
-import com.genersoft.iot.vmp.netty.business.mapper.TalkBackEquipmentMapper;
-import com.genersoft.iot.vmp.netty.business.service.TalkBackEquipmentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Date;
-
-/**
- * 对讲设备服务实现层
- * @author zhongrj
- * @date 2023-03-02
- */
-@Service
-public class TalkBackEquipmentServiceImpl implements TalkBackEquipmentService {
-
-    @Autowired
-    private TalkBackEquipmentMapper talkBackEquipmentMapper;
-
-    /**
-     * 保存对讲设备数据
-     * @param talkBackEquipment
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void save(TalkBackEquipment talkBackEquipment) {
-        //判断设备是否已存在,如果存在则更新,不存在则新增
-        TalkBackEquipment backEquipment = talkBackEquipmentMapper.getTalkBackEquipment(talkBackEquipment.getTerminalNumber());
-        if (null==backEquipment) {
-            talkBackEquipment.setCreateTime(new Date());
-            //新增对接设备数据
-            talkBackEquipmentMapper.saveTalkBackEquipment(talkBackEquipment);
-        }else {
-            talkBackEquipment.setId(backEquipment.getId());
-            //修改
-            talkBackEquipmentMapper.updateTalkBackEquipment(talkBackEquipment);
-        }
-        //判断是否存在设备id
-        if (null != talkBackEquipment.getId()) {
-            TalkBackEquipmentRecord equipmentRecord = new TalkBackEquipmentRecord();
-            equipmentRecord.setTalkBackEquipmentId(talkBackEquipment.getId());
-            equipmentRecord.setStatus(talkBackEquipment.getStatus());
-//            equipmentRecord.setUnitName(talkBackEquipment.getUnitName());
-//            equipmentRecord.setUnitCode(talkBackEquipment.getUnitCode());
-//            equipmentRecord.setPoliceName(talkBackEquipment.getPoliceName());
-//            equipmentRecord.setPoliceCode(talkBackEquipment.getPoliceCode());
-            equipmentRecord.setTerminalNumber(talkBackEquipment.getTerminalNumber());
-            equipmentRecord.setLongitude(talkBackEquipment.getLongitude());
-            equipmentRecord.setLatitude(talkBackEquipment.getLatitude());
-            equipmentRecord.setSpeed(talkBackEquipment.getSpeed());
-            equipmentRecord.setDirection(talkBackEquipment.getDirection());
-            equipmentRecord.setElevation(talkBackEquipment.getElevation());
-            equipmentRecord.setPrecisions(talkBackEquipment.getPrecisions());
-            equipmentRecord.setReceiveTime(talkBackEquipment.getReceiveTime());
-            equipmentRecord.setCreateTime(new Date());
-            //新增记录信息
-            talkBackEquipmentMapper.saveTalkBackEquipmentRecord(equipmentRecord);
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/config/MyDecoder.java b/src/main/java/com/genersoft/iot/vmp/netty/config/MyDecoder.java
deleted file mode 100644
index 0d2488d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/config/MyDecoder.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.genersoft.iot.vmp.netty.config;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 自定义解析
- */
-@Component
-public class MyDecoder extends ByteToMessageDecoder {
-
-    @Override
-    protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception {
-        //创建字节数组,buffer.readableBytes可读字节长度
-        byte[] b = new byte[buffer.readableBytes()];
-        //复制内容到字节数组b
-        buffer.readBytes(b);
-        //字节数组转字符串
-        String str = new String(b);
-
-        System.out.println(str);
-
-        out.add(bytesToHexString(b));
-    }
-
-    public String bytesToHexString(byte[] bArray) {
-        StringBuffer sb = new StringBuffer(bArray.length);
-        String sTemp;
-        for (int i = 0; i < bArray.length; i++) {
-            sTemp = Integer.toHexString(0xFF & bArray[i]);
-            if (sTemp.length() < 2)
-                sb.append(0);
-            sb.append(sTemp.toUpperCase());
-        }
-        return sb.toString();
-    }
-
-    public static String toHexString1(byte[] b) {
-        StringBuffer buffer = new StringBuffer();
-        for (int i = 0; i < b.length; ++i) {
-            buffer.append(toHexString1(b[i]));
-        }
-        return buffer.toString();
-    }
-
-    public static String toHexString1(byte b) {
-        String s = Integer.toHexString(b & 0xFF);
-        if (s.length() == 1) {
-            return "0" + s;
-        } else {
-            return s;
-        }
-    }
-
-    /**
-     * 16进制字符串转换为字符串
-     *
-     * @param s
-     * @return
-     */
-    public static String hexStringToString(String s) {
-        if (s == null || s.equals("")) {
-            return null;
-        }
-        s = s.replace(" ", "");
-        byte[] baKeyword = new byte[s.length() / 2];
-        for (int i = 0; i < baKeyword.length; i++) {
-            try {
-                baKeyword[i] = (byte) (0xff & Integer.parseInt(
-                        s.substring(i * 2, i * 2 + 2), 16));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        try {
-            s = new String(baKeyword, "gbk");
-            new String();
-        } catch (Exception e1) {
-            e1.printStackTrace();
-        }
-        return s;
-    }
-
-
-    /**
-     * Hex字符串转byte
-     * @param inHex 待转换的Hex字符串
-     * @return  转换后的byte
-     */
-    public static byte hexToByte(String inHex){
-        return (byte)Integer.parseInt(inHex,16);
-    }
-
-    /**
-     * Hex字符串转byte
-     * @param inHex 待转换的Hex字符串
-     * @return  转换后的byte
-     */
-    public static short hexTohort(String inHex){
-        return (short)Integer.parseInt(inHex,16);
-    }
-
-
-    /**
-     * hex字符串转byte数组
-     * @param inHex 待转换的Hex字符串
-     * @return  转换后的byte数组结果
-     */
-    public static byte[] hexToByteArray(String inHex){
-        int hexlen = inHex.length();
-        byte[] result;
-        if (hexlen % 2 == 1){
-            //奇数
-            hexlen++;
-            result = new byte[(hexlen/2)];
-            inHex="0"+inHex;
-        }else {
-            //偶数
-            result = new byte[(hexlen/2)];
-        }
-        int j=0;
-        for (int i = 0; i < hexlen; i+=2){
-            result[j]=hexToByte(inHex.substring(i,i+2));
-            j++;
-        }
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/config/SysConfig.java b/src/main/java/com/genersoft/iot/vmp/netty/config/SysConfig.java
deleted file mode 100644
index 454deb6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/config/SysConfig.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.genersoft.iot.vmp.netty.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * netty 相关配置信息
- * @author zhongrj
- * @date 2023-02-21
- */
-@Component
-@ConfigurationProperties(prefix="syscfg")
-public class SysConfig {
-    /**
-     * UDP消息接收端口
-     */
-    private int UdpReceivePort;
-
-    public int getUdpReceivePort() {
-        return UdpReceivePort;
-    }
-
-    public void setUdpReceivePort(int udpReceivePort) {
-        UdpReceivePort = udpReceivePort;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/event/StartupEvent.java b/src/main/java/com/genersoft/iot/vmp/netty/event/StartupEvent.java
deleted file mode 100644
index b7de692..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/event/StartupEvent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.genersoft.iot.vmp.netty.event;
-
-import com.genersoft.iot.vmp.netty.config.SysConfig;
-import com.genersoft.iot.vmp.netty.server.UdpServer;
-import org.junit.platform.commons.logging.Logger;
-import org.junit.platform.commons.logging.LoggerFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
-import org.springframework.stereotype.Component;
-
-/**
- * netty udp 服务启动监听
- * @author zhongrj
- * @date 2023-02-21
- */
-@Component
-public class StartupEvent implements ApplicationListener<ContextRefreshedEvent> {
-
-    private static ApplicationContext context;
-
-    @Override
-    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
-        try {
-            context = contextRefreshedEvent.getApplicationContext();
-            SysConfig sysConfig = (SysConfig) context.getBean(SysConfig.class);
-            //获取 udpServer
-            UdpServer udpServer = (UdpServer)StartupEvent.getBean(UdpServer.class);
-            //开启
-            udpServer.run(sysConfig.getUdpReceivePort());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static Object getBean(Class beanName) {
-        return context != null ? context.getBean(beanName) : null;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/handle/UdpServerHandler.java b/src/main/java/com/genersoft/iot/vmp/netty/handle/UdpServerHandler.java
deleted file mode 100644
index e7679b5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/handle/UdpServerHandler.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package com.genersoft.iot.vmp.netty.handle;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipment;
-import com.genersoft.iot.vmp.netty.business.service.TalkBackEquipmentService;
-import com.genersoft.iot.vmp.netty.config.MyDecoder;
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-import com.genersoft.iot.vmp.policeBodyCamera.service.DeviceChannelPoliceCameraService;
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.SimpleChannelInboundHandler;
-import io.netty.channel.socket.DatagramPacket;
-import io.netty.util.CharsetUtil;
-import okio.Utf8;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.nio.charset.StandardCharsets;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import static com.genersoft.iot.vmp.netty.config.MyDecoder.hexToByte;
-import static com.genersoft.iot.vmp.netty.config.MyDecoder.hexTohort;
-import static com.genersoft.iot.vmp.netty.util.Hex.getDouble;
-import static com.genersoft.iot.vmp.netty.util.Hex.hexStr2Str;
-
-/**
- * updHandler udp 服务端数据接收处理
- * @author zhongrj
- * @date 2023-02-21
- */
-@Component
-public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {
-	private Logger logger = LoggerFactory.getLogger(this.getClass());
-
-	private static UdpServerHandler udpServerHandler;
-
-	@Autowired
-	private TalkBackEquipmentService talkBackEquipmentService;
-
-
-	@Autowired
-	private DeviceChannelPoliceCameraService deviceChannelPoliceCameraService;
-
-	@PostConstruct
-	public void init() {
-		udpServerHandler = this;
-		udpServerHandler.talkBackEquipmentService = this.talkBackEquipmentService;
-		udpServerHandler.deviceChannelPoliceCameraService = this.deviceChannelPoliceCameraService;
-	}
-
-	@Override
-	protected void channelRead0(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket) throws Exception {
-		// 读取收到的数据
-		ByteBuf buf = (ByteBuf) datagramPacket.copy().content();
-		byte[] req = new byte[buf.readableBytes()];
-		buf.readBytes(req);
-		String body = new String(req, CharsetUtil.UTF_8);
-		// 字节转16进制字符串
-		String s = bytesToHexString(req);
-		//获取字符串的长度
-		int length = s.length();
-//		System.out.println("数据长度>>>>>> = " + length);
-		//数据解析
-		dataHandler(s);
-	}
-
-	/**
-	 * 数据解析
-	 * @param s 16位字符串
-	 */
-	private void dataHandler(String s) {
-//		s = "AAAACCCC220000000033373933343732393100000000000000000000000052D50451F77D5D406C04E275FD723C400000015F0000000507E70306103B0A";
-		//创建设备对象
-		TalkBackEquipment backEquipment = new TalkBackEquipment();
-		if (s.substring(4,8).equals("CCCC")) {
-			backEquipment.setStatus(1);
-		}
-		//断开连接
-		if (s.substring(4,8).equals("FFFF")) {
-			backEquipment.setStatus(0);
-		}
-		//截取字符串
-		backEquipment.setTerminalNumber(hexStr2Str(s.substring(20, 60)));
-
-		backEquipment.setLongitude(Double.toString(getDouble(s.substring(60, 76))));
-
-		backEquipment.setLatitude(Double.toString(getDouble(s.substring(76, 92))));
-
-		backEquipment.setSpeed(Short.toString(hexTohort(s.substring(92, 96))));
-		backEquipment.setDirection(Short.toString(hexTohort(s.substring(96, 100))));
-		backEquipment.setElevation(Short.toString(hexTohort(s.substring(100, 104))));
-		backEquipment.setPrecisions(Short.toString(hexTohort(s.substring(104, 108))));
-
-		String year = Short.toString(hexTohort(s.substring(108, 112)));
-
-		String month = Short.toString(hexToByte(s.substring(112, 114)));
-		if (Integer.parseInt(month)<10){
-			month = "0" + month;
-		}
-		String day = Short.toString(hexToByte(s.substring(114, 116)));
-		if (Integer.parseInt(day)<10){
-			day = "0" + day;
-		}
-		String hour = Short.toString(hexToByte(s.substring(116, 118)));
-		if (Integer.parseInt(hour)<10){
-			hour = "0" + hour;
-		}
-		String minute = Short.toString(hexToByte(s.substring(118, 120)));
-		if (Integer.parseInt(minute)<10){
-			minute = "0" + minute;
-		}
-		String second = Short.toString(hexToByte(s.substring(120, 122)));
-		if (Integer.parseInt(second)<10){
-			second = "0" + second;
-		}
-		String time = year + "-" + month + "-" + day +" " + hour + ":" + minute + ":" + second;
-		//时间拼接
-		try {
-			backEquipment.setReceiveTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-		backEquipment.setUpdateTime(new Date());
-		// 新增
-		udpServerHandler.talkBackEquipmentService.save(backEquipment);
-	}
-
-	/**
-	 * 转换
-	 * @param bArray
-	 * @return
-	 */
-	public String bytesToHexString(byte[] bArray) {
-		StringBuffer sb = new StringBuffer(bArray.length);
-		String sTemp;
-		for (int i = 0; i < bArray.length; i++) {
-			sTemp = Integer.toHexString(0xFF & bArray[i]);
-			if (sTemp.length() < 2)
-				sb.append(0);
-			sb.append(sTemp.toUpperCase());
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * 保存设备数据--测试
-	 * @param body
-	 */
-	@Async
-	public void saveTalkBackEquipmentInfo(String body) {
-		DeviceChannel deviceChannelPoliceCamera = new DeviceChannel();
-		deviceChannelPoliceCamera.setAddress("");
-		deviceChannelPoliceCamera.setDeviceId("123");
-		deviceChannelPoliceCamera.setName("CS");
-		deviceChannelPoliceCamera.setLongitude(128.125412);
-		deviceChannelPoliceCamera.setLatitude(29.1254124);
-		deviceChannelPoliceCamera.setPTZTypeText("111");
-		deviceChannelPoliceCamera.setCertNum("10");
-		deviceChannelPoliceCamera.setPTZType(1);
-		deviceChannelPoliceCamera.setStatus(1);
-		deviceChannelPoliceCamera.setChannelId("123456");
-
-		udpServerHandler.deviceChannelPoliceCameraService.insertDeviceChannelPoliceCamera(deviceChannelPoliceCamera);
-	}
-
-	/**
-	 * 捕获异常
-	 * @param ctx
-	 * @param cause
-	 * @throws Exception
-	 */
-	@Override
-	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)throws Exception {
-		logger.error("UdpServerHandler exceptionCaught"+cause.getMessage());
-		System.out.println("UdpServerHandler exceptionCaught"+cause.getMessage());
-		cause.printStackTrace();
-		ctx.close();
-	}
-
-	/**
-	 * 消息没有结束的时候触发
-	 * @param ctx
-	 * @throws Exception
-	 */
-	@Override
-	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
-		ctx.flush();
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java b/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java
deleted file mode 100644
index 7acf869..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.genersoft.iot.vmp.netty.server;
-
-import com.genersoft.iot.vmp.netty.config.MyDecoder;
-import com.genersoft.iot.vmp.netty.handle.UdpServerHandler;
-import io.netty.bootstrap.Bootstrap;
-import io.netty.channel.*;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.nio.NioDatagramChannel;
-import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.codec.string.StringEncoder;
-import io.netty.util.concurrent.DefaultEventExecutorGroup;
-import io.netty.util.concurrent.EventExecutorGroup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-/**
- * updServer udp服务端
- *
- * @author zhongrj
- * @date 2023-02-21
- */
-@Component
-public class UdpServer {
-
-    private static Logger LOG = LoggerFactory.getLogger(UdpServer.class);
-
-
-    //给管道抽象出接口,给Channel更多的能力和配置,例如Channel的状态,参数,IO操作
-    //使用ChannelPipeline实现自定义IO
-    //Channel channel;
-    @Async("taskExecutor")
-    public void run(int port) {
-//		Thread thread = new Thread(new Runnable() {
-//			@Override
-//			public void run() {
-        //启动服务
-        EventLoopGroup workerGroup = new NioEventLoopGroup();
-        //优化使用的线程
-        final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
-
-        try {
-            //udp不能使用ServerBootstrap
-            Bootstrap b = new Bootstrap();
-            //设置UDP通道
-            b.group(workerGroup).channel(NioDatagramChannel.class)
-                    //设置udp的管道工厂
-                    .handler(new ChannelInitializer<NioDatagramChannel>() {
-                        //NioDatagramChannel标志着是UDP格式的
-                        @Override
-                        protected void initChannel(NioDatagramChannel ch)
-                                throws Exception {
-                            // TODO Auto-generated method stub
-                            //创建一个执行Handler的容器
-                            ChannelPipeline pipeline = ch.pipeline();
-//                            pipeline.addLast(new StringDecoder());
-                            pipeline.addLast("decoder",new MyDecoder());
-//                            pipeline.addLast(new StringEncoder());
-                            pipeline.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 4, 4, -8, 0));
-                            //执行具体的自定义处理器
-                            pipeline.addLast(group, "handler", new UdpServerHandler());
-                        }
-
-                    })//初始化处理器
-
-                    //true / false 多播模式(UDP适用),可以向多个主机发送消息
-                    .option(ChannelOption.SO_BROADCAST, true)
-                    // 设置UDP读缓冲区为2M
-                    .option(ChannelOption.SO_RCVBUF, 2048 * 1024)
-                    // 设置UDP写缓冲区为1M
-                    .option(ChannelOption.SO_SNDBUF, 1024 * 1024);
-
-            // 绑定端口,开始接收进来的连接
-            ChannelFuture f = b.bind(port).sync();
-            //获取channel通道
-            //channel=f.channel();
-            System.out.println("UDP Server 启动,端口:" + port);
-            // 等待服务器 socket 关闭 。
-            // 这不会发生,可以优雅地关闭服务器。
-            f.channel().closeFuture().sync();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        } finally {
-            //优雅退出 释放线程池资源
-            group.shutdownGracefully();
-            workerGroup.shutdownGracefully();
-        }
-//			}
-//			});
-//		thread.start();
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/util/Hex.java b/src/main/java/com/genersoft/iot/vmp/netty/util/Hex.java
deleted file mode 100644
index dcfb28b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/util/Hex.java
+++ /dev/null
@@ -1,553 +0,0 @@
-package com.genersoft.iot.vmp.netty.util;
-
-
-import com.genersoft.iot.vmp.netty.config.MyDecoder;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-
-import static com.genersoft.iot.vmp.netty.config.MyDecoder.*;
-
-public class Hex {
-    /**
-     * 用于建立十六进制字符的输出的小写字符数组
-     */
-    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5',
-            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-
-    /**
-     * 用于建立十六进制字符的输出的大写字符数组
-     */
-    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5',
-            '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
-
-    private static ByteBuffer buffer = ByteBuffer.allocate(8);
-
-    /**
-     * 字符串转换成十六进制字符串
-     *
-     * @param str 待转换的ASCII字符串
-     * @return String 每个Byte之间空格分隔,如: [61 6C 6B]
-     */
-    public static String str2HexStr(String str) {
-
-        char[] chars = "0123456789ABCDEF".toCharArray();
-        StringBuilder sb = new StringBuilder("");
-        byte[] bs = str.getBytes();
-        int bit;
-
-        for (int i = 0; i < bs.length; i++) {
-            bit = (bs[i] & 0x0f0) >> 4;
-            sb.append(chars[bit]);
-            bit = bs[i] & 0x0f;
-            sb.append(chars[bit]);
-            sb.append(' ');
-        }
-        return sb.toString().trim();
-    }
-
-    /**
-     * 十六进制转换字符串
-     *
-     * @param hexStr Byte字符串(Byte之间无分隔符 如:[616C6B])
-     * @return String 对应的字符串
-     */
-    public static String hexStr2Str(String hexStr) {
-        String str = "0123456789ABCDEF";
-        char[] hexs = hexStr.toCharArray();
-        byte[] bytes = new byte[hexStr.length() / 2];
-        int n;
-
-        for (int i = 0; i < bytes.length; i++) {
-            n = str.indexOf(hexs[2 * i]) * 16;
-            n += str.indexOf(hexs[2 * i + 1]);
-            bytes[i] = (byte) (n & 0xff);
-        }
-        return new String(bytes);
-    }
-
-    /**
-     * bytes转换成十六进制字符串
-     *
-     * @param b byte数组
-     * @return String 每个Byte值之间空格分隔
-     */
-    public static String byte2HexStr(byte[] b) {
-        String stmp = "";
-        StringBuilder sb = new StringBuilder("");
-        for (int n = 0; n < b.length; n++) {
-            stmp = Integer.toHexString(b[n] & 0xFF);
-            sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
-//			sb.append(" ");
-        }
-        return sb.toString().toUpperCase().trim();
-    }
-
-
-    /**
-     * bytes字符串转换为Byte值
-     *
-     * @param src Byte字符串,每个Byte之间没有分隔符
-     * @return byte[]
-     */
-    public static byte[] hexStr2Bytes(String src) {
-        int m = 0, n = 0;
-        int l = src.length() / 2;
-        System.out.println(l);
-        byte[] ret = new byte[l];
-        for (int i = 0; i < l; i++) {
-            m = i * 2 + 1;
-            n = m + 1;
-            String tmp = "0x" + src.substring(i * 2, m) + src.substring(m, n);
-            ret[i] = Byte.decode(tmp);
-        }
-        return ret;
-    }
-
-    /**
-     * bytes字符串转换为Byte值
-     *
-     * @param hexString
-     * @return
-     */
-    public static byte[] hexToBytes(String hexString) {
-        if (hexString == null || hexString.equals("")) {
-            return null;
-        }
-
-        int length = hexString.length() / 2;
-        char[] hexChars = hexString.toCharArray();
-        byte[] bytes = new byte[length];
-//        String hexDigits = "0123456789abcdefABCDEF";
-        String hexDigits = "0123456789abcdef";
-        for (int i = 0; i < length; i++) {
-            int pos = i * 2; // 两个字符对应一个byte
-            int h = hexDigits.indexOf(hexChars[pos]) << 4; // 注1
-            int l = hexDigits.indexOf(hexChars[pos + 1]); // 注2
-            if (h == -1 || l == -1) { // 非16进制字符
-                return null;
-            }
-            bytes[i] = (byte) (h | l);
-        }
-        return bytes;
-    }
-
-    /**
-     * String的字符串转换成unicode的String
-     *
-     * @param strText 全角字符串
-     * @return String 每个unicode之间无分隔符
-     * @throws Exception
-     */
-    public static String strToUnicode(String strText) throws Exception {
-        char c;
-        StringBuilder str = new StringBuilder();
-        int intAsc;
-        String strHex;
-        for (int i = 0; i < strText.length(); i++) {
-            c = strText.charAt(i);
-            intAsc = (int) c;
-            strHex = Integer.toHexString(intAsc);
-            if (intAsc > 128)
-                str.append("\\u" + strHex);
-            else
-                // 低位在前面补00
-                str.append("\\u00" + strHex);
-        }
-        return str.toString();
-    }
-
-    /**
-     * unicode的String转换成String的字符串
-     *
-     * @param hex 16进制值字符串 (一个unicode为2byte)
-     * @return String 全角字符串
-     */
-    public static String unicodeToString(String hex) {
-        int t = hex.length() / 6;
-        StringBuilder str = new StringBuilder();
-        for (int i = 0; i < t; i++) {
-            String s = hex.substring(i * 6, (i + 1) * 6);
-            // 高位需要补上00再转
-            String s1 = s.substring(2, 4) + "00";
-            // 低位直接转
-            String s2 = s.substring(4);
-            // 将16进制的string转为int
-            int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);
-            // 将int转换为字符
-            char[] chars = Character.toChars(n);
-            str.append(new String(chars));
-        }
-        return str.toString();
-    }
-
-
-    /**
-     * 将字节数组转换为十六进制字符数组
-     *
-     * @param data byte[]
-     * @return 十六进制char[]
-     */
-    public static char[] encodeHex(byte[] data) {
-        return encodeHex(data, true);
-    }
-
-    /**
-     * 将字节数组转换为十六进制字符数组
-     *
-     * @param data        byte[]
-     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
-     * @return 十六进制char[]
-     */
-    public static char[] encodeHex(byte[] data, boolean toLowerCase) {
-        return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
-    }
-
-    /**
-     * 将字节数组转换为十六进制字符数组
-     *
-     * @param data     byte[]
-     * @param toDigits 用于控制输出的char[]
-     * @return 十六进制char[]
-     */
-    protected static char[] encodeHex(byte[] data, char[] toDigits) {
-        int l = data.length;
-        char[] out = new char[l << 1];
-        // two characters form the hex value.
-        for (int i = 0, j = 0; i < l; i++) {
-            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
-            out[j++] = toDigits[0x0F & data[i]];
-        }
-        return out;
-    }
-
-    /**
-     * 将字节数组转换为十六进制字符串
-     *
-     * @param data byte[]
-     * @return 十六进制String
-     */
-    public static String encodeHexStr(byte[] data) {
-        return encodeHexStr(data, true);
-    }
-
-    /**
-     * 将字节数组转换为十六进制字符串
-     *
-     * @param data        byte[]
-     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
-     * @return 十六进制String
-     */
-    public static String encodeHexStr(byte[] data, boolean toLowerCase) {
-        return encodeHexStr(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
-    }
-
-    /**
-     * 将字节数组转换为十六进制字符串
-     *
-     * @param data     byte[]
-     * @param toDigits 用于控制输出的char[]
-     * @return 十六进制String
-     */
-    protected static String encodeHexStr(byte[] data, char[] toDigits) {
-        return new String(encodeHex(data, toDigits));
-    }
-
-    /**
-     * 将十六进制字符数组转换为字节数组
-     *
-     * @param data 十六进制char[]
-     * @return byte[]
-     * @throws RuntimeException 如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常
-     */
-    public static byte[] decodeHex(char[] data) {
-
-        int len = data.length;
-
-        if ((len & 0x01) != 0) {
-            throw new RuntimeException("Odd number of characters.");
-        }
-
-        byte[] out = new byte[len >> 1];
-
-        // two characters form the hex value.
-        for (int i = 0, j = 0; j < len; i++) {
-            int f = toDigit(data[j], j) << 4;
-            j++;
-            f = f | toDigit(data[j], j);
-            j++;
-            out[i] = (byte) (f & 0xFF);
-        }
-
-        return out;
-    }
-
-    /**
-     * 将十六进制字符转换成一个整数
-     *
-     * @param ch    十六进制char
-     * @param index 十六进制字符在字符数组中的位置
-     * @return 一个整数
-     * @throws RuntimeException 当ch不是一个合法的十六进制字符时,抛出运行时异常
-     */
-    protected static int toDigit(char ch, int index) {
-        int digit = Character.digit(ch, 16);
-        if (digit == -1) {
-            throw new RuntimeException("Illegal hexadecimal character " + ch
-                    + " at index " + index);
-        }
-        return digit;
-    }
-
-    /**
-     * float -> byte[]
-     *
-     * @param data
-     * @return
-     */
-    public static byte[] getBytes(float data) {
-        int intBits = Float.floatToIntBits(data);
-        return intToByteArray(intBits);
-    }
-
-    /**
-     * double -> byte[]
-     *
-     * @param data
-     * @return
-     */
-    public static byte[] getBytes(double data) {
-        long longBits = Double.doubleToLongBits(data);
-        return longToBytes(longBits);
-    }
-
-    /**
-     * byte[] -> float
-     *
-     * @param bytes
-     * @return
-     */
-    public static float getFloat(byte[] bytes) {
-        return Float.intBitsToFloat(getInt(bytes));
-    }
-
-    public static int getInt(byte[] bytes) {
-        return (0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[2] << 16)) | (0xff000000 & (bytes[3] << 24));
-    }
-
-    /**
-     * byte[] -> double
-     *
-     * @return
-     */
-    public static double getDouble(byte[] b) {
-        long l;
-        l = b[0];
-        l &= 0xff;
-        l |= ((long) b[1] << 8);
-        l &= 0xffff;
-        l |= ((long) b[2] << 16);
-        l &= 0xffffff;
-        l |= ((long) b[3] << 24);
-        l &= 0xffffffffL;
-        l |= ((long) b[4] << 32);
-        l &= 0xffffffffffL;
-        l |= ((long) b[5] << 40);
-        l &= 0xffffffffffffL;
-        l |= ((long) b[6] << 48);
-        l &= 0xffffffffffffffL;
-        l |= ((long) b[7] << 56);
-        return Double.longBitsToDouble(l);
-    }
-
-    /**
-     * 字节数组字符串 -> double
-     *
-     * @param bytesStr
-     * @return
-     */
-    public static double getDouble(String bytesStr) {
-        byte[] aa = hexToBytes(bytesStr.toLowerCase());
-        return getDouble(aa);
-    }
-
-
-    /**
-     * 字节数组字符串 -> float
-     *
-     * @param bytesStr
-     * @return
-     */
-    public static float getFloat(String bytesStr) {
-        byte[] aa = hexToBytes(bytesStr.toLowerCase());
-
-        return getFloat(aa);
-    }
-
-    /**
-     * 16进制字符串 -> byte数组
-     */
-    public static byte[] str16ToByte(String str16) {
-
-        int len = str16.length();
-        if (len % 2 > 0) {
-            return null;
-        }
-
-        byte res[] = new byte[len / 2];
-
-        for (int i = 0; i < len / 2; i++) {
-            String tmp = str16.substring(i*2, (i + 1) * 2);
-            byte t[] = hexToBytes(tmp);
-            res[i] = t[0];
-        }
-        return res;
-    }
-
-
-    public static void main(String args[]) throws Exception {
-        String aa = "AAAACCCC220000000033373933343732393100000000000000000000000052D50451F77D5D406C04E275FD723C400000015F0000000507E70306103B0A";
-
-        String substring = aa.substring(20, 60);
-        String substring1 = aa.substring(60, 76);
-        String substring2 = aa.substring(76, 92);
-        // 编号
-        String a1 = "AAAACCCC2200000000333739333437323931000000000000000000000000";
-
-        // 编号
-        String a2 = "3739333437323931000000000000000000000000";
-        System.out.println("a2 = " + hexStr2Str(a2));
-
-        //经
-        String lng = "52D50451F77D5D40";
-        System.out.println("lng = " + getDouble(lng));
-
-        String lat = "6C04E275FD723C40";
-        System.out.println("lat = " + getDouble(lat));
-
-        //日
-        String str = "0000";
-        System.out.println("a = " + hexTohort(str));
-
-
-        String str1 = "015F";
-        System.out.println("b = " + hexTohort(str1));
-
-        //日
-        String str2 = "0000";
-        System.out.println("c = " + hexTohort(str2));
-
-
-        String str3 = "0005";
-        System.out.println("tr3 = " + hexTohort(str3));
-
-
-        String nian = "07E7";
-        System.out.println("nian = " + hexTohort(nian));
-
-        String yue = "03";
-        System.out.println("yue = " + hexToByte(yue));
-
-        String ri = "06";
-        System.out.println("ri = " + hexToByte(ri));
-
-        String h = "10";
-        System.out.println("h = " + hexToByte(h));
-
-        String f = "3B";
-        System.out.println("f = " + hexToByte(f));
-
-        String m = "0A";
-        System.out.println("m = " + hexToByte(m));
-
-    }
-
-    public static int toshort(String str) {
-        char[] in = str.toCharArray();
-        /*
-         * for(int i=0;i<in.length;i+=2) { int value= tohx16(in[i]); int value2=
-         * tohx16(in[i+1]); int value3=value<<4|value2;
-         *
-         * System.out.print(value3); }//这里可设计照规则进行转换
-         */
-        int j = 0;
-
-        for(int i=0;i<in.length;i+=2) {
-            int value= tohx16(in[i]);
-            int value2=tohx16(in[i+1]);
-            j=value<<4|value2;
-        }
-        return j;
-    }
-
-
-
-    public static int tohx16(char str) {
-        switch (str) {
-            case '0':
-                return 0;
-            case '1':
-                return '1';
-            case '2':
-                return 2;
-            case '3':
-                return 3;
-            case '4':
-                return 4;
-            case '5':
-                return 5;
-            case '6':
-                return 6;
-            case '7':
-                return 7;
-            case '8':
-                return 8;
-            case '9':
-                return 9;
-            case 'a':
-            case 'A':
-                return 10;
-            case 'b':
-            case 'B':
-                return 11;
-            case 'c':
-            case 'C':
-                return 12;
-            case 'd':
-            case 'D':
-                return 13;
-            case 'e':
-            case 'E':
-                return 14;
-            case 'f':
-            case 'F':
-                return 15;
-
-        }
-
-        return 0;
-    }
-
-    public static byte[] intToByteArray(int a) {
-        return new byte[]{
-                (byte) ((a >> 24) & 0xFF),
-                (byte) ((a >> 16) & 0xFF),
-                (byte) ((a >> 8) & 0xFF),
-                (byte) (a & 0xFF)
-        };
-    }
-
-    public static byte intToByte(int a) {
-        return (byte) (a & 0xFF);
-    }
-
-    public static byte[] longToBytes(long x) {
-        buffer.putLong(0, x);
-        return buffer.array();
-    }
-
-
-}
-
-
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java b/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java
deleted file mode 100644
index 25eefe8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java
+++ /dev/null
@@ -1,303 +0,0 @@
-package com.genersoft.iot.vmp.netty.util;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-
-public class HexStringTool {
-
-
-    private static final char[] HEX_CHAR_ARR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-
-    private static final String HEX_STR = "0123456789abcdef";
-
-    //对字符串,进行分组,转化为List
-    public static List<String> getStrList(String str16, int frontLen, int size, int length) {
-        List<String> list = new ArrayList<String>();
-        String content = str16.substring(frontLen);
-        String tem = "";
-        for (int index = 0; index < size; index++) {
-            tem = content.substring(0, length);
-            content = content.substring(length);
-            list.add(tem);
-        }
-        return list;
-    }
-
-    //对字符串,进行分组,转化为List(字符串数据类型转化专用)
-    public static List<String> getStrList(String str16, int frontLen, int size, int totalLen, int lenLen) {
-        List<String> list = new ArrayList<>();
-        String content = str16.substring(frontLen);
-        String tem = "";
-        for (int index = 0; index < size; index++) {
-            String len16 = content.substring(totalLen * 2, (totalLen + lenLen) * 2);
-            int len = Integer.parseInt(len16, 16);
-            int length = (totalLen + lenLen + len) * 2;
-            tem = content.substring(0, length);
-            content = content.substring(length);
-            list.add(tem);
-        }
-        return list;
-    }
-
-    //字符串转换unicode
-    public static String string2Unicode(String string) {
-        StringBuffer unicode = new StringBuffer();
-        for (int i = 0; i < string.length(); i++) {
-            // 取出每一个字符
-            char c = string.charAt(i);
-            // 转换为unicode
-            unicode.append("\\u" + Integer.toHexString(c));
-        }
-        return unicode.toString();
-    }
-
-    //字符串转化成为16进制字符串
-    public static String strTo16(String s) {
-        String str = "";
-        for (int i = 0; i < s.length(); i++) {
-            int ch = (int) s.charAt(i);
-            String s4 = Integer.toHexString(ch);
-            str = str + s4;
-        }
-        return str;
-    }
-
-    //16进制转换成为string类型字符串
-    public static String hexStringToString(String s) {
-        if (s == null || s.equals("")) {
-            return null;
-        }
-        s = s.replace(" ", "");
-        byte[] baKeyword = new byte[s.length() / 2];
-        for (int i = 0; i < baKeyword.length; i++) {
-            try {
-                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        try {
-            s = new String(baKeyword, "UTF-8");
-            new String();
-        } catch (Exception e1) {
-            e1.printStackTrace();
-        }
-        return s;
-    }
-
-    //unicode 转字符串
-    public static String unicode2String(String unicode) {
-        StringBuffer string = new StringBuffer();
-        String[] hex = unicode.split("\\\\u");
-        for (int i = 1; i < hex.length; i++) {
-            // 转换出每一个代码点
-            int data = Integer.parseInt(hex[i], 16);
-            // 追加成string
-            string.append((char) data);
-        }
-        return string.toString();
-    }
-
-    //字符串转换成为16进制(无需Unicode编码)
-    public static String str2HexStr(String str) {
-        char[] chars = "0123456789ABCDEF".toCharArray();
-        StringBuilder sb = new StringBuilder("");
-        byte[] bs = str.getBytes();
-        int bit;
-        for (int i = 0; i < bs.length; i++) {
-            bit = (bs[i] & 0x0f0) >> 4;
-            sb.append(chars[bit]);
-            bit = bs[i] & 0x0f;
-            sb.append(chars[bit]);
-            // sb.append(' ');
-        }
-        return sb.toString().trim();
-    }
-
-    //16进制直接转换成为字符串(无需Unicode解码)
-    public static String hexStr2Str(String hexStr) {
-        String str = "0123456789ABCDEF";
-        char[] hexs = hexStr.toCharArray();
-        byte[] bytes = new byte[hexStr.length() / 2];
-        int n;
-        for (int i = 0; i < bytes.length; i++) {
-            n = str.indexOf(hexs[2 * i]) * 16;
-            n += str.indexOf(hexs[2 * i + 1]);
-            bytes[i] = (byte) (n & 0xff);
-        }
-        return new String(bytes);
-    }
-
-    /**
-     * int/long转16字节字符串(按所占字节数用0补齐)
-     *
-     * @param byteLen 所占字节长度
-     * @param b       需要转换的数字
-     * @return str16
-     */
-    public static String numToStr16(int byteLen, long b) {
-        return String.format("%0" + byteLen * 2 + "x", b);
-    }
-
-    /**
-     * float/double转16字节字符串(按所占字节数用0补齐)
-     *
-     * @param byteLen 所占字节长度
-     * @param b       需要转换的数字
-     * @return str16
-     */
-    public static String numToStr16(int byteLen, double b) {
-        byte[] bytes = Hex.getBytes(b);
-        int anInt = Hex.getInt(bytes);
-        return String.format("%0" + byteLen * 2 + "x", anInt);
-    }
-
-    /**
-     * 16进制字符串转字符串(ASCII)
-     *
-     * @param x16 十六进制字符串
-     * @return string
-     */
-    public static String x16toString(String x16) {
-        if (x16 == null || "".equals(x16.trim())) {
-            return "";
-        }
-        String tempStr = "";
-        byte[] b = new byte[x16.length() / 2];
-        for (int i = 0; i < x16.length() / 2; i++) {
-            tempStr = x16.substring(i * 2, i * 2 + 2);
-            int temp = Integer.parseInt(tempStr, 16);
-            b[i] = (byte) temp;
-        }
-        return new String(b, StandardCharsets.US_ASCII);
-    }
-
-    /**
-     * 16进制字符串转字符串(GBK)
-     *
-     * @param x16 十六进制字符串
-     * @return string
-     */
-    public static String x16toGbk(String x16) {
-        byte[] bytes = new byte[x16.length() / 2];
-        byte tempByte = 0;
-        byte tempHigh = 0;
-        byte tempLow = 0;
-        for (int i = 0, j = 0; i < x16.length(); i += 2, j++) {
-            tempByte = (byte) (((int) x16.charAt(i)) & 0xff);
-            if (tempByte >= 48 && tempByte <= 57) {
-                tempHigh = (byte) ((tempByte - 48) << 4);
-            } else if (tempByte >= 97 && tempByte <= 101) {
-                tempHigh = (byte) ((tempByte - 97 + 10) << 4);
-            }
-            tempByte = (byte) (((int) x16.charAt(i + 1)) & 0xff);
-            if (tempByte >= 48 && tempByte <= 57) {
-                tempLow = (byte) (tempByte - 48);
-            } else if (tempByte >= 97 && tempByte <= 101) {
-                tempLow = (byte) (tempByte - 97 + 10);
-            }
-            bytes[j] = (byte) (tempHigh | tempLow);
-        }
-        String result = null;
-        try {
-            result = new String(bytes, "GBK");
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-
-    public static boolean isChinese(String s) {
-        boolean result = false;
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
-            if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
-                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
-                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
-                    || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
-                    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
-                    || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
-                result = true;
-            }
-        }
-        return result;
-    }
-
-    private static String byteArrToHex(byte[] btArr) {
-        char[] strArr = new char[btArr.length * 2];
-        int i = 0;
-        for (byte bt : btArr) {
-            strArr[i++] = HEX_CHAR_ARR[bt >>> 4 & 0xf];
-            strArr[i++] = HEX_CHAR_ARR[bt & 0xf];
-        }
-        return new String(strArr);
-    }
-
-    private static byte[] hexToByteArr(String hexStr) {
-        char[] charArr = hexStr.toCharArray();
-        byte[] btArr = new byte[charArr.length / 2];
-        int index = 0;
-        for (int i = 0; i < charArr.length; i++) {
-            int highBit = HEX_STR.indexOf(charArr[i]);
-            int lowBit = HEX_STR.indexOf(charArr[++i]);
-            btArr[index] = (byte) (highBit << 4 | lowBit);
-            index++;
-        }
-        return btArr;
-    }
-
-    /**
-     * 字符串转16进制字符串(无汉字utf-8,有汉字gbk)
-     *
-     * @param str
-     * @return
-     */
-    public static String str2StrHex(String str) {
-        boolean chinese = isChinese(str);
-        if (chinese) {
-            try {
-                byte[] bytes1 = str.getBytes(StandardCharsets.UTF_8);
-                byte[] bytes2 = new String(bytes1, StandardCharsets.UTF_8).getBytes("gbk");
-                String gbk = new String(bytes2, "gbk");
-                byte[] gbkArr = gbk.getBytes();
-                return byteArrToHex(gbkArr);
-
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-                return null;
-            }
-        } else {
-            return strTo16(str);
-        }
-    }
-
-    /**
-     * 16进制字符串转字符串(无汉字utf-8,有汉字gbk)
-     *
-     * @param strHex
-     * @return
-     */
-    public static String strHex2Str(String strHex) {
-        byte[] bytes = hexToByteArr(strHex);
-        String s1 = new String(bytes, StandardCharsets.UTF_8);
-        boolean chinese = isChinese(s1);
-        if (!chinese) {
-            try {
-                return new String(bytes, "gbk");
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
-                return null;
-            }
-        } else {
-            return s1;
-        }
-    }
-
-
-}
-
-
diff --git a/src/main/java/com/genersoft/iot/vmp/netty/util/Utils.java b/src/main/java/com/genersoft/iot/vmp/netty/util/Utils.java
deleted file mode 100644
index 4a903cd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/netty/util/Utils.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.genersoft.iot.vmp.netty.util;
-
-public class Utils {
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/entity/DeviceChannelPoliceCamera.java b/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/entity/DeviceChannelPoliceCamera.java
deleted file mode 100644
index ad82665..0000000
--- a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/entity/DeviceChannelPoliceCamera.java
+++ /dev/null
@@ -1,452 +0,0 @@
-package com.genersoft.iot.vmp.policeBodyCamera.entity;
-
-import lombok.Data;
-
-/**
- * 执法记录仪 实体类
- * @author zhongrj
- * @date 2023-03-04
- */
-@Data
-public class DeviceChannelPoliceCamera {
-
-
-	/**
-	 * 数据库自赠ID
-	 */
-	private int id;
-
-	/**
-	 * 通道id
-	 */
-	private String channelId;
-
-	/**
-	 * 设备id
-	 */
-	private String deviceId;
-	
-	/**
-	 * 通道名
-	 */
-	private String name;
-	
-	/**
-	 * 生产厂商
-	 */
-	private String manufacture;
-	
-	/**
-	 * 型号
-	 */
-	private String model;
-	
-	/**
-	 * 设备归属
-	 */
-	private String owner;
-	
-	/**
-	 * 行政区域
-	 */
-	private String civilCode;
-	
-	/**
-	 * 警区
-	 */
-	private String block;
-
-	/**
-	 * 安装地址
-	 */
-	private String address;
-	
-	/**
-	 * 是否有子设备 1有, 0没有
-	 */
-	private int parental;
-	
-	/**
-	 * 父级id
-	 */
-	private String parentId;
-	
-	/**
-	 * 信令安全模式  缺省为0; 0:不采用; 2: S/MIME签名方式; 3: S/ MIME加密签名同时采用方式; 4:数字摘要方式
-	 */
-	private int safetyWay;
-	
-	/**
-	 * 注册方式 缺省为1;1:符合IETFRFC3261标准的认证注册模 式; 2:基于口令的双向认证注册模式; 3:基于数字证书的双向认证注册模式
-	 */
-	private int registerWay;
-	
-	/**
-	 * 证书序列号
-	 */
-	private String certNum;
-	
-	/**
-	 * 证书有效标识 缺省为0;证书有效标识:0:无效1: 有效
-	 */
-	private int certifiable;
-	
-	/**
-	 * 证书无效原因码
-	 */
-	private int errCode;
-	
-	/**
-	 * 证书终止有效期
-	 */
-	private String endTime;
-	
-	/**
-	 * 保密属性 缺省为0; 0:不涉密, 1:涉密
-	 */
-	private String secrecy;
-	
-	/**
-	 * IP地址
-	 */
-	private String ipAddress;
-	
-	/**
-	 * 端口号
-	 */
-	private int port;
-	
-	/**
-	 * 密码
-	 */
-	private String password;
-
-	/**
-	 * 云台类型
-	 */
-	private int PTZType;
-
-	/**
-	 * 云台类型描述字符串
-	 */
-	private String PTZTypeText;
-
-	/**
-	 * 创建时间
-	 */
-	private String createTime;
-
-	/**
-	 * 更新时间
-	 */
-	private String updateTime;
-	
-	/**
-	 * 在线/离线
-	 * 1在线,0离线
-	 * 默认在线
-	 * 信令:
-	 * <Status>ON</Status>
-	 * <Status>OFF</Status>
-	 * 遇到过NVR下的IPC下发信令可以推流, 但是 Status 响应 OFF
-	 */
-	private int status;
-
-	/**
-	 * 经度
-	 */
-	private double longitude;
-	
-	/**
-	 * 纬度
-	 */
-	private double latitude;
-
-	/**
-	 * 子设备数
-	 */
-	private int subCount;
-
-	/**
-	 * 流唯一编号,存在表示正在直播
-	 */
-	private String  streamId;
-
-	/**
-	 *  是否含有音频
-	 */
-	private boolean hasAudio;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public void setPTZType(int PTZType) {
-		this.PTZType = PTZType;
-		switch (PTZType) {
-			case 0:
-				this.PTZTypeText = "未知";
-				break;
-			case 1:
-				this.PTZTypeText = "球机";
-				break;
-			case 2:
-				this.PTZTypeText = "半球";
-				break;
-			case 3:
-				this.PTZTypeText = "固定枪机";
-				break;
-			case 4:
-				this.PTZTypeText = "遥控枪机";
-				break;
-		}
-	}
-
-	public String getChannelId() {
-		return channelId;
-	}
-
-	public void setChannelId(String channelId) {
-		this.channelId = channelId;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getManufacture() {
-		return manufacture;
-	}
-
-	public void setManufacture(String manufacture) {
-		this.manufacture = manufacture;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public String getOwner() {
-		return owner;
-	}
-
-	public void setOwner(String owner) {
-		this.owner = owner;
-	}
-
-	public String getCivilCode() {
-		return civilCode;
-	}
-
-	public void setCivilCode(String civilCode) {
-		this.civilCode = civilCode;
-	}
-
-	public String getBlock() {
-		return block;
-	}
-
-	public void setBlock(String block) {
-		this.block = block;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public int getParental() {
-		return parental;
-	}
-
-	public void setParental(int parental) {
-		this.parental = parental;
-	}
-
-	public String getParentId() {
-		return parentId;
-	}
-
-	public void setParentId(String parentId) {
-		this.parentId = parentId;
-	}
-
-	public int getSafetyWay() {
-		return safetyWay;
-	}
-
-	public void setSafetyWay(int safetyWay) {
-		this.safetyWay = safetyWay;
-	}
-
-	public int getRegisterWay() {
-		return registerWay;
-	}
-
-	public void setRegisterWay(int registerWay) {
-		this.registerWay = registerWay;
-	}
-
-	public String getCertNum() {
-		return certNum;
-	}
-
-	public void setCertNum(String certNum) {
-		this.certNum = certNum;
-	}
-
-	public int getCertifiable() {
-		return certifiable;
-	}
-
-	public void setCertifiable(int certifiable) {
-		this.certifiable = certifiable;
-	}
-
-	public int getErrCode() {
-		return errCode;
-	}
-
-	public void setErrCode(int errCode) {
-		this.errCode = errCode;
-	}
-
-	public String getEndTime() {
-		return endTime;
-	}
-
-	public void setEndTime(String endTime) {
-		this.endTime = endTime;
-	}
-
-	public String getSecrecy() {
-		return secrecy;
-	}
-
-	public void setSecrecy(String secrecy) {
-		this.secrecy = secrecy;
-	}
-
-	public String getIpAddress() {
-		return ipAddress;
-	}
-
-	public void setIpAddress(String ipAddress) {
-		this.ipAddress = ipAddress;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public int getPTZType() {
-		return PTZType;
-	}
-
-	public String getPTZTypeText() {
-		return PTZTypeText;
-	}
-
-	public void setPTZTypeText(String PTZTypeText) {
-		this.PTZTypeText = PTZTypeText;
-	}
-
-	public int getStatus() {
-		return status;
-	}
-
-	public void setStatus(int status) {
-		this.status = status;
-	}
-
-	public double getLongitude() {
-		return longitude;
-	}
-
-	public void setLongitude(double longitude) {
-		this.longitude = longitude;
-	}
-
-	public double getLatitude() {
-		return latitude;
-	}
-
-	public void setLatitude(double latitude) {
-		this.latitude = latitude;
-	}
-
-	public int getSubCount() {
-		return subCount;
-	}
-
-	public void setSubCount(int subCount) {
-		this.subCount = subCount;
-	}
-
-	public boolean isHasAudio() {
-		return hasAudio;
-	}
-
-	public void setHasAudio(boolean hasAudio) {
-		this.hasAudio = hasAudio;
-	}
-
-	public String getStreamId() {
-		return streamId;
-	}
-
-	public void setStreamId(String streamId) {
-		this.streamId = streamId;
-	}
-
-	public String getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(String createTime) {
-		this.createTime = createTime;
-	}
-
-	public String getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(String updateTime) {
-		this.updateTime = updateTime;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/mapper/DeviceChannelPoliceCameraMapper.java b/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/mapper/DeviceChannelPoliceCameraMapper.java
deleted file mode 100644
index 3e36a11..0000000
--- a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/mapper/DeviceChannelPoliceCameraMapper.java
+++ /dev/null
@@ -1,360 +0,0 @@
-package com.genersoft.iot.vmp.policeBodyCamera.mapper;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储设备通道信息
- * @author zhongrj
- * @date 2023-03-04
- */
-@Mapper
-@Repository
-public interface DeviceChannelPoliceCameraMapper {
-
-    /**
-     * 新增执法记录仪信息
-     * @param channel
-     * @return
-     */
-    @Insert("INSERT INTO device_channel_police_camera (channelId, deviceId, name, manufacture, model, owner, civilCode, block, " +
-            "address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
-            "VALUES ('${channelId}', '${deviceId}', '${name}', '${manufacture}', '${model}', '${owner}', '${civilCode}', '${block}'," +
-            "'${address}', ${parental}, '${parentId}', ${safetyWay}, ${registerWay}, '${certNum}', ${certifiable}, ${errCode}, '${secrecy}', " +
-            "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude},'${createTime}', '${updateTime}')")
-    int add(DeviceChannel channel);
-
-    /**
-     * 更新执法记录仪信息
-     * @param channel
-     * @return
-     */
-    @Update(value = {" <script>" +
-            "UPDATE device_channel_police_camera " +
-            "SET updateTime='${updateTime}'" +
-            "<if test='name != null'>, name='${name}'</if>" +
-            "<if test='manufacture != null'>, manufacture='${manufacture}'</if>" +
-            "<if test='model != null'>, model='${model}'</if>" +
-            "<if test='owner != null'>, owner='${owner}'</if>" +
-            "<if test='civilCode != null'>, civilCode='${civilCode}'</if>" +
-            "<if test='block != null'>, block='${block}'</if>" +
-            "<if test='address != null'>, address='${address}'</if>" +
-            "<if test='parental != null'>, parental=${parental}</if>" +
-            "<if test='parentId != null'>, parentId='${parentId}'</if>" +
-            "<if test='safetyWay != null'>, safetyWay=${safetyWay}</if>" +
-            "<if test='registerWay != null'>, registerWay=${registerWay}</if>" +
-            "<if test='certNum != null'>, certNum='${certNum}'</if>" +
-            "<if test='certifiable != null'>, certifiable=${certifiable}</if>" +
-            "<if test='errCode != null'>, errCode=${errCode}</if>" +
-            "<if test='secrecy != null'>, secrecy='${secrecy}'</if>" +
-            "<if test='ipAddress != null'>, ipAddress='${ipAddress}'</if>" +
-            "<if test='port != null'>, port=${port}</if>" +
-            "<if test='password != null'>, password='${password}'</if>" +
-            "<if test='PTZType != null'>, PTZType=${PTZType}</if>" +
-            "<if test='status != null'>, status='${status}'</if>" +
-            "<if test='streamId != null'>, streamId='${streamId}'</if>" +
-            "<if test='hasAudio != null'>, hasAudio=${hasAudio}</if>" +
-            "<if test='longitude != null'>, longitude=${longitude}</if>" +
-            "<if test='latitude != null'>, latitude=${latitude}</if>" +
-            "WHERE deviceId='${deviceId}' AND channelId='${channelId}'"+
-            " </script>"})
-    int update(DeviceChannel channel);
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc.id,\n" +
-            "dc.channelId,\n" +
-            "dc.`name`,\n" +
-            "dc.manufacture,\n" +
-            "dc.model,\n" +
-            "dc.`owner`,\n" +
-            "dc.civilCode,\n" +
-            "dc.block,\n" +
-            "dc.address,\n" +
-            "dc.parentId,\n" +
-            "dc.safetyWay,\n" +
-            "dc.registerWay,\n" +
-            "dc.certNum,\n" +
-            "dc.certifiable,\n" +
-            "dc.errCode,\n" +
-            "dc.endTime,\n" +
-            "dc.secrecy,\n" +
-            "dc.ipAddress,dc.`port`,dc.`password`,dc.PTZType,dc.`status`,dc.streamId,dc.deviceId,\n" +
-            "dc.parental,dc.hasAudio,dc.createTime,dc.updateTime,dc.subCount," +
-            "any_value ( CASE WHEN dc.latitude = 0 THEN dmp.latitude ELSE dc.latitude END ) AS latitude," +
-            "any_value ( CASE WHEN dc.longitude = 0 THEN dmp.longitude ELSE dc.longitude END ) AS longitude " +
-            "from " +
-            "device_channel_police_camera dc " +
-            "LEFT JOIN device_mobile_position dmp ON dc.channelId = dmp.deviceId " +
-            "WHERE " +
-            "dc.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
-            " <if test='type == 0' > AND dc.name like '%赣E%'</if>" +
-            " <if test='type == 1' > AND dc.name not like '%赣E%' and dc.ipAddress is not null and dc.ipAddress != '' </if>" +
-            " <if test='hasSubChannel == true' >  AND dc.subCount > 0 </if>" +
-            " <if test='hasSubChannel == false' >  AND dc.subCount = 0 </if>" +
-            "GROUP BY dc.channelId " +
-            " </script>"})
-    List<DeviceChannel> queryChannelsCar(String deviceId, String parentChannelId, String query,String type, Boolean hasSubChannel, Boolean online);
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc.id,\n" +
-            "dc.channelId,\n" +
-            "dc.`name`,\n" +
-            "dc.manufacture,\n" +
-            "dc.model,\n" +
-            "dc.`owner`,\n" +
-            "dc.civilCode,\n" +
-            "dc.block,\n" +
-            "dc.address,\n" +
-            "dc.parentId,\n" +
-            "dc.safetyWay,\n" +
-            "dc.registerWay,\n" +
-            "dc.certNum,\n" +
-            "dc.certifiable,\n" +
-            "dc.errCode,\n" +
-            "dc.endTime,\n" +
-            "dc.secrecy,\n" +
-            "dc.ipAddress,dc.`port`,dc.`password`,dc.PTZType,dc.`status`,dc.streamId,dc.deviceId,\n" +
-            "dc.parental,dc.hasAudio,dc.createTime,dc.updateTime,dc.subCount," +
-            "any_value ( CASE WHEN dc.latitude = 0 THEN dmp.latitude ELSE dc.latitude END ) AS latitude," +
-            "any_value ( CASE WHEN dc.longitude = 0 THEN dmp.longitude ELSE dc.longitude END ) AS longitude " +
-            "from " +
-            "device_channel_police_camera dc " +
-            "LEFT JOIN device_mobile_position dmp ON dc.channelId = dmp.deviceId " +
-            "WHERE " +
-            "dc.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
-            " <if test='hasSubChannel == true' >  AND dc.subCount > 0 </if>" +
-            " <if test='hasSubChannel == false' >  AND dc.subCount = 0 </if>" +
-            "GROUP BY dc.channelId " +
-            " </script>"})
-    List<DeviceChannel> queryChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online);
-
-    /**
-     * 查询执法记录仪信息
-     * @param deviceId
-     * @param channelId
-     * @return
-     */
-    @Select("SELECT * FROM device_channel_police_camera_police_camera WHERE deviceId=#{deviceId} AND channelId=#{channelId}")
-    DeviceChannelPoliceCamera queryChannel(String deviceId, String channelId);
-
-    @Delete("DELETE FROM device_channel_police_camera WHERE deviceId=#{deviceId}")
-    int cleanChannelsByDeviceId(String deviceId);
-
-    /**
-     * 删除执法记录仪信息
-     * @param deviceId
-     * @param channelId
-     * @return
-     */
-    @Delete("DELETE FROM device_channel_police_camera WHERE deviceId=#{deviceId} AND channelId=#{channelId}")
-    int del(String deviceId, String channelId);
-
-    @Update(value = {"UPDATE device_channel_police_camera SET streamId=null WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void stopPlay(String deviceId, String channelId);
-
-    @Update(value = {"UPDATE device_channel_police_camera SET streamId=#{streamId} WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void startPlay(String deviceId, String channelId, String streamId);
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "    dc.id,\n" +
-            "    dc.channelId,\n" +
-            "    dc.deviceId,\n" +
-            "    dc.name,\n" +
-            "    de.manufacturer,\n" +
-            "    de.hostAddress,\n" +
-            "    dc.subCount,\n" +
-            "    pgc.platformId as platformId,\n" +
-            "    pgc.catalogId as catalogId " +
-            " FROM device_channel_police_camera dc " +
-            " LEFT JOIN device de ON dc.deviceId = de.deviceId " +
-            " LEFT JOIN platform_gb_channel pgc on pgc.deviceChannelId = dc.id " +
-            " WHERE 1=1 " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='online == true' > AND dc.status=1</if> " +
-            " <if test='online == false' > AND dc.status=0</if> " +
-            " <if test='hasSubChannel!= null and hasSubChannel == true' >  AND dc.subCount > 0</if> " +
-            " <if test='hasSubChannel!= null and hasSubChannel == false' >  AND dc.subCount == 0</if> " +
-            " <if test='catalogId == null ' >  AND dc.id not in (select deviceChannelId from platform_gb_channel where platformId=#{platformId} ) </if> " +
-            " <if test='catalogId != null ' >  AND pgc.platformId = #{platformId} and pgc.catalogId=#{catalogId} </if> " +
-            " ORDER BY dc.deviceId, dc.channelId ASC" +
-            " </script>"})
-    List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, String catalogId);
-
-    @Select("SELECT * FROM device_channel_police_camera WHERE channelId=#{channelId}")
-    List<DeviceChannel> queryChannelByChannelId( String channelId);
-
-    @Update(value = {"UPDATE device_channel_police_camera SET status=0 WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void offline(String deviceId,  String channelId);
-
-    @Update(value = {"UPDATE device_channel_police_camera SET status=1 WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void online(String deviceId,  String channelId);
-
-    @Insert("<script> " +
-            "insert into device_channel_police_camera " +
-            "(channelId, deviceId, name, manufacture, model, owner, civilCode, block, subCount, " +
-            "  address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "  ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
-            "values " +
-            "<foreach collection='addChannels' index='index' item='item' separator=','> " +
-            "('${item.channelId}', '${item.deviceId}', '${item.name}', '${item.manufacture}', '${item.model}', " +
-            "'${item.owner}', '${item.civilCode}', '${item.block}',${item.subCount}," +
-            "'${item.address}', ${item.parental}, '${item.parentId}', ${item.safetyWay}, ${item.registerWay}, " +
-            "'${item.certNum}', ${item.certifiable}, ${item.errCode}, '${item.secrecy}', " +
-            "'${item.ipAddress}', ${item.port}, '${item.password}', ${item.PTZType}, ${item.status}, " +
-            "'${item.streamId}', ${item.longitude}, ${item.latitude},'${item.createTime}', '${item.updateTime}')" +
-            "</foreach> " +
-            "ON DUPLICATE KEY UPDATE " +
-            "updateTime=VALUES(updateTime), " +
-            "name=VALUES(name), " +
-            "manufacture=VALUES(manufacture), " +
-            "model=VALUES(model), " +
-            "owner=VALUES(owner), " +
-            "civilCode=VALUES(civilCode), " +
-            "block=VALUES(block), " +
-            "subCount=VALUES(subCount), " +
-            "address=VALUES(address), " +
-            "parental=VALUES(parental), " +
-            "parentId=VALUES(parentId), " +
-            "safetyWay=VALUES(safetyWay), " +
-            "registerWay=VALUES(registerWay), " +
-            "certNum=VALUES(certNum), " +
-            "certifiable=VALUES(certifiable), " +
-            "errCode=VALUES(errCode), " +
-            "secrecy=VALUES(secrecy), " +
-            "ipAddress=VALUES(ipAddress), " +
-            "port=VALUES(port), " +
-            "password=VALUES(password), " +
-            "PTZType=VALUES(PTZType), " +
-            "status=VALUES(status), " +
-            "streamId=VALUES(streamId), " +
-            "longitude=VALUES(longitude), " +
-            "latitude=VALUES(latitude)" +
-            "</script>")
-    int batchAdd(List<DeviceChannel> addChannels);
-
-    @Update({"<script>" +
-            "<foreach collection='updateChannels' item='item' separator=';'>" +
-            " UPDATE" +
-            " device_channel_police_camera" +
-            " SET updateTime='${item.updateTime}'" +
-            "<if test='item.name != null'>, name='${item.name}'</if>" +
-            "<if test='item.manufacture != null'>, manufacture='${item.manufacture}'</if>" +
-            "<if test='item.model != null'>, model='${item.model}'</if>" +
-            "<if test='item.owner != null'>, owner='${item.owner}'</if>" +
-            "<if test='item.civilCode != null'>, civilCode='${item.civilCode}'</if>" +
-            "<if test='item.block != null'>, block='${item.block}'</if>" +
-            "<if test='item.subCount != null'>, block=${item.subCount}</if>" +
-            "<if test='item.address != null'>, address='${item.address}'</if>" +
-            "<if test='item.parental != null'>, parental=${item.parental}</if>" +
-            "<if test='item.parentId != null'>, parentId='${item.parentId}'</if>" +
-            "<if test='item.safetyWay != null'>, safetyWay=${item.safetyWay}</if>" +
-            "<if test='item.registerWay != null'>, registerWay=${item.registerWay}</if>" +
-            "<if test='item.certNum != null'>, certNum='${item.certNum}'</if>" +
-            "<if test='item.certifiable != null'>, certifiable=${item.certifiable}</if>" +
-            "<if test='item.errCode != null'>, errCode=${item.errCode}</if>" +
-            "<if test='item.secrecy != null'>, secrecy='${item.secrecy}'</if>" +
-            "<if test='item.ipAddress != null'>, ipAddress='${item.ipAddress}'</if>" +
-            "<if test='item.port != null'>, port=${item.port}</if>" +
-            "<if test='item.password != null'>, password='${item.password}'</if>" +
-            "<if test='item.PTZType != null'>, PTZType=${item.PTZType}</if>" +
-            "<if test='item.status != null'>, status='${item.status}'</if>" +
-            "<if test='item.streamId != null'>, streamId='${item.streamId}'</if>" +
-            "<if test='item.hasAudio != null'>, hasAudio=${item.hasAudio}</if>" +
-            "<if test='item.longitude != null'>, longitude=${item.longitude}</if>" +
-            "<if test='item.latitude != null'>, latitude=${item.latitude}</if>" +
-            "WHERE deviceId=#{item.deviceId} AND channelId=#{item.channelId}"+
-            "</foreach>" +
-            "</script>"})
-    int batchUpdate(List<DeviceChannel> updateChannels);
-
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc1.* " +
-            "from " +
-            "device_channel_police_camera dc1 " +
-            "WHERE " +
-            "dc1.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc1.channelId LIKE '%${query}%' OR dc1.name LIKE '%${query}%' OR dc1.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc1.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc1.status=1</if>" +
-            " <if test='online == false' > AND dc1.status=0</if>" +
-            " <if test='hasSubChannel == true' >  AND dc1.subCount >0</if>" +
-            " <if test='hasSubChannel == false' >  AND dc1.subCount=0</if>" +
-            "ORDER BY dc1.channelId ASC " +
-            "Limit #{limit} OFFSET #{start}" +
-            " </script>"})
-    List<DeviceChannelPoliceCamera> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String parentChannelId, String query,
-                                                                             Boolean hasSubChannel, Boolean online, int start, int limit);
-
-    @Select("SELECT * FROM device_channel_police_camera WHERE deviceId=#{deviceId} AND status=1")
-    List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
-
-    @Select(" SELECT\n" +
-            "        id,\n" +
-            "        channelId,\n" +
-            "        deviceId,\n" +
-            "        parentId,\n" +
-            "        status,\n" +
-            "        name as title,\n" +
-            "        channelId as \"value\",\n" +
-            "        channelId as \"key\",\n" +
-            "        longitude,\n" +
-            "        latitude\n" +
-            "        from device_channel_police_camera\n" +
-            "        where deviceId = #{deviceId}")
-    List<DeviceChannelTree> tree(String deviceId);
-
-    @Delete(value = {" <script>" +
-            "DELETE " +
-            "from " +
-            "device_channel_police_camera " +
-            "WHERE " +
-            "deviceId = #{deviceId} " +
-            " AND channelId NOT IN " +
-            "<foreach collection='channels'  item='item'  open='(' separator=',' close=')' > #{item.channelId}</foreach>" +
-            " </script>"})
-    int cleanChannelsNotInList(String deviceId, List<DeviceChannel> channels);
-
-    /**
-     * 更新是否有子节点
-     * @param deviceId
-     * @param channelId
-     * @return
-     */
-    @Update(" update device_channel_police_camera" +
-            " set subCount = (select *" +
-            "                from (select count(0)" +
-            "                      from device_channel_police_camera" +
-            "                      where deviceId = #{deviceId} and parentId = #{channelId}) as temp)" +
-            " where deviceId = #{deviceId} " +
-            " and channelId = #{channelId}")
-    int updateChannelSubCount(String deviceId, String channelId);
-
-    /**
-     * 添加执法记录仪移动位置信息
-     * @param mobilePosition
-     * @return
-     */
-    @Insert("INSERT INTO device_mobile_position_police_camera (deviceId,channelId, deviceName, time, longitude, latitude, altitude, speed, direction, reportSource) " +
-            "VALUES ('${deviceId}','${channelId}', '${deviceName}', '${time}', ${longitude}, ${latitude}, ${altitude}, ${speed}, ${direction}, '${reportSource}')")
-    int insertNewPositionPoliceCamera(MobilePosition mobilePosition);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/DeviceChannelPoliceCameraService.java b/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/DeviceChannelPoliceCameraService.java
deleted file mode 100644
index 1d90ef0..0000000
--- a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/DeviceChannelPoliceCameraService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.genersoft.iot.vmp.policeBodyCamera.service;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-
-public interface DeviceChannelPoliceCameraService {
-
-    /**
-     * 更新执法记录仪信息
-     * @param channel
-     */
-    void updateChannelPoliceCamera(DeviceChannel channel);
-
-    /**
-     * 删除执法记录仪信息
-     * @param deviceId
-     * @param channelId
-     */
-    void del(String deviceId, String channelId);
-
-    /**
-     * 添加执法记录仪位置信息
-     * @param deviceChannelPoliceCamera
-     */
-    void insertDeviceChannelPoliceCamera(DeviceChannel deviceChannelPoliceCamera);
-
-    /**
-     * 添加执法记录仪移动位置信息
-     * @param mobilePosition
-     */
-    void insertNewPositionPoliceCamera(MobilePosition mobilePosition);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/impl/DeviceChannelPoliceCameraServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/impl/DeviceChannelPoliceCameraServiceImpl.java
deleted file mode 100644
index 80c9ae8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/service/impl/DeviceChannelPoliceCameraServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.genersoft.iot.vmp.policeBodyCamera.service.impl;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-import com.genersoft.iot.vmp.policeBodyCamera.mapper.DeviceChannelPoliceCameraMapper;
-import com.genersoft.iot.vmp.policeBodyCamera.service.DeviceChannelPoliceCameraService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.text.SimpleDateFormat;
-
-/**
- * 执法记录仪服务实现层
- * @author zhongrj
- * @date 2023-03-04
- */
-@Service
-public class DeviceChannelPoliceCameraServiceImpl implements DeviceChannelPoliceCameraService {
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private DeviceChannelPoliceCameraMapper deviceChannelPoliceCameraMapper;
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    /**
-     * 更新执法记录仪信息
-     * 注:DeviceChannel类和DeviceChannelPoliceCamera类字段完全相同
-     * @param channel
-     */
-    @Override
-    public void updateChannelPoliceCamera(DeviceChannel channel) {
-        String channelId = channel.getChannelId();
-        String deviceId = channel.getDeviceId();
-        //日期格式化
-        String now = this.format.format(System.currentTimeMillis());
-        //查询执法记录仪信息
-        DeviceChannelPoliceCamera deviceChannel = deviceChannelPoliceCameraMapper.queryChannel(deviceId, channelId);
-        //如果为空,则新增
-        if (deviceChannel == null) {
-            channel.setCreateTime(now);
-            //新增
-            deviceChannelPoliceCameraMapper.add(channel);
-        }else {
-            channel.setId(deviceChannel.getId());
-            //更新
-            deviceChannelPoliceCameraMapper.update(channel);
-        }
-        deviceChannelPoliceCameraMapper.updateChannelSubCount(deviceId,channel.getParentId());
-    }
-
-    /**
-     * 删除执法记录仪信息
-     * @param deviceId
-     * @param channelId
-     */
-    @Override
-    public void del(String deviceId, String channelId) {
-        deviceChannelPoliceCameraMapper.del(deviceId,channelId);
-    }
-
-    /**
-     * 添加执法记录仪位置信息
-     * @param deviceChannelPoliceCamera
-     */
-    @Override
-    public void insertDeviceChannelPoliceCamera(DeviceChannel deviceChannelPoliceCamera) {
-        //新增
-        deviceChannelPoliceCameraMapper.add(deviceChannelPoliceCamera);
-        //新增记录
-        MobilePosition mobilePosition = new MobilePosition();
-        mobilePosition.setDirection(1.12);
-        mobilePosition.setDeviceId("123");
-        mobilePosition.setChannelId("123456");
-        mobilePosition.setSpeed(1.12);
-        mobilePosition.setCnLat("1.12");
-        mobilePosition.setCnLng("1.12");
-        mobilePosition.setLongitude(117.123652);
-        mobilePosition.setLatitude(28.124525);
-
-        insertNewPositionPoliceCamera(mobilePosition);
-    }
-
-    /**
-     * 添加执法记录仪移动位置信息
-     * @param mobilePosition
-     */
-    @Override
-    public void insertNewPositionPoliceCamera(MobilePosition mobilePosition) {
-        deviceChannelPoliceCameraMapper.insertNewPositionPoliceCamera(mobilePosition);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/vo/DeviceChannelPoliceCameraVO.java b/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/vo/DeviceChannelPoliceCameraVO.java
deleted file mode 100644
index c76fb37..0000000
--- a/src/main/java/com/genersoft/iot/vmp/policeBodyCamera/vo/DeviceChannelPoliceCameraVO.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.genersoft.iot.vmp.policeBodyCamera.vo;
-
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-import lombok.Data;
-
-/**
- * 执法记录仪vo
- * @author zhongrj
- * @date 2023-03-04
- */
-@Data
-public class DeviceChannelPoliceCameraVO extends DeviceChannelPoliceCamera {
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java
deleted file mode 100644
index 51e53d2..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.github.pagehelper.PageInfo;
-
-import java.util.List;
-
-/**
- * 报警相关业务处理
- */
-public interface IDeviceAlarmService {
-
-    /**
-     * 根据多个添加获取报警列表
-     * @param page 当前页
-     * @param count 每页数量
-     * @param deviceId 设备id
-     * @param alarmPriority  报警级别, 1为一级警情, 2为二级警情, 3为三级警情, 4为四级 警情-
-     * @param alarmMethod 报警方式 , 1为电话报警, 2为设备报警, 3为短信报警, 4为 GPS报警, 5为视频报警, 6为设备故障报警,
-     * 	                            7其他报警;可以为直接组合如12为电话报警或 设备报警-
-     * @param alarmType 报警类型
-     * @param startTime 开始时间
-     * @param endTime 结束时间
-     * @return 报警列表
-     */
-    PageInfo<DeviceAlarm> getAllAlarm(int page, int count, String deviceId, String alarmPriority, String alarmMethod,
-                                      String alarmType, String startTime, String endTime);
-
-    /**
-     * 添加一个报警
-     * @param deviceAlarm 添加报警
-     */
-    void add(DeviceAlarm deviceAlarm);
-
-    /**
-     * 清空时间以前的报警
-     * @param id 数据库id
-     * @param deviceIdList 制定需要清理的设备id
-     * @param time 不写时间则清空所有时间的
-     */
-    int clearAlarmBeforeTime(Integer id, List<String> deviceIdList, String time);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
deleted file mode 100644
index 0cb8413..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-
-/**
- * 设备相关业务处理
- */
-public interface IDeviceService {
-
-    /**
-     * 添加目录订阅
-     * @param device 设备信息
-     * @return
-     */
-    boolean addCatalogSubscribe(Device device);
-
-    /**
-     * 移除目录订阅
-     * @param device 设备信息
-     * @return
-     */
-    boolean removeCatalogSubscribe(Device device);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
deleted file mode 100644
index 1a851d7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.github.pagehelper.PageInfo;
-
-import java.util.List;
-
-/**
- * 级联国标平台关联流业务接口
- */
-public interface IGbStreamService {
-
-    /**
-     * 分页获取所有
-     * @param page
-     * @param count
-     * @return
-     */
-    PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId, String catalogId,String query,Boolean pushing,String mediaServerId);
-
-
-    /**
-     * 移除
-     * @param app
-     * @param stream
-     */
-    void del(String app, String stream);
-
-    /**
-     * 保存国标关联
-     * @param gbStreams
-     */
-    boolean addPlatformInfo(List<GbStream> gbStreams, String platformId, String catalogId);
-
-    /**
-     * 移除国标关联
-     * @param gbStreams
-     * @param platformId
-     */
-    boolean delPlatformInfo(String platformId, List<GbStream> gbStreams);
-
-    DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, String deviceGBId);
-
-    void sendCatalogMsg(GbStream gbStream, String type);
-    void sendCatalogMsgs(List<GbStream> gbStreams, String type);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/ILogService.java b/src/main/java/com/genersoft/iot/vmp/service/ILogService.java
deleted file mode 100644
index b7a67ed..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/ILogService.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
-import com.github.pagehelper.PageInfo;
-
-/**
- * 系统日志
- */
-public interface ILogService {
-
-    /**
-     * 查询日志
-     * @param page 当前页
-     * @param count 每页数量
-     * @param query 搜索内容
-     * @param type 类型
-     * @param startTime 开始时间
-     * @param endTime 结束时间
-     * @return 日志列表
-     */
-    PageInfo<LogDto> getAll(int page, int count, String query, String type, String startTime, String endTime);
-
-    /**
-     * 添加日志
-     * @param logDto 日志
-     */
-    void add(LogDto logDto);
-
-    /**
-     * 清空
-     */
-    int clear();
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
deleted file mode 100644
index 00ec0dd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-
-import java.util.List;
-
-/**
- * 媒体服务节点
- */
-public interface IMediaServerService {
-
-    List<MediaServerItem> getAll();
-
-    List<MediaServerItem> getAllFromDatabase();
-
-    List<MediaServerItem> getAllOnline();
-
-    MediaServerItem getOne(String generalMediaServerId);
-
-    void syncCatchFromDatabase();
-
-    /**
-     * 新的节点加入
-     * @param zlmServerConfig
-     * @return
-     */
-    void zlmServerOnline(ZLMServerConfig zlmServerConfig);
-
-    /**
-     * 节点离线
-     * @param mediaServerId
-     * @return
-     */
-    void zlmServerOffline(String mediaServerId);
-
-    MediaServerItem getMediaServerForMinimumLoad();
-
-    void setZLMConfig(MediaServerItem mediaServerItem, boolean restart);
-
-    void updateVmServer(List<MediaServerItem>  mediaServerItemList);
-
-    SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId);
-
-    SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback);
-
-    void closeRTPServer(String deviceId, String channelId, String ssrc);
-
-    void clearRTPServer(MediaServerItem mediaServerItem);
-
-    void update(MediaServerItem mediaSerItem);
-
-    void addCount(String mediaServerId);
-
-    void removeCount(String mediaServerId);
-
-    void releaseSsrc(String mediaServerItemId, String ssrc);
-
-    void clearMediaServerForOnline();
-
-    WVPResult<String> add(MediaServerItem mediaSerItem);
-
-    int addToDatabase(MediaServerItem mediaSerItem);
-
-    int updateToDatabase(MediaServerItem mediaSerItem);
-
-    void resetOnlineServerItem(MediaServerItem serverItem);
-
-    WVPResult<MediaServerItem> checkMediaServer(String ip, int port, String secret);
-
-    boolean checkMediaRecordServer(String ip, int port);
-
-    void delete(String id);
-
-    void deleteDb(String id);
-
-    MediaServerItem getDefaultMediaServer();
-
-    void updateMediaServerKeepalive(String mediaServerId, JSONObject data);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
deleted file mode 100644
index 8c05b85..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.alibaba.fastjson.JSONArray;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-
-/**
- * 媒体信息业务
- */
-public interface IMediaService {
-
-    /**
-     * 根据应用名和流ID获取播放地址, 通过zlm接口检查是否存在
-     * @param app
-     * @param stream
-     * @return
-     */
-    StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId,String addr);
-
-
-    /**
-     * 根据应用名和流ID获取播放地址, 通过zlm接口检查是否存在, 返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况
-     * @param app
-     * @param stream
-     * @return
-     */
-    StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId);
-
-    /**
-     * 根据应用名和流ID获取播放地址, 只是地址拼接
-     * @param app
-     * @param stream
-     * @return
-     */
-    StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaServerItem, String app, String stream, Object tracks);
-
-    /**
-     * 根据应用名和流ID获取播放地址, 只是地址拼接,返回的ip使用远程访问ip,适用与zlm与wvp在一台主机的情况
-     * @param app
-     * @param stream
-     * @return
-     */
-    StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
deleted file mode 100644
index 4cff4a6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamCallback;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamInfo;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.bean.InviteTimeOutCallback;
-import com.genersoft.iot.vmp.service.bean.PlayBackCallback;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.context.request.async.DeferredResult;
-
-/**
- * 点播处理
- */
-public interface IPlayService {
-
-    void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject resonse, String deviceId, String channelId, String uuid);
-
-    void play(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
-              ZLMHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
-              InviteTimeOutCallback timeoutCallback, String uuid);
-    PlayResult play(MediaServerItem mediaServerItem, String deviceId, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent, Runnable timeoutCallback);
-
-    MediaServerItem getNewMediaServerItem(Device device);
-
-    void onPublishHandlerForDownload(InviteStreamInfo inviteStreamInfo, String deviceId, String channelId, String toString);
-
-    DeferredResult<ResponseEntity<String>> playBack(String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
-    DeferredResult<ResponseEntity<String>> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
-
-    void zlmServerOffline(String mediaServerId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IRecordInfoServer.java b/src/main/java/com/genersoft/iot/vmp/service/IRecordInfoServer.java
deleted file mode 100644
index d979b58..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IRecordInfoServer.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.storager.dao.dto.RecordInfo;
-import com.github.pagehelper.PageInfo;
-
-public interface IRecordInfoServer {
-    PageInfo<RecordInfo> getRecordList(int page, int count);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java b/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
deleted file mode 100644
index d207c6a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-
-import java.util.List;
-
-public interface IRoleService {
-
-    Role getRoleById(int id);
-
-    int add(Role role);
-
-    int delete(int id);
-
-    List<Role> getAll();
-
-    int update(Role role);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
deleted file mode 100644
index ac10000..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-
-public interface IStreamProxyService {
-
-    /**
-     * 保存视频代理
-     * @param param
-     */
-    WVPResult<StreamInfo> save(StreamProxyItem param);
-
-    /**
-     * 添加视频代理到zlm
-     * @param param
-     * @return
-     */
-    JSONObject addStreamProxyToZlm(StreamProxyItem param);
-
-    /**
-     * 从zlm移除视频代理
-     * @param param
-     * @return
-     */
-    JSONObject removeStreamProxyFromZlm(StreamProxyItem param);
-
-    /**
-     * 分页查询
-     * @param page
-     * @param count
-     * @return
-     */
-    PageInfo<StreamProxyItem> getAll(Integer page, Integer count);
-
-    /**
-     * 删除视频代理
-     * @param app
-     * @param stream
-     */
-    void del(String app, String stream);
-
-    /**
-     * 启用视频代理
-     * @param app
-     * @param stream
-     * @return
-     */
-    boolean start(String app, String stream);
-
-    /**
-     * 更新状态
-     * @param status 状态
-     * @param app
-     * @param stream
-     */
-    int updateStatus(boolean status, String app, String stream);
-
-
-
-    /**
-     * 停用用视频代理
-     * @param app
-     * @param stream
-     * @return
-     */
-    boolean stop(String app, String stream);
-
-    /**
-     * 获取ffmpeg.cmd模板
-     * @return
-     */
-    JSONObject getFFmpegCMDs(MediaServerItem mediaServerItem);
-
-    /**
-     * 根据app与stream获取streamProxy
-     * @return
-     */
-    StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId);
-
-
-    /**
-     * 新的节点加入
-     * @param mediaServerId
-     * @return
-     */
-    void zlmServerOnline(String mediaServerId);
-
-    /**
-     * 节点离线
-     * @param mediaServerId
-     * @return
-     */
-    void zlmServerOffline(String mediaServerId);
-
-    void clean();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
deleted file mode 100644
index acf0d27..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
-import com.github.pagehelper.PageInfo;
-
-import java.util.List;
-import java.util.Map;
-
-public interface IStreamPushService {
-
-    List<StreamPushItem> handleJSON(String json, MediaServerItem mediaServerItem);
-
-    /**
-     * 将应用名和流ID加入国标关联
-     * @param stream
-     * @return
-     */
-    boolean saveToGB(GbStream stream);
-
-    /**
-     * 将应用名和流ID移出国标关联
-     * @param stream
-     * @return
-     */
-    boolean removeFromGB(GbStream stream);
-
-    /**
-     * 获取
-     */
-    PageInfo<StreamPushItem> getPushList(Integer page, Integer count, String query, Boolean pushing, String mediaServerId);
-
-    List<StreamPushItem> getPushList(String mediaSererId);
-
-    StreamPushItem transform(MediaItem item);
-
-    StreamPushItem getPush(String app, String streamId);
-
-    /**
-     * 停止一路推流
-     * @param app 应用名
-     * @param streamId 流ID
-     * @return
-     */
-    boolean stop(String app, String streamId);
-
-    /**
-     * 新的节点加入
-     * @param mediaServerId
-     * @return
-     */
-    void zlmServerOnline(String mediaServerId);
-
-    /**
-     * 节点离线
-     * @param mediaServerId
-     * @return
-     */
-    void zlmServerOffline(String mediaServerId);
-
-    void clean();
-
-    boolean saveToRandomGB();
-
-    void batchAdd(List<StreamPushItem> streamPushExcelDtoList);
-
-    boolean batchStop(List<GbStream> streamPushItems);
-
-    void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IUserService.java b/src/main/java/com/genersoft/iot/vmp/service/IUserService.java
deleted file mode 100644
index c170c02..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/IUserService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-
-import java.util.List;
-
-public interface IUserService {
-
-    User getUser(String username, String password);
-
-    boolean changePassword(int id, String password);
-
-    User getUserByUsername(String username);
-
-    int addUser(User user);
-
-    int deleteUser(int id);
-
-    List<User> getAllUsers();
-
-    int updateUsers(User user);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java
deleted file mode 100644
index fd5bb06..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.genersoft.iot.vmp.service;
-
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-
-/**
- * 定时查找redis中的GPS推送消息,并保存到对应的流中
- */
-@Component
-public class StreamGPSSubscribeTask {
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-
-
-    @Scheduled(fixedRate = 30 * 1000)   //每30秒执行一次
-    public void execute(){
-        List<GPSMsgInfo> gpsMsgInfo = redisCatchStorage.getAllGpsMsgInfo();
-        if (gpsMsgInfo.size() > 0) {
-            storager.updateStreamGPS(gpsMsgInfo);
-            for (GPSMsgInfo msgInfo : gpsMsgInfo) {
-                msgInfo.setStored(true);
-                redisCatchStorage.updateGpsMsgInfo(msgInfo);
-            }
-        }
-
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/CatalogSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/service/bean/CatalogSubscribeTask.java
deleted file mode 100644
index cb027c8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/CatalogSubscribeTask.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
-import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.sip.ResponseEvent;
-
-public class CatalogSubscribeTask implements Runnable{
-    private final Logger logger = LoggerFactory.getLogger(CatalogSubscribeTask.class);
-    private  Device device;
-    private  ISIPCommander sipCommander;
-
-    public CatalogSubscribeTask(Device device, ISIPCommander sipCommander) {
-        this.device = device;
-        this.sipCommander = sipCommander;
-    }
-
-    @Override
-    public void run() {
-        sipCommander.catalogSubscribe(device, eventResult -> {
-            ResponseEvent event = (ResponseEvent) eventResult.event;
-            Element rootElement = null;
-            if (event.getResponse().getRawContent() != null) {
-                // 成功
-                logger.info("[目录订阅]成功: {}", device.getDeviceId());
-            }else {
-                // 成功
-                logger.info("[目录订阅]成功: {}", device.getDeviceId());
-            }
-        },eventResult -> {
-            // 失败
-            logger.warn("[目录订阅]失败,信令发送失败: {}-{} ", device.getDeviceId(), eventResult.msg);
-        });
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java b/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
deleted file mode 100644
index b814c18..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-public class GPSMsgInfo {
-
-    /**
-     *
-     */
-    private String id;
-
-    /**
-     * 经度 (必选)
-     */
-    private double lng;
-
-    /**
-     * 纬度 (必选)
-     */
-    private double lat;
-
-    /**
-     * 速度,单位:km/h (可选)
-     */
-    private double speed;
-
-    /**
-     * 产生通知时间, 时间格式: 2020-01-14T14:32:12
-     */
-    private String time;
-
-    /**
-     * 方向,取值为当前摄像头方向与正北方的顺时针夹角,取值范围0°~360°,单位:(°)(可选)
-     */
-    private String direction;
-
-    /**
-     * 海拔高度,单位:m(可选)
-     */
-    private String altitude;
-
-    private boolean stored;
-
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public double getLng() {
-        return lng;
-    }
-
-    public void setLng(double lng) {
-        this.lng = lng;
-    }
-
-    public double getLat() {
-        return lat;
-    }
-
-    public void setLat(double lat) {
-        this.lat = lat;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-
-    public String getTime() {
-        return time;
-    }
-
-    public void setTime(String time) {
-        this.time = time;
-    }
-
-    public String getDirection() {
-        return direction;
-    }
-
-    public void setDirection(String direction) {
-        this.direction = direction;
-    }
-
-    public String getAltitude() {
-        return altitude;
-    }
-
-    public void setAltitude(String altitude) {
-        this.altitude = altitude;
-    }
-
-    public boolean isStored() {
-        return stored;
-    }
-
-    public void setStored(boolean stored) {
-        this.stored = stored;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java b/src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java
deleted file mode 100644
index e30db5d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-public interface InviteTimeOutCallback {
-
-    void run(int code, String msg); // code: 0 sip超时, 1 收流超时
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java b/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java
deleted file mode 100644
index 5ed6cf3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-
-public interface PlayBackCallback {
-
-    void call(PlayBackResult<RequestMessage> msg);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java b/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
deleted file mode 100644
index 8029b5a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-
-import javax.sip.RequestEvent;
-
-public class PlayBackResult<T> {
-    private int code;
-    private T data;
-    private MediaServerItem mediaServerItem;
-    private JSONObject response;
-    private SipSubscribe.EventResult event;
-
-    public int getCode() {
-        return code;
-    }
-
-    public void setCode(int code) {
-        this.code = code;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-
-    public MediaServerItem getMediaServerItem() {
-        return mediaServerItem;
-    }
-
-    public void setMediaServerItem(MediaServerItem mediaServerItem) {
-        this.mediaServerItem = mediaServerItem;
-    }
-
-    public JSONObject getResponse() {
-        return response;
-    }
-
-    public void setResponse(JSONObject response) {
-        this.response = response;
-    }
-
-    public SipSubscribe.EventResult getEvent() {
-        return event;
-    }
-
-    public void setEvent(SipSubscribe.EventResult event) {
-        this.event = event;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java b/src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java
deleted file mode 100644
index 1723bc5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-public class SSRCInfo {
-
-    private int port;
-    private String ssrc;
-    private String Stream;
-
-    public SSRCInfo(int port, String ssrc, String stream) {
-        this.port = port;
-        this.ssrc = ssrc;
-        Stream = stream;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public String getSsrc() {
-        return ssrc;
-    }
-
-    public void setSsrc(String ssrc) {
-        this.ssrc = ssrc;
-    }
-
-    public String getStream() {
-        return Stream;
-    }
-
-    public void setStream(String stream) {
-        Stream = stream;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java b/src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java
deleted file mode 100644
index 9d6b06a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.service.bean;
-
-public class ThirdPartyGB {
-
-    private String name;
-    private String nationalStandardNo;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getNationalStandardNo() {
-        return nationalStandardNo;
-    }
-
-    public void setNationalStandardNo(String nationalStandardNo) {
-        this.nationalStandardNo = nationalStandardNo;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java
deleted file mode 100644
index ead291c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import com.genersoft.iot.vmp.storager.dao.DeviceAlarmMapper;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class DeviceAlarmServiceImpl implements IDeviceAlarmService {
-
-    @Autowired
-    private DeviceAlarmMapper deviceAlarmMapper;
-
-
-    @Override
-    public PageInfo<DeviceAlarm> getAllAlarm(int page, int count, String deviceId, String alarmPriority, String alarmMethod, String alarmType, String startTime, String endTime) {
-        PageHelper.startPage(page, count);
-        List<DeviceAlarm> all = deviceAlarmMapper.query(deviceId, alarmPriority, alarmMethod, alarmType, startTime, endTime);
-        return new PageInfo<>(all);
-    }
-
-    @Override
-    public void add(DeviceAlarm deviceAlarm) {
-        deviceAlarmMapper.add(deviceAlarm);
-    }
-
-    @Override
-    public int clearAlarmBeforeTime(Integer id, List<String> deviceIdList, String time) {
-        return deviceAlarmMapper.clearAlarmBeforeTime(id, deviceIdList, time);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
deleted file mode 100644
index 0fc6f4c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
-import com.genersoft.iot.vmp.service.IDeviceService;
-import com.genersoft.iot.vmp.service.bean.CatalogSubscribeTask;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 设备业务(目录订阅)
- */
-@Service
-public class DeviceServiceImpl implements IDeviceService {
-
-    private final static Logger logger = LoggerFactory.getLogger(DeviceServiceImpl.class);
-
-    @Autowired
-    private DynamicTask dynamicTask;
-;
-
-    @Autowired
-    private ISIPCommander sipCommander;
-
-    @Override
-    public boolean addCatalogSubscribe(Device device) {
-        if (device == null || device.getSubscribeCycleForCatalog() < 0) {
-            return false;
-        }
-        if (dynamicTask.contains(device.getDeviceId())) {
-            // 存在则停止现有的,开启新的
-            dynamicTask.stop(device.getDeviceId());
-        }
-        logger.info("[添加目录订阅] 设备{}", device.getDeviceId());
-        // 添加目录订阅
-        CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander);
-        catalogSubscribeTask.run();
-        // 提前开始刷新订阅
-        int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
-        // 设置最小值为30
-        subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
-        dynamicTask.startCron(device.getDeviceId(), catalogSubscribeTask, subscribeCycleForCatalog - 5);
-        return true;
-    }
-
-    @Override
-    public boolean removeCatalogSubscribe(Device device) {
-        if (device == null || device.getSubscribeCycleForCatalog() < 0) {
-            return false;
-        }
-        logger.info("移除目录订阅: {}", device.getDeviceId());
-        dynamicTask.stop(device.getDeviceId());
-        device.setSubscribeCycleForCatalog(0);
-        sipCommander.catalogSubscribe(device, null, null);
-        return true;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
deleted file mode 100644
index 32a1305..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
-import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
-import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-public class GbStreamServiceImpl implements IGbStreamService {
-
-    private final static Logger logger = LoggerFactory.getLogger(GbStreamServiceImpl.class);
-
-    @Autowired
-    DataSourceTransactionManager dataSourceTransactionManager;
-
-    @Autowired
-    TransactionDefinition transactionDefinition;
-
-    @Autowired
-    private GbStreamMapper gbStreamMapper;
-
-    @Autowired
-    private PlatformGbStreamMapper platformGbStreamMapper;
-
-    @Autowired
-    private ParentPlatformMapper platformMapper;
-
-    @Autowired
-    private SipConfig sipConfig;
-
-    @Autowired
-    private EventPublisher eventPublisher;
-
-    @Override
-    public PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId, String catalogId, String query, Boolean pushing, String mediaServerId) {
-        PageHelper.startPage(page, count);
-        List<GbStream> all = gbStreamMapper.selectAll(platFormId, catalogId, query, pushing, mediaServerId);
-        return new PageInfo<>(all);
-    }
-
-    @Override
-    public void del(String app, String stream) {
-        gbStreamMapper.del(app, stream);
-    }
-
-
-    @Override
-    public boolean addPlatformInfo(List<GbStream> gbStreams, String platformId, String catalogId) {
-        // 放在事务内执行
-        boolean result = false;
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-        ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId);
-        if (catalogId == null) catalogId = parentPlatform.getCatalogId();
-        try {
-            List<DeviceChannel> deviceChannelList = new ArrayList<>();
-            for (GbStream gbStream : gbStreams) {
-                gbStream.setCatalogId(catalogId);
-                gbStream.setPlatformId(platformId);
-                // TODO 修改为批量提交
-                platformGbStreamMapper.add(gbStream);
-                DeviceChannel deviceChannelListByStream = getDeviceChannelListByStream(gbStream, catalogId, parentPlatform.getDeviceGBId());
-                deviceChannelList.add(deviceChannelListByStream);
-            }
-            dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-            eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
-            result = true;
-        }catch (Exception e) {
-            logger.error("批量保存流与平台的关系时错误", e);
-            dataSourceTransactionManager.rollback(transactionStatus);
-        }
-        return result;
-    }
-
-    @Override
-    public DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, String deviceGBId) {
-        DeviceChannel deviceChannel = new DeviceChannel();
-        deviceChannel.setChannelId(gbStream.getGbId());
-        deviceChannel.setName(gbStream.getName());
-        deviceChannel.setLongitude(gbStream.getLongitude());
-        deviceChannel.setLatitude(gbStream.getLatitude());
-        deviceChannel.setDeviceId(deviceGBId);
-        deviceChannel.setManufacture("wvp-pro");
-        deviceChannel.setStatus(gbStream.isStatus()?1:0);
-        deviceChannel.setParentId(catalogId ==null?gbStream.getCatalogId():catalogId);
-        deviceChannel.setRegisterWay(1);
-        deviceChannel.setCivilCode(sipConfig.getDomain().substring(0, sipConfig.getDomain().length() - 2));
-        deviceChannel.setModel("live");
-        deviceChannel.setOwner("wvp-pro");
-        deviceChannel.setParental(0);
-        deviceChannel.setSecrecy("0");
-        return deviceChannel;
-    }
-
-    @Override
-    public boolean delPlatformInfo(String platformId, List<GbStream> gbStreams) {
-        // 放在事务内执行
-        boolean result = false;
-        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-        try {
-            List<DeviceChannel> deviceChannelList = new ArrayList<>();
-            platformGbStreamMapper.delByAppAndStreamsByPlatformId(gbStreams, platformId);
-            for (GbStream gbStream : gbStreams) {
-                DeviceChannel deviceChannel = new DeviceChannel();
-                deviceChannel.setChannelId(gbStream.getGbId());
-                deviceChannelList.add(deviceChannel);
-            }
-
-            eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-            dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-            result = true;
-        }catch (Exception e) {
-            logger.error("批量移除流与平台的关系时错误", e);
-            dataSourceTransactionManager.rollback(transactionStatus);
-        }
-        return result;
-    }
-
-    @Override
-    public void sendCatalogMsg(GbStream gbStream, String type) {
-        List<GbStream> gbStreams = new ArrayList<>();
-        if (gbStream.getGbId() != null) {
-            gbStreams.add(gbStream);
-        }else {
-            StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(gbStream.getApp(), gbStream.getStream());
-            if (streamProxyItem != null && streamProxyItem.getGbId() != null){
-                gbStreams.add(streamProxyItem);
-            }
-        }
-        sendCatalogMsgs(gbStreams, type);
-    }
-
-    @Override
-    public void sendCatalogMsgs(List<GbStream> gbStreams, String type) {
-        if (gbStreams.size() > 0) {
-            for (GbStream gs : gbStreams) {
-                if (StringUtils.isEmpty(gs.getGbId())){
-                    continue;
-                }
-                List<ParentPlatform> parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream());
-                if (parentPlatforms.size() > 0) {
-                    for (ParentPlatform parentPlatform : parentPlatforms) {
-                        if (parentPlatform != null) {
-                            eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), gs, type);
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java
deleted file mode 100644
index 92fa596..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.service.ILogService;
-import com.genersoft.iot.vmp.storager.dao.LogMapper;
-import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class LogServiceImpl implements ILogService {
-
-    @Autowired
-    private LogMapper logMapper;
-
-    @Override
-    public PageInfo<LogDto> getAll(int page, int count, String query, String type, String startTime, String endTime) {
-        PageHelper.startPage(page, count);
-        List<LogDto> all = logMapper.query(query, type, startTime, endTime);
-        return new PageInfo<>(all);
-    }
-
-    @Override
-    public void add(LogDto logDto) {
-        logMapper.add(logDto);
-    }
-
-    @Override
-    public int clear() {
-        return logMapper.clear();
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
deleted file mode 100644
index 43312a8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ /dev/null
@@ -1,660 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.MediaConfig;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.storager.dao.MediaServerMapper;
-import com.genersoft.iot.vmp.utils.redis.JedisUtil;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import okhttp3.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.security.core.parameters.P;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.util.StringUtils;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-/**
- * 媒体服务器节点管理
- */
-@Service
-public class MediaServerServiceImpl implements IMediaServerService {
-
-    private final static Logger logger = LoggerFactory.getLogger(MediaServerServiceImpl.class);
-
-    @Autowired
-    private SipConfig sipConfig;
-
-    @Value("${server.ssl.enabled:false}")
-    private boolean sslEnabled;
-
-    @Value("${server.port}")
-    private Integer serverPort;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    @Autowired
-    private MediaServerMapper mediaServerMapper;
-
-    @Autowired
-    DataSourceTransactionManager dataSourceTransactionManager;
-
-    @Autowired
-    TransactionDefinition transactionDefinition;
-
-    @Autowired
-    private VideoStreamSessionManager streamSession;
-
-    @Autowired
-    private ZLMRTPServerFactory zlmrtpServerFactory;
-
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IStreamProxyService streamProxyService;
-
-    @Autowired
-    private EventPublisher publisher;
-
-    @Autowired
-    JedisUtil jedisUtil;
-
-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    /**
-     * 初始化
-     */
-    @Override
-    public void updateVmServer(List<MediaServerItem>  mediaServerItemList) {
-        logger.info("[缓存初始化] Media Server ");
-        for (MediaServerItem mediaServerItem : mediaServerItemList) {
-            if (StringUtils.isEmpty(mediaServerItem.getId())) {
-                continue;
-            }
-            // 更新
-            if (mediaServerItem.getSsrcConfig() == null) {
-                SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
-                mediaServerItem.setSsrcConfig(ssrcConfig);
-                redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem);
-            }
-            // 查询redis是否存在此mediaServer
-            String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId();
-            if (!redisUtil.hasKey(key)) {
-                redisUtil.set(key, mediaServerItem);
-            }
-
-        }
-    }
-
-    @Override
-    public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId) {
-        return openRTPServer(mediaServerItem, streamId, false);
-    }
-
-    @Override
-    public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback) {
-        if (mediaServerItem == null || mediaServerItem.getId() == null) {
-            return null;
-        }
-        // 获取mediaServer可用的ssrc
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId();
-
-        SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
-        if (ssrcConfig == null) {
-            logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId());
-            return null;
-        }else {
-            String ssrc = null;
-            if (isPlayback) {
-                ssrc = ssrcConfig.getPlayBackSsrc();
-            }else {
-                ssrc = ssrcConfig.getPlaySsrc();
-            }
-
-            if (streamId == null) {
-                streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
-            }
-            int rtpServerPort = mediaServerItem.getRtpProxyPort();
-            if (mediaServerItem.isRtpEnable()) {
-                rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId);
-            }
-            redisUtil.set(key, mediaServerItem);
-            return new SSRCInfo(rtpServerPort, ssrc, streamId);
-        }
-    }
-
-    @Override
-    public void closeRTPServer(String deviceId, String channelId, String stream) {
-        String mediaServerId = streamSession.getMediaServerId(deviceId, channelId, stream);
-        String ssrc = streamSession.getSSRC(deviceId, channelId, stream);
-        MediaServerItem mediaServerItem = this.getOne(mediaServerId);
-        if (mediaServerItem != null) {
-            String streamId = String.format("%s_%s", deviceId, channelId);
-            zlmrtpServerFactory.closeRTPServer(mediaServerItem, streamId);
-            releaseSsrc(mediaServerItem.getId(), ssrc);
-        }
-        streamSession.remove(deviceId, channelId, stream);
-    }
-
-    @Override
-    public void releaseSsrc(String mediaServerItemId, String ssrc) {
-        MediaServerItem mediaServerItem = getOne(mediaServerItemId);
-        if (mediaServerItem == null || ssrc == null) {
-            return;
-        }
-        SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
-        ssrcConfig.releaseSsrc(ssrc);
-        mediaServerItem.setSsrcConfig(ssrcConfig);
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId();
-        redisUtil.set(key, mediaServerItem);
-    }
-
-    /**
-     * zlm 重启后重置他的推流信息, TODO 给正在使用的设备发送停止命令
-     */
-    @Override
-    public void clearRTPServer(MediaServerItem mediaServerItem) {
-        mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()));
-        redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), mediaServerItem.getId(), 0);
-    }
-
-
-    @Override
-    public void update(MediaServerItem mediaSerItem) {
-        mediaServerMapper.update(mediaSerItem);
-        MediaServerItem mediaServerItemInRedis = getOne(mediaSerItem.getId());
-        MediaServerItem mediaServerItemInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId());
-        if (mediaServerItemInRedis != null && mediaServerItemInRedis.getSsrcConfig() != null) {
-            mediaServerItemInDataBase.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
-        }else {
-            mediaServerItemInDataBase.setSsrcConfig(
-                    new SsrcConfig(
-                            mediaServerItemInDataBase.getId(),
-                            null,
-                            sipConfig.getDomain()
-                    )
-            );
-        }
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItemInDataBase.getId();
-        redisUtil.set(key, mediaServerItemInDataBase);
-    }
-
-    @Override
-    public List<MediaServerItem> getAll() {
-        List<MediaServerItem> result = new ArrayList<>();
-        List<Object> mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetup.getServerId() + "_" ));
-        String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        for (Object mediaServerKey : mediaServerKeys) {
-            String key = (String) mediaServerKey;
-            MediaServerItem mediaServerItem = (MediaServerItem) redisUtil.get(key);
-            // 检查状态
-            Double aDouble = redisUtil.zScore(onlineKey, mediaServerItem.getId());
-            if (aDouble != null) {
-                mediaServerItem.setStatus(true);
-            }
-            result.add(mediaServerItem);
-        }
-        result.sort((serverItem1, serverItem2)->{
-            int sortResult = 0;
-            try {
-                sortResult = format.parse(serverItem1.getCreateTime()).compareTo(format.parse(serverItem2.getCreateTime()));
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
-            return  sortResult;
-        });
-        return result;
-    }
-
-
-    @Override
-    public List<MediaServerItem> getAllFromDatabase() {
-        return mediaServerMapper.queryAll();
-    }
-
-    @Override
-    public List<MediaServerItem> getAllOnline() {
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        Set<String> mediaServerIdSet = redisUtil.zRevRange(key, 0, -1);
-
-        List<MediaServerItem> result = new ArrayList<>();
-        if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) {
-            for (String mediaServerId : mediaServerIdSet) {
-                String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId;
-                result.add((MediaServerItem) redisUtil.get(serverKey));
-            }
-        }
-        Collections.reverse(result);
-        return result;
-    }
-
-    /**
-     * 获取单个zlm服务器
-     * @param mediaServerId 服务id
-     * @return MediaServerItem
-     */
-    @Override
-    public MediaServerItem getOne(String mediaServerId) {
-        if (mediaServerId == null) {
-            return null;
-        }
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId;
-        return (MediaServerItem)redisUtil.get(key);
-    }
-
-    @Override
-    public MediaServerItem getDefaultMediaServer() {
-
-        return mediaServerMapper.queryDefault();
-    }
-
-    @Override
-    public void clearMediaServerForOnline() {
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        redisUtil.del(key);
-    }
-
-    @Override
-    public WVPResult<String> add(MediaServerItem mediaServerItem) {
-        WVPResult<String> result = new WVPResult<>();
-        mediaServerItem.setCreateTime(this.format.format(System.currentTimeMillis()));
-        mediaServerItem.setUpdateTime(this.format.format(System.currentTimeMillis()));
-        mediaServerItem.setHookAliveInterval(120);
-        JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
-        if (responseJSON != null) {
-            JSONArray data = responseJSON.getJSONArray("data");
-            if (data != null && data.size() > 0) {
-                ZLMServerConfig zlmServerConfig= JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
-                if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) {
-                    result.setCode(-1);
-                    result.setMsg("保存失败,媒体服务ID [ " + zlmServerConfig.getGeneralMediaServerId() + " ] 已存在,请修改媒体服务器配置");
-                    return result;
-                }
-                mediaServerItem.setId(zlmServerConfig.getGeneralMediaServerId());
-                zlmServerConfig.setIp(mediaServerItem.getIp());
-                mediaServerMapper.add(mediaServerItem);
-                zlmServerOnline(zlmServerConfig);
-                result.setCode(0);
-                result.setMsg("success");
-            }else {
-                result.setCode(-1);
-                result.setMsg("连接失败");
-            }
-
-        }else {
-            result.setCode(-1);
-            result.setMsg("连接失败");
-        }
-       return result;
-    }
-
-    @Override
-    public int addToDatabase(MediaServerItem mediaSerItem) {
-        return mediaServerMapper.add(mediaSerItem);
-    }
-
-    @Override
-    public int updateToDatabase(MediaServerItem mediaSerItem) {
-        int result = 0;
-        if (mediaSerItem.isDefaultServer()) {
-            TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-            int delResult = mediaServerMapper.delDefault();
-            if (delResult == 0) {
-                logger.error("移除数据库默认zlm节点失败");
-                //事务回滚
-                dataSourceTransactionManager.rollback(transactionStatus);
-                return 0;
-            }
-            result = mediaServerMapper.add(mediaSerItem);
-            dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-        }else {
-            result = mediaServerMapper.update(mediaSerItem);
-        }
-        return result;
-    }
-
-    /**
-     * 处理zlm上线
-     * @param zlmServerConfig zlm上线携带的参数
-     */
-    @Override
-    public void zlmServerOnline(ZLMServerConfig zlmServerConfig) {
-        logger.info("[ ZLM:{} ]-[ {}:{} ]正在连接",
-                zlmServerConfig.getGeneralMediaServerId(), zlmServerConfig.getIp(), zlmServerConfig.getHttpPort());
-
-        MediaServerItem serverItem = mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId());
-        if (serverItem == null) {
-            logger.warn("[未注册的zlm] 拒接接入:{}来自{}:{}", zlmServerConfig.getGeneralMediaServerId(), zlmServerConfig.getIp(),zlmServerConfig.getHttpPort() );
-            logger.warn("请检查ZLM的<general.mediaServerId>配置是否与WVP的<media.id>一致");
-            return;
-        }
-        serverItem.setHookAliveInterval(zlmServerConfig.getHookAliveInterval());
-        if (serverItem.getHttpPort() == 0) {
-            serverItem.setHttpPort(zlmServerConfig.getHttpPort());
-        }
-        if (serverItem.getHttpSSlPort() == 0) {
-            serverItem.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
-        }
-        if (serverItem.getRtmpPort() == 0) {
-            serverItem.setRtmpPort(zlmServerConfig.getRtmpPort());
-        }
-        if (serverItem.getRtmpSSlPort() == 0) {
-            serverItem.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
-        }
-        if (serverItem.getRtspPort() == 0) {
-            serverItem.setRtspPort(zlmServerConfig.getRtspPort());
-        }
-        if (serverItem.getRtspSSLPort() == 0) {
-            serverItem.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
-        }
-        if (serverItem.getRtpProxyPort() == 0) {
-            serverItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
-        }
-        serverItem.setStatus(true);
-
-        if (StringUtils.isEmpty(serverItem.getId())) {
-            logger.warn("[未注册的zlm] serverItem缺少ID, 无法接入:{}:{}", zlmServerConfig.getIp(),zlmServerConfig.getHttpPort() );
-            return;
-        }
-        mediaServerMapper.update(serverItem);
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + zlmServerConfig.getGeneralMediaServerId();
-        if (redisUtil.get(key) == null) {
-            SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain());
-            serverItem.setSsrcConfig(ssrcConfig);
-        }else {
-            MediaServerItem mediaServerItemInRedis = (MediaServerItem)redisUtil.get(key);
-            serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
-        }
-        redisUtil.set(key, serverItem);
-        resetOnlineServerItem(serverItem);
-        updateMediaServerKeepalive(serverItem.getId(), null);
-        setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable()));
-
-        publisher.zlmOnlineEventPublish(serverItem.getId());
-        logger.info("[ ZLM:{} ]-[ {}:{} ]连接成功",
-                zlmServerConfig.getGeneralMediaServerId(), zlmServerConfig.getIp(), zlmServerConfig.getHttpPort());
-    }
-
-
-    @Override
-    public void zlmServerOffline(String mediaServerId) {
-        delete(mediaServerId);
-    }
-
-    @Override
-    public void resetOnlineServerItem(MediaServerItem serverItem) {
-        // 更新缓存
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        // 使用zset的分数作为当前并发量, 默认值设置为0
-        if (redisUtil.zScore(key, serverItem.getId()) == null) {  // 不存在则设置默认值 已存在则重置
-            redisUtil.zAdd(key, serverItem.getId(), 0L);
-            // 查询服务流数量
-            zlmresTfulUtils.getMediaList(serverItem, null, null, "rtmp",(mediaList ->{
-                Integer code = mediaList.getInteger("code");
-                if (code == 0) {
-                    JSONArray data = mediaList.getJSONArray("data");
-                    if (data != null) {
-                        redisUtil.zAdd(key, serverItem.getId(), data.size());
-                    }
-                }
-            }));
-        }else {
-            clearRTPServer(serverItem);
-        }
-
-    }
-
-
-    @Override
-    public void addCount(String mediaServerId) {
-        if (mediaServerId == null) {
-            return;
-        }
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        redisUtil.zIncrScore(key, mediaServerId, 1);
-
-    }
-
-    @Override
-    public void removeCount(String mediaServerId) {
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-        redisUtil.zIncrScore(key, mediaServerId, - 1);
-    }
-
-    /**
-     * 获取负载最低的节点
-     * @return MediaServerItem
-     */
-    @Override
-    public MediaServerItem getMediaServerForMinimumLoad() {
-        String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId();
-
-        if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
-            logger.info("获取负载最低的节点时无在线节点");
-            return null;
-        }
-
-        // 获取分数最低的,及并发最低的
-        Set<Object> objects = redisUtil.ZRange(key, 0, -1);
-        ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects);
-
-        String mediaServerId = (String)mediaServerObjectS.get(0);
-        return getOne(mediaServerId);
-    }
-
-    /**
-     * 对zlm服务器进行基础配置
-     * @param mediaServerItem 服务ID
-     * @param restart 是否重启zlm
-     */
-    @Override
-    public void setZLMConfig(MediaServerItem mediaServerItem, boolean restart) {
-        logger.info("[ ZLM:{} ]-[ {}:{} ]正在设置zlm",
-                mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
-        String protocol = sslEnabled ? "https" : "http";
-        String hookPrex = String.format("%s://%s:%s/index/hook", protocol, mediaServerItem.getHookIp(), serverPort);
-        String recordHookPrex = null;
-        if (mediaServerItem.getRecordAssistPort() != 0) {
-            recordHookPrex = String.format("http://127.0.0.1:%s/api/record", mediaServerItem.getRecordAssistPort());
-        }
-        Map<String, Object> param = new HashMap<>();
-        param.put("api.secret",mediaServerItem.getSecret()); // -profile:v Baseline
-        param.put("ffmpeg.cmd","%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264  -f flv %s");
-        param.put("hook.enable","1");
-        param.put("hook.on_flow_report","");
-        param.put("hook.on_play",String.format("%s/on_play", hookPrex));
-        param.put("hook.on_http_access","");
-        param.put("hook.on_publish", String.format("%s/on_publish", hookPrex));
-        param.put("hook.on_record_mp4",recordHookPrex != null? String.format("%s/on_record_mp4", recordHookPrex): "");
-        param.put("hook.on_record_ts","");
-        param.put("hook.on_rtsp_auth","");
-        param.put("hook.on_rtsp_realm","");
-        param.put("hook.on_server_started",String.format("%s/on_server_started", hookPrex));
-        param.put("hook.on_shell_login",String.format("%s/on_shell_login", hookPrex));
-        param.put("hook.on_stream_changed",String.format("%s/on_stream_changed", hookPrex));
-        param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex));
-        param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex));
-        param.put("hook.on_server_keepalive",String.format("%s/on_server_keepalive", hookPrex));
-        param.put("hook.timeoutSec","20");
-        param.put("general.streamNoneReaderDelayMS",mediaServerItem.getStreamNoneReaderDelayMS()==-1?"3600000":mediaServerItem.getStreamNoneReaderDelayMS() );
-        // 推流断开后可以在超时时间内重新连接上继续推流,这样播放器会接着播放。
-        // 置0关闭此特性(推流断开会导致立即断开播放器)
-        // 此参数不应大于播放器超时时间
-        // 优化此消息以更快的收到流注销事件
-        param.put("general.continue_push_ms", "3000" );
-        // 最多等待未初始化的Track时间,单位毫秒,超时之后会忽略未初始化的Track, 设置此选项优化那些音频错误的不规范流,
-        // 等zlm支持给每个rtpServer设置关闭音频的时候可以不设置此选项
-        param.put("general.wait_track_ready_ms", "3000" );
-        if (mediaServerItem.isRtpEnable() && !StringUtils.isEmpty(mediaServerItem.getRtpPortRange())) {
-            param.put("rtp_proxy.port_range", mediaServerItem.getRtpPortRange().replace(",", "-"));
-        }
-
-        JSONObject responseJSON = zlmresTfulUtils.setServerConfig(mediaServerItem, param);
-
-        if (responseJSON != null && responseJSON.getInteger("code") == 0) {
-            if (restart) {
-                logger.info("[ ZLM:{} ]-[ {}:{} ]设置zlm成功, 开始重启以保证配置生效",
-                        mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
-                zlmresTfulUtils.restartServer(mediaServerItem);
-            }else {
-                logger.info("[ ZLM:{} ]-[ {}:{} ]设置zlm成功",
-                        mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
-            }
-
-
-        }else {
-            logger.info("[ ZLM:{} ]-[ {}:{} ]设置zlm失败",
-                    mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
-        }
-
-
-    }
-
-
-    @Override
-    public WVPResult<MediaServerItem> checkMediaServer(String ip, int port, String secret) {
-        WVPResult<MediaServerItem> result = new WVPResult<>();
-        if (mediaServerMapper.queryOneByHostAndPort(ip, port) != null) {
-            result.setCode(-1);
-            result.setMsg("此连接已存在");
-            return result;
-        }
-        MediaServerItem mediaServerItem = new MediaServerItem();
-        mediaServerItem.setIp(ip);
-        mediaServerItem.setHttpPort(port);
-        mediaServerItem.setSecret(secret);
-        JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
-        if (responseJSON == null) {
-            result.setCode(-1);
-            result.setMsg("连接失败");
-            return result;
-        }
-        JSONArray data = responseJSON.getJSONArray("data");
-        ZLMServerConfig zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
-        if (zlmServerConfig == null) {
-            result.setCode(-1);
-            result.setMsg("读取配置失败");
-            return result;
-        }
-        if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) {
-            result.setCode(-1);
-            result.setMsg("媒体服务ID [" + zlmServerConfig.getGeneralMediaServerId() + " ] 已存在,请修改媒体服务器配置");
-            return result;
-        }
-        mediaServerItem.setHttpSSlPort(zlmServerConfig.getHttpPort());
-        mediaServerItem.setRtmpPort(zlmServerConfig.getRtmpPort());
-        mediaServerItem.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
-        mediaServerItem.setRtspPort(zlmServerConfig.getRtspPort());
-        mediaServerItem.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
-        mediaServerItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
-        mediaServerItem.setStreamIp(ip);
-        mediaServerItem.setHookIp(sipConfig.getIp());
-        mediaServerItem.setSdpIp(ip);
-        mediaServerItem.setStreamNoneReaderDelayMS(zlmServerConfig.getGeneralStreamNoneReaderDelayMS());
-        result.setCode(0);
-        result.setMsg("成功");
-        result.setData(mediaServerItem);
-        return result;
-    }
-
-    @Override
-    public boolean checkMediaRecordServer(String ip, int port) {
-        boolean result = false;
-        OkHttpClient client = new OkHttpClient();
-        String url = String.format("http://%s:%s/index/api/record",  ip, port);
-
-        FormBody.Builder builder = new FormBody.Builder();
-
-        Request request = new Request.Builder()
-                .get()
-                .url(url)
-                .build();
-        try {
-            Response response = client.newCall(request).execute();
-            if (response != null) {
-                result = true;
-            }
-        } catch (Exception e) {}
-
-        return result;
-    }
-
-    @Override
-    public void delete(String id) {
-        redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), id);
-        String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + id;
-        redisUtil.del(key);
-    }
-    @Override
-    public void deleteDb(String id){
-        //同步删除数据库中的数据
-        mediaServerMapper.delOne(id);
-    }
-
-    @Override
-    public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) {
-        MediaServerItem mediaServerItem = getOne(mediaServerId);
-        if (mediaServerItem == null) {
-            // zlm连接重试
-
-            logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
-            return;
-        }
-        String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + mediaServerId;
-        int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
-        redisUtil.set(key, data, hookAliveInterval);
-    }
-
-    @Override
-    public void syncCatchFromDatabase() {
-        List<MediaServerItem> allInCatch = getAll();
-        List<MediaServerItem> allInDatabase = mediaServerMapper.queryAll();
-        Map<String, MediaServerItem> mediaServerItemMap = new HashMap<>();
-
-        for (MediaServerItem mediaServerItem : allInDatabase) {
-            mediaServerItemMap.put(mediaServerItem.getId(), mediaServerItem);
-        }
-        for (MediaServerItem mediaServerItem : allInCatch) {
-            if (mediaServerItemMap.get(mediaServerItem) == null) {
-                delete(mediaServerItem.getId());
-            }
-        }
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
deleted file mode 100644
index 3c776b4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.MediaConfig;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.service.IMediaService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MediaServiceImpl implements IMediaService {
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-
-    @Autowired
-    private MediaConfig mediaConfig;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-
-
-    @Override
-    public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks) {
-        return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, null);
-    }
-
-    @Override
-    public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId, String addr) {
-        StreamInfo streamInfo = null;
-        if (mediaServerId == null) {
-            mediaServerId = mediaConfig.getId();
-        }
-        MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);;
-        if (mediaInfo == null) {
-            return null;
-        }
-        JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, app, stream);
-        if (mediaList != null) {
-            if (mediaList.getInteger("code") == 0) {
-                JSONArray data = mediaList.getJSONArray("data");
-                if (data == null) return null;
-                JSONObject mediaJSON = JSON.parseObject(JSON.toJSONString(data.get(0)), JSONObject.class);
-                JSONArray tracks = mediaJSON.getJSONArray("tracks");
-                streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks);
-            }
-        }
-        return streamInfo;
-    }
-
-
-
-    @Override
-    public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId) {
-        return getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, null);
-    }
-
-    @Override
-    public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr) {
-        StreamInfo streamInfoResult = new StreamInfo();
-        streamInfoResult.setStream(stream);
-        streamInfoResult.setApp(app);
-        if (addr == null) {
-            addr = mediaInfo.getStreamIp();
-        }
-        streamInfoResult.setMediaServerId(mediaInfo.getId());
-        streamInfoResult.setRtmp(String.format("rtmp://%s:%s/%s/%s", addr, mediaInfo.getRtmpPort(), app,  stream));
-        if (mediaInfo.getRtmpSSlPort() != 0) {
-            streamInfoResult.setRtmps(String.format("rtmps://%s:%s/%s/%s", addr, mediaInfo.getRtmpSSlPort(), app,  stream));
-        }
-        streamInfoResult.setRtsp(String.format("rtsp://%s:%s/%s/%s", addr, mediaInfo.getRtspPort(), app,  stream));
-        if (mediaInfo.getRtspSSLPort() != 0) {
-            streamInfoResult.setRtsps(String.format("rtsps://%s:%s/%s/%s", addr, mediaInfo.getRtspSSLPort(), app,  stream));
-        }
-        streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app,  stream));
-        streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app,  stream));
-        if (mediaInfo.getHttpSSlPort() != 0) {
-            streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setHttps_hls(String.format("https://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setWss_hls(String.format("wss://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setHttps_fmp4(String.format("https://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setWss_fmp4(String.format("wss://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app,  stream));
-            streamInfoResult.setRtc(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app,  stream));
-        }
-
-        streamInfoResult.setTracks(tracks);
-        return streamInfoResult;
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
deleted file mode 100644
index 9ee5867..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ /dev/null
@@ -1,458 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.bean.InviteTimeOutCallback;
-import com.genersoft.iot.vmp.service.bean.PlayBackCallback;
-import com.genersoft.iot.vmp.service.bean.PlayBackResult;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.service.IPlayService;
-import gov.nist.javax.sip.stack.SIPDialog;
-import jdk.nashorn.internal.ir.RuntimeNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.util.ResourceUtils;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.Header;
-import javax.sip.message.Request;
-import java.io.FileNotFoundException;
-import java.util.*;
-
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-@Service
-public class PlayServiceImpl implements IPlayService {
-
-    private final static Logger logger = LoggerFactory.getLogger(PlayServiceImpl.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private SIPCommanderFroPlatform sipCommanderFroPlatform;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private RedisUtil redis;
-
-    @Autowired
-    private DeferredResultHolder resultHolder;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    @Autowired
-    private IMediaService mediaService;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private VideoStreamSessionManager streamSession;
-
-    @Autowired
-    private UserSetup userSetup;
-
-
-
-
-    @Override
-    public PlayResult play(MediaServerItem mediaServerItem, String deviceId, String channelId,
-                           ZLMHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
-                           Runnable timeoutCallback) {
-        PlayResult playResult = new PlayResult();
-        RequestMessage msg = new RequestMessage();
-        String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
-        msg.setKey(key);
-        String uuid = UUID.randomUUID().toString();
-        msg.setId(uuid);
-        playResult.setUuid(uuid);
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(userSetup.getPlayTimeout());
-        playResult.setResult(result);
-        // 录像查询以channelId作为deviceId查询
-        resultHolder.put(key, uuid, result);
-        if (mediaServerItem == null) {
-            WVPResult wvpResult = new WVPResult();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("未找到可用的zlm");
-            msg.setData(wvpResult);
-            resultHolder.invokeResult(msg);
-            return playResult;
-        }
-        Device device = redisCatchStorage.getDevice(deviceId);
-        StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
-        playResult.setDevice(device);
-
-        result.onCompletion(()->{
-            // 点播结束时调用截图接口
-            // TODO 应该在上流时调用更好,结束也可能是错误结束
-            try {
-                String classPath = ResourceUtils.getURL("classpath:").getPath();
-                // 兼容打包为jar的class路径
-                if(classPath.contains("jar")) {
-                    classPath = classPath.substring(0, classPath.lastIndexOf("."));
-                    classPath = classPath.substring(0, classPath.lastIndexOf("/") + 1);
-                }
-                if (classPath.startsWith("file:")) {
-                    classPath = classPath.substring(classPath.indexOf(":") + 1);
-                }
-                String path = classPath + "static/static/snap/";
-                // 兼容Windows系统路径(去除前面的“/”)
-                if(System.getProperty("os.name").contains("indows")) {
-                    path = path.substring(1);
-                }
-                String fileName =  deviceId + "_" + channelId + ".jpg";
-                ResponseEntity responseEntity =  (ResponseEntity)result.getResult();
-                if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
-                    WVPResult wvpResult = (WVPResult)responseEntity.getBody();
-                    if (Objects.requireNonNull(wvpResult).getCode() == 0) {
-                        StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData();
-                        MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());
-                        String streamUrl = streamInfoForSuccess.getFmp4();
-                        // 请求截图
-                        logger.info("[请求截图]: " + fileName);
-                        zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName);
-                    }
-                }
-            } catch (FileNotFoundException e) {
-                e.printStackTrace();
-            }
-        });
-        if (streamInfo != null) {
-            String streamId = streamInfo.getStream();
-            if (streamId == null) {
-                WVPResult wvpResult = new WVPResult();
-                wvpResult.setCode(-1);
-                wvpResult.setMsg("点播失败, redis缓存streamId等于null");
-                msg.setData(wvpResult);
-                resultHolder.invokeAllResult(msg);
-                return playResult;
-            }
-            String mediaServerId = streamInfo.getMediaServerId();
-            MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-
-            JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaInfo, streamId);
-            if (rtpInfo != null && rtpInfo.getBoolean("exist")) {
-
-                WVPResult wvpResult = new WVPResult();
-                wvpResult.setCode(0);
-                wvpResult.setMsg("success");
-                wvpResult.setData(streamInfo);
-                msg.setData(wvpResult);
-
-                resultHolder.invokeAllResult(msg);
-                if (hookEvent != null) {
-                    hookEvent.response(mediaServerItem, JSONObject.parseObject(JSON.toJSONString(streamInfo)));
-                }
-            }else {
-                redisCatchStorage.stopPlay(streamInfo);
-                storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
-                streamInfo = null;
-            }
-
-        }
-        if (streamInfo == null) {
-            String streamId = null;
-            if (mediaServerItem.isRtpEnable()) {
-                streamId = String.format("%s_%s", device.getDeviceId(), channelId);
-            }
-            SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId);
-            play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response)->{
-                if (hookEvent != null) {
-                    hookEvent.response(mediaServerItem, response);
-                }
-            }, event -> {
-                // sip error错误
-                WVPResult wvpResult = new WVPResult();
-                wvpResult.setCode(-1);
-                wvpResult.setMsg(String.format("点播失败, 错误码: %s, %s", event.statusCode, event.msg));
-                msg.setData(wvpResult);
-                resultHolder.invokeAllResult(msg);
-                if (errorEvent != null) {
-                    errorEvent.response(event);
-                }
-            }, (code, msgStr)->{
-                // invite点播超时
-                WVPResult wvpResult = new WVPResult();
-                wvpResult.setCode(-1);
-                if (code == 0) {
-                    wvpResult.setMsg("点播超时,请稍候重试");
-                }else if (code == 1) {
-                    wvpResult.setMsg("收流超时,请稍候重试");
-                }
-                msg.setData(wvpResult);
-                // 回复之前所有的点播请求
-                resultHolder.invokeAllResult(msg);
-            }, uuid);
-        }
-        return playResult;
-    }
-
-
-
-    @Override
-    public void play(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
-                           ZLMHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
-                           InviteTimeOutCallback timeoutCallback, String uuid) {
-
-        String streamId = null;
-        if (mediaServerItem.isRtpEnable()) {
-            streamId = String.format("%s_%s", device.getDeviceId(), channelId);
-        }
-        if (ssrcInfo == null) {
-            ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId);
-        }
-
-        // 超时处理
-        Timer timer = new Timer();
-        SSRCInfo finalSsrcInfo = ssrcInfo;
-        timer.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                logger.warn(String.format("设备点播超时,deviceId:%s ,channelId:%s", device.getDeviceId(), channelId));
-
-                SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-                if (dialog != null) {
-                    timeoutCallback.run(1, "收流超时");
-                    // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
-                    cmder.streamByeCmd(device.getDeviceId(), channelId, finalSsrcInfo.getStream(), null);
-                }else {
-                    timeoutCallback.run(0, "点播超时");
-                    mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
-                    mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-                    streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-                }
-            }
-        }, userSetup.getPlayTimeout());
-
-        cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
-            logger.info("收到订阅消息: " + response.toJSONString());
-            timer.cancel();
-            // hook响应
-            onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId, uuid);
-            hookEvent.response(mediaServerItemInuse, response);
-        }, (event) -> {
-            timer.cancel();
-            mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-            // 释放ssrc
-            mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
-            streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
-            errorEvent.response(event);
-        });
-    }
-
-    @Override
-    public void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject response, String deviceId, String channelId, String uuid) {
-        RequestMessage msg = new RequestMessage();
-        if (uuid != null) {
-            msg.setId(uuid);
-        }
-        msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId);
-        StreamInfo streamInfo = onPublishHandler(mediaServerItem, response, deviceId, channelId);
-        if (streamInfo != null) {
-            DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
-            if (deviceChannel != null) {
-                deviceChannel.setStreamId(streamInfo.getStream());
-                storager.startPlay(deviceId, channelId, streamInfo.getStream());
-            }
-            redisCatchStorage.startPlay(streamInfo);
-
-            WVPResult wvpResult = new WVPResult();
-            wvpResult.setCode(0);
-            wvpResult.setMsg("success");
-            wvpResult.setData(streamInfo);
-            msg.setData(wvpResult);
-
-            resultHolder.invokeAllResult(msg);
-        } else {
-            logger.warn("设备预览API调用失败!");
-            msg.setData("设备预览API调用失败!");
-            resultHolder.invokeAllResult(msg);
-        }
-    }
-
-    @Override
-    public MediaServerItem getNewMediaServerItem(Device device) {
-        if (device == null) return null;
-        String mediaServerId = device.getMediaServerId();
-        MediaServerItem mediaServerItem;
-        if (mediaServerId == null) {
-            mediaServerItem = mediaServerService.getMediaServerForMinimumLoad();
-        }else {
-            mediaServerItem = mediaServerService.getOne(mediaServerId);
-        }
-        if (mediaServerItem == null) {
-            logger.warn("点播时未找到可使用的ZLM...");
-        }
-        return mediaServerItem;
-    }
-
-    @Override
-    public DeferredResult<ResponseEntity<String>> playBack(String deviceId, String channelId, String startTime,
-                                                           String endTime,InviteStreamCallback inviteStreamCallback,
-                                                           PlayBackCallback callback) {
-        Device device = storager.queryVideoDevice(deviceId);
-        if (device == null) return null;
-        MediaServerItem newMediaServerItem = getNewMediaServerItem(device);
-        SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true);
-
-        return playBack(newMediaServerItem, ssrcInfo, deviceId, channelId, startTime, endTime, inviteStreamCallback, callback);
-    }
-
-    @Override
-    public DeferredResult<ResponseEntity<String>> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,
-                                                           String deviceId, String channelId, String startTime,
-                                                           String endTime, InviteStreamCallback infoCallBack,
-                                                           PlayBackCallback playBackCallback) {
-        if (mediaServerItem == null || ssrcInfo == null) return null;
-        String uuid = UUID.randomUUID().toString();
-        String key = DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId;
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(30000L);
-        Device device = storager.queryVideoDevice(deviceId);
-        if (device == null) {
-            result.setResult(new ResponseEntity<>(HttpStatus.BAD_REQUEST));
-            return result;
-        }
-
-        resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId, uuid, result);
-        RequestMessage msg = new RequestMessage();
-        msg.setId(uuid);
-        msg.setKey(key);
-        PlayBackResult<RequestMessage> playBackResult = new PlayBackResult<>();
-
-        Timer timer = new Timer();
-        timer.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                logger.warn(String.format("设备回放超时,deviceId:%s ,channelId:%s", deviceId, channelId));
-                playBackResult.setCode(-1);
-                playBackResult.setData(msg);
-                playBackCallback.call(playBackResult);
-                SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream());
-                // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
-                if (dialog != null) {
-                    // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
-                    cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
-                }else {
-                    mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-                    mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream());
-                    streamSession.remove(deviceId, channelId, ssrcInfo.getStream());
-                }
-                cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
-                // 回复之前所有的点播请求
-                playBackCallback.call(playBackResult);
-            }
-        }, userSetup.getPlayTimeout());
-        cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, infoCallBack,
-                (InviteStreamInfo inviteStreamInfo) -> {
-                    logger.info("收到订阅消息: " + inviteStreamInfo.getResponse().toJSONString());
-                    timer.cancel();
-                    StreamInfo streamInfo = onPublishHandler(inviteStreamInfo.getMediaServerItem(), inviteStreamInfo.getResponse(), deviceId, channelId);
-                    if (streamInfo == null) {
-                        logger.warn("设备回放API调用失败!");
-                        msg.setData("设备回放API调用失败!");
-                        playBackResult.setCode(-1);
-                        playBackResult.setData(msg);
-                        playBackCallback.call(playBackResult);
-                        return;
-                    }
-                    redisCatchStorage.startPlayback(streamInfo, inviteStreamInfo.getCallId());
-                    msg.setData(JSON.toJSONString(streamInfo));
-                    playBackResult.setCode(0);
-                    playBackResult.setData(msg);
-                    playBackResult.setMediaServerItem(inviteStreamInfo.getMediaServerItem());
-                    playBackResult.setResponse(inviteStreamInfo.getResponse());
-                    playBackCallback.call(playBackResult);
-                }, event -> {
-                    timer.cancel();
-                    msg.setData(String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg));
-                    playBackResult.setCode(-1);
-                    playBackResult.setData(msg);
-                    playBackResult.setEvent(event);
-                    playBackCallback.call(playBackResult);
-                    streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-                });
-        return result;
-    }
-
-    @Override
-    public void onPublishHandlerForDownload(InviteStreamInfo inviteStreamInfo, String deviceId, String channelId, String uuid) {
-        RequestMessage msg = new RequestMessage();
-        msg.setKey(DeferredResultHolder.CALLBACK_CMD_DOWNLOAD + deviceId + channelId);
-        msg.setId(uuid);
-        StreamInfo streamInfo = onPublishHandler(inviteStreamInfo.getMediaServerItem(), inviteStreamInfo.getResponse(), deviceId, channelId);
-        if (streamInfo != null) {
-            redisCatchStorage.startDownload(streamInfo, inviteStreamInfo.getCallId());
-            msg.setData(JSON.toJSONString(streamInfo));
-            resultHolder.invokeResult(msg);
-        } else {
-            logger.warn("设备预览API调用失败!");
-            msg.setData("设备预览API调用失败!");
-            resultHolder.invokeResult(msg);
-        }
-    }
-
-
-    public StreamInfo onPublishHandler(MediaServerItem mediaServerItem, JSONObject resonse, String deviceId, String channelId) {
-        String streamId = resonse.getString("stream");
-        JSONArray tracks = resonse.getJSONArray("tracks");
-        StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem,"rtp", streamId, tracks);
-        streamInfo.setDeviceID(deviceId);
-        streamInfo.setChannelId(channelId);
-        return streamInfo;
-    }
-
-    @Override
-    public void zlmServerOffline(String mediaServerId) {
-        // 处理正在向上推流的上级平台
-        List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServer(null);
-        if (sendRtpItems.size() > 0) {
-            for (SendRtpItem sendRtpItem : sendRtpItems) {
-                if (sendRtpItem.getMediaServerId().equals(mediaServerId)) {
-                    ParentPlatform platform = storager.queryParentPlatByServerGBId(sendRtpItem.getPlatformId());
-                    sipCommanderFroPlatform.streamByeCmd(platform, sendRtpItem.getCallId());
-                }
-            }
-        }
-        // 处理正在观看的国标设备
-        List<SsrcTransaction> allSsrc = streamSession.getAllSsrc();
-        if (allSsrc.size() > 0) {
-            for (SsrcTransaction ssrcTransaction : allSsrc) {
-                if(ssrcTransaction.getMediaServerId().equals(mediaServerId)) {
-                    cmder.streamByeCmd(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(),
-                            ssrcTransaction.getStream(), null);
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RecordInfoServerImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RecordInfoServerImpl.java
deleted file mode 100644
index 4908363..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/RecordInfoServerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.service.IRecordInfoServer;
-import com.genersoft.iot.vmp.storager.dao.RecordInfoDao;
-import com.genersoft.iot.vmp.storager.dao.dto.RecordInfo;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class RecordInfoServerImpl implements IRecordInfoServer {
-
-    @Autowired
-    private RecordInfoDao recordInfoDao;
-
-    @Override
-    public PageInfo<RecordInfo> getRecordList(int page, int count) {
-        PageHelper.startPage(page, count);
-        List<RecordInfo> all = recordInfoDao.selectAll();
-        return new PageInfo<>(all);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java
deleted file mode 100644
index 92bcd5e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.connection.MessageListener;
-import org.springframework.stereotype.Component;
-
-@Component
-public class RedisGPSMsgListener implements MessageListener {
-
-    private final static Logger logger = LoggerFactory.getLogger(RedisGPSMsgListener.class);
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Override
-    public void onMessage(Message message, byte[] bytes) {
-        logger.debug("收到来自REDIS的GPS通知: {}", new String(message.getBody()));
-        GPSMsgInfo gpsMsgInfo = JSON.parseObject(message.getBody(), GPSMsgInfo.class);
-        redisCatchStorage.updateGpsMsgInfo(gpsMsgInfo);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
deleted file mode 100644
index d31bbce..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.service.IRoleService;
-import com.genersoft.iot.vmp.storager.dao.RoleMapper;
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class RoleServerImpl implements IRoleService {
-
-    @Autowired
-    private RoleMapper roleMapper;
-
-    @Override
-    public Role getRoleById(int id) {
-        return roleMapper.selectById(id);
-    }
-
-    @Override
-    public int add(Role role) {
-        return roleMapper.add(role);
-    }
-
-    @Override
-    public int delete(int id) {
-        return roleMapper.delete(id);
-    }
-
-    @Override
-    public List<Role> getAll() {
-        return roleMapper.selectAll();
-    }
-
-    @Override
-    public int update(Role role) {
-        return roleMapper.update(role);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
deleted file mode 100644
index 564deb5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
-import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
-import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
-import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-
-/**
- * 视频代理业务
- */
-@Service
-public class StreamProxyServiceImpl implements IStreamProxyService {
-
-    private final static Logger logger = LoggerFactory.getLogger(StreamProxyServiceImpl.class);
-
-    @Autowired
-    private IVideoManagerStorager videoManagerStorager;
-
-    @Autowired
-    private IMediaService mediaService;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;;
-
-    @Autowired
-    private StreamProxyMapper streamProxyMapper;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private SipConfig sipConfig;
-
-    @Autowired
-    private GbStreamMapper gbStreamMapper;
-
-    @Autowired
-    private PlatformGbStreamMapper platformGbStreamMapper;
-
-    @Autowired
-    private EventPublisher eventPublisher;
-
-    @Autowired
-    private ParentPlatformMapper parentPlatformMapper;
-
-    @Autowired
-    private IGbStreamService gbStreamService;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-
-    @Override
-    public WVPResult<StreamInfo> save(StreamProxyItem param) {
-        MediaServerItem mediaInfo;
-        WVPResult<StreamInfo> wvpResult = new WVPResult<>();
-        wvpResult.setCode(0);
-        if ("auto".equals(param.getMediaServerId())){
-            mediaInfo = mediaServerService.getMediaServerForMinimumLoad();
-        }else {
-            mediaInfo = mediaServerService.getOne(param.getMediaServerId());
-        }
-        if (mediaInfo == null) {
-            logger.warn("保存代理未找到在线的ZLM...");
-            wvpResult.setMsg("保存失败");
-            return wvpResult;
-        }
-        String dstUrl = String.format("rtmp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtmpPort(), param.getApp(),
-                param.getStream() );
-        param.setDst_url(dstUrl);
-        StringBuffer result = new StringBuffer();
-        boolean streamLive = false;
-        param.setMediaServerId(mediaInfo.getId());
-        boolean saveResult;
-        // 更新
-        if (videoManagerStorager.queryStreamProxy(param.getApp(), param.getStream()) != null) {
-            saveResult = videoManagerStorager.updateStreamProxy(param);
-        }else { // 新增
-            saveResult = videoManagerStorager.addStreamProxy(param);
-        }
-        if (saveResult) {
-            result.append("保存成功");
-            if (param.isEnable()) {
-                JSONObject jsonObject = addStreamProxyToZlm(param);
-                if (jsonObject == null || jsonObject.getInteger("code") != 0) {
-                    streamLive = false;
-                    result.append(", 但是启用失败,请检查流地址是否可用");
-                    param.setEnable(false);
-                    // 直接移除
-                    if (param.isEnable_remove_none_reader()) {
-                        del(param.getApp(), param.getStream());
-                    }else {
-                        videoManagerStorager.updateStreamProxy(param);
-                    }
-
-                }else {
-                    streamLive = true;
-                    StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(
-                            mediaInfo, param.getApp(), param.getStream(), null, null);
-                    wvpResult.setData(streamInfo);
-
-                }
-            }
-        }else {
-            result.append("保存失败");
-        }
-        if ( !StringUtils.isEmpty(param.getPlatformGbId()) && streamLive) {
-            List<GbStream> gbStreams = new ArrayList<>();
-            gbStreams.add(param);
-            if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId(), param.getCatalogId())){
-                result.append(",  关联国标平台[ " + param.getPlatformGbId() + " ]成功");
-            }else {
-                result.append(",  关联国标平台[ " + param.getPlatformGbId() + " ]失败");
-            }
-        }
-        if (!StringUtils.isEmpty(param.getGbId())) {
-            // 查找开启了全部直播流共享的上级平台
-            List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
-            if (parentPlatforms.size() > 0) {
-                for (ParentPlatform parentPlatform : parentPlatforms) {
-                    param.setPlatformId(parentPlatform.getServerGBId());
-                    param.setCatalogId(parentPlatform.getCatalogId());
-                    String stream = param.getStream();
-                    StreamProxyItem streamProxyItems = platformGbStreamMapper.selectOne(param.getApp(), stream, parentPlatform.getServerGBId());
-                    if (streamProxyItems == null) {
-                        platformGbStreamMapper.add(param);
-                        eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), param, CatalogEvent.ADD);
-                    }
-                }
-            }
-        }
-
-        wvpResult.setMsg(result.toString());
-        return wvpResult;
-    }
-
-    @Override
-    public JSONObject addStreamProxyToZlm(StreamProxyItem param) {
-        JSONObject result = null;
-        MediaServerItem mediaServerItem = null;
-        if (param.getMediaServerId() == null) {
-            logger.warn("添加代理时MediaServerId 为null");
-            return null;
-        }else {
-            mediaServerItem = mediaServerService.getOne(param.getMediaServerId());
-        }
-        if (mediaServerItem == null) {
-            return null;
-        }
-        if ("default".equals(param.getType())){
-            result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(),
-                    param.isEnable_hls(), param.isEnable_mp4(), param.getRtp_type());
-        }else if ("ffmpeg".equals(param.getType())) {
-            result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(),
-                    param.getTimeout_ms() + "", param.isEnable_hls(), param.isEnable_mp4(),
-                    param.getFfmpeg_cmd_key());
-        }
-        return result;
-    }
-
-    @Override
-    public JSONObject removeStreamProxyFromZlm(StreamProxyItem param) {
-        if (param ==null) return null;
-        MediaServerItem mediaServerItem = mediaServerService.getOne(param.getMediaServerId());
-        JSONObject result = zlmresTfulUtils.closeStreams(mediaServerItem, param.getApp(), param.getStream());
-        return result;
-    }
-
-    @Override
-    public PageInfo<StreamProxyItem> getAll(Integer page, Integer count) {
-        return videoManagerStorager.queryStreamProxyList(page, count);
-    }
-
-    @Override
-    public void del(String app, String stream) {
-        StreamProxyItem streamProxyItem = videoManagerStorager.queryStreamProxy(app, stream);
-        if (streamProxyItem != null) {
-            gbStreamService.sendCatalogMsg(streamProxyItem, CatalogEvent.DEL);
-            videoManagerStorager.deleteStreamProxy(app, stream);
-            JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyItem);
-            if (jsonObject != null && jsonObject.getInteger("code") == 0) {
-                // 如果关联了国标那么移除关联
-                gbStreamMapper.del(app, stream);
-                platformGbStreamMapper.delByAppAndStream(app, stream);
-                // TODO 如果关联的推流, 那么状态设置为离线
-            }
-            redisCatchStorage.removeStream(streamProxyItem.getMediaServerId(), "PULL", app, stream);
-        }
-
-
-    }
-
-    @Override
-    public boolean start(String app, String stream) {
-        boolean result = false;
-        StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream);
-        if (!streamProxy.isEnable() &&  streamProxy != null) {
-            JSONObject jsonObject = addStreamProxyToZlm(streamProxy);
-            if (jsonObject == null) return false;
-            if (jsonObject.getInteger("code") == 0) {
-                result = true;
-                streamProxy.setEnable(true);
-                videoManagerStorager.updateStreamProxy(streamProxy);
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public boolean stop(String app, String stream) {
-        boolean result = false;
-        StreamProxyItem streamProxyDto = videoManagerStorager.queryStreamProxy(app, stream);
-        if (streamProxyDto != null && streamProxyDto.isEnable()) {
-            JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyDto);
-            if (jsonObject.getInteger("code") == 0) {
-                streamProxyDto.setEnable(false);
-                result = videoManagerStorager.updateStreamProxy(streamProxyDto);
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public JSONObject getFFmpegCMDs(MediaServerItem mediaServerItem) {
-        JSONObject result = new JSONObject();
-        JSONObject mediaServerConfigResuly = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
-        if (mediaServerConfigResuly != null && mediaServerConfigResuly.getInteger("code") == 0
-                && mediaServerConfigResuly.getJSONArray("data").size() > 0){
-            JSONObject mediaServerConfig = mediaServerConfigResuly.getJSONArray("data").getJSONObject(0);
-
-            for (String key : mediaServerConfig.keySet()) {
-                if (key.startsWith("ffmpeg.cmd")){
-                    result.put(key, mediaServerConfig.getString(key));
-                }
-            }
-        }
-        return result;
-    }
-
-
-    @Override
-    public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) {
-        return videoManagerStorager.getStreamProxyByAppAndStream(app, streamId);
-    }
-
-    @Override
-    public void zlmServerOnline(String mediaServerId) {
-        // 移除开启了无人观看自动移除的流
-        List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selecAutoRemoveItemByMediaServerId(mediaServerId);
-        if (streamProxyItemList.size() > 0) {
-            gbStreamMapper.batchDel(streamProxyItemList);
-        }
-        streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId);
-
-        // 恢复流代理, 只查找这个这个流媒体
-        List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer(
-                mediaServerId, true, false);
-        for (StreamProxyItem streamProxyDto : streamProxyListForEnable) {
-            logger.info("恢复流代理," + streamProxyDto.getApp() + "/" + streamProxyDto.getStream());
-            JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto);
-            if (jsonObject == null) {
-                // 设置为离线
-                logger.info("恢复流代理失败" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream());
-                updateStatus(false, streamProxyDto.getApp(), streamProxyDto.getStream());
-            }else {
-                updateStatus(true, streamProxyDto.getApp(), streamProxyDto.getStream());
-            }
-        }
-    }
-
-    @Override
-    public void zlmServerOffline(String mediaServerId) {
-        // 移除开启了无人观看自动移除的流
-        List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selecAutoRemoveItemByMediaServerId(mediaServerId);
-        if (streamProxyItemList.size() > 0) {
-            gbStreamMapper.batchDel(streamProxyItemList);
-        }
-        streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId);
-        // 其他的流设置离线
-        streamProxyMapper.updateStatusByMediaServerId(false, mediaServerId);
-        String type = "PULL";
-
-        // 发送redis消息
-        List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, type);
-        if (mediaItems.size() > 0) {
-            for (MediaItem mediaItem : mediaItems) {
-                JSONObject jsonObject = new JSONObject();
-                jsonObject.put("serverId", userSetup.getServerId());
-                jsonObject.put("app", mediaItem.getApp());
-                jsonObject.put("stream", mediaItem.getStream());
-                jsonObject.put("register", false);
-                jsonObject.put("mediaServerId", mediaServerId);
-                redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
-                // 移除redis内流的信息
-                redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
-            }
-        }
-    }
-
-    @Override
-    public void clean() {
-
-    }
-
-    @Override
-    public int updateStatus(boolean status, String app, String stream) {
-        return streamProxyMapper.updateStatus(status, app, stream);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
deleted file mode 100644
index aab2282..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ /dev/null
@@ -1,481 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
-import com.genersoft.iot.vmp.media.zlm.dto.*;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.dao.*;
-import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Service
-public class StreamPushServiceImpl implements IStreamPushService {
-
-    private final static Logger logger = LoggerFactory.getLogger(StreamPushServiceImpl.class);
-
-    @Autowired
-    private GbStreamMapper gbStreamMapper;
-
-    @Autowired
-    private StreamPushMapper streamPushMapper;
-
-    @Autowired
-    private ParentPlatformMapper parentPlatformMapper;
-
-    @Autowired
-    private PlatformCatalogMapper platformCatalogMapper;
-
-    @Autowired
-    private PlatformGbStreamMapper platformGbStreamMapper;
-
-    @Autowired
-    private IGbStreamService gbStreamService;
-
-    @Autowired
-    private EventPublisher eventPublisher;
-
-    @Autowired
-    private ZLMRESTfulUtils zlmresTfulUtils;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Override
-    public List<StreamPushItem> handleJSON(String jsonData, MediaServerItem mediaServerItem) {
-        if (jsonData == null) return null;
-
-        Map<String, StreamPushItem> result = new HashMap<>();
-
-        List<MediaItem> mediaItems = JSON.parseObject(jsonData, new TypeReference<List<MediaItem>>() {});
-        for (MediaItem item : mediaItems) {
-
-            // 不保存国标推理以及拉流代理的流
-            if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
-                    || item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
-                    || item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
-                String key = item.getApp() + "_" + item.getStream();
-                StreamPushItem streamPushItem = result.get(key);
-                if (streamPushItem == null) {
-                    streamPushItem = transform(item);
-                    result.put(key, streamPushItem);
-                }
-            }
-        }
-
-        return new ArrayList<>(result.values());
-    }
-    @Override
-    public StreamPushItem transform(MediaItem item) {
-        StreamPushItem streamPushItem = new StreamPushItem();
-        streamPushItem.setApp(item.getApp());
-        streamPushItem.setMediaServerId(item.getMediaServerId());
-        streamPushItem.setStream(item.getStream());
-        streamPushItem.setAliveSecond(item.getAliveSecond());
-        streamPushItem.setOriginSock(item.getOriginSock());
-        streamPushItem.setTotalReaderCount(item.getTotalReaderCount());
-        streamPushItem.setOriginType(item.getOriginType());
-        streamPushItem.setOriginTypeStr(item.getOriginTypeStr());
-        streamPushItem.setOriginUrl(item.getOriginUrl());
-        streamPushItem.setCreateStamp(item.getCreateStamp() * 1000);
-        streamPushItem.setAliveSecond(item.getAliveSecond());
-        streamPushItem.setStatus(true);
-        streamPushItem.setStreamType("push");
-        streamPushItem.setVhost(item.getVhost());
-        return streamPushItem;
-    }
-
-    @Override
-    public PageInfo<StreamPushItem> getPushList(Integer page, Integer count, String query, Boolean pushing, String mediaServerId) {
-        PageHelper.startPage(page, count);
-        List<StreamPushItem> all = streamPushMapper.selectAllForList(query, pushing, mediaServerId);
-        return new PageInfo<>(all);
-    }
-
-    @Override
-    public List<StreamPushItem> getPushList(String mediaServerId) {
-        return streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
-    }
-
-    @Override
-    public boolean saveToGB(GbStream stream) {
-        stream.setStreamType("push");
-        stream.setStatus(true);
-        stream.setCreateStamp(System.currentTimeMillis());
-        int add = gbStreamMapper.add(stream);
-
-        // 查找开启了全部直播流共享的上级平台
-        List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
-        if (parentPlatforms.size() > 0) {
-            for (ParentPlatform parentPlatform : parentPlatforms) {
-                stream.setCatalogId(parentPlatform.getCatalogId());
-                stream.setPlatformId(parentPlatform.getServerGBId());
-                String streamId = stream.getStream();
-                StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(stream.getApp(), streamId, parentPlatform.getServerGBId());
-                if (streamProxyItem == null) {
-                    platformGbStreamMapper.add(stream);
-                    eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
-                }else {
-                    if (!streamProxyItem.getGbId().equals(stream.getGbId())) {
-                        // 此流使用另一个国标Id已经与该平台关联,移除此记录
-                        platformGbStreamMapper.delByAppAndStreamAndPlatform(stream.getApp(), streamId, parentPlatform.getServerGBId());
-                        platformGbStreamMapper.add(stream);
-                        eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
-                    }
-                }
-            }
-        }
-
-        return add > 0;
-    }
-
-    @Override
-    public boolean removeFromGB(GbStream stream) {
-        // 判断是否需要发送事件
-        gbStreamService.sendCatalogMsg(stream, CatalogEvent.DEL);
-        platformGbStreamMapper.delByAppAndStream(stream.getApp(), stream.getStream());
-        int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
-        MediaServerItem mediaInfo = mediaServerService.getOne(stream.getMediaServerId());
-        JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, stream.getApp(), stream.getStream());
-        if (mediaList != null) {
-            if (mediaList.getInteger("code") == 0) {
-                JSONArray data = mediaList.getJSONArray("data");
-                if (data == null) {
-                    streamPushMapper.del(stream.getApp(), stream.getStream());
-                }
-            }
-        }
-        return del > 0;
-    }
-
-
-    @Override
-    public StreamPushItem getPush(String app, String streamId) {
-
-        return streamPushMapper.selectOne(app, streamId);
-    }
-
-    @Override
-    public boolean stop(String app, String streamId) {
-        StreamPushItem streamPushItem = streamPushMapper.selectOne(app, streamId);
-        gbStreamService.sendCatalogMsg(streamPushItem, CatalogEvent.DEL);
-
-        platformGbStreamMapper.delByAppAndStream(app, streamId);
-        gbStreamMapper.del(app, streamId);
-        int delStream = streamPushMapper.del(app, streamId);
-        if (delStream > 0) {
-            MediaServerItem mediaServerItem = mediaServerService.getOne(streamPushItem.getMediaServerId());
-            zlmresTfulUtils.closeStreams(mediaServerItem,app, streamId);
-        }
-        return true;
-    }
-
-    @Override
-    public void zlmServerOnline(String mediaServerId) {
-        // 同步zlm推流信息
-        MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-        if (mediaServerItem == null) {
-            return;
-        }
-        // 数据库记录
-        List<StreamPushItem> pushList = getPushList(mediaServerId);
-        Map<String, StreamPushItem> pushItemMap = new HashMap<>();
-        // redis记录
-        List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, "PUSH");
-        Map<String, MediaItem> streamInfoPushItemMap = new HashMap<>();
-        if (pushList.size() > 0) {
-            for (StreamPushItem streamPushItem : pushList) {
-                if (StringUtils.isEmpty(streamPushItem.getGbId())) {
-                    pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
-                }
-            }
-        }
-        if (mediaItems.size() > 0) {
-            for (MediaItem mediaItem : mediaItems) {
-                streamInfoPushItemMap.put(mediaItem.getApp() + mediaItem.getStream(), mediaItem);
-            }
-        }
-        zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
-            if (mediaList == null) return;
-            String dataStr = mediaList.getString("data");
-
-            Integer code = mediaList.getInteger("code");
-            List<StreamPushItem> streamPushItems = null;
-            if (code == 0 ) {
-                if (dataStr != null) {
-                    streamPushItems = handleJSON(dataStr, mediaServerItem);
-                }
-            }
-
-            if (streamPushItems != null) {
-                for (StreamPushItem streamPushItem : streamPushItems) {
-                    pushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
-                    streamInfoPushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
-                }
-            }
-            List<StreamPushItem> offlinePushItems = new ArrayList<>(pushItemMap.values());
-            if (offlinePushItems.size() > 0) {
-                String type = "PUSH";
-                int runLimit = 300;
-                if (offlinePushItems.size() > runLimit) {
-                    for (int i = 0; i < offlinePushItems.size(); i += runLimit) {
-                        int toIndex = i + runLimit;
-                        if (i + runLimit > offlinePushItems.size()) {
-                            toIndex = offlinePushItems.size();
-                        }
-                        List<StreamPushItem> streamPushItemsSub = offlinePushItems.subList(i, toIndex);
-                        streamPushMapper.delAll(streamPushItemsSub);
-                    }
-                }else {
-                    streamPushMapper.delAll(offlinePushItems);
-                }
-
-            }
-            Collection<MediaItem> offlineMediaItemList = streamInfoPushItemMap.values();
-            if (offlineMediaItemList.size() > 0) {
-                String type = "PUSH";
-                for (MediaItem offlineMediaItem : offlineMediaItemList) {
-                    JSONObject jsonObject = new JSONObject();
-                    jsonObject.put("serverId", userSetup.getServerId());
-                    jsonObject.put("app", offlineMediaItem.getApp());
-                    jsonObject.put("stream", offlineMediaItem.getStream());
-                    jsonObject.put("register", false);
-                    jsonObject.put("mediaServerId", mediaServerId);
-                    redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
-                    // 移除redis内流的信息
-                    redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineMediaItem.getApp(), offlineMediaItem.getStream());
-                }
-            }
-        }));
-    }
-
-    @Override
-    public void zlmServerOffline(String mediaServerId) {
-        List<StreamPushItem> streamPushItems = streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
-        // 移除没有GBId的推流
-        streamPushMapper.deleteWithoutGBId(mediaServerId);
-        gbStreamMapper.deleteWithoutGBId("push", mediaServerId);
-        // 其他的流设置未启用
-        gbStreamMapper.updateStatusByMediaServerId(mediaServerId, false);
-        // 发送流停止消息
-        String type = "PUSH";
-        // 发送redis消息
-        List<MediaItem> streamInfoList = redisCatchStorage.getStreams(mediaServerId, type);
-        if (streamInfoList.size() > 0) {
-            for (MediaItem mediaItem : streamInfoList) {
-                // 移除redis内流的信息
-                redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream());
-                JSONObject jsonObject = new JSONObject();
-                jsonObject.put("serverId", userSetup.getServerId());
-                jsonObject.put("app", mediaItem.getApp());
-                jsonObject.put("stream", mediaItem.getStream());
-                jsonObject.put("register", false);
-                jsonObject.put("mediaServerId", mediaServerId);
-                redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
-            }
-        }
-    }
-
-    @Override
-    public void clean() {
-
-    }
-
-    @Override
-    public boolean saveToRandomGB() {
-        List<StreamPushItem> streamPushItems = streamPushMapper.selectAll();
-        long gbId = 100001;
-        for (StreamPushItem streamPushItem : streamPushItems) {
-            streamPushItem.setStreamType("push");
-            streamPushItem.setStatus(true);
-            streamPushItem.setGbId("34020000004111" + gbId);
-            streamPushItem.setCreateStamp(System.currentTimeMillis());
-            gbId ++;
-        }
-        int  limitCount = 30;
-
-        if (streamPushItems.size() > limitCount) {
-            for (int i = 0; i < streamPushItems.size(); i += limitCount) {
-                int toIndex = i + limitCount;
-                if (i + limitCount > streamPushItems.size()) {
-                    toIndex = streamPushItems.size();
-                }
-                gbStreamMapper.batchAdd(streamPushItems.subList(i, toIndex));
-            }
-        }else {
-            gbStreamMapper.batchAdd(streamPushItems);
-        }
-        return true;
-    }
-
-    @Override
-    public void batchAdd(List<StreamPushItem> streamPushItems) {
-        streamPushMapper.addAll(streamPushItems);
-        gbStreamMapper.batchAdd(streamPushItems);
-        // 查找开启了全部直播流共享的上级平台
-        List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
-        if (parentPlatforms.size() > 0) {
-            for (StreamPushItem stream : streamPushItems) {
-                for (ParentPlatform parentPlatform : parentPlatforms) {
-                    stream.setCatalogId(parentPlatform.getCatalogId());
-                    stream.setPlatformId(parentPlatform.getServerGBId());
-                    String streamId = stream.getStream();
-                    StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(stream.getApp(), streamId, parentPlatform.getServerGBId());
-                    if (streamProxyItem == null) {
-                        platformGbStreamMapper.add(stream);
-                        eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
-                    }else {
-                        if (!streamProxyItem.getGbId().equals(stream.getGbId())) {
-                            // 此流使用另一个国标Id已经与该平台关联,移除此记录
-                            platformGbStreamMapper.delByAppAndStreamAndPlatform(stream.getApp(), streamId, parentPlatform.getServerGBId());
-                            platformGbStreamMapper.add(stream);
-                            eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
-                            stream.setGbId(streamProxyItem.getGbId());
-                            eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.DEL);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll ) {
-        // 存储数据到stream_push表
-        streamPushMapper.addAll(streamPushItems);
-        List<StreamPushItem> streamPushItemForGbStream = streamPushItems.stream()
-                .filter(streamPushItem-> streamPushItem.getId() != null)
-                .collect(Collectors.toList());
-        // 存储数据到gb_stream表, id会返回到streamPushItemForGbStream里
-        if (streamPushItemForGbStream.size() > 0) {
-            gbStreamMapper.batchAdd(streamPushItemForGbStream);
-        }
-        // 去除没有ID也就是没有存储到数据库的数据
-        List<StreamPushItem> streamPushItemsForPlatform = streamPushItemForGbStream.stream()
-                .filter(streamPushItem-> streamPushItem.getGbStreamId() != null)
-                .collect(Collectors.toList());
-
-        if (streamPushItemsForPlatform.size() > 0) {
-            // 获取所有平台,平台和目录信息一般不会特别大量。
-            List<ParentPlatform> parentPlatformList = parentPlatformMapper.getParentPlatformList();
-            Map<String, Map<String, PlatformCatalog>> platformInfoMap = new HashMap<>();
-            if (parentPlatformList.size() == 0) {
-                return;
-            }
-            for (ParentPlatform platform : parentPlatformList) {
-                Map<String, PlatformCatalog> catalogMap = new HashMap<>();
-
-                // 创建根节点
-                PlatformCatalog platformCatalog = new PlatformCatalog();
-                platformCatalog.setId(platform.getServerGBId());
-                catalogMap.put(platform.getServerGBId(), platformCatalog);
-
-                // 查询所有节点信息
-                List<PlatformCatalog> platformCatalogs = platformCatalogMapper.selectByPlatForm(platform.getServerGBId());
-                if (platformCatalogs.size() > 0) {
-                    for (PlatformCatalog catalog : platformCatalogs) {
-                        catalogMap.put(catalog.getId(), catalog);
-                    }
-                }
-                platformInfoMap.put(platform.getServerGBId(), catalogMap);
-            }
-            List<StreamPushItem> streamPushItemListFroPlatform = new ArrayList<>();
-            Map<String, List<GbStream>> platformForEvent = new HashMap<>();
-            // 遍历存储结果,查找app+Stream->platformId+catalogId的对应关系,然后执行批量写入
-            for (StreamPushItem streamPushItem : streamPushItemsForPlatform) {
-                List<String[]> platFormInfoList = streamPushItemsForAll.get(streamPushItem.getApp() + streamPushItem.getStream());
-                if (platFormInfoList != null && platFormInfoList.size() > 0) {
-                    for (String[] platFormInfoArray : platFormInfoList) {
-                        StreamPushItem streamPushItemForPlatform = new StreamPushItem();
-                        streamPushItemForPlatform.setGbStreamId(streamPushItem.getGbStreamId());
-                        if (platFormInfoArray.length > 0) {
-                            // 数组 platFormInfoArray 0 为平台ID。 1为目录ID
-                            // 不存在这个平台,则忽略导入此关联关系
-                            if (platformInfoMap.get(platFormInfoArray[0]) == null
-                                    || platformInfoMap.get(platFormInfoArray[0]).get(platFormInfoArray[1]) == null) {
-                                logger.info("导入数据时不存在平台或目录{}/{},已导入未分配", platFormInfoArray[0], platFormInfoArray[1] );
-                                continue;
-                            }
-                            streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]);
-                            if (platFormInfoArray[0].equals("34020000002110000001")) {
-                                System.out.println(111);
-                            }
-                            List<GbStream> gbStreamList = platformForEvent.get(platFormInfoArray[0]);
-                            if (gbStreamList == null) {
-                                gbStreamList = new ArrayList<>();
-                                platformForEvent.put(platFormInfoArray[0], gbStreamList);
-                            }
-                            // 为发送通知整理数据
-                            streamPushItemForPlatform.setName(streamPushItem.getName());
-                            streamPushItemForPlatform.setApp(streamPushItem.getApp());
-                            streamPushItemForPlatform.setStream(streamPushItem.getStream());
-                            streamPushItemForPlatform.setGbId(streamPushItem.getGbId());
-                            gbStreamList.add(streamPushItemForPlatform);
-                        }
-                        if (platFormInfoArray.length > 1) {
-                            streamPushItemForPlatform.setCatalogId(platFormInfoArray[1]);
-                        }
-                        streamPushItemListFroPlatform.add(streamPushItemForPlatform);
-                    }
-
-                }
-            }
-            if (streamPushItemListFroPlatform.size() > 0) {
-                platformGbStreamMapper.batchAdd(streamPushItemListFroPlatform);
-                // 发送通知
-                for (String platformId : platformForEvent.keySet()) {
-                    eventPublisher.catalogEventPublishForStream(
-                            platformId, platformForEvent.get(platformId), CatalogEvent.ADD);
-                }
-            }
-
-        }
-    }
-
-    @Override
-    public boolean batchStop(List<GbStream> gbStreams) {
-        if (gbStreams == null || gbStreams.size() == 0) {
-            return false;
-        }
-        gbStreamService.sendCatalogMsgs(gbStreams, CatalogEvent.DEL);
-
-        platformGbStreamMapper.delByGbStreams(gbStreams);
-        gbStreamMapper.batchDelForGbStream(gbStreams);
-        int delStream = streamPushMapper.delAllForGbStream(gbStreams);
-        if (delStream > 0) {
-            for (GbStream gbStream : gbStreams) {
-                MediaServerItem mediaServerItem = mediaServerService.getOne(gbStream.getMediaServerId());
-                zlmresTfulUtils.closeStreams(mediaServerItem, gbStream.getApp(), gbStream.getStream());
-            }
-
-        }
-        return true;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
deleted file mode 100644
index 87e084b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.alibaba.excel.context.AnalysisContext;
-import com.alibaba.excel.event.AnalysisEventListener;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-
-public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> {
-
-    // 错误数据的回调,用于将错误数据发送给页面
-    private ErrorDataHandler errorDataHandler;
-
-    // 推流的业务类用于存储数据
-    private IStreamPushService pushService;
-
-    // 默认流媒体节点ID
-    private String defaultMediaServerId;
-
-    // 用于存储不加过滤的所有数据
-    private List<StreamPushItem> streamPushItems = new ArrayList<>();
-
-    // 用于存储更具APP+Stream过滤后的数据,可以直接存入stream_push表与gb_stream表
-    private Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>();
-
-    // 用于存储按照APP+Stream为KEY, 平台ID+目录Id 为value的数据,用于存储到gb_stream表后获取app+Stream对应的平台与目录信息,然后存入关联表
-    private Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>();
-
-    // 用于判断文件是否存在重复的app+Stream+平台ID
-    private Set<String> streamPushStreamSet = new HashSet<>();
-
-    // 用于存储APP+Stream->国标ID 的数据结构, 数据一一对应,全局判断APP+Stream->国标ID是否存在不对应
-    private BiMap<String,String> gBMap = HashBiMap.create();
-
-    // 记录错误的APP+Stream
-    private List<String> errorStreamList = new ArrayList<>();
-
-
-    // 记录错误的国标ID
-    private List<String> errorGBList = new ArrayList<>();
-
-    // 读取数量计数器
-    private int loadedSize = 0;
-
-    public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId, ErrorDataHandler errorDataHandler) {
-        this.pushService = pushService;
-        this.defaultMediaServerId = defaultMediaServerId;
-        this.errorDataHandler = errorDataHandler;
-    }
-
-    public interface ErrorDataHandler{
-        void handle(List<String> streams, List<String> gbId);
-    }
-
-    @Override
-    public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) {
-        if (StringUtils.isEmpty(streamPushExcelDto.getApp())
-                || StringUtils.isEmpty(streamPushExcelDto.getStream())
-                || StringUtils.isEmpty(streamPushExcelDto.getGbId())) {
-            return;
-        }
-
-        if (gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()) == null) {
-            try {
-                gBMap.put(streamPushExcelDto.getApp() + streamPushExcelDto.getStream(), streamPushExcelDto.getGbId());
-            }catch (IllegalArgumentException e) {
-                e.printStackTrace();
-                errorGBList.add(streamPushExcelDto.getGbId() + "(不同的app+stream使用了相同的国标ID)");
-                return;
-            }
-        }else {
-            if (!gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()).equals(streamPushExcelDto.getGbId())) {
-                errorGBList.add(streamPushExcelDto.getGbId() + "(同一组app+stream使用了不同的国标ID)");
-                return;
-            }
-        }
-
-        if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) {
-            errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ "/" +
-                    streamPushExcelDto.getPlatformId() + "(同一组app+stream添加在了同一个平台下)");
-            return;
-        }else {
-            streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId());
-        }
-
-        StreamPushItem streamPushItem = new StreamPushItem();
-        streamPushItem.setApp(streamPushExcelDto.getApp());
-        streamPushItem.setStream(streamPushExcelDto.getStream());
-        streamPushItem.setGbId(streamPushExcelDto.getGbId());
-        streamPushItem.setStatus(false);
-        streamPushItem.setStreamType("push");
-        streamPushItem.setCreateStamp(System.currentTimeMillis());
-        streamPushItem.setMediaServerId(defaultMediaServerId);
-        streamPushItem.setName(streamPushExcelDto.getName());
-        streamPushItem.setOriginType(2);
-        streamPushItem.setOriginTypeStr("rtsp_push");
-        streamPushItem.setTotalReaderCount("0");
-        streamPushItem.setPlatformId(streamPushExcelDto.getPlatformId());
-        streamPushItem.setCatalogId(streamPushExcelDto.getCatalogId());
-
-        // 存入所有的通道信息
-        streamPushItems.add(streamPushItem);
-        streamPushItemForSave.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
-
-        if (!StringUtils.isEmpty(streamPushExcelDto.getPlatformId())) {
-            List<String[]> platformList = streamPushItemsForPlatform.get(streamPushItem.getApp() + streamPushItem.getStream());
-            if (platformList == null) {
-                platformList = new ArrayList<>();
-                streamPushItemsForPlatform.put(streamPushItem.getApp() + streamPushItem.getStream(), platformList);
-            }
-            String platformId = streamPushExcelDto.getPlatformId();
-            String catalogId = streamPushExcelDto.getCatalogId();
-            if (StringUtils.isEmpty(streamPushExcelDto.getCatalogId())) {
-                catalogId = null;
-            }
-            String[] platFormInfoArray = new String[]{platformId, catalogId};
-            platformList.add(platFormInfoArray);
-        }
-
-        loadedSize ++;
-        if (loadedSize > 1000) {
-            saveData();
-            streamPushItems.clear();
-            streamPushItemForSave.clear();
-            streamPushItemsForPlatform.clear();
-            loadedSize = 0;
-        }
-
-    }
-
-    @Override
-    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
-        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
-        saveData();
-        streamPushItems.clear();
-        streamPushItemForSave.clear();
-        gBMap.clear();
-        streamPushStreamSet.clear();
-        streamPushItemsForPlatform.clear();
-        errorDataHandler.handle(errorStreamList, errorGBList);
-    }
-
-    private void saveData(){
-        if (streamPushItemForSave.size() > 0) {
-            // 向数据库查询是否存在重复的app
-            pushService.batchAddForUpload(new ArrayList<>(streamPushItemForSave.values()), streamPushItemsForPlatform);
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java
deleted file mode 100644
index 32b6ad6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.UserMapper;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class UserServiceImpl implements IUserService {
-    
-    @Autowired
-    private UserMapper userMapper;
-
-    @Override
-    public User getUser(String username, String password) {
-        return userMapper.select(username, password);
-    }
-
-    @Override
-    public boolean changePassword(int id, String password) {
-        User user = userMapper.selectById(id);
-        user.setPassword(password);
-        return userMapper.update(user) > 0;
-    }
-
-    @Override
-    public User getUserByUsername(String username) {
-        return userMapper.getUserByUsername(username);
-    }
-
-    @Override
-    public int addUser(User user) {
-        User userByUsername = userMapper.getUserByUsername(user.getUsername());
-        if (userByUsername != null) return 0;
-        return userMapper.add(user);
-    }
-    @Override
-    public int deleteUser(int id) {
-        return userMapper.delete(id);
-    }
-
-    @Override
-    public List<User> getAllUsers() {
-        return userMapper.selectAll();
-    }
-
-    @Override
-    public int updateUsers(User user) {
-        return userMapper.update(user);
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
deleted file mode 100644
index 5094853..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.genersoft.iot.vmp.storager;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
-
-import java.util.List;
-import java.util.Map;
-
-public interface IRedisCatchStorage {
-
-    /**
-     * 计数器。为cseq进行计数
-     *
-     * @param method sip 方法
-     * @return
-     */
-    Long getCSEQ(String method);
-
-    /**
-     * 开始播放时将流存入
-     *
-     * @param stream 流信息
-     * @return
-     */
-    boolean startPlay(StreamInfo stream);
-
-
-    /**
-     * 停止播放时删除
-     *
-     * @return
-     */
-    boolean stopPlay(StreamInfo streamInfo);
-
-    /**
-     * 查询播放列表
-     * @return
-     */
-    StreamInfo queryPlay(StreamInfo streamInfo);
-
-    StreamInfo queryPlayByStreamId(String steamId);
-
-    StreamInfo queryPlayByDevice(String deviceId, String channelId);
-
-    Map<String, StreamInfo> queryPlayByDeviceId(String deviceId);
-
-    boolean startPlayback(StreamInfo stream, String callId);
-
-    boolean stopPlayback(String deviceId, String channelId, String stream, String callId);
-
-    StreamInfo queryPlayback(String deviceId, String channelID, String stream, String callId);
-
-    void updatePlatformCatchInfo(ParentPlatformCatch parentPlatformCatch);
-
-    ParentPlatformCatch queryPlatformCatchInfo(String platformGbId);
-
-    void delPlatformCatchInfo(String platformGbId);
-
-    void updatePlatformKeepalive(ParentPlatform parentPlatform);
-
-    void delPlatformKeepalive(String platformGbId);
-
-    void updatePlatformRegister(ParentPlatform parentPlatform);
-
-    void delPlatformRegister(String platformGbId);
-
-    void updatePlatformRegisterInfo(String callId, String platformGbId);
-
-    String queryPlatformRegisterInfo(String callId);
-
-    void delPlatformRegisterInfo(String callId);
-
-    void cleanPlatformRegisterInfos();
-
-    void updateSendRTPSever(SendRtpItem sendRtpItem);
-
-    /**
-     * 查询RTP推送信息缓存
-     * @param platformGbId
-     * @param channelId
-     * @return sendRtpItem
-     */
-    SendRtpItem querySendRTPServer(String platformGbId, String channelId, String streamId, String callId);
-
-    List<SendRtpItem> querySendRTPServer(String platformGbId);
-
-    /**
-     * 删除RTP推送信息缓存
-     * @param platformGbId
-     * @param channelId
-     */
-    void deleteSendRTPServer(String platformGbId, String channelId, String callId, String streamId);
-
-    /**
-     * 查询某个通道是否存在上级点播(RTP推送)
-     * @param channelId
-     */
-    boolean isChannelSendingRTP(String channelId);
-
-    /**
-     * 清空某个设备的所有缓存
-     * @param deviceId 设备ID
-     */
-    void clearCatchByDeviceId(String deviceId);
-
-    /**
-     * 获取mediaServer节点
-     * @param mediaServerId
-     * @return
-     */
-//    MediaServerItem getMediaInfo(String mediaServerId);
-
-    /**
-     * 设置所有设备离线
-     */
-    void outlineForAll();
-
-    /**
-     * 获取所有在线的
-     */
-    List<String> getOnlineForAll();
-
-    /**
-     * 在redis添加wvp的信息
-     */
-    void updateWVPInfo(JSONObject jsonObject, int time);
-
-    /**
-     * 发送推流生成与推流消失消息
-     * @param jsonObject 消息内容
-     */
-    void sendStreamChangeMsg(String type, JSONObject jsonObject);
-
-    /**
-     * 添加流信息到redis
-     * @param mediaServerItem
-     * @param app
-     * @param streamId
-     */
-    void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem item);
-
-    /**
-     * 移除流信息从redis
-     * @param mediaServerId
-     * @param app
-     * @param streamId
-     */
-    void removeStream(String mediaServerId, String type, String app, String streamId);
-
-
-    /**
-     * 移除流信息从redis
-     * @param mediaServerId
-     */
-    void removeStream(String mediaServerId, String type);
-
-    /**
-     * 开始下载录像时存入
-     * @param streamInfo
-     */
-    boolean startDownload(StreamInfo streamInfo, String callId);
-
-    StreamInfo queryDownload(String deviceId, String channelId, String stream, String callId);
-
-    /**
-     * 查找第三方系统留下的国标预设值
-     * @param queryKey
-     * @return
-     */
-    ThirdPartyGB queryMemberNoGBId(String queryKey);
-
-    List<MediaItem> getStreams(String mediaServerId, String pull);
-
-    /**
-     * 将device信息写入redis
-     * @param device
-     */
-    void updateDevice(Device device);
-
-    void removeDevice(String deviceId);
-
-    /**
-     * 获取Device
-     */
-    Device getDevice(String deviceId);
-
-    void resetAllCSEQ();
-
-    void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo);
-
-    GPSMsgInfo getGpsMsgInfo(String gbId);
-    List<GPSMsgInfo> getAllGpsMsgInfo();
-
-    Long getSN(String method);
-
-    void resetAllSN();
-
-    MediaItem getStreamInfo(String app, String streamId, String mediaServerId);
-
-    void addCpuInfo(double cpuInfo);
-
-    void addMemInfo(double memInfo);
-
-    void addNetInfo(Map<String, String> networkInterfaces);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
deleted file mode 100644
index aafaddd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ /dev/null
@@ -1,482 +0,0 @@
-package com.genersoft.iot.vmp.storager;
-
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
-import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import com.github.pagehelper.PageInfo;
-
-import java.util.List;
-
-/**
- * @description:视频设备数据存储接口
- * @author: swwheihei
- * @date:   2020年5月6日 下午2:14:31
- */
-@SuppressWarnings("rawtypes")
-public interface IVideoManagerStorager {
-
-	/**
-	 * 根据设备ID判断设备是否存在
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:存在  false:不存在
-	 */
-	public boolean exists(String deviceId);
-
-	/**
-	 * 视频设备创建
-	 *
-	 * @param device 设备对象
-	 * @return true:创建成功  false:创建失败
-	 */
-	public boolean create(Device device);
-
-	/**
-	 * 视频设备更新
-	 *
-	 * @param device 设备对象
-	 * @return true:创建成功  false:创建失败
-	 */
-	public boolean updateDevice(Device device);
-
-	/**
-	 * 添加设备通道
-	 *
-	 * @param deviceId 设备id
-	 * @param channel 通道
-	 */
-	public void updateChannel(String deviceId, DeviceChannel channel);
-
-	/**
-	 * 批量添加设备通道
-	 *
-	 * @param deviceId 设备id
-	 * @param channels 多个通道
-	 */
-	public int updateChannels(String deviceId, List<DeviceChannel> channels);
-
-	/**
-	 * 开始播放
-	 * @param deviceId 设备id
-	 * @param channelId 通道ID
-	 * @param streamId 流地址
-	 */
-	public void startPlay(String deviceId, String channelId, String streamId);
-
-	/**
-	 * 停止播放
-	 * @param deviceId 设备id
-	 * @param channelId 通道ID
-	 */
-	public void stopPlay(String deviceId, String channelId);
-
-	/**
-	 * 获取设备
-	 *
-	 * @param deviceId 设备ID
-	 * @return DShadow 设备对象
-	 */
-	public Device queryVideoDevice(String deviceId);
-
-	/**
-	 * 获取某个设备的通道列表
-	 *
-	 * @param deviceId 设备ID
-	 * @param page 分页 当前页
-	 * @param count 每页数量
-	 * @return
-	 */
-	public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, int page, int count);
-	public PageInfo queryChannelsCarByDeviceId(String deviceId, String query,String type, Boolean hasSubChannel, Boolean online, int page, int count);
-
-	public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit);
-
-	/**
-	 *  获取某个设备的通道树
-	 * @param deviceId 设备ID
-	 * @return
-	 */
-	List<DeviceChannelTree> tree(String deviceId);
-
-	/**
-	 * 获取某个设备的通道列表
-	 *
-	 * @param deviceId 设备ID
-	 * @return
-	 */
-	public List<DeviceChannel> queryChannelsByDeviceId(String deviceId);
-	public List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
-
-	/**
-	 * 获取某个设备的通道
-	 * @param deviceId 设备ID
-	 * @param channelId 通道ID
-	 */
-	public DeviceChannel queryChannel(String deviceId, String channelId);
-
-	/**
-	 * 删除通道
-	 * @param deviceId 设备ID
-	 * @param channelId 通道ID
-	 */
-	public int delChannel(String deviceId, String channelId);
-
-	/**
-	 * 获取多个设备
-	 * @param page 当前页数
-	 * @param count 每页数量
-	 * @return List<Device> 设备对象数组
-	 */
-	public PageInfo<Device> queryVideoDeviceList(int page, int count);
-
-	/**
-	 * 获取多个设备
-	 *
-	 * @return List<Device> 设备对象数组
-	 */
-	public List<Device> queryVideoDeviceList();
-
-	/**
-	 * 删除设备
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:删除成功  false:删除失败
-	 */
-	public boolean delete(String deviceId);
-
-	/**
-	 * 更新设备在线
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:更新成功  false:更新失败
-	 */
-	public boolean online(String deviceId);
-
-	/**
-	 * 更新设备离线
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:更新成功  false:更新失败
-	 */
-	public boolean outline(String deviceId);
-
-	/**
-	 * 更新所有设备离线
-	 *
-	 * @return true:更新成功  false:更新失败
-	 */
-	public boolean outlineForAll();
-
-
-	/**
-	 * 查询子设备
-	 *
-	 * @param deviceId
-	 * @param channelId
-	 * @param page
-	 * @param count
-	 * @return
-	 */
-	PageInfo querySubChannels(String deviceId, String channelId, String query, Boolean hasSubChannel, String online, int page, int count);
-
-
-	/**
-	 * 清空通道
-	 * @param deviceId
-	 */
-	void cleanChannelsForDevice(String deviceId);
-
-
-	/**
-	 * 更新上级平台
-	 * @param parentPlatform
-	 */
-	boolean updateParentPlatform(ParentPlatform parentPlatform);
-
-
-	/**
-	 * 添加上级平台
-	 * @param parentPlatform
-	 */
-	boolean addParentPlatform(ParentPlatform parentPlatform);
-
-	/**
-	 * 删除上级平台
-	 * @param parentPlatform
-	 */
-	boolean deleteParentPlatform(ParentPlatform parentPlatform);
-
-
-	/**
-	 * 分页获取上级平台
-	 * @param page
-	 * @param count
-	 * @return
-	 */
-	PageInfo<ParentPlatform> queryParentPlatformList(int page, int count);
-
-	/**
-	 * 获取所有已启用的平台
-	 * @return
-	 */
-	List<ParentPlatform> queryEnableParentPlatformList(boolean enable);
-
-	/**
-	 * 获取上级平台
-	 * @param platformGbId
-	 * @return
-	 */
-	ParentPlatform queryParentPlatByServerGBId(String platformGbId);
-
-	/**
-	 * 所有平台离线
-	 */
-	void outlineForAllParentPlatform();
-
-	/**
-	 * 查询通道信息,不区分设备(已关联平台或全部)
-	 */
-	PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, String catalogId);
-
-	/**
-	 * 查询设备的通道信息
-	 */
-	List<ChannelReduce> queryChannelListInParentPlatform(String platformId);
-
-
-	/**
-	 * 更新上级平台的通道信息
-	 * @param platformId
-	 * @param channelReduces
-	 * @return
-	 */
-	int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId);
-
-	/**
-	 *  移除上级平台的通道信息
-	 * @param platformId
-	 * @param channelReduces
-	 * @return
-	 */
-	int delChannelForGB(String platformId, List<ChannelReduce> channelReduces);
-
-
-    DeviceChannel queryChannelInParentPlatform(String platformId, String channelId);
-
-    List<PlatformCatalog> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId);
-    List<PlatformCatalog> queryStreamInParentPlatformAndCatalog(String platformId, String catalogId);
-
-    Device queryVideoDeviceByPlatformIdAndChannelId(String platformId, String channelId);
-
-
-	/**
-	 * 添加Mobile Position设备移动位置
-	 * @param mobilePosition
-	 * @return
-	 */
-	public boolean insertMobilePosition(MobilePosition mobilePosition);
-
-	/**
-	 * 查询移动位置轨迹
-	 * @param deviceId
-	 * @param startTime
-	 * @param endTime
-	 */
-	public List<MobilePosition> queryMobilePositions(String deviceId, String startTime, String endTime);
-
-	/**
-	 * 查询最新移动位置
-	 * @param deviceId
-	 */
-	public MobilePosition queryLatestPosition(String deviceId);
-
-	/**
-	 * 删除指定设备的所有移动位置
-	 * @param deviceId
-	 */
-	public int clearMobilePositionsByDeviceId(String deviceId);
-
-	/**
-	 * 新增代理流
-	 * @param streamProxyDto
-	 * @return
-	 */
-	public boolean addStreamProxy(StreamProxyItem streamProxyDto);
-
-	/**
-	 * 更新代理流
-	 * @param streamProxyDto
-	 * @return
-	 */
-	public boolean updateStreamProxy(StreamProxyItem streamProxyDto);
-
-	/**
-	 * 移除代理流
-	 * @param app
-	 * @param stream
-	 * @return
-	 */
-	public int deleteStreamProxy(String app, String stream);
-
-	/**
-	 * 按照是否启用获取代理流
-	 * @param enable
-	 * @return
-	 */
-	public List<StreamProxyItem> getStreamProxyListForEnable(boolean enable);
-
-	/**
-	 * 按照是app和stream获取代理流
-	 * @param app
-	 * @param stream
-	 * @return
-	 */
-	public StreamProxyItem queryStreamProxy(String app, String stream);
-
-	/**
-	 * 获取代理流
-	 * @param page
-	 * @param count
-	 * @return
-	 */
-	PageInfo<StreamProxyItem> queryStreamProxyList(Integer page, Integer count);
-
-	/**
-	 * 根据国标ID获取平台关联的直播流
-	 * @param platformId
-	 * @param channelId
-	 * @return
-	 */
-	GbStream queryStreamInParentPlatform(String platformId, String channelId);
-
-	/**
-	 * 获取平台关联的直播流
-	 * @param platformId
-	 * @return
-	 */
-	List<GbStream> queryGbStreamListInPlatform(String platformId);
-
-	/**
-	 * 批量更新推流列表
-	 * @param streamPushItems
-	 */
-	void updateMediaList(List<StreamPushItem> streamPushItems);
-
-	/**
-	 * 更新单个推流
-	 * @param streamPushItem
-	 */
-	void updateMedia(StreamPushItem streamPushItem);
-
-	/**
-	 * 移除单个推流
-	 * @param app
-	 * @param stream
-	 */
-	int removeMedia(String app, String stream);
-
-
-	/**
-	 * 清空推流列表
-	 */
-	void clearMediaList();
-
-	/**
-	 * 设置流离线
-	 * @param app
-	 * @param streamId
-	 */
-	int mediaOutline(String app, String streamId);
-
-	/**
-	 * 设置平台在线/离线
-	 * @param online
-	 */
-	void updateParentPlatformStatus(String platformGbID, boolean online);
-
-	/**
-	 * 根据媒体ID获取启用/不启用的代理列表
-	 * @param id 媒体ID
-	 * @param enable 启用/不启用
-	 * @param status 状态
-	 * @return
-	 */
-	List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id,  boolean enable, boolean status);
-
-	/**
-	 * 根据通道ID获取其所在设备
-	 * @param channelId  通道ID
-	 * @return
-	 */
-    Device queryVideoDeviceByChannelId(String channelId);
-
-	/**
-	 * 通道上线
-	 * @param channelId 通道ID
-	 */
-	void deviceChannelOnline(String deviceId, String channelId);
-
-	/**
-	 * 通道离线
-	 * @param channelId 通道ID
-	 */
-	void deviceChannelOffline(String deviceId, String channelId);
-
-	/**
-	 * 通过app与stream获取StreamProxy
-	 * @param app
-	 * @param streamId
-	 * @return
-	 */
-    StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId);
-
-	/**
-	 * catlog查询结束后完全重写通道信息
-	 * @param deviceId
-	 * @param deviceChannelList
-	 */
-	boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList);
-
-	/**
-	 * 获取目录信息
-	 * @param platformId
-	 * @param parentId
-	 * @return
-	 */
-    List<PlatformCatalog> getChildrenCatalogByPlatform(String platformId, String parentId);
-
-	int addCatalog(PlatformCatalog platformCatalog);
-
-	PlatformCatalog getCatalog(String id);
-
-	int delCatalog(String id);
-
-	int updateCatalog(PlatformCatalog platformCatalog);
-
-	int setDefaultCatalog(String platformId, String catalogId);
-
-	List<PlatformCatalog> queryCatalogInPlatform(String serverGBId);
-
-    int delRelation(PlatformCatalog platformCatalog);
-
-	int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfo);
-
-	List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms);
-
-	List<ParentPlatform> queryPlatFormListForStreamWithGBId(String app, String stream, List<String> platforms);
-
-	GbStream getGbStream(String app, String streamId);
-
-	void delCatalogByPlatformId(String serverGBId);
-
-	void delRelationByPlatformId(String serverGBId);
-
-    PlatformCatalog queryDefaultCatalogInPlatform(String platformId);
-
-	List<ChannelSourceInfo> getChannelSource(String platformId, String gbId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java
deleted file mode 100644
index 7e4a544..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储设备的报警信息
- */
-@Mapper
-@Repository
-public interface DeviceAlarmMapper {
-
-    @Insert("INSERT INTO device_alarm (deviceId, channelId, alarmPriority, alarmMethod, alarmTime, alarmDescription, longitude, latitude, alarmType ) " +
-            "VALUES ('${deviceId}', '${channelId}', '${alarmPriority}', '${alarmMethod}', '${alarmTime}', '${alarmDescription}', ${longitude}, ${latitude}, '${alarmType}')")
-    int add(DeviceAlarm alarm);
-
-
-    @Select(value = {" <script>" +
-            " SELECT * FROM device_alarm " +
-            " WHERE 1=1 " +
-            " <if test=\"deviceId != null\" >  AND deviceId = '${deviceId}'</if>" +
-            " <if test=\"alarmPriority != null\" >  AND alarmPriority = '${alarmPriority}' </if>" +
-            " <if test=\"alarmMethod != null\" >  AND alarmMethod = '${alarmMethod}' </if>" +
-            " <if test=\"alarmType != null\" >  AND alarmType = '${alarmType}' </if>" +
-            " <if test=\"startTime != null\" >  AND alarmTime &gt;= '${startTime}' </if>" +
-            " <if test=\"endTime != null\" >  AND alarmTime &lt;= '${endTime}' </if>" +
-            " ORDER BY alarmTime ASC " +
-            " </script>"})
-    List<DeviceAlarm> query(String deviceId, String alarmPriority, String alarmMethod,
-                            String alarmType, String startTime, String endTime);
-
-
-    @Delete(" <script>" +
-            "DELETE FROM device_alarm WHERE 1=1 " +
-            " <if test=\"deviceIdList != null and id == null \" > AND deviceId in " +
-            "<foreach collection='deviceIdList'  item='item'  open='(' separator=',' close=')' > '${item}'</foreach>" +
-            "</if>" +
-            " <if test=\"time != null and id == null \" > AND alarmTime &lt;= '${time}'</if>" +
-            " <if test=\"id != null\" > AND id = ${id}</if>" +
-            " </script>"
-            )
-    int clearAlarmBeforeTime(Integer id, List<String> deviceIdList, String time);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
deleted file mode 100644
index a08f6b6..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储设备通道信息
- */
-@Mapper
-@Repository
-public interface DeviceChannelMapper {
-
-    @Insert("INSERT INTO device_channel (channelId, deviceId, name, manufacture, model, owner, civilCode, block, " +
-            "address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
-            "VALUES ('${channelId}', '${deviceId}', '${name}', '${manufacture}', '${model}', '${owner}', '${civilCode}', '${block}'," +
-            "'${address}', ${parental}, '${parentId}', ${safetyWay}, ${registerWay}, '${certNum}', ${certifiable}, ${errCode}, '${secrecy}', " +
-            "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude},'${createTime}', '${updateTime}')")
-    int add(DeviceChannel channel);
-
-    @Update(value = {" <script>" +
-            "UPDATE device_channel " +
-            "SET updateTime='${updateTime}'" +
-            "<if test='name != null'>, name='${name}'</if>" +
-            "<if test='manufacture != null'>, manufacture='${manufacture}'</if>" +
-            "<if test='model != null'>, model='${model}'</if>" +
-            "<if test='owner != null'>, owner='${owner}'</if>" +
-            "<if test='civilCode != null'>, civilCode='${civilCode}'</if>" +
-            "<if test='block != null'>, block='${block}'</if>" +
-            "<if test='address != null'>, address='${address}'</if>" +
-            "<if test='parental != null'>, parental=${parental}</if>" +
-            "<if test='parentId != null'>, parentId='${parentId}'</if>" +
-            "<if test='safetyWay != null'>, safetyWay=${safetyWay}</if>" +
-            "<if test='registerWay != null'>, registerWay=${registerWay}</if>" +
-            "<if test='certNum != null'>, certNum='${certNum}'</if>" +
-            "<if test='certifiable != null'>, certifiable=${certifiable}</if>" +
-            "<if test='errCode != null'>, errCode=${errCode}</if>" +
-            "<if test='secrecy != null'>, secrecy='${secrecy}'</if>" +
-            "<if test='ipAddress != null'>, ipAddress='${ipAddress}'</if>" +
-            "<if test='port != null'>, port=${port}</if>" +
-            "<if test='password != null'>, password='${password}'</if>" +
-            "<if test='PTZType != null'>, PTZType=${PTZType}</if>" +
-            "<if test='status != null'>, status='${status}'</if>" +
-            "<if test='streamId != null'>, streamId='${streamId}'</if>" +
-            "<if test='hasAudio != null'>, hasAudio=${hasAudio}</if>" +
-            "<if test='longitude != null'>, longitude=${longitude}</if>" +
-            "<if test='latitude != null'>, latitude=${latitude}</if>" +
-            "WHERE deviceId='${deviceId}' AND channelId='${channelId}'"+
-            " </script>"})
-    int update(DeviceChannel channel);
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc.id,\n" +
-            "dc.channelId,\n" +
-            "dc.`name`,\n" +
-            "dc.manufacture,\n" +
-            "dc.model,\n" +
-            "dc.`owner`,\n" +
-            "dc.civilCode,\n" +
-            "dc.block,\n" +
-            "dc.address,\n" +
-            "dc.parentId,\n" +
-            "dc.safetyWay,\n" +
-            "dc.registerWay,\n" +
-            "dc.certNum,\n" +
-            "dc.certifiable,\n" +
-            "dc.errCode,\n" +
-            "dc.endTime,\n" +
-            "dc.secrecy,\n" +
-            "dc.ipAddress,dc.`port`,dc.`password`,dc.PTZType,dc.`status`,dc.streamId,dc.deviceId,\n" +
-            "dc.parental,dc.hasAudio,dc.createTime,dc.updateTime,dc.subCount," +
-            "any_value ( CASE WHEN dc.latitude = 0 THEN dmp.latitude ELSE dc.latitude END ) AS latitude," +
-            "any_value ( CASE WHEN dc.longitude = 0 THEN dmp.longitude ELSE dc.longitude END ) AS longitude " +
-            "from " +
-            "device_channel dc " +
-            "LEFT JOIN device_mobile_position dmp ON dc.channelId = dmp.deviceId " +
-            "WHERE " +
-            "dc.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
-            " <if test='type == 0' > AND dc.name like '%赣E%'</if>" +
-            " <if test='type == 1' > AND dc.name not like '%赣E%' and dc.ipAddress is not null and dc.ipAddress != '' </if>" +
-            " <if test='hasSubChannel == true' >  AND dc.subCount > 0 </if>" +
-            " <if test='hasSubChannel == false' >  AND dc.subCount = 0 </if>" +
-            "GROUP BY dc.channelId " +
-            " </script>"})
-    List<DeviceChannel> queryChannelsCar(String deviceId, String parentChannelId, String query,String type, Boolean hasSubChannel, Boolean online);
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc.id,\n" +
-            "dc.channelId,\n" +
-            "dc.`name`,\n" +
-            "dc.manufacture,\n" +
-            "dc.model,\n" +
-            "dc.`owner`,\n" +
-            "dc.civilCode,\n" +
-            "dc.block,\n" +
-            "dc.address,\n" +
-            "dc.parentId,\n" +
-            "dc.safetyWay,\n" +
-            "dc.registerWay,\n" +
-            "dc.certNum,\n" +
-            "dc.certifiable,\n" +
-            "dc.errCode,\n" +
-            "dc.endTime,\n" +
-            "dc.secrecy,\n" +
-            "dc.ipAddress,dc.`port`,dc.`password`,dc.PTZType,dc.`status`,dc.streamId,dc.deviceId,\n" +
-            "dc.parental,dc.hasAudio,dc.createTime,dc.updateTime,dc.subCount," +
-            "any_value ( CASE WHEN dc.latitude = 0 THEN dmp.latitude ELSE dc.latitude END ) AS latitude," +
-            "any_value ( CASE WHEN dc.longitude = 0 THEN dmp.longitude ELSE dc.longitude END ) AS longitude " +
-            "from " +
-            "device_channel dc " +
-            "LEFT JOIN device_mobile_position dmp ON dc.channelId = dmp.deviceId " +
-            "WHERE " +
-            "dc.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
-            " <if test='hasSubChannel == true' >  AND dc.subCount > 0 </if>" +
-            " <if test='hasSubChannel == false' >  AND dc.subCount = 0 </if>" +
-            "GROUP BY dc.channelId " +
-            " </script>"})
-    List<DeviceChannel> queryChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online);
-
-    @Select("SELECT * FROM device_channel WHERE deviceId=#{deviceId} AND channelId=#{channelId}")
-    DeviceChannel queryChannel(String deviceId, String channelId);
-
-    @Delete("DELETE FROM device_channel WHERE deviceId=#{deviceId}")
-    int cleanChannelsByDeviceId(String deviceId);
-
-    @Delete("DELETE FROM device_channel WHERE deviceId=#{deviceId} AND channelId=#{channelId}")
-    int del(String deviceId, String channelId);
-
-    @Update(value = {"UPDATE device_channel SET streamId=null WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void stopPlay(String deviceId, String channelId);
-
-    @Update(value = {"UPDATE device_channel SET streamId=#{streamId} WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void startPlay(String deviceId, String channelId, String streamId);
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "    dc.id,\n" +
-            "    dc.channelId,\n" +
-            "    dc.deviceId,\n" +
-            "    dc.name,\n" +
-            "    de.manufacturer,\n" +
-            "    de.hostAddress,\n" +
-            "    dc.subCount,\n" +
-            "    pgc.platformId as platformId,\n" +
-            "    pgc.catalogId as catalogId " +
-            " FROM device_channel dc " +
-            " LEFT JOIN device de ON dc.deviceId = de.deviceId " +
-            " LEFT JOIN platform_gb_channel pgc on pgc.deviceChannelId = dc.id " +
-            " WHERE 1=1 " +
-            " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
-            " <if test='online == true' > AND dc.status=1</if> " +
-            " <if test='online == false' > AND dc.status=0</if> " +
-            " <if test='hasSubChannel!= null and hasSubChannel == true' >  AND dc.subCount > 0</if> " +
-            " <if test='hasSubChannel!= null and hasSubChannel == false' >  AND dc.subCount == 0</if> " +
-            " <if test='catalogId == null ' >  AND dc.id not in (select deviceChannelId from platform_gb_channel where platformId=#{platformId} ) </if> " +
-            " <if test='catalogId != null ' >  AND pgc.platformId = #{platformId} and pgc.catalogId=#{catalogId} </if> " +
-            " ORDER BY dc.deviceId, dc.channelId ASC" +
-            " </script>"})
-    List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, String catalogId);
-
-    @Select("SELECT * FROM device_channel WHERE channelId=#{channelId}")
-    List<DeviceChannel> queryChannelByChannelId( String channelId);
-
-    @Update(value = {"UPDATE device_channel SET status=0 WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void offline(String deviceId,  String channelId);
-
-    @Update(value = {"UPDATE device_channel SET status=1 WHERE deviceId=#{deviceId} AND channelId=#{channelId}"})
-    void online(String deviceId,  String channelId);
-
-    @Insert("<script> " +
-            "insert into device_channel " +
-            "(channelId, deviceId, name, manufacture, model, owner, civilCode, block, subCount, " +
-            "  address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "  ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
-            "values " +
-            "<foreach collection='addChannels' index='index' item='item' separator=','> " +
-            "('${item.channelId}', '${item.deviceId}', '${item.name}', '${item.manufacture}', '${item.model}', " +
-            "'${item.owner}', '${item.civilCode}', '${item.block}',${item.subCount}," +
-            "'${item.address}', ${item.parental}, '${item.parentId}', ${item.safetyWay}, ${item.registerWay}, " +
-            "'${item.certNum}', ${item.certifiable}, ${item.errCode}, '${item.secrecy}', " +
-            "'${item.ipAddress}', ${item.port}, '${item.password}', ${item.PTZType}, ${item.status}, " +
-            "'${item.streamId}', ${item.longitude}, ${item.latitude},'${item.createTime}', '${item.updateTime}')" +
-            "</foreach> " +
-            "ON DUPLICATE KEY UPDATE " +
-            "updateTime=VALUES(updateTime), " +
-            "name=VALUES(name), " +
-            "manufacture=VALUES(manufacture), " +
-            "model=VALUES(model), " +
-            "owner=VALUES(owner), " +
-            "civilCode=VALUES(civilCode), " +
-            "block=VALUES(block), " +
-            "subCount=VALUES(subCount), " +
-            "address=VALUES(address), " +
-            "parental=VALUES(parental), " +
-            "parentId=VALUES(parentId), " +
-            "safetyWay=VALUES(safetyWay), " +
-            "registerWay=VALUES(registerWay), " +
-            "certNum=VALUES(certNum), " +
-            "certifiable=VALUES(certifiable), " +
-            "errCode=VALUES(errCode), " +
-            "secrecy=VALUES(secrecy), " +
-            "ipAddress=VALUES(ipAddress), " +
-            "port=VALUES(port), " +
-            "password=VALUES(password), " +
-            "PTZType=VALUES(PTZType), " +
-            "status=VALUES(status), " +
-            "streamId=VALUES(streamId), " +
-            "longitude=VALUES(longitude), " +
-            "latitude=VALUES(latitude)" +
-            "</script>")
-    int batchAdd(List<DeviceChannel> addChannels);
-
-    @Update({"<script>" +
-            "<foreach collection='updateChannels' item='item' separator=';'>" +
-            " UPDATE" +
-            " device_channel" +
-            " SET updateTime='${item.updateTime}'" +
-            "<if test='item.name != null'>, name='${item.name}'</if>" +
-            "<if test='item.manufacture != null'>, manufacture='${item.manufacture}'</if>" +
-            "<if test='item.model != null'>, model='${item.model}'</if>" +
-            "<if test='item.owner != null'>, owner='${item.owner}'</if>" +
-            "<if test='item.civilCode != null'>, civilCode='${item.civilCode}'</if>" +
-            "<if test='item.block != null'>, block='${item.block}'</if>" +
-            "<if test='item.subCount != null'>, block=${item.subCount}</if>" +
-            "<if test='item.address != null'>, address='${item.address}'</if>" +
-            "<if test='item.parental != null'>, parental=${item.parental}</if>" +
-            "<if test='item.parentId != null'>, parentId='${item.parentId}'</if>" +
-            "<if test='item.safetyWay != null'>, safetyWay=${item.safetyWay}</if>" +
-            "<if test='item.registerWay != null'>, registerWay=${item.registerWay}</if>" +
-            "<if test='item.certNum != null'>, certNum='${item.certNum}'</if>" +
-            "<if test='item.certifiable != null'>, certifiable=${item.certifiable}</if>" +
-            "<if test='item.errCode != null'>, errCode=${item.errCode}</if>" +
-            "<if test='item.secrecy != null'>, secrecy='${item.secrecy}'</if>" +
-            "<if test='item.ipAddress != null'>, ipAddress='${item.ipAddress}'</if>" +
-            "<if test='item.port != null'>, port=${item.port}</if>" +
-            "<if test='item.password != null'>, password='${item.password}'</if>" +
-            "<if test='item.PTZType != null'>, PTZType=${item.PTZType}</if>" +
-            "<if test='item.status != null'>, status='${item.status}'</if>" +
-            "<if test='item.streamId != null'>, streamId='${item.streamId}'</if>" +
-            "<if test='item.hasAudio != null'>, hasAudio=${item.hasAudio}</if>" +
-            "<if test='item.longitude != null'>, longitude=${item.longitude}</if>" +
-            "<if test='item.latitude != null'>, latitude=${item.latitude}</if>" +
-            "WHERE deviceId=#{item.deviceId} AND channelId=#{item.channelId}"+
-            "</foreach>" +
-            "</script>"})
-    int batchUpdate(List<DeviceChannel> updateChannels);
-
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "dc1.* " +
-            "from " +
-            "device_channel dc1 " +
-            "WHERE " +
-            "dc1.deviceId = #{deviceId} " +
-            " <if test='query != null'> AND (dc1.channelId LIKE '%${query}%' OR dc1.name LIKE '%${query}%' OR dc1.name LIKE '%${query}%')</if> " +
-            " <if test='parentChannelId != null'> AND dc1.parentId=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc1.status=1</if>" +
-            " <if test='online == false' > AND dc1.status=0</if>" +
-            " <if test='hasSubChannel == true' >  AND dc1.subCount >0</if>" +
-            " <if test='hasSubChannel == false' >  AND dc1.subCount=0</if>" +
-            "ORDER BY dc1.channelId ASC " +
-            "Limit #{limit} OFFSET #{start}" +
-            " </script>"})
-    List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String parentChannelId, String query,
-                                                                 Boolean hasSubChannel, Boolean online, int start, int limit);
-
-    @Select("SELECT * FROM device_channel WHERE deviceId=#{deviceId} AND status=1")
-    List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
-
-    @Select(" SELECT\n" +
-            "        id,\n" +
-            "        channelId,\n" +
-            "        deviceId,\n" +
-            "        parentId,\n" +
-            "        status,\n" +
-            "        name as title,\n" +
-            "        channelId as \"value\",\n" +
-            "        channelId as \"key\",\n" +
-            "        longitude,\n" +
-            "        latitude\n" +
-            "        from device_channel\n" +
-            "        where deviceId = #{deviceId}")
-    List<DeviceChannelTree> tree(String deviceId);
-
-    @Delete(value = {" <script>" +
-            "DELETE " +
-            "from " +
-            "device_channel " +
-            "WHERE " +
-            "deviceId = #{deviceId} " +
-            " AND channelId NOT IN " +
-            "<foreach collection='channels'  item='item'  open='(' separator=',' close=')' > #{item.channelId}</foreach>" +
-            " </script>"})
-    int cleanChannelsNotInList(String deviceId, List<DeviceChannel> channels);
-
-    @Update(" update device_channel" +
-            " set subCount = (select *" +
-            "                from (select count(0)" +
-            "                      from device_channel" +
-            "                      where deviceId = #{deviceId} and parentId = #{channelId}) as temp)" +
-            " where deviceId = #{deviceId} " +
-            " and channelId = #{channelId}")
-    int updateChannelSubCount(String deviceId, String channelId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
deleted file mode 100644
index 28f79f1..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储设备信息
- */
-@Mapper
-@Repository
-public interface DeviceMapper {
-
-    @Select("SELECT * FROM device WHERE deviceId = #{deviceId}")
-    Device getDeviceByDeviceId(String deviceId);
-
-    @Insert("INSERT INTO device (" +
-                "deviceId, " +
-                "name, " +
-                "manufacturer, " +
-                "model, " +
-                "firmware, " +
-                "transport," +
-                "streamMode," +
-                "ip," +
-                "port," +
-                "hostAddress," +
-                "expires," +
-                "registerTime," +
-                "keepaliveTime," +
-                "createTime," +
-                "updateTime," +
-                "charset," +
-                "subscribeCycleForCatalog," +
-                "online" +
-            ") VALUES (" +
-                "#{deviceId}," +
-                "#{name}," +
-                "#{manufacturer}," +
-                "#{model}," +
-                "#{firmware}," +
-                "#{transport}," +
-                "#{streamMode}," +
-                "#{ip}," +
-                "#{port}," +
-                "#{hostAddress}," +
-                "#{expires}," +
-                "#{registerTime}," +
-                "#{keepaliveTime}," +
-                "#{createTime}," +
-                "#{updateTime}," +
-                "#{charset}," +
-                "#{subscribeCycleForCatalog}," +
-                "#{online}" +
-            ")")
-    int add(Device device);
-
-    @Update(value = {" <script>" +
-                "UPDATE device " +
-                "SET updateTime='${updateTime}'" +
-                "<if test=\"name != null\">, name='${name}'</if>" +
-                "<if test=\"manufacturer != null\">, manufacturer='${manufacturer}'</if>" +
-                "<if test=\"model != null\">, model='${model}'</if>" +
-                "<if test=\"firmware != null\">, firmware='${firmware}'</if>" +
-                "<if test=\"transport != null\">, transport='${transport}'</if>" +
-                "<if test=\"streamMode != null\">, streamMode='${streamMode}'</if>" +
-                "<if test=\"ip != null\">, ip='${ip}'</if>" +
-                "<if test=\"port != null\">, port=${port}</if>" +
-                "<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" +
-                "<if test=\"online != null\">, online=${online}</if>" +
-                "<if test=\"registerTime != null\">, registerTime='${registerTime}'</if>" +
-                "<if test=\"keepaliveTime != null\">, keepaliveTime='${keepaliveTime}'</if>" +
-                "<if test=\"expires != null\">, expires=${expires}</if>" +
-                "<if test=\"charset != null\">, charset='${charset}'</if>" +
-                "<if test=\"subscribeCycleForCatalog != null\">, subscribeCycleForCatalog=${subscribeCycleForCatalog}</if>" +
-                "WHERE deviceId='${deviceId}'"+
-            " </script>"})
-    int update(Device device);
-
-    @Select("SELECT *, (SELECT count(0) FROM device_channel WHERE deviceId=de.deviceId) as channelCount  FROM device de")
-    List<Device> getDevices();
-
-    @Delete("DELETE FROM device WHERE deviceId=#{deviceId}")
-    int del(String deviceId);
-
-    @Update("UPDATE device SET online=0")
-    int outlineForAll();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
deleted file mode 100644
index f3e4261..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import java.util.List;
-
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import org.apache.ibatis.annotations.*;
-//import org.springframework.stereotype.Repository;
-
-@Mapper
-//@Repository
-public interface DeviceMobilePositionMapper {
-
-    @Insert("INSERT INTO device_mobile_position (deviceId,channelId, deviceName, time, longitude, latitude, altitude, speed, direction, reportSource, geodeticSystem, cnLng, cnLat) " +
-            "VALUES ('${deviceId}','${channelId}', '${deviceName}', '${time}', ${longitude}, ${latitude}, ${altitude}, ${speed}, ${direction}, '${reportSource}', '${geodeticSystem}', '${cnLng}', '${cnLat}')")
-    int insertNewPosition(MobilePosition mobilePosition);
-
-    @Select(value = {" <script>" +
-    "SELECT * FROM device_mobile_position" +
-    " WHERE deviceId = #{deviceId} " +
-    "<if test=\"startTime != null\"> AND time&gt;=#{startTime}</if>" +
-    "<if test=\"endTime != null\"> AND time&lt;=#{endTime}</if>" +
-    " ORDER BY time ASC" +
-    " </script>"})
-    List<MobilePosition> queryPositionByDeviceIdAndTime(String deviceId, String startTime, String endTime);
-
-    @Select("SELECT * FROM device_mobile_position WHERE deviceId = #{deviceId}" +
-            " ORDER BY time DESC LIMIT 1")
-    MobilePosition queryLatestPositionByDevice(String deviceId);
-
-    @Delete("DELETE FROM device_mobile_position WHERE deviceId = #{deviceId}")
-    int clearMobilePositionsByDeviceId(String deviceId);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
deleted file mode 100644
index 9ac90bb..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface GbStreamMapper {
-
-    @Insert("REPLACE INTO gb_stream (app, stream, gbId, name, " +
-            "longitude, latitude, streamType, mediaServerId, status, createStamp) VALUES" +
-            "('${app}', '${stream}', '${gbId}', '${name}', " +
-            "'${longitude}', '${latitude}', '${streamType}', " +
-            "'${mediaServerId}', ${status}, ${createStamp})")
-    @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId")
-    int add(GbStream gbStream);
-
-    @Update("UPDATE gb_stream " +
-            "SET app=#{app}," +
-            "stream=#{stream}," +
-            "gbId=#{gbId}," +
-            "name=#{name}," +
-            "streamType=#{streamType}," +
-            "longitude=#{longitude}, " +
-            "latitude=#{latitude}," +
-            "mediaServerId=#{mediaServerId}," +
-            "status=${status} " +
-            "WHERE app=#{app} AND stream=#{stream}")
-    int updateByAppAndStream(GbStream gbStream);
-
-    @Update("UPDATE gb_stream " +
-            "SET app=#{app}," +
-            "stream=#{stream}," +
-            "gbId=#{gbId}," +
-            "name=#{name}," +
-            "streamType=#{streamType}," +
-            "longitude=#{longitude}, " +
-            "latitude=#{latitude}," +
-            "mediaServerId=#{mediaServerId}," +
-            "status=${status} " +
-            "WHERE gbStreamId=#{gbStreamId}")
-    int update(GbStream gbStream);
-
-    @Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}")
-    int del(String app, String stream);
-
-    @Select("<script> "+
-            "SELECT gs.* FROM gb_stream gs " +
-            "WHERE " +
-            "1=1 " +
-            " <if test='catalogId != null'> AND gs.gbStreamId in" +
-            "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId} and pgs.catalogId=#{catalogId})</if> " +
-            " <if test='catalogId == null'> AND gs.gbStreamId not in" +
-            "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId}) </if> " +
-            " <if test='query != null'> AND (gs.app LIKE '%${query}%' OR gs.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " +
-            " <if test='pushing == true' > AND gs.status=1</if>" +
-            " <if test='pushing == false' > AND gs.status=0</if>" +
-            " <if test='mediaServerId != null' > AND gs.mediaServerId=#{mediaServerId} </if>" +
-            " order by gs.gbStreamId asc " +
-            "</script>")
-    List<GbStream> selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId);
-
-    @Select("SELECT * FROM gb_stream WHERE app=#{app} AND stream=#{stream}")
-    StreamProxyItem selectOne(String app, String stream);
-
-    @Select("SELECT * FROM gb_stream WHERE gbId=#{gbId}")
-    List<GbStream> selectByGBId(String gbId);
-
-    @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
-            "LEFT JOIN platform_gb_stream pgs ON gs.gbStreamId = pgs.gbStreamId " +
-            "WHERE gs.gbId = '${gbId}' AND pgs.platformId = '${platformId}'")
-    GbStream queryStreamInPlatform(String platformId, String gbId);
-
-    @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
-            "LEFT JOIN platform_gb_stream pgs ON gs.gbStreamId = pgs.gbStreamId " +
-            "WHERE pgs.platformId = #{platformId}")
-    List<GbStream> queryGbStreamListInPlatform(String platformId);
-
-
-    @Select("SELECT gs.* FROM gb_stream gs LEFT JOIN platform_gb_stream pgs " +
-            "ON gs.gbStreamId = pgs.gbStreamId WHERE pgs.gbStreamId is NULL")
-    List<GbStream> queryStreamNotInPlatform();
-
-    @Update("UPDATE gb_stream " +
-            "SET status=${status} " +
-            "WHERE app=#{app} AND stream=#{stream}")
-    int setStatus(String app, String stream, boolean status);
-
-    @Update("UPDATE gb_stream " +
-            "SET status=${status} " +
-            "WHERE mediaServerId=#{mediaServerId} ")
-    void updateStatusByMediaServerId(String mediaServerId, boolean status);
-
-    @Delete("DELETE FROM gb_stream WHERE streamType=#{type} AND gbId=NULL AND mediaServerId=#{mediaServerId}")
-    void deleteWithoutGBId(String type, String mediaServerId);
-
-    @Delete("<script> "+
-            "DELETE FROM gb_stream where " +
-            "<foreach collection='streamProxyItemList' item='item' separator='or'>" +
-            "(app=#{item.app} and stream=#{item.stream}) " +
-            "</foreach>" +
-            "</script>")
-    void batchDel(List<StreamProxyItem> streamProxyItemList);
-
-    @Delete("<script> "+
-            "DELETE FROM gb_stream where " +
-            "<foreach collection='gbStreams' item='item' separator='or'>" +
-            "(app=#{item.app} and stream=#{item.stream}) " +
-            "</foreach>" +
-            "</script>")
-    void batchDelForGbStream(List<GbStream> gbStreams);
-
-    @Insert("<script> " +
-            "INSERT IGNORE into gb_stream " +
-            "(app, stream, gbId, name, " +
-            "longitude, latitude, streamType, mediaServerId, status, createStamp)" +
-            "values " +
-            "<foreach collection='subList' index='index' item='item' separator=','> " +
-            "('${item.app}', '${item.stream}', '${item.gbId}', '${item.name}', " +
-            "'${item.longitude}', '${item.latitude}', '${item.streamType}', " +
-            "'${item.mediaServerId}', ${item.status}, ${item.createStamp}) "+
-            "</foreach> " +
-            "</script>")
-    @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId")
-    void batchAdd(List<StreamPushItem> subList);
-
-    @Update({"<script>" +
-            "<foreach collection='gpsMsgInfos' item='item' separator=';'>" +
-            " UPDATE" +
-            " gb_stream" +
-            " SET longitude=${item.lng}, latitude=${item.lat} " +
-            "WHERE gbId=#{item.id}"+
-            "</foreach>" +
-            "</script>"})
-    int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfos);
-
-    @Select("<script> "+
-                   "SELECT * FROM gb_stream where " +
-                   "<foreach collection='streamPushItems' item='item' separator='or'>" +
-                   "(app=#{item.app} and stream=#{item.stream}) " +
-                   "</foreach>" +
-                   "</script>")
-    List<GbStream> selectAllForAppAndStream(List<StreamPushItem> streamPushItems);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/LogMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/LogMapper.java
deleted file mode 100644
index 9716c75..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/LogMapper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储设服务的日志
- */
-@Mapper
-@Repository
-public interface LogMapper {
-
-    @Insert("insert into log ( name, type, uri, address, result, timing, username, createTime) " +
-            "values ('${name}', '${type}', '${uri}', '${address}', '${result}', ${timing}, '${username}', '${createTime}')")
-    int add(LogDto logDto);
-
-    @Select(value = {"<script>" +
-            " SELECT * FROM log " +
-            " WHERE 1=1 " +
-            " <if test=\"query != null\"> AND (name LIKE '%${query}%')</if> " +
-            " <if test=\"type != null\" >  AND type = '${type}'</if>" +
-            " <if test=\"startTime != null\" >  AND createTime &gt;= '${startTime}' </if>" +
-            " <if test=\"endTime != null\" >  AND createTime &lt;= '${endTime}' </if>" +
-            " ORDER BY createTime DESC " +
-            " </script>"})
-    List<LogDto> query(String query, String type, String startTime, String endTime);
-
-    @Delete("DELETE FROM log")
-    int clear();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java
deleted file mode 100644
index 0e37bbf..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-
-@Mapper
-@Repository
-public interface MediaServerMapper {
-
-    @Insert("INSERT INTO media_server (" +
-            "id, " +
-            "ip, " +
-            "hookIp, " +
-            "sdpIp, " +
-            "streamIp, " +
-            "httpPort, " +
-            "httpSSlPort, " +
-            "rtmpPort, " +
-            "rtmpSSlPort, " +
-            "rtpProxyPort, " +
-            "rtspPort, " +
-            "rtspSSLPort, " +
-            "autoConfig, " +
-            "secret, " +
-            "streamNoneReaderDelayMS, " +
-            "rtpEnable, " +
-            "rtpPortRange, " +
-            "sendRtpPortRange, " +
-            "recordAssistPort, " +
-            "defaultServer, " +
-            "createTime, " +
-            "updateTime, " +
-            "hookAliveInterval" +
-            ") VALUES " +
-            "(" +
-            "'${id}', " +
-            "'${ip}', " +
-            "'${hookIp}', " +
-            "'${sdpIp}', " +
-            "'${streamIp}', " +
-            "${httpPort}, " +
-            "${httpSSlPort}, " +
-            "${rtmpPort}, " +
-            "${rtmpSSlPort}, " +
-            "${rtpProxyPort}, " +
-            "${rtspPort}, " +
-            "${rtspSSLPort}, " +
-            "${autoConfig}, " +
-            "'${secret}', " +
-            "${streamNoneReaderDelayMS}, " +
-            "${rtpEnable}, " +
-            "'${rtpPortRange}', " +
-            "'${sendRtpPortRange}', " +
-            "${recordAssistPort}, " +
-            "${defaultServer}, " +
-            "'${createTime}', " +
-            "'${updateTime}', " +
-            "${hookAliveInterval})")
-    int add(MediaServerItem mediaServerItem);
-
-    @Update(value = {" <script>" +
-            "UPDATE media_server " +
-            "SET updateTime='${updateTime}'" +
-            "<if test=\"ip != null\">, ip='${ip}'</if>" +
-            "<if test=\"hookIp != null\">, hookIp='${hookIp}'</if>" +
-            "<if test=\"sdpIp != null\">, sdpIp='${sdpIp}'</if>" +
-            "<if test=\"streamIp != null\">, streamIp='${streamIp}'</if>" +
-            "<if test=\"httpPort != null\">, httpPort=${httpPort}</if>" +
-            "<if test=\"httpSSlPort != null\">, httpSSlPort=${httpSSlPort}</if>" +
-            "<if test=\"rtmpPort != null\">, rtmpPort=${rtmpPort}</if>" +
-            "<if test=\"rtmpSSlPort != null\">, rtmpSSlPort=${rtmpSSlPort}</if>" +
-            "<if test=\"rtpProxyPort != null\">, rtpProxyPort=${rtpProxyPort}</if>" +
-            "<if test=\"rtspPort != null\">, rtspPort=${rtspPort}</if>" +
-            "<if test=\"rtspSSLPort != null\">, rtspSSLPort=${rtspSSLPort}</if>" +
-            "<if test=\"autoConfig != null\">, autoConfig=${autoConfig}</if>" +
-            "<if test=\"streamNoneReaderDelayMS != null\">, streamNoneReaderDelayMS=${streamNoneReaderDelayMS}</if>" +
-            "<if test=\"rtpEnable != null\">, rtpEnable=${rtpEnable}</if>" +
-            "<if test=\"rtpPortRange != null\">, rtpPortRange='${rtpPortRange}'</if>" +
-            "<if test=\"sendRtpPortRange != null\">, sendRtpPortRange='${sendRtpPortRange}'</if>" +
-            "<if test=\"secret != null\">, secret='${secret}'</if>" +
-            "<if test=\"recordAssistPort != null\">, recordAssistPort=${recordAssistPort}</if>" +
-            "<if test=\"hookAliveInterval != null\">, hookAliveInterval=${hookAliveInterval}</if>" +
-            "WHERE id='${id}'"+
-            " </script>"})
-    int update(MediaServerItem mediaServerItem);
-
-    @Update(value = {" <script>" +
-            "UPDATE media_server " +
-            "SET updateTime='${updateTime}'" +
-            "<if test=\"id != null\">, id='${id}'</if>" +
-            "<if test=\"hookIp != null\">, hookIp='${hookIp}'</if>" +
-            "<if test=\"sdpIp != null\">, sdpIp='${sdpIp}'</if>" +
-            "<if test=\"streamIp != null\">, streamIp='${streamIp}'</if>" +
-            "<if test=\"httpSSlPort != null\">, httpSSlPort=${httpSSlPort}</if>" +
-            "<if test=\"rtmpPort != null\">, rtmpPort=${rtmpPort}</if>" +
-            "<if test=\"rtmpSSlPort != null\">, rtmpSSlPort=${rtmpSSlPort}</if>" +
-            "<if test=\"rtpProxyPort != null\">, rtpProxyPort=${rtpProxyPort}</if>" +
-            "<if test=\"rtspPort != null\">, rtspPort=${rtspPort}</if>" +
-            "<if test=\"rtspSSLPort != null\">, rtspSSLPort=${rtspSSLPort}</if>" +
-            "<if test=\"autoConfig != null\">, autoConfig=${autoConfig}</if>" +
-            "<if test=\"streamNoneReaderDelayMS != null\">, streamNoneReaderDelayMS=${streamNoneReaderDelayMS}</if>" +
-            "<if test=\"rtpEnable != null\">, rtpEnable=${rtpEnable}</if>" +
-            "<if test=\"rtpPortRange != null\">, rtpPortRange='${rtpPortRange}'</if>" +
-            "<if test=\"sendRtpPortRange != null\">, sendRtpPortRange='${sendRtpPortRange}'</if>" +
-            "<if test=\"secret != null\">, secret='${secret}'</if>" +
-            "<if test=\"recordAssistPort != null\">, recordAssistPort=${recordAssistPort}</if>" +
-            "<if test=\"hookAliveInterval != null\">, hookAliveInterval=${hookAliveInterval}</if>" +
-            "WHERE ip='${ip}' and httpPort=${httpPort}"+
-            " </script>"})
-    int updateByHostAndPort(MediaServerItem mediaServerItem);
-
-    @Select("SELECT * FROM media_server WHERE id='${id}'")
-    MediaServerItem queryOne(String id);
-
-    @Select("SELECT * FROM media_server")
-    List<MediaServerItem> queryAll();
-
-    @Delete("DELETE FROM media_server WHERE id='${id}'")
-    void delOne(String id);
-
-    @Select("DELETE FROM media_server WHERE ip='${host}' and httpPort=${port}")
-    void delOneByIPAndPort(String host, int port);
-
-    @Delete("DELETE FROM media_server WHERE defaultServer=1")
-    int delDefault();
-
-    @Select("SELECT * FROM media_server WHERE ip='${host}' and httpPort=${port}")
-    MediaServerItem queryOneByHostAndPort(String host, int port);
-
-    @Select("SELECT * FROM media_server WHERE defaultServer=1")
-    MediaServerItem queryDefault();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
deleted file mode 100644
index f74b6d4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 用于存储上级平台
- */
-@Mapper
-@Repository
-public interface ParentPlatformMapper {
-
-    @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp,  " +
-            "            devicePort, username, password, expires, keepTimeout, transport, characterSet, ptz, rtcp, " +
-            "            status, shareAllLiveStream, catalogId) " +
-            "            VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " +
-            "            '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${ptz}, ${rtcp}, " +
-            "            ${status}, ${shareAllLiveStream}, #{catalogId})")
-    int addParentPlatform(ParentPlatform parentPlatform);
-
-    @Update("UPDATE parent_platform " +
-            "SET enable=#{enable}, " +
-            "name=#{name}," +
-            "deviceGBId=#{deviceGBId}," +
-            "serverGBId=#{serverGBId}, " +
-            "serverGBDomain=#{serverGBDomain}, " +
-            "serverIP=#{serverIP}," +
-            "serverPort=#{serverPort}, " +
-            "deviceIp=#{deviceIp}, " +
-            "devicePort=#{devicePort}, " +
-            "username=#{username}, " +
-            "password=#{password}, " +
-            "expires=#{expires}, " +
-            "keepTimeout=#{keepTimeout}, " +
-            "transport=#{transport}, " +
-            "characterSet=#{characterSet}, " +
-            "ptz=#{ptz}, " +
-            "rtcp=#{rtcp}, " +
-            "status=#{status}, " +
-            "shareAllLiveStream=#{shareAllLiveStream}, " +
-            "catalogId=#{catalogId} " +
-            "WHERE id=#{id}")
-    int updateParentPlatform(ParentPlatform parentPlatform);
-
-    @Delete("DELETE FROM parent_platform WHERE serverGBId=#{serverGBId}")
-    int delParentPlatform(ParentPlatform parentPlatform);
-
-    @Select("SELECT *, ((SELECT count(0)\n" +
-            "              FROM platform_gb_channel pc\n" +
-            "              WHERE pc.platformId = pp.serverGBId)\n" +
-            "              +\n" +
-            "              (SELECT count(0)\n" +
-            "              FROM platform_gb_stream pgs\n" +
-            "              WHERE pgs.platformId = pp.serverGBId)\n" +
-            "              +\n" +
-            "              (SELECT count(0)\n" +
-            "              FROM platform_catalog pgc\n" +
-            "              WHERE pgc.platformId = pp.serverGBId)) as channelCount\n" +
-            "FROM parent_platform pp ")
-    List<ParentPlatform> getParentPlatformList();
-
-    @Select("SELECT * FROM parent_platform WHERE enable=#{enable}")
-    List<ParentPlatform> getEnableParentPlatformList(boolean enable);
-
-    @Select("SELECT * FROM parent_platform WHERE serverGBId=#{platformGbId}")
-    ParentPlatform getParentPlatByServerGBId(String platformGbId);
-
-    @Select("SELECT * FROM parent_platform WHERE id=#{id}")
-    ParentPlatform getParentPlatById(int id);
-
-    @Update("UPDATE parent_platform SET status=false" )
-    int outlineForAllParentPlatform();
-
-    @Update("UPDATE parent_platform SET status=#{online} WHERE serverGBId=#{platformGbID}" )
-    int updateParentPlatformStatus(String platformGbID, boolean online);
-
-    @Select("SELECT * FROM parent_platform WHERE shareAllLiveStream=true")
-    List<ParentPlatform> selectAllAhareAllLiveStream();
-
-    @Update(value = {" <script>" +
-            "UPDATE parent_platform " +
-            "SET catalogId=#{catalogId}" +
-            "WHERE serverGBId=#{platformId}"+
-            "</script>"})
-    int setDefaultCatalog(String platformId, String catalogId);
-
-    @Select("select 'channel' as name, count(pgc.platformId) count from platform_gb_channel pgc left join device_channel dc on dc.id = pgc.deviceChannelId where  pgc.platformId=#{platformId} and dc.channelId =#{gbId} " +
-            "union " +
-            "select 'stream' as name, count(pgs.platformId) count from platform_gb_stream pgs left join gb_stream gs on pgs.gbStreamId = gs.gbStreamId where  pgs.platformId=#{platformId} and gs.gbId = #{gbId}")
-    List<ChannelSourceInfo> getChannelSource(String platformId, String gbId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
deleted file mode 100644
index 95015bd..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformGbStream;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-
-@Mapper
-@Repository
-public interface PlatformCatalogMapper {
-
-    @Insert("INSERT INTO platform_catalog (id, name, platformId, parentId) VALUES" +
-            "(#{id}, #{name}, #{platformId}, #{parentId})")
-    int add(PlatformCatalog platformCatalog);
-
-    @Delete("DELETE FROM platform_catalog WHERE id=#{id}")
-    int del(String id);
-
-    @Delete("DELETE FROM platform_catalog WHERE platformId=#{platformId}")
-    int delByPlatformId(String platformId);
-
-    @Select("SELECT pc.*, count(pc2.id) as childrenCount FROM platform_catalog pc " +
-            "left join platform_catalog pc2 on pc.id = pc2.parentId " +
-            "WHERE pc.parentId=#{parentId} AND pc.platformId=#{platformId} group by pc.id")
-    List<PlatformCatalog> selectByParentId(String platformId, String parentId);
-
-    @Select("SELECT *, (SELECT COUNT(1) from platform_catalog where parentId = pc.id) as childrenCount  FROM platform_catalog pc WHERE pc.id=#{id}")
-    PlatformCatalog select(String id);
-
-    @Update(value = {" <script>" +
-            "UPDATE platform_catalog " +
-            "SET name=#{name}" +
-            "WHERE id=#{id}"+
-            "</script>"})
-    int update(PlatformCatalog platformCatalog);
-
-    @Select("SELECT *, (SELECT COUNT(1) from platform_catalog where parentId = pc.id) as childrenCount  FROM platform_catalog pc WHERE pc.platformId=#{platformId}")
-    List<PlatformCatalog> selectByPlatForm(String platformId);
-
-    @Select("SELECT pc.* FROM  platform_catalog pc WHERE  pc.id = (SELECT pp.catalogId from parent_platform pp WHERE pp.serverGBId=#{platformId})")
-    PlatformCatalog selectDefaultByPlatFormId(String platformId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
deleted file mode 100644
index e048f31..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface PlatformChannelMapper {
-
-    /**
-     * 查询列表里已经关联的
-     */
-    @Select("<script> "+
-            "SELECT deviceChannelId FROM platform_gb_channel WHERE platformId='${platformId}' AND deviceChannelId in" +
-            "<foreach collection='channelReduces' open='(' item='item' separator=',' close=')'> '${item.id}'</foreach>" +
-            "</script>")
-    List<Integer> findChannelRelatedPlatform(String platformId, List<ChannelReduce> channelReduces);
-
-    @Insert("<script> "+
-            "INSERT INTO platform_gb_channel (platformId, deviceChannelId, catalogId) VALUES" +
-            "<foreach collection='channelReducesToAdd'  item='item' separator=','>" +
-            " ('${platformId}', '${item.id}' , '${item.catalogId}' )" +
-            "</foreach>" +
-            "</script>")
-    int addChannels(String platformId, List<ChannelReduce> channelReducesToAdd);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_channel WHERE platformId='${platformId}' AND deviceChannelId in" +
-            "<foreach collection='channelReducesToDel'  item='item'  open='(' separator=',' close=')' > '${item.id}'</foreach>" +
-            "</script>")
-    int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_channel WHERE deviceChannelId in " +
-            "( select  temp.deviceChannelId from " +
-            "(select pgc.deviceChannelId from platform_gb_channel pgc " +
-            "left join device_channel dc on dc.id = pgc.deviceChannelId where dc.deviceId  =#{deviceId} " +
-            ") temp)" +
-            "</script>")
-    int delChannelForDeviceId(String deviceId);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_channel WHERE platformId='${platformId}'"  +
-            "</script>")
-    int cleanChannelForGB(String platformId);
-
-    @Select("SELECT dc.* FROM platform_gb_channel pgc left join device_channel dc on dc.id = pgc.deviceChannelId WHERE dc.channelId='${channelId}' and pgc.platformId='${platformId}'")
-    List<DeviceChannel> queryChannelInParentPlatform(String platformId, String channelId);
-
-    @Select(" select dc.channelId as id, dc.name as name, pgc.platformId as platformId, pgc.catalogId as parentId, 0 as childrenCount, 1 as type " +
-            " from device_channel dc left join platform_gb_channel pgc on dc.id = pgc.deviceChannelId " +
-            " where pgc.platformId=#{platformId} and pgc.catalogId=#{catalogId}")
-    List<PlatformCatalog> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId);
-
-    @Select("select d.*\n" +
-            "from platform_gb_channel pgc\n" +
-            "         left join device_channel dc on dc.id = pgc.deviceChannelId\n" +
-            "         left join device d on dc.deviceId = d.deviceId\n" +
-            "where dc.channelId = #{channelId} and pgc.platformId=#{platformId}")
-    List<Device> queryVideoDeviceByPlatformIdAndChannelId(String platformId, String channelId);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_channel WHERE catalogId=#{id}"  +
-            "</script>")
-    int delByCatalogId(String id);
-
-    @Delete("<script> "+
-           "DELETE FROM platform_gb_channel  WHERE catalogId=#{parentId} AND platformId=#{platformId} AND channelId=#{id}"  +
-           "</script>")
-    int delByCatalogIdAndChannelIdAndPlatformId(PlatformCatalog platformCatalog);
-
-    @Select("<script> " +
-            "SELECT " +
-            "pp.* " +
-            "FROM " +
-            "parent_platform pp " +
-            "left join platform_gb_channel pgc on " +
-            "pp.serverGBId = pgc.platformId " +
-            "left join device_channel dc on " +
-            "dc.id = pgc.deviceChannelId " +
-            "WHERE " +
-            "dc.channelId = #{channelId} and pp.status = true " +
-            "AND pp.serverGBId IN" +
-            "<foreach collection='platforms'  item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
-            "</script> ")
-    List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms);
-
-    @Delete("<script> " +
-           "DELETE FROM platform_gb_channel WHERE platformId=#{serverGBId}"  +
-           "</script>")
-    void delByPlatformId(String serverGBId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
deleted file mode 100644
index 98afd6b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformGbStream;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-
-@Mapper
-@Repository
-public interface PlatformGbStreamMapper {
-
-    @Insert("REPLACE INTO platform_gb_stream (gbStreamId, platformId, catalogId) VALUES" +
-            "( #{gbStreamId}, #{platformId}, #{catalogId})")
-    int add(PlatformGbStream platformGbStream);
-
-
-    @Insert("<script> " +
-            "INSERT into platform_gb_stream " +
-            "(gbStreamId, platformId, catalogId) " +
-            "values " +
-            "<foreach collection='streamPushItems' index='index' item='item' separator=','> " +
-            "(${item.gbStreamId}, '${item.platformId}', '${item.catalogId}')" +
-            "</foreach> " +
-            "</script>")
-    int batchAdd(List<StreamPushItem> streamPushItems);
-
-    @Delete("DELETE FROM platform_gb_stream WHERE gbStreamId = (select gbStreamId from gb_stream where app=#{app} AND stream=#{stream})")
-    int delByAppAndStream(String app, String stream);
-
-    @Delete("DELETE FROM platform_gb_stream WHERE platformId=#{platformId}")
-    int delByPlatformId(String platformId);
-
-    @Select("SELECT " +
-            "pp.* " +
-            "FROM " +
-            "platform_gb_stream pgs " +
-            "LEFT JOIN parent_platform pp ON pp.serverGBId = pgs.platformId " +
-            "LEFT JOIN gb_stream gs ON gs.gbStreamId = pgs.gbStreamId " +
-            "WHERE " +
-            "gs.app =#{app} " +
-            "AND gs.stream =#{stream} ")
-    List<ParentPlatform> selectByAppAndStream(String app, String stream);
-
-    @Select("SELECT pgs.*, gs.gbId  FROM platform_gb_stream pgs " +
-            "LEFT JOIN gb_stream gs ON pgs.gbStreamId = gs.gbStreamId  " +
-            "WHERE gs.app=#{app} AND gs.stream=#{stream} AND pgs.platformId=#{serverGBId}")
-    StreamProxyItem selectOne(String app, String stream, String serverGBId);
-
-    @Select("select gs.* \n" +
-            "from gb_stream gs\n" +
-            "    left join platform_gb_stream pgs\n" +
-            "        on gs.gbStreamId = pgs.gbStreamId\n" +
-            "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}")
-    List<GbStream> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId);
-
-    @Select("select gs.gbId as id, gs.name as name, pgs.platformId as platformId, pgs.catalogId as catalogId , 0 as childrenCount, 2 as type\n" +
-            "from gb_stream gs\n" +
-            "    left join platform_gb_stream pgs\n" +
-            "        on gs.gbStreamId = pgs.gbStreamId\n" +
-            "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}")
-    List<PlatformCatalog> queryChannelInParentPlatformAndCatalogForCatalog(String platformId, String catalogId);
-
-    @Delete("DELETE FROM platform_gb_stream WHERE catalogId=#{id}")
-    int delByCatalogId(String id);
-
-    @Select("<script> " +
-            "SELECT " +
-            "pp.* " +
-            "FROM " +
-            "parent_platform pp " +
-            "left join platform_gb_stream pgs on " +
-            "pp.serverGBId = pgs.platformId " +
-            "left join gb_stream gs " +
-            "on gs.gbStreamId = pgs.gbStreamId " +
-            "WHERE " +
-            "gs.app = #{app} " +
-            "AND gs.stream = #{stream}" +
-            "AND pp.serverGBId IN" +
-            "<foreach collection='platforms'  item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
-            "</script> ")
-    List<ParentPlatform> queryPlatFormListForGBWithGBId(String app, String stream, List<String> platforms);
-
-    @Delete("DELETE FROM platform_gb_stream WHERE gbStreamId = (select id from gb_stream where app=#{app} AND stream=#{stream}) AND platformId=#{platformId}")
-    int delByAppAndStreamAndPlatform(String app, String stream, String platformId);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_stream where gbStreamId in " +
-            "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')' >" +
-            "#{item.gbStreamId}" +
-            "</foreach>" +
-            "</script>")
-    void delByGbStreams(List<GbStream> gbStreams);
-
-    @Delete("<script> "+
-            "DELETE FROM platform_gb_stream where platformId=#{platformId} and gbStreamId in " +
-            "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')'>" +
-            "#{item.gbStreamId} " +
-            "</foreach>" +
-            "</script>")
-    void delByAppAndStreamsByPlatformId(List<GbStream> gbStreams, String platformId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/RecordInfoDao.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/RecordInfoDao.java
deleted file mode 100644
index 2d73982..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/RecordInfoDao.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.storager.dao.dto.RecordInfo;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface RecordInfoDao {
-
-    @Insert("INSERT INTO recordInfo (app, stream, mediaServerId, createTime, type, deviceId, channelId, name) VALUES" +
-            "('${app}', '${stream}', '${mediaServerId}', datetime('now','localtime')), '${type}', '${deviceId}', '${channelId}', '${name}'")
-    int add(RecordInfo recordInfo);
-
-    @Delete("DELETE FROM user WHERE createTime < '${beforeTime}'")
-    int deleteBefore(String beforeTime);
-
-    @Select("select * FROM recordInfo")
-    List<RecordInfo> selectAll();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java
deleted file mode 100644
index 66a60b9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface RoleMapper {
-
-    @Insert("INSERT INTO user_role (name, authority, createTime, updateTime) VALUES" +
-            "('${name}', '${authority}', '${createTime}', '${updateTime}')")
-    int add(Role role);
-
-    @Update(value = {" <script>" +
-            "UPDATE user_role " +
-            "SET updateTime='${updateTime}' " +
-            "<if test=\"name != null\">, name='${name}'</if>" +
-            "<if test=\"authority != null\">, authority='${authority}'</if>" +
-            "WHERE id != 1 and id=#{id}" +
-            " </script>"})
-    int update(Role role);
-
-    @Delete("DELETE FROM user_role WHERE  id != 1 and id=#{id}")
-    int delete(int id);
-
-    @Select("select * FROM user_role WHERE id=#{id}")
-    Role selectById(int id);
-
-    @Select("select * FROM user_role")
-    List<Role> selectAll();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
deleted file mode 100644
index 2447ad9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface StreamProxyMapper {
-
-    @Insert("INSERT INTO stream_proxy (type, name, app, stream,mediaServerId, url, src_url, dst_url, " +
-            "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, status, enable_remove_none_reader, createTime) VALUES" +
-            "('${type}','${name}', '${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " +
-            "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, ${status}, " +
-            "${enable_remove_none_reader}, '${createTime}' )")
-    int add(StreamProxyItem streamProxyDto);
-
-    @Update("UPDATE stream_proxy " +
-            "SET type=#{type}, " +
-            "name=#{name}," +
-            "app=#{app}," +
-            "stream=#{stream}," +
-            "url=#{url}, " +
-            "mediaServerId=#{mediaServerId}, " +
-            "src_url=#{src_url}," +
-            "dst_url=#{dst_url}, " +
-            "timeout_ms=#{timeout_ms}, " +
-            "ffmpeg_cmd_key=#{ffmpeg_cmd_key}, " +
-            "rtp_type=#{rtp_type}, " +
-            "enable_hls=#{enable_hls}, " +
-            "enable=#{enable}, " +
-            "status=#{status}, " +
-            "enable_remove_none_reader=#{enable_remove_none_reader}, " +
-            "enable_mp4=#{enable_mp4} " +
-            "WHERE app=#{app} AND stream=#{stream}")
-    int update(StreamProxyItem streamProxyDto);
-
-    @Delete("DELETE FROM stream_proxy WHERE app=#{app} AND stream=#{stream}")
-    int del(String app, String stream);
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream order by st.createTime desc")
-    List<StreamProxyItem> selectAll();
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable=${enable} order by st.createTime desc")
-    List<StreamProxyItem> selectForEnable(boolean enable);
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.app=#{app} AND st.stream=#{stream} order by st.createTime desc")
-    StreamProxyItem selectOne(String app, String stream);
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " +
-            "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " +
-            "WHERE st.enable=${enable} and st.status=${status} and st.mediaServerId = '${id}' order by st.createTime desc")
-    List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable, boolean status);
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " +
-            "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " +
-            "WHERE st.mediaServerId = '${id}' order by st.createTime desc")
-    List<StreamProxyItem> selectInMediaServer(String id);
-
-    @Update("UPDATE stream_proxy " +
-            "SET status=#{status} " +
-            "WHERE mediaServerId=#{mediaServerId}")
-    void updateStatusByMediaServerId(boolean status, String mediaServerId);
-
-    @Update("UPDATE stream_proxy " +
-            "SET status=${status} " +
-            "WHERE app=#{app} AND stream=#{stream}")
-    int updateStatus(boolean status, String app, String stream);
-
-    @Delete("DELETE FROM stream_proxy WHERE enable_remove_none_reader=true AND mediaServerId=#{mediaServerId}")
-    void deleteAutoRemoveItemByMediaServerId(String mediaServerId);
-
-    @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable_remove_none_reader=true AND st.mediaServerId=#{mediaServerId} order by st.createTime desc")
-    List<StreamProxyItem> selecAutoRemoveItemByMediaServerId(String mediaServerId);
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
deleted file mode 100644
index 909d3a8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import org.apache.ibatis.annotations.*;
-// import org.omg.PortableInterceptor.INACTIVE;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-
-@Mapper
-@Repository
-public interface StreamPushMapper {
-
-    @Insert("INSERT INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
-            "createStamp, aliveSecond, mediaServerId) VALUES" +
-            "('${app}', '${stream}', '${totalReaderCount}', '${originType}', '${originTypeStr}', " +
-            "'${createStamp}', '${aliveSecond}', '${mediaServerId}' )")
-    int add(StreamPushItem streamPushItem);
-
-    @Update("UPDATE stream_push " +
-            "SET app=#{app}," +
-            "stream=#{stream}," +
-            "mediaServerId=#{mediaServerId}," +
-            "totalReaderCount=#{totalReaderCount}, " +
-            "originType=#{originType}," +
-            "originTypeStr=#{originTypeStr}, " +
-            "createStamp=#{createStamp}, " +
-            "aliveSecond=#{aliveSecond} " +
-            "WHERE app=#{app} AND stream=#{stream}")
-    int update(StreamPushItem streamPushItem);
-
-    @Delete("DELETE FROM stream_push WHERE app=#{app} AND stream=#{stream}")
-    int del(String app, String stream);
-
-    @Delete("<script> "+
-            "DELETE sp FROM stream_push sp left join gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream where " +
-            "<foreach collection='streamPushItems' item='item' separator='or'>" +
-            "(sp.app=#{item.app} and sp.stream=#{item.stream} and gs.gbId is null) " +
-            "</foreach>" +
-            "</script>")
-    int delAllWithoutGBId(List<StreamPushItem> streamPushItems);
-
-    @Delete("<script> "+
-            "DELETE FROM stream_push where " +
-            "<foreach collection='streamPushItems' item='item' separator='or'>" +
-            "(app=#{item.app} and stream=#{item.stream}) " +
-            "</foreach>" +
-            "</script>")
-    int delAll(List<StreamPushItem> streamPushItems);
-
-    @Delete("<script> "+
-            "DELETE FROM stream_push where " +
-            "<foreach collection='gbStreams' item='item' separator='or'>" +
-            "(app=#{item.app} and stream=#{item.stream}) " +
-            "</foreach>" +
-            "</script>")
-    int delAllForGbStream(List<GbStream> gbStreams);
-
-
-    @Select(value = {" <script>" +
-            "SELECT " +
-            "st.*, " +
-            "gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude, gs.gbStreamId " +
-            "from " +
-            "stream_push st " +
-            "LEFT JOIN gb_stream gs " +
-            "on st.app = gs.app AND st.stream = gs.stream " +
-            "WHERE " +
-            "1=1 " +
-            " <if test='query != null'> AND (st.app LIKE '%${query}%' OR st.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " +
-            " <if test='pushing == true' > AND (gs.gbId is null OR gs.status=1)</if>" +
-            " <if test='pushing == false' > AND gs.status=0</if>" +
-            " <if test='mediaServerId != null' > AND st.mediaServerId=#{mediaServerId} </if>" +
-            "order by st.createStamp desc" +
-            " </script>"})
-    List<StreamPushItem> selectAllForList(String query, Boolean pushing, String mediaServerId);
-
-    @Select("SELECT st.*, gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN gb_stream gs on st.app = gs.app AND st.stream = gs.stream order by st.createStamp desc")
-    List<StreamPushItem> selectAll();
-
-    @Select("SELECT st.*, gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN gb_stream gs on st.app = gs.app AND st.stream = gs.stream WHERE st.app=#{app} AND st.stream=#{stream}")
-    StreamPushItem selectOne(String app, String stream);
-
-    @Insert("<script>"  +
-            "Insert IGNORE INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
-            "createStamp, aliveSecond, mediaServerId) " +
-            "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
-            "( '${item.app}', '${item.stream}', '${item.totalReaderCount}', #{item.originType}, " +
-            "'${item.originTypeStr}',#{item.createStamp}, #{item.aliveSecond}, '${item.mediaServerId}' )" +
-            " </foreach>" +
-            "</script>")
-    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
-    int addAll(List<StreamPushItem> streamPushItems);
-
-    @Delete("DELETE FROM stream_push")
-    void clear();
-
-    @Delete("DELETE sp FROM stream_push sp left join gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.mediaServerId=#{mediaServerId} and gs.gbId is null ")
-    void deleteWithoutGBId(String mediaServerId);
-
-    @Select("SELECT * FROM stream_push WHERE mediaServerId=#{mediaServerId}")
-    List<StreamPushItem> selectAllByMediaServerId(String mediaServerId);
-
-    @Select("SELECT sp.* FROM stream_push sp left join gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.mediaServerId=#{mediaServerId} and gs.gbId is null")
-    List<StreamPushItem> selectAllByMediaServerIdWithOutGbID(String mediaServerId);
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java
deleted file mode 100644
index addb27d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao;
-
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.apache.ibatis.annotations.*;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Mapper
-@Repository
-public interface UserMapper {
-
-    @Insert("INSERT INTO user (username, password, roleId, createTime, updateTime) VALUES" +
-            "('${username}', '${password}', '${role.id}', '${createTime}', '${updateTime}')")
-    int add(User user);
-
-    @Update(value = {" <script>" +
-            "UPDATE user " +
-            "SET updateTime='${updateTime}' " +
-            "<if test=\"role != null\">, roleId='${role.id}'</if>" +
-            "<if test=\"password != null\">, password='${password}'</if>" +
-            "<if test=\"username != null\">, username='${username}'</if>" +
-            "WHERE id=#{id}" +
-            " </script>"})
-    int update(User user);
-
-    @Delete("DELETE FROM user WHERE id != 1 and id=#{id}")
-    int delete(int id);
-
-    @Select("select u.*, r.id as roleID, r.name as roleName, r.authority as roleAuthority , r.createTime as roleCreateTime , r.updateTime as roleUpdateTime FROM user u, user_role r WHERE u.roleId=r.id and u.username=#{username} AND u.password=#{password}")
-    @Results(id = "roleMap", value = {
-            @Result(column = "roleID", property = "role.id"),
-            @Result(column = "roleName", property = "role.name"),
-            @Result(column = "roleAuthority", property = "role.authority"),
-            @Result(column = "roleCreateTime", property = "role.createTime"),
-            @Result(column = "roleUpdateTime", property = "role.updateTime")
-    })
-    User select(String username, String password);
-
-    @Select("select u.*, r.id as roleID, r.name as roleName, r.authority as roleAuthority , r.createTime as roleCreateTime , r.updateTime as roleUpdateTime FROM user u, user_role r WHERE u.roleId=r.id and u.id=#{id}")
-    @ResultMap(value="roleMap")
-    User selectById(int id);
-
-    @Select("select u.*, r.id as roleID, r.name as roleName, r.authority as roleAuthority , r.createTime as roleCreateTime , r.updateTime as roleUpdateTime FROM user u, user_role r WHERE u.roleId=r.id and u.username=#{username}")
-    @ResultMap(value="roleMap")
-    User getUserByUsername(String username);
-
-    @Select("select u.*, r.id as roleID, r.name as roleName, r.authority as roleAuthority , r.createTime as roleCreateTime , r.updateTime as roleUpdateTime FROM user u, user_role r WHERE u.roleId=r.id")
-    @ResultMap(value="roleMap")
-    List<User> selectAll();
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java
deleted file mode 100644
index e8b91e7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao.dto;
-
-public class ChannelSourceInfo {
-    private String name;
-    private int count;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getCount() {
-        return count;
-    }
-
-    public void setCount(int count) {
-        this.count = count;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/LogDto.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/LogDto.java
deleted file mode 100644
index cfe29f5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/LogDto.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao.dto;
-
-public class LogDto {
-
-    private int id;
-    private String name;
-    private String type;
-    private String uri;
-    private String address;
-    private String result;
-    private long timing;
-    private String username;
-    private String createTime;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getUri() {
-        return uri;
-    }
-
-    public void setUri(String uri) {
-        this.uri = uri;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public String getResult() {
-        return result;
-    }
-
-    public void setResult(String result) {
-        this.result = result;
-    }
-
-    public long getTiming() {
-        return timing;
-    }
-
-    public void setTiming(long timing) {
-        this.timing = timing;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/RecordInfo.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/RecordInfo.java
deleted file mode 100644
index 278e3e4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/RecordInfo.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao.dto;
-
-/**
- * 录像记录
- */
-public class RecordInfo {
-
-    /**
-     * ID
-     */
-    private int id;
-
-    /**
-     * 应用名
-     */
-    private String app;
-
-    /**
-     * 流ID
-     */
-    private String stream;
-
-    /**
-     * 对应的zlm流媒体的ID
-     */
-    private String mediaServerId;
-
-    /**
-     * 创建时间
-     */
-    private String createTime;
-
-    /**
-     * 类型 对应zlm的 originType
-     * unknown = 0,
-     * rtmp_push=1,
-     * rtsp_push=2,
-     * rtp_push=3,
-     * pull=4,
-     * ffmpeg_pull=5,
-     * mp4_vod=6,
-     * device_chn=7,
-     * rtc_push=8
-     */
-    private int type;
-
-    /**
-     * 国标录像时的设备ID
-     */
-    private String deviceId;
-
-    /**
-     * 国标录像时的通道ID
-     */
-    private String channelId;
-
-    /**
-     * 拉流代理录像时的名称
-     */
-    private String name;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getMediaServerId() {
-        return mediaServerId;
-    }
-
-    public void setMediaServerId(String mediaServerId) {
-        this.mediaServerId = mediaServerId;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public int getType() {
-        return type;
-    }
-
-    public void setType(int type) {
-        this.type = type;
-    }
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java
deleted file mode 100644
index 44631f8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao.dto;
-
-public class Role {
-
-    private int id;
-    private String name;
-    private String authority;
-    private String createTime;
-    private String updateTime;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getAuthority() {
-        return authority;
-    }
-
-    public void setAuthority(String authority) {
-        this.authority = authority;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(String updateTime) {
-        this.updateTime = updateTime;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java
deleted file mode 100644
index 950a8ca..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.genersoft.iot.vmp.storager.dao.dto;
-
-public class User {
-
-    private int id;
-    private String username;
-    private String password;
-    private String createTime;
-    private String updateTime;
-    private Role role;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(String updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Role getRole() {
-        return role;
-    }
-
-    public void setRole(Role role) {
-        this.role = role;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
deleted file mode 100644
index 6ad654e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ /dev/null
@@ -1,595 +0,0 @@
-package com.genersoft.iot.vmp.storager.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.common.SystemInfoDto;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.parameters.P;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-@SuppressWarnings("rawtypes")
-@Component
-public class RedisCatchStorageImpl implements IRedisCatchStorage {
-
-    private Logger logger = LoggerFactory.getLogger(RedisCatchStorageImpl.class);
-
-    @Autowired
-	private RedisUtil redis;
-
-    @Autowired
-    private DeviceChannelMapper deviceChannelMapper;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @Override
-    public Long getCSEQ(String method) {
-        String key = VideoManagerConstants.SIP_CSEQ_PREFIX  + userSetup.getServerId() + "_" +  method;
-
-        long result =  redis.incr(key, 1L);
-        if (result > Integer.MAX_VALUE) {
-            redis.set(key, 1);
-            result = 1;
-        }
-        return result;
-    }
-
-    @Override
-    public Long getSN(String method) {
-        String key = VideoManagerConstants.SIP_SN_PREFIX  + userSetup.getServerId() + "_" +  method;
-
-        long result =  redis.incr(key, 1L);
-        if (result > Integer.MAX_VALUE) {
-            redis.set(key, 1);
-            result = 1;
-        }
-        return result;
-    }
-
-    @Override
-    public void resetAllCSEQ() {
-        String scanKey = VideoManagerConstants.SIP_CSEQ_PREFIX  + userSetup.getServerId() + "_*";
-        List<Object> keys = redis.scan(scanKey);
-        for (int i = 0; i < keys.size(); i++) {
-            String key = (String) keys.get(i);
-            redis.set(key, 1);
-        }
-    }
-
-    @Override
-    public void resetAllSN() {
-        String scanKey = VideoManagerConstants.SIP_SN_PREFIX  + userSetup.getServerId() + "_*";
-        List<Object> keys = redis.scan(scanKey);
-        for (int i = 0; i < keys.size(); i++) {
-            String key = (String) keys.get(i);
-            redis.set(key, 1);
-        }
-    }
-
-    /**
-     * 开始播放时将流存入redis
-     *
-     * @return
-     */
-    @Override
-    public boolean startPlay(StreamInfo stream) {
-        return redis.set(String.format("%S_%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(),
-                        stream.getStream(), stream.getDeviceID(), stream.getChannelId()),
-                stream);
-    }
-
-    /**
-     * 停止播放时从redis删除
-     *
-     * @return
-     */
-    @Override
-    public boolean stopPlay(StreamInfo streamInfo) {
-        if (streamInfo == null) return false;
-        return redis.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
-                userSetup.getServerId(),
-                streamInfo.getStream(),
-                streamInfo.getDeviceID(),
-                streamInfo.getChannelId()));
-    }
-
-    /**
-     * 查询播放列表
-     * @return
-     */
-    @Override
-    public StreamInfo queryPlay(StreamInfo streamInfo) {
-        return (StreamInfo)redis.get(String.format("%S_%s_%s_%s_%s",
-                VideoManagerConstants.PLAYER_PREFIX,
-                userSetup.getServerId(),
-                streamInfo.getStream(),
-                streamInfo.getDeviceID(),
-                streamInfo.getChannelId()));
-    }
-    @Override
-    public StreamInfo queryPlayByStreamId(String streamId) {
-        List<Object> playLeys = redis.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(), streamId));
-        if (playLeys == null || playLeys.size() == 0) return null;
-        return (StreamInfo)redis.get(playLeys.get(0).toString());
-    }
-
-    @Override
-    public StreamInfo queryPlayByDevice(String deviceId, String channelId) {
-        List<Object> playLeys = redis.scan(String.format("%S_%s_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
-                userSetup.getServerId(),
-                deviceId,
-                channelId));
-        if (playLeys == null || playLeys.size() == 0) return null;
-        return (StreamInfo)redis.get(playLeys.get(0).toString());
-    }
-
-    @Override
-    public Map<String, StreamInfo> queryPlayByDeviceId(String deviceId) {
-        Map<String, StreamInfo> streamInfos = new HashMap<>();
-//		List<Object> playLeys = redis.keys(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId));
-        List<Object> players = redis.scan(String.format("%S_%s_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(),deviceId));
-        if (players.size() == 0) return streamInfos;
-        for (int i = 0; i < players.size(); i++) {
-            String key = (String) players.get(i);
-            StreamInfo streamInfo = (StreamInfo)redis.get(key);
-            streamInfos.put(streamInfo.getDeviceID() + "_" + streamInfo.getChannelId(), streamInfo);
-        }
-        return streamInfos;
-    }
-
-
-    @Override
-    public boolean startPlayback(StreamInfo stream, String callId) {
-        return redis.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
-                userSetup.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream);
-    }
-
-    @Override
-    public boolean startDownload(StreamInfo stream, String callId) {
-        return redis.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX,
-                userSetup.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream);
-    }
-
-    @Override
-    public boolean stopPlayback(String deviceId, String channelId, String stream, String callId) {
-        DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
-        if (deviceChannel != null) {
-            deviceChannel.setStreamId(null);
-            deviceChannel.setDeviceId(deviceId);
-            deviceChannelMapper.update(deviceChannel);
-        }
-        if (deviceId == null) deviceId = "*";
-        if (channelId == null) channelId = "*";
-        if (stream == null) stream = "*";
-        if (callId == null) callId = "*";
-        String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
-                userSetup.getServerId(),
-                deviceId,
-                channelId,
-                stream,
-                callId
-        );
-        List<Object> scan = redis.scan(key);
-        if (scan.size() > 0) {
-            for (Object keyObj : scan) {
-                redis.del((String) keyObj);
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public StreamInfo queryPlayback(String deviceId, String channelId, String stream, String callId) {
-        if (stream == null && callId == null) {
-            return null;
-        }
-        if (deviceId == null) deviceId = "*";
-        if (channelId == null) channelId = "*";
-        if (stream == null) stream = "*";
-        if (callId == null) callId = "*";
-        String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
-                userSetup.getServerId(),
-                deviceId,
-                channelId,
-                stream,
-                callId
-        );
-        List<Object> streamInfoScan = redis.scan(key);
-        if (streamInfoScan.size() > 0) {
-            return (StreamInfo) redis.get((String) streamInfoScan.get(0));
-        }else {
-            return null;
-        }
-    }
-
-    @Override
-    public void updatePlatformCatchInfo(ParentPlatformCatch parentPlatformCatch) {
-        String key = VideoManagerConstants.PLATFORM_CATCH_PREFIX  + userSetup.getServerId() + "_" +  parentPlatformCatch.getId();
-        redis.set(key, parentPlatformCatch);
-    }
-
-    @Override
-    public void updatePlatformKeepalive(ParentPlatform parentPlatform) {
-        String key = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX  + userSetup.getServerId() + "_" + parentPlatform.getServerGBId();
-        redis.set(key, "", Integer.parseInt(parentPlatform.getKeepTimeout()));
-    }
-
-    @Override
-    public void updatePlatformRegister(ParentPlatform parentPlatform) {
-        String key = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_" + parentPlatform.getServerGBId();
-        redis.set(key, "", Integer.parseInt(parentPlatform.getExpires()));
-    }
-
-    @Override
-    public ParentPlatformCatch queryPlatformCatchInfo(String platformGbId) {
-        return (ParentPlatformCatch)redis.get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetup.getServerId() + "_" + platformGbId);
-    }
-
-    @Override
-    public void delPlatformCatchInfo(String platformGbId) {
-        redis.del(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetup.getServerId() + "_" + platformGbId);
-    }
-
-    @Override
-    public void delPlatformKeepalive(String platformGbId) {
-        redis.del(VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + platformGbId);
-    }
-
-    @Override
-    public void delPlatformRegister(String platformGbId) {
-        redis.del(VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_" + platformGbId);
-    }
-
-
-    @Override
-    public void updatePlatformRegisterInfo(String callId, String platformGbId) {
-        String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId;
-        redis.set(key, platformGbId, 30);
-    }
-
-
-    @Override
-    public String queryPlatformRegisterInfo(String callId) {
-        return (String)redis.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId);
-    }
-
-    @Override
-    public void delPlatformRegisterInfo(String callId) {
-        redis.del(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId);
-    }
-
-    @Override
-    public void cleanPlatformRegisterInfos() {
-        List regInfos = redis.scan(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + "*");
-        for (Object key : regInfos) {
-            redis.del(key.toString());
-        }
-    }
-
-    @Override
-    public void updateSendRTPSever(SendRtpItem sendRtpItem) {
-        String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_"
-                + sendRtpItem.getPlatformId() + "_" + sendRtpItem.getChannelId() + "_"
-                + sendRtpItem.getStreamId() + "_" + sendRtpItem.getCallId();
-        redis.set(key, sendRtpItem);
-    }
-
-    @Override
-    public SendRtpItem querySendRTPServer(String platformGbId, String channelId, String streamId, String callId) {
-        if (platformGbId == null) platformGbId = "*";
-        if (channelId == null) channelId = "*";
-        if (streamId == null) streamId = "*";
-        if (callId == null) callId = "*";
-        String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId
-                + "_" + channelId + "_" + streamId + "_" + callId;
-        List<Object> scan = redis.scan(key);
-        if (scan.size() > 0) {
-            return (SendRtpItem)redis.get((String)scan.get(0));
-        }else {
-            return null;
-        }
-    }
-
-    @Override
-    public List<SendRtpItem> querySendRTPServer(String platformGbId) {
-        if (platformGbId == null) platformGbId = "*";
-        String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId + "_*" + "_*" + "_*";
-        List<Object> queryResult = redis.scan(key);
-        List<SendRtpItem> result= new ArrayList<>();
-
-        for (int i = 0; i < queryResult.size(); i++) {
-            String keyItem = (String) queryResult.get(i);
-            result.add((SendRtpItem)redis.get(keyItem));
-        }
-
-        return result;
-    }
-
-    /**
-     * 删除RTP推送信息缓存
-     * @param platformGbId
-     * @param channelId
-     */
-    @Override
-    public void deleteSendRTPServer(String platformGbId, String channelId, String callId, String streamId) {
-        if (streamId == null) streamId = "*";
-        if (callId == null) callId = "*";
-        String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId
-                + "_" + channelId + "_" + streamId + "_" + callId;
-        List<Object> scan = redis.scan(key);
-        if (scan.size() > 0) {
-            for (Object keyStr : scan) {
-                redis.del((String)keyStr);
-            }
-        }
-    }
-
-
-
-    /**
-     * 查询某个通道是否存在上级点播(RTP推送)
-     * @param channelId
-     */
-    @Override
-    public boolean isChannelSendingRTP(String channelId) {
-        String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + "*_" + channelId + "*_" + "*_";
-        List<Object> RtpStreams = redis.scan(key);
-        if (RtpStreams.size() > 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public void clearCatchByDeviceId(String deviceId) {
-        List<Object> playLeys = redis.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX,
-                userSetup.getServerId(),
-                deviceId));
-        if (playLeys.size() > 0) {
-            for (Object key : playLeys) {
-                redis.del(key.toString());
-            }
-        }
-
-        List<Object> playBackers = redis.scan(String.format("%S_%s_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX,
-                userSetup.getServerId(),
-                deviceId));
-        if (playBackers.size() > 0) {
-            for (Object key : playBackers) {
-                redis.del(key.toString());
-            }
-        }
-
-        List<Object> deviceCache = redis.scan(String.format("%S%s_%s", VideoManagerConstants.DEVICE_PREFIX,
-                userSetup.getServerId(),
-                deviceId));
-        if (deviceCache.size() > 0) {
-            for (Object key : deviceCache) {
-                redis.del(key.toString());
-            }
-        }
-    }
-
-    @Override
-    public void outlineForAll() {
-        List<Object> onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + "*" );
-        for (int i = 0; i < onlineDevices.size(); i++) {
-            String key = (String) onlineDevices.get(i);
-            redis.del(key);
-        }
-    }
-
-    @Override
-    public List<String> getOnlineForAll() {
-        List<String> result = new ArrayList<>();
-        List<Object> onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_"  + "*" );
-        for (int i = 0; i < onlineDevices.size(); i++) {
-            String key = (String) onlineDevices.get(i);
-            result.add((String) redis.get(key));
-        }
-        return result;
-    }
-
-    @Override
-    public void updateWVPInfo(JSONObject jsonObject, int time) {
-        String key = VideoManagerConstants.WVP_SERVER_PREFIX + userSetup.getServerId();
-        redis.set(key, jsonObject, time);
-    }
-
-    @Override
-    public void sendStreamChangeMsg(String type, JSONObject jsonObject) {
-        String key = VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + type;
-        logger.debug("[redis 流变化事件] {}: {}", key, jsonObject.toString());
-        redis.convertAndSend(key, jsonObject);
-    }
-
-    @Override
-    public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, MediaItem mediaItem) {
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX  + userSetup.getServerId() + "_" + type + "_" + app + "_" + streamId + "_" + mediaServerItem.getId();
-        redis.set(key, mediaItem);
-    }
-
-    @Override
-    public void removeStream(String mediaServerId, String type, String app, String streamId) {
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_"  + app + "_" + streamId + "_" + mediaServerId;
-        redis.del(key);
-    }
-
-    @Override
-    public StreamInfo queryDownload(String deviceId, String channelId, String stream, String callId) {
-        if (stream == null && callId == null) {
-            return null;
-        }
-        if (deviceId == null) deviceId = "*";
-        if (channelId == null) channelId = "*";
-        if (stream == null) stream = "*";
-        if (callId == null) callId = "*";
-        String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX,
-                userSetup.getServerId(),
-                deviceId,
-                channelId,
-                stream,
-                callId
-        );
-        List<Object> streamInfoScan = redis.scan(key);
-        if (streamInfoScan.size() > 0) {
-            return (StreamInfo) redis.get((String) streamInfoScan.get(0));
-        }else {
-            return null;
-        }
-    }
-
-    @Override
-    public ThirdPartyGB queryMemberNoGBId(String queryKey) {
-        String key = VideoManagerConstants.WVP_STREAM_GB_ID_PREFIX + queryKey;
-        JSONObject jsonObject = (JSONObject)redis.get(key);
-        return  JSONObject.toJavaObject(jsonObject, ThirdPartyGB.class);
-    }
-
-    @Override
-    public void removeStream(String mediaServerId, String type) {
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_*_*_" + mediaServerId;
-        List<Object> streams = redis.scan(key);
-        for (Object stream : streams) {
-            redis.del((String) stream);
-        }
-    }
-
-    @Override
-    public List<MediaItem> getStreams(String mediaServerId, String type) {
-        List<MediaItem> result = new ArrayList<>();
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetup.getServerId() + "_" + type + "_*_*_" + mediaServerId;
-        List<Object> streams = redis.scan(key);
-        for (Object stream : streams) {
-            MediaItem mediaItem = (MediaItem)redis.get((String) stream);
-            result.add(mediaItem);
-        }
-        return result;
-    }
-
-    @Override
-    public void updateDevice(Device device) {
-        String key = VideoManagerConstants.DEVICE_PREFIX + userSetup.getServerId() + "_" + device.getDeviceId();
-        redis.set(key, device);
-    }
-
-    @Override
-    public void removeDevice(String deviceId) {
-        String key = VideoManagerConstants.DEVICE_PREFIX + userSetup.getServerId() + "_" + deviceId;
-        redis.del(key);
-    }
-
-    @Override
-    public Device getDevice(String deviceId) {
-        String key = VideoManagerConstants.DEVICE_PREFIX + userSetup.getServerId() + "_" + deviceId;
-        return (Device)redis.get(key);
-    }
-
-    @Override
-    public void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo) {
-        String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetup.getServerId() + "_" + gpsMsgInfo.getId();
-        redis.set(key, gpsMsgInfo, 60); // 默认GPS消息保存1分钟
-    }
-
-    @Override
-    public GPSMsgInfo getGpsMsgInfo(String gbId) {
-        String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetup.getServerId() + "_" + gbId;
-        return (GPSMsgInfo)redis.get(key);
-    }
-
-    @Override
-    public List<GPSMsgInfo> getAllGpsMsgInfo() {
-        String scanKey = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetup.getServerId() + "_*";
-        List<GPSMsgInfo> result = new ArrayList<>();
-        List<Object> keys = redis.scan(scanKey);
-        for (int i = 0; i < keys.size(); i++) {
-            String key = (String) keys.get(i);
-            GPSMsgInfo gpsMsgInfo = (GPSMsgInfo) redis.get(key);
-            if (!gpsMsgInfo.isStored()) { // 只取没有存过得
-                result.add((GPSMsgInfo)redis.get(key));
-            }
-        }
-
-        return result;
-    }
-
-    @Override
-    public MediaItem getStreamInfo(String app, String streamId, String mediaServerId) {
-        String scanKey = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX  + userSetup.getServerId() + "_*_" + app + "_" + streamId + "_" + mediaServerId;
-
-        MediaItem result = null;
-        List<Object> keys = redis.scan(scanKey);
-        if (keys.size() > 0) {
-            String key = (String) keys.get(0);
-            result = (MediaItem)redis.get(key);
-        }
-
-        return result;
-    }
-
-    @Override
-    public void addCpuInfo(double cpuInfo) {
-        String key = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetup.getServerId();
-        SystemInfoDto<Double> systemInfoDto = new SystemInfoDto<>();
-        systemInfoDto.setTime(format.format(System.currentTimeMillis()));
-        systemInfoDto.setData(cpuInfo);
-        redis.lSet(key, systemInfoDto);
-        // 每秒一个,最多只存30个
-        if (redis.lGetListSize(key) > 30) {
-            for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
-                redis.lLeftPop(key);
-            }
-        }
-    }
-
-    @Override
-    public void addMemInfo(double memInfo) {
-        String key = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetup.getServerId();
-        SystemInfoDto<Double> systemInfoDto = new SystemInfoDto<>();
-        systemInfoDto.setTime(format.format(System.currentTimeMillis()));
-        systemInfoDto.setData(memInfo);
-        redis.lSet(key, systemInfoDto);
-        // 每秒一个,最多只存30个
-        if (redis.lGetListSize(key) > 30) {
-            for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
-                redis.lLeftPop(key);
-            }
-        }
-    }
-
-    @Override
-    public void addNetInfo(Map<String, String> networkInterfaces) {
-        String key = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetup.getServerId();
-        SystemInfoDto<Map<String, String>> systemInfoDto = new SystemInfoDto<>();
-        systemInfoDto.setTime(format.format(System.currentTimeMillis()));
-        systemInfoDto.setData(networkInterfaces);
-        redis.lSet(key, systemInfoDto);
-        // 每秒一个,最多只存30个
-        if (redis.lGetListSize(key) > 30) {
-            for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
-                redis.lLeftPop(key);
-            }
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
deleted file mode 100644
index 901353b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ /dev/null
@@ -1,1192 +0,0 @@
-package com.genersoft.iot.vmp.storager.impl;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.policeBodyCamera.entity.DeviceChannelPoliceCamera;
-import com.genersoft.iot.vmp.policeBodyCamera.mapper.DeviceChannelPoliceCameraMapper;
-import com.genersoft.iot.vmp.policeBodyCamera.service.DeviceChannelPoliceCameraService;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.storager.dao.*;
-import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
-import com.genersoft.iot.vmp.utils.node.ForestNodeMerger;
-import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
-
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-/**
- * 视频设备数据存储-jdbc实现
- * swwheihei
- * 2020年5月6日 下午2:31:42
- */
-@SuppressWarnings("rawtypes")
-@Component
-public class VideoManagerStoragerImpl implements IVideoManagerStorager {
-
-	private final Logger logger = LoggerFactory.getLogger(VideoManagerStoragerImpl.class);
-
-	@Autowired
-	EventPublisher eventPublisher;
-
-	@Autowired
-	SipConfig sipConfig;
-
-	@Autowired
-	DataSourceTransactionManager dataSourceTransactionManager;
-
-	@Autowired
-	TransactionDefinition transactionDefinition;
-
-	@Autowired
-    private DeviceMapper deviceMapper;
-
-	@Autowired
-	private DeviceChannelMapper deviceChannelMapper;
-
-	@Autowired
-	private DeviceMobilePositionMapper deviceMobilePositionMapper;
-
-	@Autowired
-    private ParentPlatformMapper platformMapper;
-
-	@Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-    private PlatformChannelMapper platformChannelMapper;
-
-	@Autowired
-    private StreamProxyMapper streamProxyMapper;
-
-	@Autowired
-    private StreamPushMapper streamPushMapper;
-
-	@Autowired
-    private GbStreamMapper gbStreamMapper;
-
-	@Autowired
-    private PlatformCatalogMapper catalogMapper;
-;
-
-	@Autowired
-    private PlatformGbStreamMapper platformGbStreamMapper;
-
-	@Autowired
-    private IGbStreamService gbStreamService;
-
-	@Autowired
-    private ParentPlatformMapper parentPlatformMapper;
-
-	@Autowired
-    private VideoStreamSessionManager streamSession;
-
-	@Autowired
-    private MediaServerMapper mediaServerMapper;
-
-	@Autowired
-	private DeviceChannelPoliceCameraService deviceChannelPoliceCameraService;
-
-	@Autowired
-	private DeviceChannelPoliceCameraMapper deviceChannelPoliceCameraMapper;
-
-	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-
-	/**
-	 * 根据设备ID判断设备是否存在
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:存在  false:不存在
-	 */
-	@Override
-	public boolean exists(String deviceId) {
-		return deviceMapper.getDeviceByDeviceId(deviceId) != null;
-	}
-
-	/**
-	 * 视频设备创建
-	 *
-	 * @param device 设备对象
-	 * @return true:创建成功  false:创建失败
-	 */
-	@Override
-	public synchronized boolean create(Device device) {
-		redisCatchStorage.updateDevice(device);
-		return deviceMapper.add(device) > 0;
-	}
-
-
-
-	/**
-	 * 视频设备更新
-	 *
-	 * @param device 设备对象
-	 * @return true:更新成功  false:更新失败
-	 */
-	@Override
-	public synchronized boolean updateDevice(Device device) {
-		String now = this.format.format(System.currentTimeMillis());
-		device.setUpdateTime(now);
-		Device deviceByDeviceId = deviceMapper.getDeviceByDeviceId(device.getDeviceId());
-		device.setCharset(device.getCharset().toUpperCase());
-		if (deviceByDeviceId == null) {
-			device.setCreateTime(now);
-			redisCatchStorage.updateDevice(device);
-			return deviceMapper.add(device) > 0;
-		}else {
-			redisCatchStorage.updateDevice(device);
-
-			return deviceMapper.update(device) > 0;
-		}
-
-
-	}
-
-	@Override
-	public synchronized void updateChannel(String deviceId, DeviceChannel channel) {
-		String channelId = channel.getChannelId();
-		channel.setDeviceId(deviceId);
-		//更新通道数据
-		StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
-		if (streamInfo != null) {
-			channel.setStreamId(streamInfo.getStream());
-		}
-		String now = this.format.format(System.currentTimeMillis());
-		channel.setUpdateTime(now);
-		DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
-		if (deviceChannel == null) {
-			channel.setCreateTime(now);
-			deviceChannelMapper.add(channel);
-		}else {
-			deviceChannelMapper.update(channel);
-		}
-		deviceChannelMapper.updateChannelSubCount(deviceId,channel.getParentId());
-		System.out.println("设备名称 = " + channel.getName());
-		//如果是是执法记录仪
-//		if (null!=channel.getName() && channel.getName().contains("执法记录仪")){
-//			//更新执法记录仪信息
-//			deviceChannelPoliceCameraService.updateChannelPoliceCamera(channel);
-//		}
-	}
-
-	@Override
-	public int updateChannels(String deviceId, List<DeviceChannel> channels) {
-		List<DeviceChannel> addChannels = new ArrayList<>();
-		List<DeviceChannel> updateChannels = new ArrayList<>();
-		HashMap<String, DeviceChannel> channelsInStore = new HashMap<>();
-		if (channels != null && channels.size() > 0) {
-			List<DeviceChannel> channelList = deviceChannelMapper.queryChannels(deviceId, null, null, null, null);
-			if (channelList.size() == 0) {
-				for (DeviceChannel channel : channels) {
-					channel.setDeviceId(deviceId);
-					StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
-					if (streamInfo != null) {
-						channel.setStreamId(streamInfo.getStream());
-					}
-					String now = this.format.format(System.currentTimeMillis());
-					channel.setUpdateTime(now);
-					channel.setCreateTime(now);
-					addChannels.add(channel);
-				}
-			}else {
-				for (DeviceChannel deviceChannel : channelList) {
-					channelsInStore.put(deviceChannel.getChannelId(), deviceChannel);
-				}
-				for (DeviceChannel channel : channels) {
-					channel.setDeviceId(deviceId);
-					StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
-					if (streamInfo != null) {
-						channel.setStreamId(streamInfo.getStream());
-					}
-					String now = this.format.format(System.currentTimeMillis());
-					channel.setUpdateTime(now);
-					if (channelsInStore.get(channel.getChannelId()) != null) {
-						updateChannels.add(channel);
-					}else {
-						addChannels.add(channel);
-						channel.setCreateTime(now);
-					}
-				}
-			}
-			int limitCount = 300;
-			if (addChannels.size() > 0) {
-				if (addChannels.size() > limitCount) {
-					for (int i = 0; i < addChannels.size(); i += limitCount) {
-						int toIndex = i + limitCount;
-						if (i + limitCount > addChannels.size()) {
-							toIndex = addChannels.size();
-						}
-						deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex));
-						//执法记录仪数据新增
-//						System.out.println("执法记录仪批量新增 ================= ");
-//						deviceChannelPoliceCameraMapper.batchAdd(addChannels.subList(i, toIndex));
-					}
-				}else {
-					deviceChannelMapper.batchAdd(addChannels);
-					//执法记录仪数据新增
-//					System.out.println("执法记录仪批量新增 ================= ");
-//					deviceChannelPoliceCameraMapper.batchAdd(addChannels);
-				}
-			}
-			if (updateChannels.size() > 0) {
-				if (updateChannels.size() > limitCount) {
-					for (int i = 0; i < updateChannels.size(); i += limitCount) {
-						int toIndex = i + limitCount;
-						if (i + limitCount > updateChannels.size()) {
-							toIndex = updateChannels.size();
-						}
-						deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex));
-						//执法记录仪数据修改
-//						System.out.println("执法记录仪批量修改 ================= ");
-//						deviceChannelPoliceCameraMapper.batchUpdate(updateChannels.subList(i, toIndex));
-					}
-				}else {
-					deviceChannelMapper.batchUpdate(updateChannels);
-					//执法记录仪数据修改
-//					System.out.println("执法记录仪批量修改 ================= ");
-//					deviceChannelPoliceCameraMapper.batchUpdate(updateChannels);
-				}
-			}
-		}
-		return addChannels.size() + updateChannels.size();
-	}
-
-	@Override
-	public boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList) {
-		TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-		// 数据去重
-		List<DeviceChannel> channels = new ArrayList<>();
-		StringBuilder stringBuilder = new StringBuilder();
-		Map<String, Integer> subContMap = new HashMap<>();
-		if (deviceChannelList.size() > 1) {
-			// 数据去重
-			Set<String> gbIdSet = new HashSet<>();
-			for (DeviceChannel deviceChannel : deviceChannelList) {
-				if (!gbIdSet.contains(deviceChannel.getChannelId())) {
-					gbIdSet.add(deviceChannel.getChannelId());
-					channels.add(deviceChannel);
-					if (!StringUtils.isEmpty(deviceChannel.getParentId())) {
-						if (subContMap.get(deviceChannel.getParentId()) == null) {
-							subContMap.put(deviceChannel.getParentId(), 1);
-						}else {
-							Integer count = subContMap.get(deviceChannel.getParentId());
-							subContMap.put(deviceChannel.getParentId(), count++);
-						}
-					}
-				}else {
-					stringBuilder.append(deviceChannel.getChannelId() + ",");
-				}
-			}
-			if (channels.size() > 0) {
-				for (DeviceChannel channel : channels) {
-					if (subContMap.get(channel.getChannelId()) != null){
-						channel.setSubCount(subContMap.get(channel.getChannelId()));
-					}
-				}
-			}
-
-		}else {
-			channels = deviceChannelList;
-		}
-		if (stringBuilder.length() > 0) {
-			logger.debug("[目录查询]收到的数据存在重复: {}" , stringBuilder);
-		}
-		try {
-//			int cleanChannelsResult = deviceChannelMapper.cleanChannelsByDeviceId(deviceId);
-			int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels);
-			int limitCount = 300;
-			boolean result = cleanChannelsResult < 0;
-			if (!result && channels.size() > 0) {
-				if (channels.size() > limitCount) {
-					for (int i = 0; i < channels.size(); i += limitCount) {
-						int toIndex = i + limitCount;
-						if (i + limitCount > channels.size()) {
-							toIndex = channels.size();
-						}
-						//设置创建时间,更新时间
-						for (DeviceChannel channel : channels) {
-							channel.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
-							channel.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
-						}
-//						System.out.println("==============设备开始更新============ ");
-						result = result || deviceChannelMapper.batchAdd(channels.subList(i, toIndex)) < 0;
-					}
-				}else {
-					//设置创建时间,更新时间
-					for (DeviceChannel channel : channels) {
-						channel.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
-						channel.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
-					}
-//					System.out.println("==============设备开始更新============ ");
-					result = result || deviceChannelMapper.batchAdd(channels) < 0;
-				}
-			}
-			if (result) {
-				//事务回滚
-				dataSourceTransactionManager.rollback(transactionStatus);
-			}
-			dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-			return true;
-		}catch (Exception e) {
-			dataSourceTransactionManager.rollback(transactionStatus);
-			return false;
-		}
-
-	}
-
-	@Override
-	public void deviceChannelOnline(String deviceId, String channelId) {
-		deviceChannelMapper.online(deviceId, channelId);
-	}
-
-	@Override
-	public void deviceChannelOffline(String deviceId, String channelId) {
-		deviceChannelMapper.offline(deviceId, channelId);
-	}
-
-	@Override
-	public void startPlay(String deviceId, String channelId, String streamId) {
-		deviceChannelMapper.startPlay(deviceId, channelId, streamId);
-	}
-
-	@Override
-	public void stopPlay(String deviceId, String channelId) {
-		deviceChannelMapper.stopPlay(deviceId, channelId);
-	}
-
-	/**
-	 * 获取设备
-	 *
-	 * @param deviceId 设备ID
-	 * @return Device 设备对象
-	 */
-	@Override
-	public Device queryVideoDevice(String deviceId) {
-		return deviceMapper.getDeviceByDeviceId(deviceId);
-	}
-
-	@Override
-	public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, int page, int count) {
-		// 获取到所有正在播放的流
-		PageHelper.startPage(page, count);
-		List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online);
-		return new PageInfo<>(all);
-	}
-	@Override
-	public PageInfo queryChannelsCarByDeviceId(String deviceId, String query,String type, Boolean hasSubChannel, Boolean online, int page, int count) {
-		// 获取到所有正在播放的流
-		PageHelper.startPage(page, count);
-		List<DeviceChannel> all = deviceChannelMapper.queryChannelsCar(deviceId, null, query,type, hasSubChannel, online);
-		return new PageInfo<>(all);
-	}
-
-	@Override
-	public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit) {
-		return deviceChannelMapper.queryChannelsByDeviceIdWithStartAndLimit(deviceId, null, query, hasSubChannel, online, start, limit);
-	}
-
-	@Override
-	public List<DeviceChannelTree> tree(String deviceId) {
-		return ForestNodeMerger.merge(deviceChannelMapper.tree(deviceId));
-	}
-
-	@Override
-	public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) {
-		return deviceChannelMapper.queryChannels(deviceId, null,null, null, null);
-	}
-
-	@Override
-	public PageInfo<DeviceChannel> querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, String online, int page, int count) {
-		PageHelper.startPage(page, count);
-		List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, parentChannelId, null, null, null);
-		return new PageInfo<>(all);
-	}
-
-	@Override
-	public DeviceChannel queryChannel(String deviceId, String channelId) {
-		return deviceChannelMapper.queryChannel(deviceId, channelId);
-	}
-
-
-	@Override
-	public int delChannel(String deviceId, String channelId) {
-		//查询设备信息
-		DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
-//		if (deviceChannel.getName().contains("执法记录仪")){
-//			//同时删除执法记录仪信息
-//			deviceChannelPoliceCameraService.del(deviceId, channelId);
-//		}
-		return deviceChannelMapper.del(deviceId, channelId);
-	}
-
-	/**
-	 * 获取多个设备
-	 *
-	 * @param page 当前页数
-	 * @param count 每页数量
-	 * @return PageInfo<Device> 分页设备对象数组
-	 */
-	@Override
-	public PageInfo<Device> queryVideoDeviceList(int page, int count) {
-		PageHelper.startPage(page, count);
-		List<Device> all = deviceMapper.getDevices();
-		return new PageInfo<>(all);
-	}
-
-	/**
-	 * 获取多个设备
-	 *
-	 * @return List<Device> 设备对象数组
-	 */
-	@Override
-	public List<Device> queryVideoDeviceList() {
-
-		List<Device> deviceList =  deviceMapper.getDevices();
-		return deviceList;
-	}
-
-	/**
-	 * 删除设备
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:删除成功  false:删除失败
-	 */
-	@Override
-	public boolean delete(String deviceId) {
-		TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-		boolean result = false;
-		try {
-			if (platformChannelMapper.delChannelForDeviceId(deviceId) <0  // 删除与国标平台的关联
-					|| deviceChannelMapper.cleanChannelsByDeviceId(deviceId) < 0 // 删除他的通道
-					|| deviceMapper.del(deviceId) < 0 // 移除设备信息
-			) {
-				//事务回滚
-				dataSourceTransactionManager.rollback(transactionStatus);
-			}
-			result = true;
-			dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-		}catch (Exception e) {
-			dataSourceTransactionManager.rollback(transactionStatus);
-		}
-		return result;
-	}
-
-	/**
-	 * 更新设备在线
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:更新成功  false:更新失败
-	 */
-	@Override
-	public synchronized boolean online(String deviceId) {
-		Device device = deviceMapper.getDeviceByDeviceId(deviceId);
-		if (device == null) {
-			return false;
-		}
-		device.setOnline(1);
-		logger.info("更新设备在线: " + deviceId);
-		redisCatchStorage.updateDevice(device);
-		List<DeviceChannel> deviceChannelList = deviceChannelMapper.queryOnlineChannelsByDeviceId(deviceId);
-		eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
-		return deviceMapper.update(device) > 0;
-	}
-
-	/**
-	 * 更新设备离线
-	 *
-	 * @param deviceId 设备ID
-	 * @return true:更新成功  false:更新失败
-	 */
-	@Override
-	public synchronized boolean outline(String deviceId) {
-		logger.info("更新设备离线: " + deviceId);
-		Device device = deviceMapper.getDeviceByDeviceId(deviceId);
-		if (device == null) return false;
-		device.setOnline(0);
-		redisCatchStorage.updateDevice(device);
-		return deviceMapper.update(device) > 0;
-	}
-
-	/**
-	 * 更新所有设备离线
-	 *
-	 * @return true:更新成功  false:更新失败
-	 */
-	@Override
-	public synchronized boolean outlineForAll() {
-		logger.info("更新所有设备离线");
-		int result = deviceMapper.outlineForAll();
-		return result > 0;
-	}
-
-	/**
-	 * 清空通道
-	 * @param deviceId
-	 */
-	@Override
-	public void cleanChannelsForDevice(String deviceId) {
-		deviceChannelMapper.cleanChannelsByDeviceId(deviceId);
-	}
-
-	/**
-	 * 添加Mobile Position设备移动位置
-	 * @param mobilePosition
-	 */
-	@Override
-	public synchronized boolean insertMobilePosition(MobilePosition mobilePosition) {
-//		if (mobilePosition.getDeviceName().contains("执法记录仪")){
-//			deviceChannelPoliceCameraService.insertNewPositionPoliceCamera(mobilePosition);
-//		}
-		return deviceMobilePositionMapper.insertNewPosition(mobilePosition) > 0;
-	}
-
-	/**
-	 * 查询移动位置轨迹
-	 * @param deviceId
-	 * @param startTime
-	 * @param endTime
-	 */
-	@Override
-	public synchronized List<MobilePosition> queryMobilePositions(String deviceId, String startTime, String endTime) {
-		return deviceMobilePositionMapper.queryPositionByDeviceIdAndTime(deviceId, startTime, endTime);
-	}
-
-	@Override
-	public boolean addParentPlatform(ParentPlatform parentPlatform) {
-		if (parentPlatform.getCatalogId() == null) {
-			parentPlatform.setCatalogId(parentPlatform.getServerGBId());
-		}
-		int result = platformMapper.addParentPlatform(parentPlatform);
-		return result > 0;
-	}
-
-	@Override
-	public boolean updateParentPlatform(ParentPlatform parentPlatform) {
-		int result = 0;
-		ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); // .getDeviceGBId());
-		if (parentPlatform.getId() == null ) {
-			if (parentPlatform.getCatalogId() == null) {
-				parentPlatform.setCatalogId(parentPlatform.getServerGBId());
-			}
-			result = platformMapper.addParentPlatform(parentPlatform);
-			if (parentPlatformCatch == null) {
-				parentPlatformCatch = new ParentPlatformCatch();
-				parentPlatformCatch.setParentPlatform(parentPlatform);
-				parentPlatformCatch.setId(parentPlatform.getServerGBId());
-			}
-		}else {
-			if (parentPlatformCatch == null) { // serverGBId 已变化
-				ParentPlatform parentPlatById = platformMapper.getParentPlatById(parentPlatform.getId());
-				// 使用旧的查出缓存ID
-				parentPlatformCatch = new ParentPlatformCatch();
-				parentPlatformCatch.setId(parentPlatform.getServerGBId());
-				redisCatchStorage.delPlatformCatchInfo(parentPlatById.getServerGBId());
-			}
-			result = platformMapper.updateParentPlatform(parentPlatform);
-		}
-		// 更新缓存
-		parentPlatformCatch.setParentPlatform(parentPlatform);
-		redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
-		if (parentPlatform.isEnable()) {
-			// 共享所有视频流,需要将现有视频流添加到此平台
-			List<GbStream> gbStreams = gbStreamMapper.queryStreamNotInPlatform();
-			if (gbStreams.size() > 0) {
-				for (GbStream gbStream : gbStreams) {
-					gbStream.setCatalogId(parentPlatform.getCatalogId());
-				}
-				if (parentPlatform.isShareAllLiveStream()) {
-					gbStreamService.addPlatformInfo(gbStreams, parentPlatform.getServerGBId(), parentPlatform.getCatalogId());
-				}else {
-					gbStreamService.delPlatformInfo(parentPlatform.getServerGBId(), gbStreams);
-				}
-			}
-		}
-
-		return result > 0;
-	}
-
-	@Transactional
-	@Override
-	public boolean deleteParentPlatform(ParentPlatform parentPlatform) {
-		int result = platformMapper.delParentPlatform(parentPlatform);
-		// 删除关联的通道
-		platformChannelMapper.cleanChannelForGB(parentPlatform.getServerGBId());
-		return result > 0;
-	}
-
-	@Override
-	public PageInfo<ParentPlatform> queryParentPlatformList(int page, int count) {
-		PageHelper.startPage(page, count);
-		List<ParentPlatform> all = platformMapper.getParentPlatformList();
-		return new PageInfo<>(all);
-	}
-
-	@Override
-	public ParentPlatform queryParentPlatByServerGBId(String platformGbId) {
-		return platformMapper.getParentPlatByServerGBId(platformGbId);
-	}
-
-	@Override
-	public List<ParentPlatform> queryEnableParentPlatformList(boolean enable) {
-		return platformMapper.getEnableParentPlatformList(enable);
-	}
-
-	@Override
-	public void outlineForAllParentPlatform() {
-		platformMapper.outlineForAllParentPlatform();
-	}
-
-
-	@Override
-	public PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online,
-													   Boolean channelType, String platformId, String catalogId) {
-		PageHelper.startPage(page, count);
-		List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, catalogId);
-		return new PageInfo<>(all);
-	}
-
-	@Override
-	public List<ChannelReduce> queryChannelListInParentPlatform(String platformId) {
-
-		return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, platformId);
-	}
-
-	@Override
-	public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId) {
-
-		Map<Integer, ChannelReduce> deviceAndChannels = new HashMap<>();
-		for (ChannelReduce channelReduce : channelReduces) {
-			channelReduce.setCatalogId(catalogId);
-			deviceAndChannels.put(channelReduce.getId(), channelReduce);
-		}
-		List<Integer> deviceAndChannelList = new ArrayList<>(deviceAndChannels.keySet());
-		// 查询当前已经存在的
-		List<Integer> channelIds = platformChannelMapper.findChannelRelatedPlatform(platformId, channelReduces);
-		if (deviceAndChannelList != null) {
-			deviceAndChannelList.removeAll(channelIds);
-		}
-		for (Integer channelId : channelIds) {
-			deviceAndChannels.remove(channelId);
-		}
-		List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values());
-		// 对剩下的数据进行存储
-		int result = 0;
-		if (channelReducesToAdd.size() > 0) {
-			result = platformChannelMapper.addChannels(platformId, channelReducesToAdd);
-			// TODO 后续给平台增加控制开关以控制是否响应目录订阅
-			List<DeviceChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId);
-			eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
-		}
-
-		return result;
-	}
-
-
-	@Override
-	public int delChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
-
-		int result = platformChannelMapper.delChannelForGB(platformId, channelReduces);
-		List<DeviceChannel> deviceChannelList = new ArrayList<>();
-		for (ChannelReduce channelReduce : channelReduces) {
-			DeviceChannel deviceChannel = new DeviceChannel();
-			deviceChannel.setChannelId(channelReduce.getChannelId());
-			deviceChannelList.add(deviceChannel);
-		}
-		eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-		return result;
-	}
-
-	@Override
-	public DeviceChannel queryChannelInParentPlatform(String platformId, String channelId) {
-		List<DeviceChannel> channels = platformChannelMapper.queryChannelInParentPlatform(platformId, channelId);
-		if (channels.size() > 1) {
-			// 出现长度大于0的时候肯定是国标通道的ID重复了
-			logger.warn("国标ID存在重复:{}", channelId);
-		}
-		if (channels.size() == 0) {
-			return null;
-		}else {
-			return channels.get(0);
-		}
-	}
-
-	@Override
-	public List<PlatformCatalog> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId) {
-		List<PlatformCatalog> catalogs = platformChannelMapper.queryChannelInParentPlatformAndCatalog(platformId, catalogId);
-		return catalogs;
-	}
-
-	@Override
-	public List<PlatformCatalog> queryStreamInParentPlatformAndCatalog(String platformId, String catalogId) {
-		List<PlatformCatalog> catalogs = platformGbStreamMapper.queryChannelInParentPlatformAndCatalogForCatalog(platformId, catalogId);
-		return catalogs;
-	}
-
-	@Override
-	public Device queryVideoDeviceByPlatformIdAndChannelId(String platformId, String channelId) {
-		List<Device> devices = platformChannelMapper.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId);
-		if (devices.size() > 1) {
-			// 出现长度大于0的时候肯定是国标通道的ID重复了
-			logger.warn("国标ID存在重复:{}", channelId);
-		}
-		if (devices.size() == 0) {
-			return null;
-		}else {
-			return devices.get(0);
-		}
-
-
-	}
-
-	/**
-	 * 查询最新移动位置
-	 * @param deviceId
-	 */
-	@Override
-	public MobilePosition queryLatestPosition(String deviceId) {
-		return deviceMobilePositionMapper.queryLatestPositionByDevice(deviceId);
-	}
-
-	/**
-	 * 删除指定设备的所有移动位置
-	 * @param deviceId
-	 */
-	public int clearMobilePositionsByDeviceId(String deviceId) {
-		return deviceMobilePositionMapper.clearMobilePositionsByDeviceId(deviceId);
-	}
-
-	/**
-	 * 新增代理流
-	 * @param streamProxyItem
-	 * @return
-	 */
-	@Override
-	public boolean addStreamProxy(StreamProxyItem streamProxyItem) {
-		TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-		boolean result = false;
-		streamProxyItem.setStreamType("proxy");
-		streamProxyItem.setStatus(true);
-		String now = this.format.format(System.currentTimeMillis());
-		streamProxyItem.setCreateTime(now);
-		streamProxyItem.setCreateStamp(System.currentTimeMillis());
-		try {
-			if (streamProxyMapper.add(streamProxyItem) > 0) {
-				if (!StringUtils.isEmpty(streamProxyItem.getGbId())) {
-					if (gbStreamMapper.add(streamProxyItem) < 0) {
-						//事务回滚
-						dataSourceTransactionManager.rollback(transactionStatus);
-						return false;
-					}
-				}
-			}else {
-				//事务回滚
-				dataSourceTransactionManager.rollback(transactionStatus);
-				return false;
-			}
-			result = true;
-			dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-		}catch (Exception e) {
-			logger.error("向数据库添加流代理失败:", e);
-			dataSourceTransactionManager.rollback(transactionStatus);
-		}
-
-
-		return result;
-	}
-
-	/**
-	 * 更新代理流
-	 * @param streamProxyItem
-	 * @return
-	 */
-	@Override
-	public boolean updateStreamProxy(StreamProxyItem streamProxyItem) {
-		TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
-		boolean result = false;
-		streamProxyItem.setStreamType("proxy");
-		try {
-			if (streamProxyMapper.update(streamProxyItem) > 0) {
-				if (!StringUtils.isEmpty(streamProxyItem.getGbId())) {
-					if (gbStreamMapper.updateByAppAndStream(streamProxyItem) == 0) {
-						//事务回滚
-						dataSourceTransactionManager.rollback(transactionStatus);
-						return false;
-					}
-				}
-			} else {
-				//事务回滚
-				dataSourceTransactionManager.rollback(transactionStatus);
-				return false;
-			}
-
-			dataSourceTransactionManager.commit(transactionStatus);     //手动提交
-			result = true;
-		}catch (Exception e) {
-			e.printStackTrace();
-			dataSourceTransactionManager.rollback(transactionStatus);
-		}
-		return result;
-	}
-
-	/**
-	 * 移除代理流
-	 * @param app
-	 * @param stream
-	 * @return
-	 */
-	@Override
-	public int deleteStreamProxy(String app, String stream) {
-		return streamProxyMapper.del(app, stream);
-	}
-
-	/**
-	 * 根据是否启用获取代理流列表
-	 * @param enable
-	 * @return
-	 */
-	@Override
-	public List<StreamProxyItem> getStreamProxyListForEnable(boolean enable) {
-		return streamProxyMapper.selectForEnable(enable);
-	}
-
-	/**
-	 * 分页查询代理流列表
-	 * @param page
-	 * @param count
-	 * @return
-	 */
-	@Override
-	public PageInfo<StreamProxyItem> queryStreamProxyList(Integer page, Integer count) {
-		PageHelper.startPage(page, count);
-		List<StreamProxyItem> all = streamProxyMapper.selectAll();
-		return new PageInfo<>(all);
-	}
-
-	/**
-	 * 根据国标ID获取平台关联的直播流
-	 * @param platformId
-	 * @param gbId
-	 * @return
-	 */
-	@Override
-	public GbStream queryStreamInParentPlatform(String platformId, String gbId) {
-		return gbStreamMapper.queryStreamInPlatform(platformId, gbId);
-	}
-
-	/**
-	 * 获取平台关联的直播流
-	 * @param platformId
-	 * @return
-	 */
-	@Override
-	public List<GbStream> queryGbStreamListInPlatform(String platformId) {
-		return gbStreamMapper.queryGbStreamListInPlatform(platformId);
-	}
-
-	/**
-	 * 按照是app和stream获取代理流
-	 * @param app
-	 * @param stream
-	 * @return
-	 */
-	@Override
-	public StreamProxyItem queryStreamProxy(String app, String stream){
-		return streamProxyMapper.selectOne(app, stream);
-	}
-
-	@Override
-	public void updateMediaList(List<StreamPushItem> streamPushItems) {
-		if (streamPushItems == null || streamPushItems.size() == 0) return;
-		logger.info("updateMediaList:  " + streamPushItems.size());
-		streamPushMapper.addAll(streamPushItems);
-		// TODO 待优化
-		for (int i = 0; i < streamPushItems.size(); i++) {
-			int onlineResult = gbStreamMapper.setStatus(streamPushItems.get(i).getApp(), streamPushItems.get(i).getStream(), true);
-			if (onlineResult > 0) {
-				// 发送上线通知
-				eventPublisher.catalogEventPublishForStream(null, streamPushItems.get(i), CatalogEvent.ON);
-			}
-		}
-	}
-
-	@Override
-	public void updateMedia(StreamPushItem streamPushItem) {
-		streamPushMapper.del(streamPushItem.getApp(), streamPushItem.getStream());
-		streamPushMapper.add(streamPushItem);
-		gbStreamMapper.setStatus(streamPushItem.getApp(), streamPushItem.getStream(), true);
-
-		if(!StringUtils.isEmpty(streamPushItem.getGbId() )){
-			// 查找开启了全部直播流共享的上级平台
-			List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
-			if (parentPlatforms.size() > 0) {
-				for (ParentPlatform parentPlatform : parentPlatforms) {
-					StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(streamPushItem.getApp(), streamPushItem.getStream(),
-							parentPlatform.getServerGBId());
-					if (streamProxyItem == null) {
-						streamPushItem.setCatalogId(parentPlatform.getCatalogId());
-						streamPushItem.setPlatformId(parentPlatform.getServerGBId());
-						platformGbStreamMapper.add(streamPushItem);
-						eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), streamPushItem, CatalogEvent.ADD);
-					}
-				}
-			}
-		}
-
-	}
-
-	@Override
-	public int removeMedia(String app, String stream) {
-		return streamPushMapper.del(app, stream);
-	}
-
-	@Override
-	public void clearMediaList() {
-		streamPushMapper.clear();
-	}
-
-	@Override
-	public int mediaOutline(String app, String streamId) {
-		return gbStreamMapper.setStatus(app, streamId, false);
-	}
-
-	@Override
-	public void updateParentPlatformStatus(String platformGbID, boolean online) {
-		platformMapper.updateParentPlatformStatus(platformGbID, online);
-	}
-
-	@Override
-	public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status) {
-		return streamProxyMapper.selectForEnableInMediaServer(id, enable, status);
-	}
-
-
-	@Override
-	public Device queryVideoDeviceByChannelId( String channelId) {
-		Device result = null;
-		List<DeviceChannel> channelList = deviceChannelMapper.queryChannelByChannelId(channelId);
-		if (channelList.size() == 1) {
-			result = deviceMapper.getDeviceByDeviceId(channelList.get(0).getDeviceId());
-		}
-		return result;
-	}
-
-	@Override
-	public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) {
-		return streamProxyMapper.selectOne(app, streamId);
-	}
-
-	@Override
-	public List<PlatformCatalog> getChildrenCatalogByPlatform(String platformId, String parentId) {
-		return catalogMapper.selectByParentId(platformId, parentId);
-	}
-
-	@Override
-	public int addCatalog(PlatformCatalog platformCatalog) {
-		int result = catalogMapper.add(platformCatalog);
-		if (result > 0) {
-			DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.ADD);
-		}
-		return result;
-	}
-
-	@Override
-	public PlatformCatalog getCatalog(String id) {
-		return catalogMapper.select(id);
-	}
-
-	@Override
-	public int delCatalog(String id) {
-		PlatformCatalog platformCatalog = catalogMapper.select(id);
-		if (platformCatalog.getChildrenCount() > 0) {
-			List<PlatformCatalog> platformCatalogList = catalogMapper.selectByParentId(platformCatalog.getPlatformId(), platformCatalog.getId());
-			for (PlatformCatalog catalog : platformCatalogList) {
-				if (catalog.getChildrenCount() == 0) {
-					delCatalogExecute(catalog.getId(), catalog.getPlatformId());
-				}else {
-					delCatalog(catalog.getId());
-				}
-			}
-		}
-		return delCatalogExecute(id, platformCatalog.getPlatformId());
-	}
-	private int delCatalogExecute(String id, String platformId) {
-		int delresult =  catalogMapper.del(id);
-		DeviceChannel deviceChannelForCatalog = new DeviceChannel();
-		if (delresult > 0){
-			deviceChannelForCatalog.setChannelId(id);
-			eventPublisher.catalogEventPublish(platformId, deviceChannelForCatalog, CatalogEvent.DEL);
-		}
-
-		List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
-		if (gbStreams.size() > 0){
-			List<DeviceChannel> deviceChannelList = new ArrayList<>();
-			for (GbStream gbStream : gbStreams) {
-				DeviceChannel deviceChannel = new DeviceChannel();
-				deviceChannel.setChannelId(gbStream.getGbId());
-				deviceChannelList.add(deviceChannel);
-			}
-			eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-		}
-		int delStreamresult = platformGbStreamMapper.delByCatalogId(id);
-		List<PlatformCatalog> platformCatalogs = platformChannelMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
-		if (platformCatalogs.size() > 0){
-			List<DeviceChannel> deviceChannelList = new ArrayList<>();
-			for (PlatformCatalog platformCatalog : platformCatalogs) {
-				DeviceChannel deviceChannel = new DeviceChannel();
-				deviceChannel.setChannelId(platformCatalog.getId());
-				deviceChannelList.add(deviceChannel);
-			}
-			eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
-		}
-		int delChannelresult = platformChannelMapper.delByCatalogId(id);
-		return delresult + delChannelresult + delStreamresult;
-	}
-
-
-	@Override
-	public int updateCatalog(PlatformCatalog platformCatalog) {
-		int result = catalogMapper.update(platformCatalog);
-		if (result > 0) {
-			DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.UPDATE);
-		}
-		return result;
-	}
-
-	@Override
-	public int setDefaultCatalog(String platformId, String catalogId) {
-		return platformMapper.setDefaultCatalog(platformId, catalogId);
-	}
-
-	@Override
-	public List<PlatformCatalog> queryCatalogInPlatform(String platformId) {
-		return catalogMapper.selectByPlatForm(platformId);
-	}
-
-	@Override
-	public int delRelation(PlatformCatalog platformCatalog) {
-		if (platformCatalog.getType() == 1) {
-			DeviceChannel deviceChannel = new DeviceChannel();
-			deviceChannel.setChannelId(platformCatalog.getId());
-			eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
-			return platformChannelMapper.delByCatalogIdAndChannelIdAndPlatformId(platformCatalog);
-		}else if (platformCatalog.getType() == 2) {
-			List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformCatalog.getPlatformId(), platformCatalog.getParentId());
-			for (GbStream gbStream : gbStreams) {
-				if (gbStream.getGbId().equals(platformCatalog.getId())) {
-					DeviceChannel deviceChannel = new DeviceChannel();
-					deviceChannel.setChannelId(gbStream.getGbId());
-					eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
-					return platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream());
-				}
-			}
-		}
-		return 0;
-	}
-
-	@Override
-	public int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfos) {
-		return gbStreamMapper.updateStreamGPS(gpsMsgInfos);
-	}
-
-	private List<DeviceChannel> getDeviceChannelListByChannelReduceList(List<ChannelReduce> channelReduces, String catalogId) {
-		List<DeviceChannel> deviceChannelList = new ArrayList<>();
-		if (channelReduces.size() > 0){
-			for (ChannelReduce channelReduce : channelReduces) {
-				DeviceChannel deviceChannel = queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
-				deviceChannel.setParental(1);
-				deviceChannel.setParentId(catalogId);
-				deviceChannelList.add(deviceChannel);
-			}
-		}
-		return deviceChannelList;
-	}
-
-	private DeviceChannel getDeviceChannelByCatalog(PlatformCatalog catalog) {
-		ParentPlatform parentPlatByServerGBId = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId());
-		DeviceChannel deviceChannel = new DeviceChannel();
-		deviceChannel.setChannelId(catalog.getId());
-		deviceChannel.setName(catalog.getName());
-		deviceChannel.setLongitude(0.0);
-		deviceChannel.setLatitude(0.0);
-		deviceChannel.setDeviceId(parentPlatByServerGBId.getDeviceGBId());
-		deviceChannel.setManufacture("wvp-pro");
-		deviceChannel.setStatus(1);
-		deviceChannel.setParental(1);
-		deviceChannel.setParentId(catalog.getParentId());
-		deviceChannel.setRegisterWay(1);
-		// 行政区划应该是Domain的前八位
-		deviceChannel.setCivilCode(sipConfig.getDomain().substring(0, sipConfig.getDomain().length() - 2));
-		deviceChannel.setModel("live");
-		deviceChannel.setOwner("wvp-pro");
-		deviceChannel.setSecrecy("0");
-		return deviceChannel;
-	}
-
-	@Override
-	public List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId) {
-		return deviceChannelMapper.queryOnlineChannelsByDeviceId(deviceId);
-	}
-
-	@Override
-	public List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms) {
-		return platformChannelMapper.queryPlatFormListForGBWithGBId(channelId, platforms);
-	}
-
-	@Override
-	public List<ParentPlatform> queryPlatFormListForStreamWithGBId(String app, String stream, List<String> platforms) {
-		if (platforms == null || platforms.size() == 0) {
-			return new ArrayList<>();
-		}
-		return platformGbStreamMapper.queryPlatFormListForGBWithGBId(app, stream, platforms);
-	}
-
-	@Override
-	public GbStream getGbStream(String app, String streamId) {
-		return gbStreamMapper.selectOne(app, streamId);
-	}
-
-	@Override
-	public void delCatalogByPlatformId(String serverGBId) {
-		catalogMapper.delByPlatformId(serverGBId);
-	}
-
-	@Override
-	public void delRelationByPlatformId(String serverGBId) {
-		platformGbStreamMapper.delByPlatformId(serverGBId);
-		platformChannelMapper.delByPlatformId(serverGBId);
-	}
-
-	@Override
-	public PlatformCatalog queryDefaultCatalogInPlatform(String platformId) {
-		return catalogMapper.selectDefaultByPlatFormId(platformId);
-	}
-
-	@Override
-	public List<ChannelSourceInfo> getChannelSource(String platformId, String gbId) {
-		return platformMapper.getChannelSource(platformId, gbId);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/CollectionUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/CollectionUtil.java
deleted file mode 100644
index 4f7ca1f..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/CollectionUtil.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import java.util.Arrays;
-
-public class CollectionUtil {
-
-    public static <T> boolean contains(T[] array, final T element) {
-        return array != null && Arrays.stream(array).anyMatch((x) -> {
-            return ObjectUtils.nullSafeEquals(x, element);
-        });
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java b/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java
deleted file mode 100644
index 125d818..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-public class ConfigConst {
-    /**
-     * 播流最大并发个数
-     */
-    public static final Integer MAX_STRTEAM_COUNT = 10000;
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java
deleted file mode 100644
index 60ee987..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.stereotype.Component;
-
-/**
- * 一个优秀的颓废程序猿(CSDN)
- */
-@Component
-@PropertySource(value = {"classpath:git.properties" }, ignoreResourceNotFound = true)
-public class GitUtil {
-
-    @Value("${git.branch:null}")
-    private String branch;
-    @Value("${git.commit.id:null}")
-    private String gitCommitId;
-    @Value("${git.remote.origin.url:null}")
-    private String gitUrl;
-    @Value("${git.build.time:null}")
-    private String buildDate;
-    @Value("${git.commit.id.abbrev:null}")
-    private String commitIdShort;
-
-    public String getGitCommitId() {
-        return gitCommitId;
-    }
-
-    public String getBranch() {
-        return branch;
-    }
-
-    public String getGitUrl() {
-        return gitUrl;
-    }
-
-    public String getBuildDate() {
-        return buildDate;
-    }
-
-    public String getCommitIdShort() {
-        return commitIdShort;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/GpsUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/GpsUtil.java
deleted file mode 100644
index 53e6a61..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/GpsUtil.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.util.Base64;
-
-import com.genersoft.iot.vmp.gb28181.bean.BaiduPoint;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class GpsUtil {
-
-    private static Logger logger = LoggerFactory.getLogger(GpsUtil.class);
-
-    public static BaiduPoint Wgs84ToBd09(String xx, String yy) {
-
-
-        try {
-            Socket s = new Socket("api.map.baidu.com", 80);
-            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
-            OutputStream out = s.getOutputStream();
-            StringBuffer sb = new StringBuffer("GET /ag/coord/convert?from=0&to=4");
-            sb.append("&x=" + xx + "&y=" + yy);
-            sb.append("&callback=BMap.Convertor.cbk_3976 HTTP/1.1\r\n");
-            sb.append("User-Agent: Java/1.6.0_20\r\n");
-            sb.append("Host: api.map.baidu.com:80\r\n");
-            sb.append("Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n");
-            sb.append("Connection: Close\r\n");
-            sb.append("\r\n");
-            out.write(sb.toString().getBytes());
-            String json = "";
-            String tmp = "";
-            while ((tmp = br.readLine()) != null) {
-                // logger.info(tmp);
-                json += tmp;
-            }
-
-            s.close();
-            int start = json.indexOf("cbk_3976");
-            int end = json.lastIndexOf("}");
-            if (start != -1 && end != -1 && json.contains("\"x\":\"")) {
-                json = json.substring(start, end);
-                String[] point = json.split(",");
-                String x = point[1].split(":")[1].replace("\"", "");
-                String y = point[2].split(":")[1].replace("\"", "");
-                BaiduPoint bdPoint= new BaiduPoint();
-                bdPoint.setBdLng(new String(decode(x)));
-                bdPoint.setBdLat(new String(decode(y)));
-                return bdPoint;
-                //return (new String(decode(x)) + "," + new String(decode(y)));
-            } else {
-                logger.info("gps坐标无效!!");
-            }
-            out.close();
-            br.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     * BASE64解码
-     * @param str
-     * @return string
-     */
-    public static byte[] decode(String str) {
-        byte[] bt = null;
-        final Base64.Decoder decoder = Base64.getDecoder();
-        bt = decoder.decode(str); // .decodeBuffer(str);
-        return bt;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/IpUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/IpUtil.java
deleted file mode 100644
index d754554..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/IpUtil.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-
-import javax.servlet.http.HttpServletRequest;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-public class IpUtil {
-    public static String getIpAddr(HttpServletRequest request) {
-        String ipAddress = null;
-        try {
-            ipAddress = request.getHeader("x-forwarded-for");
-            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-                ipAddress = request.getHeader("Proxy-Client-IP");
-            }
-            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-                ipAddress = request.getHeader("WL-Proxy-Client-IP");
-            }
-            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-                ipAddress = request.getRemoteAddr();
-                if (ipAddress.equals("127.0.0.1")) {
-                    // 根据网卡取本机配置的IP
-                    InetAddress inet = null;
-                    try {
-                        inet = InetAddress.getLocalHost();
-                    } catch (UnknownHostException e) {
-                        e.printStackTrace();
-                    }
-                    ipAddress = inet.getHostAddress();
-                }
-            }
-            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
-            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
-                // = 15
-                if (ipAddress.indexOf(",") > 0) {
-                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
-                }
-            }
-        } catch (Exception e) {
-            ipAddress="";
-        }
-        // ipAddress = this.getRequest().getRemoteAddr();
-
-        return ipAddress;
-    }
-}
-
-
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/JarFileUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/JarFileUtils.java
deleted file mode 100644
index 686b562..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/JarFileUtils.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ClassUtils;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-/**
- * 一个优秀的颓废程序猿
- */
-@Component
-public class JarFileUtils {
-    private static Logger log = LoggerFactory.getLogger(JarFileUtils.class);
-    private static Map<String, String> map = new HashMap<>();
-
-    public  Map<String, String> readJarFile() {
-        JarFile jarFile = null;
-        BufferedReader br = null;
-        try {
-            // 获取jar的运行路径,因linux下jar的路径为”file:/app/.../test.jar!/BOOT-INF/class!/“这种格式,所以需要去掉”file:“和”!/BOOT-INF/class!/“
-            String jarFilePath = ClassUtils.getDefaultClassLoader().getResource("").getPath().replace("!/BOOT-INF/classes!/", "");
-            if (jarFilePath.startsWith("file")) {
-                jarFilePath = jarFilePath.substring(5);
-            }
-            log.debug("jarFilePath:" + jarFilePath);
-            // 通过JarFile的getJarEntry方法读取META-INF/MANIFEST.MF
-            jarFile = new JarFile(jarFilePath);
-            JarEntry entry = jarFile.getJarEntry("META-INF/MANIFEST.MF");
-            log.info("读取的内容:" + entry.toString());
-            // 如果读取到MANIFEST.MF文件内容,则转换为string
-            if (entry != null) {
-                InputStream in = jarFile.getInputStream(entry);
-
-                StringBuilder sb = new StringBuilder();
-                br = new BufferedReader(new InputStreamReader(in));
-                String line = "";
-                while ((line = br.readLine()) != null) {
-                    if (line != null && line.contains(":")) {
-                        int index = line.indexOf(":");
-                        map.put(line.substring(0, index).trim(), line.substring(index + 1, line.length()).trim());
-                    }
-                }
-                return map;
-            }
-        } catch (IOException e) {
-            log.debug("读取MANIFEST.MF文件异常:" + e.getMessage());
-        } finally {
-            try {
-                if (null != br) {
-                    br.close();
-                }
-                if (null != jarFile) {
-                    jarFile.close();
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-
-        return map;
-
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/ObjectUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/ObjectUtils.java
deleted file mode 100644
index 1f429bc..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/ObjectUtils.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import java.util.Arrays;
-
-public class ObjectUtils {
-    public static boolean nullSafeEquals(Object o1, Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if (o1 != null && o2 != null) {
-            if (o1.equals(o2)) {
-                return true;
-            } else {
-                return o1.getClass().isArray() && o2.getClass().isArray() && arrayEquals(o1, o2);
-            }
-        } else {
-            return false;
-        }
-    }
-
-    private static boolean arrayEquals(Object o1, Object o2) {
-        if (o1 instanceof Object[] && o2 instanceof Object[]) {
-            return Arrays.equals((Object[])((Object[])o1), (Object[])((Object[])o2));
-        } else if (o1 instanceof boolean[] && o2 instanceof boolean[]) {
-            return Arrays.equals((boolean[])((boolean[])o1), (boolean[])((boolean[])o2));
-        } else if (o1 instanceof byte[] && o2 instanceof byte[]) {
-            return Arrays.equals((byte[])((byte[])o1), (byte[])((byte[])o2));
-        } else if (o1 instanceof char[] && o2 instanceof char[]) {
-            return Arrays.equals((char[])((char[])o1), (char[])((char[])o2));
-        } else if (o1 instanceof double[] && o2 instanceof double[]) {
-            return Arrays.equals((double[])((double[])o1), (double[])((double[])o2));
-        } else if (o1 instanceof float[] && o2 instanceof float[]) {
-            return Arrays.equals((float[])((float[])o1), (float[])((float[])o2));
-        } else if (o1 instanceof int[] && o2 instanceof int[]) {
-            return Arrays.equals((int[])((int[])o1), (int[])((int[])o2));
-        } else if (o1 instanceof long[] && o2 instanceof long[]) {
-            return Arrays.equals((long[])((long[])o1), (long[])((long[])o2));
-        } else {
-            return o1 instanceof short[] && o2 instanceof short[] && Arrays.equals((short[]) ((short[]) o1), (short[]) ((short[]) o2));
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SerializeUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/SerializeUtils.java
deleted file mode 100644
index ae91ad5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/SerializeUtils.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import java.io.*;
-
-public class SerializeUtils {
-    public static byte[] serialize(Object obj){
-        byte[] bytes = null;
-        try {
-            ByteArrayOutputStream baos=new ByteArrayOutputStream();;
-            ObjectOutputStream oos=new ObjectOutputStream(baos);
-            oos.writeObject(obj);
-            bytes=baos.toByteArray();
-            baos.close();
-            oos.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return bytes;
-    }
-    public static Object deSerialize(byte[] bytes){
-        Object obj=null;
-        try {
-            ByteArrayInputStream bais=new ByteArrayInputStream(bytes);
-            ObjectInputStream ois=new ObjectInputStream(bais);
-            obj=ois.readObject();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return obj;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java b/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java
deleted file mode 100644
index 82203b9..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.stereotype.Component;
-
-/**    
- * @description:spring bean获取工厂,获取spring中的已初始化的bean
- * @author: swwheihei
- * @date:   2019年6月25日 下午4:51:52   
- * 
- */
-@Component
-public class SpringBeanFactory implements ApplicationContextAware {
-
-	// Spring应用上下文环境
-    private static ApplicationContext applicationContext;
-    
-    /**
-     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
-     */
-    @Override
-    public void setApplicationContext(ApplicationContext applicationContext)
-            throws BeansException {
-    	SpringBeanFactory.applicationContext = applicationContext;
-    }
-
-    public static ApplicationContext getApplicationContext() {
-        return applicationContext;
-    }
-
-    /**
-     * 获取对象 这里重写了bean方法,起主要作用
-     */
-    public static Object getBean(String beanId) throws BeansException {
-        if (applicationContext == null) return null;
-        return applicationContext.getBean(beanId);
-    }
-
-    /**
-     * 获取当前环境
-     */
-    public static String getActiveProfile() {
-        return applicationContext.getEnvironment().getActiveProfiles()[0];
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java
deleted file mode 100644
index 2d588fa..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-import oshi.SystemInfo;
-import oshi.hardware.CentralProcessor;
-import oshi.hardware.GlobalMemory;
-import oshi.hardware.HardwareAbstractionLayer;
-import oshi.hardware.NetworkIF;
-import oshi.software.os.OperatingSystem;
-import oshi.util.FormatUtil;
-
-import java.text.DecimalFormat;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * 实现参考自xiaozhangnomoney原创文章,
- * 版权声明:本文为xiaozhangnomoney原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
- * 原文出处链接:https://blog.csdn.net/xiaozhangnomoney/article/details/107769147
- */
-public class SystemInfoUtils {
-
-    /**
-     * 获取cpu信息
-     * @return
-     * @throws InterruptedException
-     */
-    public static double getCpuInfo() throws InterruptedException {
-        SystemInfo systemInfo = new SystemInfo();
-        CentralProcessor processor = systemInfo.getHardware().getProcessor();
-        long[] prevTicks = processor.getSystemCpuLoadTicks();
-        // 睡眠1s
-        TimeUnit.SECONDS.sleep(1);
-        long[] ticks = processor.getSystemCpuLoadTicks();
-        long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
-        long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
-        long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
-        long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
-        long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
-        long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
-        long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
-        long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
-        long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
-        return 1.0-(idle * 1.0 / totalCpu);
-    }
-
-    /**
-     * 获取内存使用率
-     * @return
-     */
-    public static double getMemInfo(){
-        SystemInfo systemInfo = new SystemInfo();
-        GlobalMemory memory = systemInfo.getHardware().getMemory();
-        //总内存
-        long totalByte = memory.getTotal();
-        //剩余
-        long acaliableByte = memory.getAvailable();
-        return (totalByte-acaliableByte)*1.0/totalByte;
-    }
-
-    /**
-     * 获取网络上传和下载
-     * @return
-     */
-    public static Map<String,String> getNetworkInterfaces() {
-        SystemInfo si = new SystemInfo();
-        HardwareAbstractionLayer hal = si.getHardware();
-        List<NetworkIF> networkIFs = hal.getNetworkIFs();
-        int i= networkIFs.size() -1;
-        NetworkIF net= networkIFs.get(i);
-
-        String in  = FormatUtil.formatBytes(net.getBytesRecv());
-        String out = FormatUtil.formatBytes(net.getBytesSent());
-        HashMap<String, String> map = new HashMap<>();
-        map.put("in",in);
-        map.put("out",out);
-        return map;
-    }
-
-    /**
-     * 获取进程数
-     * @return
-     */
-    public static int getProcessesCount(){
-        SystemInfo si = new SystemInfo();
-        OperatingSystem os = si.getOperatingSystem();
-
-        int processCount = os.getProcessCount();
-        return processCount;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/BaseNode.java b/src/main/java/com/genersoft/iot/vmp/utils/node/BaseNode.java
deleted file mode 100644
index 89e35a5..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/BaseNode.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 节点基类
- *
- */
-public class BaseNode<T> implements INode<T> {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键ID
-	 */
-	protected String channelId;
-
-	/**
-	 * 父节点ID
-	 */
-	protected String parentId;
-
-	/**
-	 * 子孙节点
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	protected List<T> children = new ArrayList<T>();
-
-	/**
-	 * 是否有子孙节点
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private Boolean hasChildren;
-
-	/**
-	 * 是否有子孙节点
-	 *
-	 * @return Boolean
-	 */
-	@Override
-	public Boolean getHasChildren() {
-		if (children.size() > 0) {
-			return true;
-		} else {
-			return this.hasChildren;
-		}
-	}
-
-	@Override
-	public String getChannelId() {
-		return channelId;
-	}
-
-	@Override
-	public String getParentId() {
-		return parentId;
-	}
-
-	@Override
-	public List<T> getChildren() {
-		return children;
-	}
-
-	public void setChildren(List<T> children) {
-		this.children = children;
-	}
-
-	public void setHasChildren(Boolean hasChildren) {
-		this.hasChildren = hasChildren;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNode.java b/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNode.java
deleted file mode 100644
index d983c56..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNode.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-
-
-/**
- * 森林节点类
- *
- */
-public class ForestNode extends BaseNode<ForestNode> {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 节点内容
-	 */
-	private Object content;
-
-	public ForestNode(String id, String parentId, Object content) {
-		this.channelId = id;
-		this.parentId = parentId;
-		this.content = content;
-	}
-
-	public Object getContent() {
-		return content;
-	}
-
-	public void setContent(Object content) {
-		this.content = content;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeManager.java b/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeManager.java
deleted file mode 100644
index affce9d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeManager.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 森林管理类
- *
- * @author smallchill
- */
-public class ForestNodeManager<T extends INode<T>> {
-
-	/**
-	 * 森林的所有节点
-	 */
-	private final ImmutableMap<String, T> nodeMap;
-
-	/**
-	 * 森林的父节点ID
-	 */
-	private final Map<String, Object> parentIdMap = Maps.newHashMap();
-
-	public ForestNodeManager(List<T> nodes) {
-		nodeMap = Maps.uniqueIndex(nodes, INode::getChannelId);
-	}
-
-	/**
-	 * 根据节点ID获取一个节点
-	 *
-	 * @param id 节点ID
-	 * @return 对应的节点对象
-	 */
-	public INode<T> getTreeNodeAt(String id) {
-		if (nodeMap.containsKey(id)) {
-			return nodeMap.get(id);
-		}
-		return null;
-	}
-
-	/**
-	 * 增加父节点ID
-	 *
-	 * @param parentId 父节点ID
-	 */
-	public void addParentId(String parentId) {
-		parentIdMap.put(parentId, "");
-	}
-
-	/**
-	 * 获取树的根节点(一个森林对应多颗树)
-	 *
-	 * @return 树的根节点集合
-	 */
-	public List<T> getRoot() {
-		List<T> roots = new ArrayList<>();
-		nodeMap.forEach((key, node) -> {
-			if (node.getParentId() == null || parentIdMap.containsKey(node.getChannelId())) {
-				roots.add(node);
-			}
-		});
-		return roots;
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java b/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java
deleted file mode 100644
index 8df6f50..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-import com.genersoft.iot.vmp.utils.CollectionUtil;
-
-import java.util.List;
-
-/**
- * 森林节点归并类
- *
- */
-public class ForestNodeMerger {
-
-	/**
-	 * 将节点数组归并为一个森林(多棵树)(填充节点的children域)
-	 * 时间复杂度为O(n^2)
-	 *
-	 * @param items 节点域
-	 * @return 多棵树的根节点集合
-	 */
-	public static <T extends INode<T>> List<T> merge(List<T> items) {
-		ForestNodeManager<T> forestNodeManager = new ForestNodeManager<>(items);
-		items.forEach(forestNode -> {
-			if (forestNode.getParentId() != null) {
-				INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
-				if (node != null) {
-					node.getChildren().add(forestNode);
-				} else {
-					forestNodeManager.addParentId(forestNode.getChannelId());
-				}
-			}
-		});
-		return forestNodeManager.getRoot();
-	}
-
-	public static <T extends INode<T>> List<T> merge(List<T> items, String[] parentIds) {
-		ForestNodeManager<T> forestNodeManager = new ForestNodeManager<>(items);
-		items.forEach(forestNode -> {
-			if (forestNode.getParentId() != null) {
-				INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
-				if (CollectionUtil.contains(parentIds, forestNode.getChannelId())){
-					forestNodeManager.addParentId(forestNode.getChannelId());
-				} else {
-					if (node != null){
-						node.getChildren().add(forestNode);
-					}
-				}
-			}
-		});
-		return forestNodeManager.getRoot();
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/INode.java b/src/main/java/com/genersoft/iot/vmp/utils/node/INode.java
deleted file mode 100644
index 2772747..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/INode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- *
- * 节点
- */
-public interface INode<T> extends Serializable {
-
-	/**
-	 * 主键
-	 *
-	 * @return String
-	 */
-	String getChannelId();
-
-	/**
-	 * 父主键
-	 *
-	 * @return String
-	 */
-	String getParentId();
-
-	/**
-	 * 子孙节点
-	 *
-	 * @return List<T>
-	 */
-	List<T> getChildren();
-
-	/**
-	 * 是否有子孙节点
-	 *
-	 * @return Boolean
-	 */
-	default Boolean getHasChildren() {
-		return false;
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/TreeNode.java b/src/main/java/com/genersoft/iot/vmp/utils/node/TreeNode.java
deleted file mode 100644
index 71f1b2b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/node/TreeNode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.genersoft.iot.vmp.utils.node;
-
-
-
-/**
- * 树型节点类
- *
- */
-public class TreeNode extends BaseNode<TreeNode> {
-
-	private static final long serialVersionUID = 1L;
-
-	private String title;
-
-	private String key;
-
-	private String value;
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getKey() {
-		return key;
-	}
-
-	public void setKey(String key) {
-		this.key = key;
-	}
-
-	public String getValue() {
-		return value;
-	}
-
-	public void setValue(String value) {
-		this.value = value;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
deleted file mode 100644
index 0508285..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.utils.redis;
-
-import java.nio.charset.Charset;
-
-import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.SerializationException;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-
-/**    
- * @description:使用fastjson实现redis的序列化   
- * @author: swwheihei
- * @date:   2020年5月6日 下午8:40:11     
- */
-public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
-
-	public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
-	 
-    private Class<T> clazz;
- 
-    public FastJsonRedisSerializer(Class<T> clazz) {
-        super();
-        this.clazz = clazz;
-    }
- 
-    @Override
-    public byte[] serialize(T t) throws SerializationException {
-        if (t == null) {
-            return new byte[0];
-        }
-        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
-    }
- 
-    @Override
-    public T deserialize(byte[] bytes) throws SerializationException {
-        if (bytes == null || bytes.length <= 0) {
-            return null;
-        }
-        String str = new String(bytes, DEFAULT_CHARSET);
-        return (T) JSON.parseObject(str, clazz);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/JedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/JedisUtil.java
deleted file mode 100644
index 1fb1d17..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/JedisUtil.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.genersoft.iot.vmp.utils.redis;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPool;
-
-import java.util.Set;
-
-/**
- * @description:Jedis工具类
- * @author: wangshaopeng@sunnybs.com
- * @date: 2021年03月22日 下午8:27:29
- */
-@Component
-public class JedisUtil {
-
-    @Autowired
-    private JedisPool jedisPool;
-
-    //    ============================== Key ==============================
-
-    /**
-     * 检查给定 key 是否存在。
-     *
-     * @param key
-     * @return
-     */
-    public Boolean exists(String key) {
-        Jedis jedis = null;
-        try {
-            jedis = jedisPool.getResource();
-            Boolean exists = jedis.exists(key);
-            return exists;
-        } finally {
-            returnToPool(jedis);
-        }
-    }
-
-
-    //    ============================== Set ==============================
-
-    /**
-     * SADD key member [member ...]
-     * 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
-     * 假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
-     * 当 key 不是集合类型时,返回一个错误。
-     */
-    public Long sadd(String key, String... members) {
-        Jedis jedis = null;
-        try {
-            jedis = jedisPool.getResource();
-            Long smove = jedis.sadd(key, members);
-            return smove;
-        } finally {
-            returnToPool(jedis);
-        }
-    }
-
-    /**
-     * SMEMBERS key
-     * 返回集合 key 中的所有成员。
-     * 不存在的 key 被视为空集合。
-     */
-    public Set<String> smembers(String key) {
-        Jedis jedis = null;
-        try {
-            jedis = jedisPool.getResource();
-            Set<String> smembers = jedis.smembers(key);
-            return smembers;
-        } finally {
-            returnToPool(jedis);
-        }
-    }
-
-
-    /**
-     * SREM key member1 [member2]
-     * 移除集合中一个或多个成员
-     */
-    public Long srem(String key, String... member) {
-        Jedis jedis = null;
-        try {
-            jedis = jedisPool.getResource();
-            Long srem = jedis.srem(key, member);
-            return srem;
-        } finally {
-            returnToPool(jedis);
-        }
-    }
-
-    private void returnToPool(Jedis jedis) {
-        if (jedis != null) {
-            jedis.close();
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
deleted file mode 100644
index abedd98..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
+++ /dev/null
@@ -1,758 +0,0 @@
-package com.genersoft.iot.vmp.utils.redis;
-
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-import com.alibaba.fastjson.JSONObject;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.*;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-/**    
- * @description:Redis工具类
- * @author: swwheihei
- * @date:   2020年5月6日 下午8:27:29     
- */
-@Component
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-public class RedisUtil {
-
-	@Autowired
-    private RedisTemplate redisTemplate;
-	
-	/**
-     * 指定缓存失效时间
-     * @param key 键
-     * @param time 时间(秒)
-     * @return true / false
-     */
-    public boolean expire(String key, long time) {
-        try {
-            if (time > 0) {
-                redisTemplate.expire(key, time, TimeUnit.SECONDS);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 根据 key 获取过期时间
-     * @param key 键
-     * @return
-     */
-    public long getExpire(String key) {
-        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 判断 key 是否存在
-     * @param key 键
-     * @return true / false
-     */
-    public boolean hasKey(String key) {
-        try {
-            return redisTemplate.hasKey(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 删除缓存
-     * @SuppressWarnings("unchecked") 忽略类型转换警告
-     * @param key 键(一个或者多个)
-     */
-    public boolean del(String... key) {
-    	try {
-    		if (key != null && key.length > 0) {
-                if (key.length == 1) {
-                    redisTemplate.delete(key[0]);
-                } else {
-//                    传入一个 Collection<String> 集合
-                    redisTemplate.delete(CollectionUtils.arrayToList(key));
-                }
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-//    ============================== String ==============================
-
-    /**
-     * 普通缓存获取
-     * @param key 键
-     * @return 值
-     */
-    public Object get(String key) {
-        return key == null ? null : redisTemplate.opsForValue().get(key);
-    }
-
-    /**
-     * 普通缓存放入
-     * @param key 键
-     * @param value 值
-     * @return true / false
-     */
-    public boolean set(String key, Object value) {
-        try {
-            redisTemplate.opsForValue().set(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 普通缓存放入并设置时间
-     * @param key 键
-     * @param value 值
-     * @param time 时间(秒),如果 time < 0 则设置无限时间
-     * @return true / false
-     */
-    public boolean set(String key, Object value, long time) {
-        try {
-            if (time > 0) {
-                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
-            } else {
-                set(key, value);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 递增
-     * @param key 键
-     * @param delta 递增大小
-     * @return
-     */
-    public long incr(String key, long delta) {
-        if (delta < 0) {
-            throw new RuntimeException("递增因子必须大于 0");
-        }
-        return redisTemplate.opsForValue().increment(key, delta);
-    }
-
-    /**
-     * 递减
-     * @param key 键
-     * @param delta 递减大小
-     * @return
-     */
-    public long decr(String key, long delta) {
-        if (delta < 0) {
-            throw new RuntimeException("递减因子必须大于 0");
-        }
-        return redisTemplate.opsForValue().increment(key, delta);
-    }
-
-//    ============================== Map ==============================
-
-    /**
-     * HashGet
-     * @param key 键(no null)
-     * @param item 项(no null)
-     * @return 值
-     */
-    public Object hget(String key, String item) {
-        return redisTemplate.opsForHash().get(key, item);
-    }
-
-    /**
-     * 获取 key 对应的 map
-     * @param key 键(no null)
-     * @return 对应的多个键值
-     */
-    public Map<Object, Object> hmget(String key) {
-        return redisTemplate.opsForHash().entries(key);
-    }
-
-    /**
-     * HashSet
-     * @param key 键
-     * @param map 值
-     * @return true / false
-     */
-    public boolean hmset(String key, Map<Object, Object> map) {
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * HashSet 并设置时间
-     * @param key 键
-     * @param map 值
-     * @param time 时间
-     * @return true / false
-     */
-    public boolean hmset(String key, Map<Object, Object> map, long time) {
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 向一张 Hash表 中放入数据,如不存在则创建
-     * @param key 键
-     * @param item 项
-     * @param value 值
-     * @return true / false
-     */
-    public boolean hset(String key, String item, Object value) {
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 向一张 Hash表 中放入数据,并设置时间,如不存在则创建
-     * @param key 键
-     * @param item 项
-     * @param value 值
-     * @param time 时间(如果原来的 Hash表 设置了时间,这里会覆盖)
-     * @return true / false
-     */
-    public boolean hset(String key, String item, Object value, long time) {
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 删除 Hash表 中的值
-     * @param key 键
-     * @param item 项(可以多个,no null)
-     */
-    public void hdel(String key, Object... item) {
-        redisTemplate.opsForHash().delete(key, item);
-    }
-
-    /**
-     * 判断 Hash表 中是否有该键的值
-     * @param key 键(no null)
-     * @param item 值(no null)
-     * @return true / false
-     */
-    public boolean hHasKey(String key, String item) {
-        return redisTemplate.opsForHash().hasKey(key, item);
-    }
-
-    /**
-     * Hash递增,如果不存在则创建一个,并把新增的值返回
-     * @param key 键
-     * @param item 项
-     * @param by 递增大小 > 0
-     * @return
-     */
-    public Double hincr(String key, String item, Double by) {
-        return redisTemplate.opsForHash().increment(key, item, by);
-    }
-
-    /**
-     * Hash递减
-     * @param key 键
-     * @param item 项
-     * @param by 递减大小
-     * @return
-     */
-    public Double hdecr(String key, String item, Double by) {
-        return redisTemplate.opsForHash().increment(key, item, -by);
-    }
-
-//    ============================== Set ==============================
-
-    /**
-     * 根据 key 获取 set 中的所有值
-     * @param key 键
-     * @return 值
-     */
-    public Set<Object> sGet(String key) {
-        try {
-            return redisTemplate.opsForSet().members(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 从键为 key 的 set 中,根据 value 查询是否存在
-     * @param key 键
-     * @param value 值
-     * @return true / false
-     */
-    public boolean sHasKey(String key, Object value) {
-        try {
-            return redisTemplate.opsForSet().isMember(key, value);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将数据放入 set缓存
-     * @param key 键值
-     * @param values 值(可以多个)
-     * @return 成功个数
-     */
-    public long sSet(String key, Object... values) {
-        try {
-            return redisTemplate.opsForSet().add(key, values);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 将数据放入 set缓存,并设置时间
-     * @param key 键
-     * @param time 时间
-     * @param values 值(可以多个)
-     * @return 成功放入个数
-     */
-    public long sSet(String key, long time, Object... values) {
-        try {
-            long count = redisTemplate.opsForSet().add(key, values);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return count;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 获取 set缓存的长度
-     * @param key 键
-     * @return 长度
-     */
-    public long sGetSetSize(String key) {
-        try {
-            return redisTemplate.opsForSet().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 移除 set缓存中,值为 value 的
-     * @param key 键
-     * @param values 值
-     * @return 成功移除个数
-     */
-    public long setRemove(String key, Object... values) {
-        try {
-            return redisTemplate.opsForSet().remove(key, values);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-//    ============================== ZSet ==============================
-
-    /**
-     * 添加一个元素, zset与set最大的区别就是每个元素都有一个score,因此有个排序的辅助功能;  zadd
-     *
-     * @param key
-     * @param value
-     * @param score
-     */
-    public void zAdd(Object key, Object value, double score) {
-        redisTemplate.opsForZSet().add(key, value, score);
-    }
-
-    /**
-     * 删除元素 zrem
-     *
-     * @param key
-     * @param value
-     */
-    public void zRemove(Object key, Object value) {
-        redisTemplate.opsForZSet().remove(key, value);
-    }
-
-    /**
-     * score的增加or减少 zincrby
-     *
-     * @param key
-     * @param value
-     * @param delta -1 表示减 1 表示加1
-     */
-    public Double zIncrScore(Object key, Object value, double delta) {
-        return redisTemplate.opsForZSet().incrementScore(key, value, delta);
-    }
-
-    /**
-     * 查询value对应的score   zscore
-     *
-     * @param key
-     * @param value
-     * @return
-     */
-    public Double zScore(Object key, Object value) {
-        return redisTemplate.opsForZSet().score(key, value);
-    }
-
-    /**
-     * 判断value在zset中的排名  zrank
-     *
-     * @param key
-     * @param value
-     * @return
-     */
-    public Long zRank(Object key, Object value) {
-        return redisTemplate.opsForZSet().rank(key, value);
-    }
-
-    /**
-     * 返回集合的长度
-     *
-     * @param key
-     * @return
-     */
-    public Long zSize(Object key) {
-        return redisTemplate.opsForZSet().zCard(key);
-    }
-
-    /**
-     * 查询集合中指定顺序的值, 0 -1 表示获取全部的集合内容  zrange
-     *
-     * 返回有序的集合,score小的在前面
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public Set<Object> ZRange(Object key, int start, int end) {
-        return redisTemplate.opsForZSet().range(key, start, end);
-    }
-    /**
-     * 查询集合中指定顺序的值和score,0, -1 表示获取全部的集合内容
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public Set<ZSetOperations.TypedTuple<String>> zRangeWithScore(Object key, int start, int end) {
-        return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
-    }
-    /**
-     * 查询集合中指定顺序的值  zrevrange
-     *
-     * 返回有序的集合中,score大的在前面
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public Set<String> zRevRange(Object key, int start, int end) {
-        return redisTemplate.opsForZSet().reverseRange(key, start, end);
-    }
-    /**
-     * 根据score的值,来获取满足条件的集合  zrangebyscore
-     *
-     * @param key
-     * @param min
-     * @param max
-     * @return
-     */
-    public Set<String> zSortRange(Object key, int min, int max) {
-        return redisTemplate.opsForZSet().rangeByScore(key, min, max);
-    }
-
-
-//    ============================== List ==============================
-
-    /**
-     * 获取 list缓存的内容
-     * @param key 键
-     * @param start 开始
-     * @param end 结束(0 到 -1 代表所有值)
-     * @return
-     */
-    public List<Object> lGet(String key, long start, long end) {
-        try {
-            return redisTemplate.opsForList().range(key, start, end);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 获取 list缓存的长度
-     * @param key 键
-     * @return 长度
-     */
-    public long lGetListSize(String key) {
-        try {
-            return redisTemplate.opsForList().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 根据索引 index 获取键为 key 的 list 中的元素
-     * @param key 键
-     * @param index 索引
-     *              当 index >= 0 时 {0:表头, 1:第二个元素}
-     *              当 index < 0 时 {-1:表尾, -2:倒数第二个元素}
-     * @return 值
-     */
-    public Object lGetIndex(String key, long index) {
-        try {
-            return redisTemplate.opsForList().index(key, index);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 将值 value 插入键为 key 的 list 中,如果 list 不存在则创建空 list
-     * @param key 键
-     * @param value 值
-     * @return true / false
-     */
-    public boolean lSet(String key, Object value) {
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将值 value 插入键为 key 的 list 中,并设置时间
-     * @param key 键
-     * @param value 值
-     * @param time 时间
-     * @return true / false
-     */
-    public boolean lSet(String key, Object value, long time) {
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将 values 插入键为 key 的 list 中
-     * @param key 键
-     * @param values 值
-     * @return true / false
-     */
-    public boolean lSetList(String key, List<Object> values) {
-        try {
-            redisTemplate.opsForList().rightPushAll(key, values);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将 values 插入键为 key 的 list 中,并设置时间
-     * @param key 键
-     * @param values 值
-     * @param time 时间
-     * @return true / false
-     */
-    public boolean lSetList(String key, List<Object> values, long time) {
-        try {
-            redisTemplate.opsForList().rightPushAll(key, values);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 根据索引 index 修改键为 key 的值
-     * @param key 键
-     * @param index 索引
-     * @param value 值
-     * @return true / false
-     */
-    public boolean lUpdateIndex(String key, long index, Object value) {
-        try {
-            redisTemplate.opsForList().set(key, index, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 在键为 key 的 list 中删除值为 value 的元素
-     * @param key 键
-     * @param count 如果 count == 0 则删除 list 中所有值为 value 的元素
-     *              如果 count > 0 则删除 list 中最左边那个值为 value 的元素
-     *              如果 count < 0 则删除 list 中最右边那个值为 value 的元素
-     * @param value
-     * @return
-     */
-    public long lRemove(String key, long count, Object value) {
-        try {
-            return redisTemplate.opsForList().remove(key, count, value);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 在键为 key 的 list中移除第一个元素
-     * @param key 键
-     * @return
-     */
-    public Object lLeftPop(String key) {
-        return redisTemplate.opsForList().leftPop(key);
-    }
-
-    /**
-     * 在键为 key 的 list中移除、最后一个元素
-     * @param key 键
-     * @return
-     */
-    public Object lrightPop(String key) {
-        return redisTemplate.opsForList().rightPop(key);
-    }
-
-    /**
-     * 模糊查询
-     * @param key 键
-     * @return true / false
-     */
-    public List<Object> keys(String key) {
-        try {
-            Set<String> set = redisTemplate.keys(key);
-            return new ArrayList<>(set);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-
-    /**
-     * 模糊查询
-     * @param query 查询参数
-     * @return
-     */
-//    public List<Object> scan(String query) {
-//        List<Object> result = new ArrayList<>();
-//        try {
-//            Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("field",
-//                    ScanOptions.scanOptions().match(query).count(1000).build());
-//            while (cursor.hasNext()) {
-//                Map.Entry<Object,Object> entry = cursor.next();
-//                result.add(entry.getKey());
-//                Object key = entry.getKey();
-//                Object valueSet = entry.getValue();
-//            }
-//            //关闭cursor
-//            cursor.close();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return result;
-//    }
-
-    /**
-     * 模糊查询
-     * @param query 查询参数
-     * @return
-     */
-    public List<Object> scan(String query) {
-        Set<String> keys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
-            Set<String> keysTmp = new HashSet<>();
-            Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());
-            while (cursor.hasNext()) {
-                keysTmp.add(new String(cursor.next()));
-            }
-            return keysTmp;
-        });
-//        Set<String> keys = (Set<String>) redisTemplate.execute(new RedisCallback<Set<String>>(){
-//
-//            @Override
-//            public Set<String> doInRedis(RedisConnection connection) throws DataAccessException {
-//                Set<String> keysTmp = new HashSet<>();
-//                Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());
-//                while (cursor.hasNext()) {
-//                    keysTmp.add(new String(cursor.next()));
-//                }
-//            return keysTmp;
-//            }
-//        });
-
-        return new ArrayList<>(keys);
-    }
-
-    //    ============================== 消息发送与订阅 ==============================
-    public void convertAndSend(String channel, JSONObject msg) {
-//        redisTemplate.convertAndSend(channel, msg);
-        redisTemplate.convertAndSend(channel, msg);
-
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BatchGBStreamParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BatchGBStreamParam.java
deleted file mode 100644
index e03461e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BatchGBStreamParam.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.bean;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-
-import java.util.List;
-
-public class BatchGBStreamParam {
-    private List<GbStream> gbStreams;
-
-    public List<GbStream> getGbStreams() {
-        return gbStreams;
-    }
-
-    public void setGbStreams(List<GbStream> gbStreams) {
-        this.gbStreams = gbStreams;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTree.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTree.java
deleted file mode 100644
index 73928a4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTree.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.bean;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.utils.node.INode;
-import io.swagger.annotations.ApiModel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@ApiModel(value = "DeviceChannelTree对象", description = "DeviceChannelTree对象")
-public class DeviceChannelTree extends DeviceChannel implements INode<DeviceChannelTree> {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 主键ID
-     */
-    private int id;
-
-    /**
-     * 父节点ID
-     */
-    private String parentId;
-
-    private String parentName;
-
-    private String title;
-
-    private String key;
-
-    private String value;
-
-    /**
-     * 子孙节点
-     */
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    private List<DeviceChannelTree> children;
-
-    /**
-     * 是否有子孙节点
-     */
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    private Boolean hasChildren;
-
-    @Override
-    public List<DeviceChannelTree> getChildren() {
-        if (this.children == null) {
-            this.children = new ArrayList<>();
-        }
-        return this.children;
-    }
-
-    @Override
-    public Boolean getHasChildren() {
-        if (children.size() > 0) {
-            return true;
-        } else {
-            return this.hasChildren;
-        }
-    }
-
-    @Override
-    public int getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    @Override
-    public String getParentId() {
-        return parentId;
-    }
-
-    @Override
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    public String getParentName() {
-        return parentName;
-    }
-
-    public void setParentName(String parentName) {
-        this.parentName = parentName;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public void setChildren(List<DeviceChannelTree> children) {
-        this.children = children;
-    }
-
-    public void setHasChildren(Boolean hasChildren) {
-        this.hasChildren = hasChildren;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTreeNode.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTreeNode.java
deleted file mode 100644
index 96577d1..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeviceChannelTreeNode.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.bean;
-
-import com.genersoft.iot.vmp.utils.node.TreeNode;
-
-public class DeviceChannelTreeNode extends TreeNode {
-
-	private Integer status;
-
-	private String deviceId;
-
-	private String channelId;
-
-	private Double lng;
-
-	private Double lat;
-
-	public Integer getStatus() {
-		return status;
-	}
-
-	public void setStatus(Integer status) {
-		this.status = status;
-	}
-
-	public String getDeviceId() {
-		return deviceId;
-	}
-
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
-	}
-
-	public String getChannelId() {
-		return channelId;
-	}
-
-	public void setChannelId(String channelId) {
-		this.channelId = channelId;
-	}
-
-	public Double getLng() {
-		return lng;
-	}
-
-	public void setLng(Double lng) {
-		this.lng = lng;
-	}
-
-	public Double getLat() {
-		return lat;
-	}
-
-	public void setLat(Double lat) {
-		this.lat = lat;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java
deleted file mode 100644
index 956f647..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.bean;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-
-public class StreamPushExcelDto {
-
-    @ExcelProperty("名称")
-    private String name;
-
-    @ExcelProperty("应用名")
-    private String app;
-
-    @ExcelProperty("流ID")
-    private String stream;
-
-    @ExcelProperty("国标ID")
-    private String gbId;
-
-    @ExcelProperty("平台ID")
-    private String platformId;
-
-    @ExcelProperty("目录ID")
-    private String catalogId;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getApp() {
-        return app;
-    }
-
-    public void setApp(String app) {
-        this.app = app;
-    }
-
-    public String getStream() {
-        return stream;
-    }
-
-    public void setStream(String stream) {
-        this.stream = stream;
-    }
-
-    public String getGbId() {
-        return gbId;
-    }
-
-    public void setGbId(String gbId) {
-        this.gbId = gbId;
-    }
-
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
deleted file mode 100644
index 91ed22c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.bean;
-
-
-public class WVPResult<T> {
-
-    public WVPResult() {
-    }
-
-    public WVPResult(int code, String msg, T data) {
-        this.code = code;
-        this.msg = msg;
-        this.data = data;
-    }
-
-    private int code;
-    private String msg;
-    private T data;
-
-    private static final Integer SUCCESS = 200;
-    private static final Integer FAILED = 400;
-
-    public static <T> WVPResult<T> Data(T t, String msg) {
-        return new WVPResult<>(SUCCESS, msg, t);
-    }
-
-    public static <T> WVPResult<T> Data(T t) {
-        return Data(t, "成功");
-    }
-
-    public static <T> WVPResult<T> fail(int code, String msg) {
-        return new WVPResult<>(code, msg, null);
-    }
-
-    public static <T> WVPResult<T> fail(String msg) {
-        return fail(FAILED, msg);
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public void setCode(int code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java
deleted file mode 100644
index 860f6a3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.MobilePosition;
-
-import java.util.List;
-import java.util.UUID;
-
-import javax.sip.message.Response;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.github.pagehelper.util.StringUtil;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.context.request.async.DeferredResult;
-
-/**
- *  位置信息管理
- */
-@Api(tags = "位置信息管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/position")
-public class MobilePositionController {
-
-    private final static Logger logger = LoggerFactory.getLogger(MobilePositionController.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-    
-	@Autowired
-	private SIPCommander cmder;
-	
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-    /**
-     *  查询历史轨迹
-     * @param deviceId 设备ID
-     * @param start 开始时间
-     * @param end 结束时间
-     * @return
-     */
-    @ApiOperation("查询历史轨迹")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "start", value = "开始时间", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "end", value = "结束时间", required = true, dataTypeClass = String.class),
-    })
-    @GetMapping("/history/{deviceId}")
-    public ResponseEntity<List<MobilePosition>> positions(@PathVariable String deviceId,
-                                                    @RequestParam(required = false) String start,
-                                                    @RequestParam(required = false) String end) {
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询设备" + deviceId + "的历史轨迹");
-//        }
-
-        if (StringUtil.isEmpty(start)) {
-            start = null;
-        }
-        if (StringUtil.isEmpty(end)) {
-            end = null;
-        }
-
-        List<MobilePosition> result = storager.queryMobilePositions(deviceId, start, end);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    /**
-     *  查询设备最新位置
-     * @param deviceId 设备ID
-     * @return
-     */
-    @ApiOperation("查询设备最新位置")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-    })
-    @GetMapping("/latest/{deviceId}")
-    public ResponseEntity<MobilePosition> latestPosition(@PathVariable String deviceId) {
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询设备" + deviceId + "的最新位置");
-//        }
-        MobilePosition result = storager.queryLatestPosition(deviceId);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    /**
-     *  获取移动位置信息
-     * @param deviceId 设备ID
-     * @return
-     */
-    @ApiOperation("获取移动位置信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-    })
-    @GetMapping("/realtime/{deviceId}")
-    public DeferredResult<ResponseEntity<MobilePosition>> realTimePosition(@PathVariable String deviceId) {
-        Device device = storager.queryVideoDevice(deviceId);
-        String uuid = UUID.randomUUID().toString();
-        String key = DeferredResultHolder.CALLBACK_CMD_MOBILEPOSITION + deviceId;
-        cmder.mobilePostitionQuery(device, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-            msg.setKey(key);
-			msg.setData(String.format("获取移动位置信息失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<MobilePosition>> result = new DeferredResult<ResponseEntity<MobilePosition>>(5*1000L);
-		result.onTimeout(()->{
-			logger.warn(String.format("获取移动位置信息超时"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-            msg.setId(uuid);
-            msg.setKey(key);
-			msg.setData("Timeout");
-			resultHolder.invokeResult(msg);
-		});
-        resultHolder.put(key, uuid, result);
-        return result;
-    }
-
-    /**
-     * 订阅位置信息
-     * @param deviceId 设备ID
-     * @param expires 订阅超时时间
-     * @param interval 上报时间间隔
-     * @return true = 命令发送成功
-     */
-    @ApiOperation("订阅位置信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "expires", value = "订阅超时时间", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "interval", value = "上报时间间隔", dataTypeClass = String.class),
-    })
-    @GetMapping("/subscribe/{deviceId}")
-    public ResponseEntity<String> positionSubscribe(@PathVariable String deviceId,
-                                                    @RequestParam String expires,
-                                                    @RequestParam String interval) {
-        String msg = ((expires.equals("0")) ? "取消" : "") + "订阅设备" + deviceId + "的移动位置";
-        if (logger.isDebugEnabled()) {
-            logger.debug(msg);
-        }
-
-        if (StringUtil.isEmpty(interval)) {
-            interval = "5";
-        }
-        Device device = storager.queryVideoDevice(deviceId);
-
-        String result = msg;
-        if (cmder.mobilePositionSubscribe(device, Integer.parseInt(expires), Integer.parseInt(interval))) {
-            result += ",成功";
-        } else {
-            result += ",失败";
-        }
-
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/SseController/SseController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/SseController/SseController.java
deleted file mode 100644
index 5f09828..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/SseController/SseController.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.SseController;
-
-import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEventListener;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-/**
- * @description: SSE推送
- * @author: lawrencehj
- * @data: 2021-01-20
- */
-@Api(tags = "SSE推送")
-@CrossOrigin
-@Controller
-@RequestMapping("/api")
-public class SseController {
-    @Autowired
-    AlarmEventListener alarmEventListener;
-
-    @ApiOperation("浏览器推送")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "browserId", value = "浏览器ID", dataTypeClass = String.class),
-    })
-    @GetMapping("/emit")
-    public SseEmitter emit(@RequestParam String browserId) {
-        final SseEmitter sseEmitter = new SseEmitter(0L);
-        try {
-            alarmEventListener.addSseEmitters(browserId, sseEmitter);
-        }catch (Exception e){
-            sseEmitter.completeWithError(e);
-        }
-        return sseEmitter;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java
deleted file mode 100644
index 434bbd4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.alarm;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-@Api(tags = "报警信息管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/alarm")
-public class AlarmController {
-
-    @Autowired
-    private IDeviceAlarmService deviceAlarmService;
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    /**
-     *  分页查询报警
-     *
-     * @param deviceId 设备id
-     * @param page 当前页
-     * @param count 每页查询数量
-     * @param alarmPriority  报警级别
-     * @param alarmMethod 报警方式
-     * @param alarmType  报警类型
-     * @param startTime  开始时间
-     * @param endTime 结束时间
-     * @return
-     */
-    @ApiOperation("分页查询报警")
-    @GetMapping("/all")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="deviceId", value = "设备id", dataTypeClass = String.class),
-            @ApiImplicitParam(name="page", value = "当前页", required = true ,dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="count", value = "每页查询数量", required = true ,dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="alarmPriority", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="alarmMethod", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="alarmMethod", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="alarmType", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="startTime", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="endTime", value = "查询内容" ,dataTypeClass = String.class),
-    })
-    public ResponseEntity<PageInfo<DeviceAlarm>> getAll(
-                                             @RequestParam int page,
-                                             @RequestParam int count,
-                                             @RequestParam(required = false)  String deviceId,
-                                             @RequestParam(required = false) String alarmPriority,
-                                             @RequestParam(required = false) String alarmMethod,
-                                             @RequestParam(required = false) String alarmType,
-                                             @RequestParam(required = false) String startTime,
-                                             @RequestParam(required = false) String endTime
-                                             ) {
-        if (StringUtils.isEmpty(alarmPriority)) alarmPriority = null;
-        if (StringUtils.isEmpty(alarmMethod)) alarmMethod = null;
-        if (StringUtils.isEmpty(alarmType)) alarmType = null;
-        if (StringUtils.isEmpty(startTime)) startTime = null;
-        if (StringUtils.isEmpty(endTime)) endTime = null;
-
-
-        try {
-            if (startTime != null)  format.parse(startTime);
-            if (endTime != null)  format.parse(endTime);
-        } catch (ParseException e) {
-            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
-        }
-
-        PageInfo<DeviceAlarm> allAlarm = deviceAlarmService.getAllAlarm(page, count, deviceId, alarmPriority, alarmMethod,
-                alarmType, startTime, endTime);
-        return new ResponseEntity<>(allAlarm, HttpStatus.OK);
-    }
-
-
-    /**
-     *  删除报警
-     *
-     * @param id 报警id
-     * @param deviceIds 多个设备id,逗号分隔
-     * @param time 结束时间(这个时间之前的报警会被删除)
-     * @return
-     */
-    @ApiOperation("删除报警")
-    @DeleteMapping("/delete")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="id", value = "ID", required = false ,dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="deviceIds", value = "多个设备id,逗号分隔", required = false ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="time", value = "结束时间", required = false ,dataTypeClass = String.class),
-    })
-    public ResponseEntity<WVPResult<String>> delete(
-                                              @RequestParam(required = false) Integer id,
-                                              @RequestParam(required = false) String deviceIds,
-                                              @RequestParam(required = false) String time
-    ) {
-        if (StringUtils.isEmpty(id)) id = null;
-        if (StringUtils.isEmpty(deviceIds)) deviceIds = null;
-        if (StringUtils.isEmpty(time)) time = null;
-        try {
-            if (time != null) {
-                format.parse(time);
-            }
-        } catch (ParseException e) {
-            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
-        }
-        List<String> deviceIdList = null;
-        if (deviceIds != null) {
-            String[] deviceIdArray = deviceIds.split(",");
-            deviceIdList = Arrays.asList(deviceIdArray);
-        }
-
-        int count = deviceAlarmService.clearAlarmBeforeTime(id, deviceIdList, time);
-        WVPResult wvpResult = new WVPResult();
-        wvpResult.setCode(0);
-        wvpResult.setMsg("success");
-        wvpResult.setData(count);
-        return new ResponseEntity<WVPResult<String>>(wvpResult, HttpStatus.OK);
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java
deleted file mode 100644
index b3de5af..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * 设备设置命令API接口
- * 
- * @author lawrencehj
- * @date 2021年2月2日
- */
-
-package com.genersoft.iot.vmp.vmanager.gb28181.device;
-
-import javax.sip.message.Response;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import java.util.UUID;
-
-@Api(tags = "国标设备配置")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/device/config")
-public class DeviceConfig {
-
-    private final static Logger logger = LoggerFactory.getLogger(DeviceQuery.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private DeferredResultHolder resultHolder;
-
-	/**
-	 * 看守位控制命令API接口
-	 * @param deviceId 设备ID
-	 * @param channelId 通道ID
-	 * @param name 名称
-	 * @param expiration 到期时间
-	 * @param heartBeatInterval 心跳间隔
-	 * @param heartBeatCount 心跳计数
-	 * @return
-	 */
-	@ApiOperation("基本配置设置命令")
-	@GetMapping("/basicParam/{deviceId}")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value ="设备ID" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道ID",dataTypeClass = String.class ),
-			@ApiImplicitParam(name = "name", value ="名称" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "expiration", value ="到期时间" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "heartBeatInterval", value ="心跳间隔" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "heartBeatCount", value ="心跳计数" ,dataTypeClass = String.class),
-	})
-	public DeferredResult<ResponseEntity<String>> homePositionApi(@PathVariable String deviceId,
-                                                               	String channelId,
-                                                                @RequestParam(required = false) String name,
-																@RequestParam(required = false) String expiration,
-																@RequestParam(required = false) String heartBeatInterval,
-                                                                @RequestParam(required = false) String heartBeatCount) {
-        if (logger.isDebugEnabled()) {
-			logger.debug("报警复位API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String uuid = UUID.randomUUID().toString();
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + deviceId + channelId;
-		cmder.deviceBasicConfigCmd(device, channelId, name, expiration, heartBeatInterval, heartBeatCount, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("设备配置操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		result.onTimeout(() -> {
-			logger.warn(String.format("设备配置操作超时, 设备未返回应答指令"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("Status", "Timeout");
-			json.put("Description", "设备配置操作超时, 设备未返回应答指令");
-			msg.setData(json); //("看守位控制操作超时, 设备未返回应答指令");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(key, uuid, result);
-		return result;
-	}
-
-	/**
-	 * 设备配置查询请求API接口
-	 * @param deviceId 设备ID
-	 * @param configType 配置类型
-	 * @param channelId 通道ID
-	 * @return
-	 */
-	@ApiOperation("设备配置查询请求")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value ="设备ID" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道ID" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "configType", value ="配置类型" ,dataTypeClass = String.class),
-	})
-	@GetMapping("/query/{deviceId}/{configType}")
-    public DeferredResult<ResponseEntity<String>> configDownloadApi(@PathVariable String deviceId, 
-                                                                @PathVariable String configType,
-                                                                @RequestParam(required = false) String channelId) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备状态查询API调用");
-		}
-		String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (StringUtils.isEmpty(channelId) ? deviceId : channelId);
-		String uuid = UUID.randomUUID().toString();
-		Device device = storager.queryVideoDevice(deviceId);
-		cmder.deviceConfigQuery(device, channelId, configType, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("获取设备配置失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String >> (3 * 1000L);
-		result.onTimeout(()->{
-			logger.warn(String.format("获取设备配置超时"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout. Device did not response to this command.");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(key, uuid, result);
-		return result;
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java
deleted file mode 100644
index 183561a..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/**
- * 设备控制命令API接口
- * 
- * @author lawrencehj
- * @date 2021年2月1日
- */
-
-package com.genersoft.iot.vmp.vmanager.gb28181.device;
-
-import javax.sip.message.Response;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import java.util.UUID;
-
-@Api(tags = "国标设备控制")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/device/control")
-public class DeviceControl {
-
-    private final static Logger logger = LoggerFactory.getLogger(DeviceQuery.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private DeferredResultHolder resultHolder;
-
-    /**
-     * 远程启动控制命令API接口
-     * 
-     * @param deviceId 设备ID
-     */
-	@ApiOperation("远程启动控制命令")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value ="设备ID", required = true, dataTypeClass = String.class),
-	})
-    @GetMapping("/teleboot/{deviceId}")
-    public ResponseEntity<String> teleBootApi(@PathVariable String deviceId) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("设备远程启动API调用");
-        }
-        Device device = storager.queryVideoDevice(deviceId);
-        boolean sucsess = cmder.teleBootCmd(device);
-        if (sucsess) {
-            JSONObject json = new JSONObject();
-            json.put("DeviceID", deviceId);
-            json.put("Result", "OK");
-            return new ResponseEntity<>(json.toJSONString(), HttpStatus.OK);
-        } else {
-            logger.warn("设备远程启动API调用失败!");
-            return new ResponseEntity<String>("设备远程启动API调用失败!", HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-    }
-
-    /**
-     * 录像控制命令API接口
-     * 
-     * @param deviceId 设备ID
-     * @param recordCmdStr  Record:手动录像,StopRecord:停止手动录像
-     * @param channelId     通道编码(可选)
-     */
-    @ApiOperation("录像控制命令")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value ="设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道编码" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "recordCmdStr", value ="命令, 可选值:Record(手动录像),StopRecord(停止手动录像)",
-					required = true ,dataTypeClass = String.class),
-	})
-    @GetMapping("/record/{deviceId}/{recordCmdStr}")
-    public DeferredResult<ResponseEntity<String>> recordApi(@PathVariable String deviceId,
-            @PathVariable String recordCmdStr, String channelId) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("开始/停止录像API调用");
-        }
-        Device device = storager.queryVideoDevice(deviceId);
-		String uuid = UUID.randomUUID().toString();
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL +  deviceId + channelId;
-		DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		result.onTimeout(() -> {
-			logger.warn(String.format("开始/停止录像操作超时, 设备未返回应答指令"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			msg.setData("Timeout. Device did not response to this command.");
-			resultHolder.invokeAllResult(msg);
-		});
-		if (resultHolder.exist(key, null)){
-			return result;
-		}
-		resultHolder.put(key, uuid, result);
-		cmder.recordCmd(device, channelId, recordCmdStr, event -> {
-            RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("开始/停止录像操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeAllResult(msg);
-		});
-
-		return result;
-	}
-
-	/**
-	 * 报警布防/撤防命令API接口
-	 * 
-	 * @param	deviceId 设备ID
-	 * @param	guardCmdStr SetGuard:布防,ResetGuard:撤防
-	 */
-	@ApiOperation("布防/撤防命令")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道编码" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "guardCmdStr", value ="命令, 可选值:SetGuard(布防),ResetGuard(撤防)", required = true,
-					dataTypeClass = String.class)
-	})
-	@GetMapping("/guard/{deviceId}/{guardCmdStr}")
-	public DeferredResult<ResponseEntity<String>> guardApi(@PathVariable String deviceId, String channelId, @PathVariable String guardCmdStr) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("布防/撤防API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId;
-		String uuid =UUID.randomUUID().toString();
-		cmder.guardCmd(device, guardCmdStr, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("布防/撤防操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		resultHolder.put(key, uuid, result);
-		result.onTimeout(() -> {
-			logger.warn(String.format("布防/撤防操作超时, 设备未返回应答指令"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			msg.setData("Timeout. Device did not response to this command.");
-			resultHolder.invokeResult(msg);
-		});
-
-		return result;
-	}
-
-	/**
-	 * 报警复位API接口
-	 * 
-	 * @param	deviceId 设备ID
-	 * @param	alarmMethod 报警方式(可选)
-	 * @param	alarmType   报警类型(可选)
-	 */
-	@ApiOperation("报警复位")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道编码" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "alarmMethod", value ="报警方式", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "alarmType", value ="报警类型", dataTypeClass = String.class),
-	})
-	@GetMapping("/reset_alarm/{deviceId}")
-	public DeferredResult<ResponseEntity<String>> resetAlarmApi(@PathVariable String deviceId, String channelId,
-																@RequestParam(required = false) String alarmMethod,
-																@RequestParam(required = false) String alarmType) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("报警复位API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String uuid = UUID.randomUUID().toString();
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId;
-		cmder.alarmCmd(device, alarmMethod, alarmType, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("报警复位操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		result.onTimeout(() -> {
-			logger.warn(String.format("报警复位操作超时, 设备未返回应答指令"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout. Device did not response to this command.");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(key, uuid, result);
-		return result;
-	}
-
-	/**
-	 * 强制关键帧API接口
-	 * 
-	 * @param	deviceId 设备ID
-	 * @param	channelId  通道ID
-	 */
-	@ApiOperation("强制关键帧")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道ID", required = true, dataTypeClass = String.class),
-	})
-	@GetMapping("/i_frame/{deviceId}")
-	public ResponseEntity<String> iFrame(@PathVariable String deviceId,
-										@RequestParam(required = false) String channelId) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("强制关键帧API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		boolean sucsess = cmder.iFrameCmd(device, channelId);
-		if (sucsess) {
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("ChannelID", channelId);
-			json.put("Result", "OK");
-			return new ResponseEntity<>(json.toJSONString(), HttpStatus.OK);
-		} else {
-			logger.warn("强制关键帧API调用失败!");
-			return new ResponseEntity<String>("强制关键帧API调用失败!", HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-
-	/**
-	 * 看守位控制命令API接口
-	 * 
-	 * @param deviceId 设备ID
-	 * @param enabled       看守位使能1:开启,0:关闭
-	 * @param resetTime     自动归位时间间隔(可选)
-     * @param presetIndex   调用预置位编号(可选)
-     * @param channelId     通道编码(可选)
-	 */
-	@ApiOperation("看守位控制")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道编码" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name = "enabled", value = "是否开启看守位 1:开启,0:关闭", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "resetTime", value = "自动归位时间间隔", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "presetIndex", value = "调用预置位编号", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value ="通道ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/home_position/{deviceId}/{enabled}")
-	public DeferredResult<ResponseEntity<String>> homePositionApi(@PathVariable String deviceId,
-																@PathVariable String enabled,
-																@RequestParam(required = false) String resetTime,
-																@RequestParam(required = false) String presetIndex,
-                                                                String channelId) {
-        if (logger.isDebugEnabled()) {
-			logger.debug("报警复位API调用");
-		}
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + (StringUtils.isEmpty(channelId) ? deviceId : channelId);
-		String uuid = UUID.randomUUID().toString();
-		Device device = storager.queryVideoDevice(deviceId);
-		cmder.homePositionCmd(device, channelId, enabled, resetTime, presetIndex, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("看守位控制操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		result.onTimeout(() -> {
-			logger.warn(String.format("看守位控制操作超时, 设备未返回应答指令"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("Status", "Timeout");
-			json.put("Description", "看守位控制操作超时, 设备未返回应答指令");
-			msg.setData(json); //("看守位控制操作超时, 设备未返回应答指令");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(key, uuid, result);
-		return result;
-	}
-
-	/**
-	 * 拉框放大
-	 * @param deviceId 设备id
-	 * @param channelId 通道id
-	 * @param length 播放窗口长度像素值
-	 * @param width 播放窗口宽度像素值
-	 * @param midpointx 拉框中心的横轴坐标像素值
-	 * @param midpointy 拉框中心的纵轴坐标像素值
-	 * @param lengthx 拉框长度像素值
-	 * @param lengthy 拉框宽度像素值
-	 * @return
-	 */
-	@ApiOperation("拉框放大")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "length", value = "播放窗口长度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "width", value = "播放窗口宽度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "midpointx", value = "拉框中心的横轴坐标像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "midpointy", value = "拉框中心的纵轴坐标像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "lengthx", value = "拉框长度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "lengthy", value = "拉框宽度像素值", required = true, dataTypeClass = Integer.class),
-	})
-	@GetMapping("drag_zoom/zoom_in")
-	public ResponseEntity<String> dragZoomIn(@RequestParam String deviceId,
-											 @RequestParam(required = false) String channelId,
-											 @RequestParam int length,
-											 @RequestParam int width,
-											 @RequestParam int midpointx,
-											 @RequestParam int midpointy,
-											 @RequestParam int lengthx,
-											 @RequestParam int lengthy){
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备拉框放大 API调用,deviceId:%s ,channelId:%s ,length:%d ,width:%d ,midpointx:%d ,midpointy:%d ,lengthx:%d ,lengthy:%d",deviceId, channelId, length, width, midpointx, midpointy,lengthx, lengthy));
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		StringBuffer cmdXml = new StringBuffer(200);
-		cmdXml.append("<DragZoomIn>\r\n");
-		cmdXml.append("<Length>" + length+ "</Length>\r\n");
-		cmdXml.append("<Width>" + width+ "</Width>\r\n");
-		cmdXml.append("<MidPointX>" + midpointx+ "</MidPointX>\r\n");
-		cmdXml.append("<MidPointY>" + midpointy+ "</MidPointY>\r\n");
-		cmdXml.append("<LengthX>" + lengthx+ "</LengthX>\r\n");
-		cmdXml.append("<LengthY>" + lengthy+ "</LengthY>\r\n");
-		cmdXml.append("</DragZoomIn>\r\n");
-		cmder.dragZoomCmd(device, channelId, cmdXml.toString());
-		return new ResponseEntity<String>("success", HttpStatus.OK);
-	}
-
-	/**
-	 * 拉框缩小
-	 * @param deviceId 设备id
-	 * @param channelId 通道id
-	 * @param length 播放窗口长度像素值
-	 * @param width 播放窗口宽度像素值
-	 * @param midpointx 拉框中心的横轴坐标像素值
-	 * @param midpointy 拉框中心的纵轴坐标像素值
-	 * @param lengthx 拉框长度像素值
-	 * @param lengthy 拉框宽度像素值
-	 * @return
-	 */
-	@ApiOperation("拉框缩小")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "length", value = "播放窗口长度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "width", value = "播放窗口宽度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "midpointx", value = "拉框中心的横轴坐标像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "midpointy", value = "拉框中心的纵轴坐标像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "lengthx", value = "拉框长度像素值", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "lengthy", value = "拉框宽度像素值", required = true, dataTypeClass = Integer.class),
-	})
-	@GetMapping("/drag_zoom/zoom_out")
-	public ResponseEntity<String> dragZoomOut(@RequestParam String deviceId,
-											  @RequestParam(required = false) String channelId,
-											  @RequestParam int length,
-											  @RequestParam int width,
-											  @RequestParam int midpointx,
-											  @RequestParam int midpointy,
-											  @RequestParam int lengthx,
-											  @RequestParam int lengthy){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备拉框缩小 API调用,deviceId:%s ,channelId:%s ,length:%d ,width:%d ,midpointx:%d ,midpointy:%d ,lengthx:%d ,lengthy:%d",deviceId, channelId, length, width, midpointx, midpointy,lengthx, lengthy));
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		StringBuffer cmdXml = new StringBuffer(200);
-		cmdXml.append("<DragZoomOut>\r\n");
-		cmdXml.append("<Length>" + length+ "</Length>\r\n");
-		cmdXml.append("<Width>" + width+ "</Width>\r\n");
-		cmdXml.append("<MidPointX>" + midpointx+ "</MidPointX>\r\n");
-		cmdXml.append("<MidPointY>" + midpointy+ "</MidPointY>\r\n");
-		cmdXml.append("<LengthX>" + lengthx+ "</LengthX>\r\n");
-		cmdXml.append("<LengthY>" + lengthy+ "</LengthY>\r\n");
-		cmdXml.append("</DragZoomOut>\r\n");
-		cmder.dragZoomCmd(device, channelId, cmdXml.toString());
-		return new ResponseEntity<String>("success",HttpStatus.OK);
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
deleted file mode 100644
index c1a94c3..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ /dev/null
@@ -1,490 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.device;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.service.IDeviceService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-import java.util.UUID;
-
-@Api(tags = "国标设备查询", value = "国标设备查询")
-@SuppressWarnings("rawtypes")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/device/query")
-public class DeviceQuery {
-
-	private final static Logger logger = LoggerFactory.getLogger(DeviceQuery.class);
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	@Autowired
-	private DeviceOffLineDetector offLineDetector;
-
-	@Autowired
-	private IDeviceService deviceService;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-	/**
-	 * 使用ID查询国标设备
-	 * @param deviceId 国标ID
-	 * @return 国标设备
-	 */
-	@ApiOperation("使用ID查询国标设备")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", required = true, dataTypeClass = String.class),
-	})
-	@GetMapping("/devices/{deviceId}")
-	public ResponseEntity<Device> devices(@PathVariable String deviceId){
-
-//		if (logger.isDebugEnabled()) {
-//			logger.debug("查询视频设备API调用,deviceId:" + deviceId);
-//		}
-
-		Device device = storager.queryVideoDevice(deviceId);
-		return new ResponseEntity<>(device,HttpStatus.OK);
-	}
-
-	/**
-	 * 分页查询国标设备
-	 * @param page 当前页
-	 * @param count 每页查询数量
-	 * @return 分页国标列表
-	 */
-	@ApiOperation("分页查询国标设备")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "page", value = "当前页", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),
-	})
-	@GetMapping("/devices")
-	public PageInfo<Device> devices(int page, int count){
-
-//		if (logger.isDebugEnabled()) {
-//			logger.debug("查询所有视频设备API调用");
-//		}
-
-		return storager.queryVideoDeviceList(page, count);
-	}
-
-	/**
-	 * 分页查询通道数
-	 *
-	 * @param deviceId 设备id
-	 * @param page 当前页
-	 * @param count 每页条数
-	 * @param query 查询内容
-	 * @param online 是否在线  在线 true / 离线 false
-	 * @param channelType 设备 false/子目录 true
-	 * @return 通道列表
-	 */
-	@ApiOperation("分页查询通道")
-	@GetMapping("/devices/{deviceId}/channels")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true ,dataTypeClass = String.class),
-			@ApiImplicitParam(name="page", value = "当前页", required = true ,dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="count", value = "每页查询数量", required = true ,dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="query", value = "查询内容" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name="online", value = "是否在线"  ,dataTypeClass = Boolean.class),
-			@ApiImplicitParam(name="channelType", value = "设备/子目录-> false/true" ,dataTypeClass = Boolean.class),
-	})
-	public ResponseEntity<PageInfo> channels(@PathVariable String deviceId,
-											   int page, int count,
-											   @RequestParam(required = false) String query,
-											   @RequestParam(required = false) Boolean online,
-											   @RequestParam(required = false) Boolean channelType) {
-//		if (logger.isDebugEnabled()) {
-//			logger.debug("查询视频设备通道API调用");
-//		}
-		if (StringUtils.isEmpty(query)) {
-			query = null;
-		}
-
-		PageInfo pageResult = storager.queryChannelsByDeviceId(deviceId, query, channelType, online, page, count);
-		return new ResponseEntity<>(pageResult,HttpStatus.OK);
-	}
-
-	/**
-	 * 分页查询通道数(车辆/摄像头)
-	 *
-	 * @param deviceId 设备id
-	 * @param page 当前页
-	 * @param count 每页条数
-	 * @param query 查询内容
-	 * @param type 类型
-	 * @param online 是否在线  在线 true / 离线 false
-	 * @param channelType 设备 false/子目录 true
-	 * @return 通道列表
-	 */
-	@ApiOperation("分页查询通道")
-	@GetMapping("/devices/{deviceId}/channelsCar")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true ,dataTypeClass = String.class),
-			@ApiImplicitParam(name="page", value = "当前页", required = true ,dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="count", value = "每页查询数量", required = true ,dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="query", value = "查询内容" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name="type", value = "设备类型" ,dataTypeClass = String.class),
-			@ApiImplicitParam(name="online", value = "是否在线"  ,dataTypeClass = Boolean.class),
-			@ApiImplicitParam(name="channelType", value = "设备/子目录-> false/true" ,dataTypeClass = Boolean.class),
-	})
-	public ResponseEntity<PageInfo> channelsCar(@PathVariable String deviceId,
-											 int page, int count,
-											 @RequestParam(required = false) String query,
-											 @RequestParam(required = false) String type,
-											 @RequestParam(required = false) Boolean online,
-											 @RequestParam(required = false) Boolean channelType,HttpServletResponse response) {
-//		if (logger.isDebugEnabled()) {
-//			logger.debug("查询视频设备通道API调用");
-//		}
-
-		response.setHeader("Access-Control-Allow-Origin", "*");
-		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
-		response.setHeader("Access-Control-Allow-Credentials","true");
-
-		if (StringUtils.isEmpty(query)) {
-			query = null;
-		}
-
-		PageInfo pageResult = storager.queryChannelsCarByDeviceId(deviceId, query,type, channelType, online, page, count);
-		return new ResponseEntity<>(pageResult,HttpStatus.OK);
-	}
-
-
-	/**
-	 * 同步设备通道
-	 * @param deviceId 设备id
-	 * @return
-	 */
-	@ApiOperation("同步设备通道")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-	})
-	@PostMapping("/devices/{deviceId}/sync")
-	public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备通道信息同步API调用,deviceId:" + deviceId);
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
-		String uuid = UUID.randomUUID().toString();
-		// 默认超时时间为30分钟
-		DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(30*60*1000L);
-		result.onTimeout(()->{
-			logger.warn("设备[{}]通道信息同步超时", deviceId);
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			WVPResult<Object> wvpResult = new WVPResult<>();
-			wvpResult.setCode(-1);
-			wvpResult.setData(device);
-			wvpResult.setMsg("更新超时");
-			msg.setData(wvpResult);
-			resultHolder.invokeAllResult(msg);
-
-		});
-		// 等待其他相同请求返回时一起返回
-		if (resultHolder.exist(key, null)) {
-			return result;
-		}
-        cmder.catalogQuery(device, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			WVPResult<Object> wvpResult = new WVPResult<>();
-			wvpResult.setCode(-1);
-			wvpResult.setData(device);
-			wvpResult.setMsg(String.format("同步通道失败,错误码: %s, %s", event.statusCode, event.msg));
-			msg.setData(wvpResult);
-			resultHolder.invokeAllResult(msg);
-		});
-
-        resultHolder.put(key, uuid, result);
-        return result;
-	}
-
-	/**
-	 * 移除设备
-	 * @param deviceId 设备id
-	 * @return
-	 */
-	@ApiOperation("移除设备")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-	})
-	@DeleteMapping("/devices/{deviceId}/delete")
-	public ResponseEntity<String> delete(@PathVariable String deviceId){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备信息删除API调用,deviceId:" + deviceId);
-		}
-
-		// 清除redis记录
-		boolean isSuccess = storager.delete(deviceId);
-		if (isSuccess) {
-			redisCatchStorage.clearCatchByDeviceId(deviceId);
-			// 停止此设备的订阅更新
-			dynamicTask.stop(deviceId);
-			JSONObject json = new JSONObject();
-			json.put("deviceId", deviceId);
-			return new ResponseEntity<>(json.toString(),HttpStatus.OK);
-		} else {
-			logger.warn("设备信息删除API调用失败!");
-			return new ResponseEntity<String>("设备信息删除API调用失败!", HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-
-	/**
-	 * 分页查询子目录通道
-	 * @param deviceId 通道id
-	 * @param channelId 通道id
-	 * @param page 当前页
-	 * @param count 每页条数
-	 * @param query 查询内容
-	 * @param online 是否在线
-	 * @param channelType 通道类型
-	 * @return 子通道列表
-	 */
-	@ApiOperation("分页查询子目录通道")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name="channelId", value = "通道id", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="count", value = "每页条数", required = true, dataTypeClass = Integer.class),
-			@ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
-			@ApiImplicitParam(name="online", value = "是否在线", dataTypeClass = String.class),
-			@ApiImplicitParam(name="channelType", value = "通道类型, 子目录", dataTypeClass = Boolean.class),
-	})
-	@GetMapping("/sub_channels/{deviceId}/{channelId}/channels")
-	public ResponseEntity<PageInfo> subChannels(@PathVariable String deviceId,
-												  @PathVariable String channelId,
-												  int page,
-												  int count,
-												  @RequestParam(required = false) String query,
-												  @RequestParam(required = false) String online,
-												  @RequestParam(required = false) Boolean channelType){
-
-//		if (logger.isDebugEnabled()) {
-//			logger.debug("查询所有视频通道API调用");
-//		}
-		DeviceChannel deviceChannel = storager.queryChannel(deviceId,channelId);
-		if (deviceChannel == null) {
-			PageInfo<DeviceChannel> deviceChannelPageResult = new PageInfo<>();
-			return new ResponseEntity<>(deviceChannelPageResult,HttpStatus.OK);
-		}
-
-		PageInfo pageResult = storager.querySubChannels(deviceId, channelId, query, channelType, online, page, count);
-		return new ResponseEntity<>(pageResult,HttpStatus.OK);
-	}
-
-	/**
-	 * 更新通道信息
-	 * @param deviceId 设备id
-	 * @param channel 通道
-	 * @return
-	 */
-	@ApiOperation("更新通道信息")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name="channel", value = "通道", required = true, dataTypeClass = String.class),
-	})
-	@PostMapping("/channel/update/{deviceId}")
-	public ResponseEntity<PageInfo> updateChannel(@PathVariable String deviceId,DeviceChannel channel){
-		storager.updateChannel(deviceId, channel);
-		return new ResponseEntity<>(null,HttpStatus.OK);
-	}
-
-	/**
-	 * 修改数据流传输模式
-	 * @param deviceId 设备id
-	 * @param streamMode 数据流传输模式
-	 * @return
-	 */
-	@ApiOperation("修改数据流传输模式")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "streamMode", value = "数据流传输模式, 取值:" +
-					"UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)", dataTypeClass = String.class),
-	})
-	@PostMapping("/transport/{deviceId}/{streamMode}")
-	public ResponseEntity<PageInfo> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){
-		Device device = storager.queryVideoDevice(deviceId);
-		device.setStreamMode(streamMode);
-		storager.updateDevice(device);
-		return new ResponseEntity<>(null,HttpStatus.OK);
-	}
-
-	/**
-	 * 更新设备信息
-	 * @param device 设备信息
-	 * @return
-	 */
-	@ApiOperation("更新设备信息")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "device", value = "设备信息", required = true, dataTypeClass = Device.class)
-	})
-	@PostMapping("/device/update/")
-	public ResponseEntity<WVPResult<String>> updateDevice(Device device){
-
-		if (device != null && device.getDeviceId() != null) {
-			Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
-			if (!StringUtils.isEmpty(device.getName())) deviceInStore.setName(device.getName());
-			if (!StringUtils.isEmpty(device.getCharset())) deviceInStore.setCharset(device.getCharset());
-			if (!StringUtils.isEmpty(device.getMediaServerId())) deviceInStore.setMediaServerId(device.getMediaServerId());
-
-			if (device.getSubscribeCycleForCatalog() > 0) {
-				if (deviceInStore.getSubscribeCycleForCatalog() == 0 || deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) {
-					// 开启订阅
-					deviceService.addCatalogSubscribe(deviceInStore);
-				}
-			}else if (device.getSubscribeCycleForCatalog() == 0) {
-				if (deviceInStore.getSubscribeCycleForCatalog() != 0) {
-					// 取消订阅
-					deviceService.removeCatalogSubscribe(deviceInStore);
-				}
-			}
-
-			storager.updateDevice(device);
-			cmder.deviceInfoQuery(device);
-		}
-		WVPResult<String> result = new WVPResult<>();
-		result.setCode(0);
-		result.setMsg("success");
-		return new ResponseEntity<>(result,HttpStatus.OK);
-	}
-
-	/**
-	 * 设备状态查询请求API接口
-	 *
-	 * @param deviceId 设备id
-	 */
-	@ApiOperation("设备状态查询")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-	})
-	@GetMapping("/devices/{deviceId}/status")
-	public DeferredResult<ResponseEntity<String>> deviceStatusApi(@PathVariable String deviceId) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备状态查询API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String uuid = UUID.randomUUID().toString();
-		String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId;
-		cmder.deviceStatusQuery(device, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("获取设备状态失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L);
-		result.onTimeout(()->{
-			logger.warn(String.format("获取设备状态超时"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout. Device did not response to this command.");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId, uuid, result);
-		return result;
-	}
-
-	/**
-	 * 设备报警查询请求API接口
-	 * @param deviceId 设备id
-	 * @param startPriority	报警起始级别(可选)
-	 * @param endPriority	报警终止级别(可选)
-	 * @param alarmMethod	报警方式条件(可选)
-	 * @param alarmType		报警类型
-	 * @param startTime		报警发生起始时间(可选)
-	 * @param endTime		报警发生终止时间(可选)
-	 * @return				true = 命令发送成功
-	 */
-	@ApiOperation("设备报警查询")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备id", required = true, dataTypeClass = String.class),
-			@ApiImplicitParam(name = "startPriority", value = "报警起始级别", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "endPriority", value = "报警终止级别", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "alarmMethod", value = "报警方式条件", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "alarmType", value = "报警类型", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "startTime", value = "报警发生起始时间", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "endTime", value = "报警发生终止时间", dataTypeClass = String.class),
-	})
-	@GetMapping("/alarm/{deviceId}")
-	public DeferredResult<ResponseEntity<String>> alarmApi(@PathVariable String deviceId,
-														@RequestParam(required = false) String startPriority,
-														@RequestParam(required = false) String endPriority,
-														@RequestParam(required = false) String alarmMethod,
-														@RequestParam(required = false) String alarmType,
-														@RequestParam(required = false) String startTime,
-														@RequestParam(required = false) String endTime) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备报警查询API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String key = DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId;
-		String uuid = UUID.randomUUID().toString();
-		cmder.alarmInfoQuery(device, startPriority, endPriority, alarmMethod, alarmType, startTime, endTime, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("设备报警查询失败,错误码: %s, %s",event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String >> (3 * 1000L);
-		result.onTimeout(()->{
-			logger.warn(String.format("设备报警查询超时"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("设备报警查询超时");
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId, uuid, result);
-		return result;
-	}
-
-	@GetMapping("/{deviceId}/tree")
-	@ApiOperation(value = "通道树形结构", notes = "通道树形结构")
-	public WVPResult<List<DeviceChannelTree>> tree(@PathVariable String deviceId) {
-		return WVPResult.Data(storager.tree(deviceId));
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
deleted file mode 100644
index 46be681..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.gbStream;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.gb28181.gbStream.bean.GbStreamParam;
-import com.genersoft.iot.vmp.service.IGbStreamService;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-@Api(tags = "视频流关联到级联平台")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/gbStream")
-public class GbStreamController {
-
-    private final static Logger logger = LoggerFactory.getLogger(GbStreamController.class);
-
-    @Autowired
-    private IGbStreamService gbStreamService;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-
-    /**
-     * 查询国标通道
-     * @param page 当前页
-     * @param count 每页条数
-     * @param platformId 平台ID
-     * @return
-     */
-    @ApiOperation("查询国标通道")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "page", value = "当前页", required = true , dataTypeClass = Integer.class),
-            @ApiImplicitParam(name = "count", value = "每页条数", required = true , dataTypeClass = Integer.class),
-            @ApiImplicitParam(name = "platformId", value = "平台ID", required = true , dataTypeClass = String.class),
-            @ApiImplicitParam(name = "catalogId", value = "目录ID", required = false , dataTypeClass = String.class),
-            @ApiImplicitParam(name="query", value = "查询内容", required = false , dataTypeClass = String.class),
-            @ApiImplicitParam(name="pushing", value = "是否正在推流", required = false , dataTypeClass = Boolean.class),
-            @ApiImplicitParam(name="mediaServerId", value = "流媒体ID", required = false , dataTypeClass = String.class),
-
-    })
-    @GetMapping(value = "/list")
-    @ResponseBody
-    public PageInfo<GbStream> list(@RequestParam(required = true)Integer page,
-                                   @RequestParam(required = true)Integer count,
-                                   @RequestParam(required = true)String platformId,
-                                   @RequestParam(required = false)String catalogId,
-                                   @RequestParam(required = false)String query,
-                                   @RequestParam(required = false)Boolean pushing,
-                                   @RequestParam(required = false)String mediaServerId){
-        if (StringUtils.isEmpty(catalogId)) {
-            catalogId = null;
-        }
-        if (StringUtils.isEmpty(query)) {
-            query = null;
-        }
-        if (StringUtils.isEmpty(mediaServerId)) {
-            mediaServerId = null;
-        }
-
-        // catalogId 为null 查询未在平台下分配的数据
-        // catalogId 不为null 查询平台下这个,目录下的通道
-        return gbStreamService.getAll(page, count, platformId, catalogId, query, pushing, mediaServerId);
-    }
-
-
-    /**
-     * 移除国标关联
-     * @param gbStreamParam
-     * @return
-     */
-    @ApiOperation("移除国标关联")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true,
-                    dataTypeClass = GbStreamParam.class),
-    })
-    @DeleteMapping(value = "/del")
-    @ResponseBody
-    public Object del(@RequestBody GbStreamParam gbStreamParam){
-        if (gbStreamService.delPlatformInfo(gbStreamParam.getPlatformId(), gbStreamParam.getGbStreams())) {
-            return "success";
-        }else {
-            return "fail";
-        }
-
-    }
-
-    /**
-     * 保存国标关联
-     * @param gbStreamParam
-     * @return
-     */
-    @ApiOperation("保存国标关联")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true, dataTypeClass = GbStreamParam.class),
-    })
-    @PostMapping(value = "/add")
-    @ResponseBody
-    public Object add(@RequestBody GbStreamParam gbStreamParam){
-        if (gbStreamService.addPlatformInfo(gbStreamParam.getGbStreams(), gbStreamParam.getPlatformId(), gbStreamParam.getCatalogId())) {
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java
deleted file mode 100644
index a377c1c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.gbStream.bean;
-
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-
-import java.util.List;
-
-public class GbStreamParam {
-
-    private String platformId;
-
-    private String catalogId;
-
-    private List<GbStream> gbStreams;
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public List<GbStream> getGbStreams() {
-        return gbStreams;
-    }
-
-    public void setGbStreams(List<GbStream> gbStreams) {
-        this.gbStreams = gbStreams;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
deleted file mode 100644
index e07c81d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.media;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-
-@Api(tags = "媒体流相关")
-@Controller
-@CrossOrigin
-@RequestMapping(value = "/api/media")
-public class MediaController {
-
-    private final static Logger logger = LoggerFactory.getLogger(MediaController.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IStreamPushService streamPushService;
-
-    @Autowired
-    private IMediaService mediaService;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-
-    /**
-     * 根据应用名和流id获取播放地址
-     * @param app 应用名
-     * @param stream 流id
-     * @return
-     */
-    @ApiOperation("根据应用名和流id获取播放地址")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "stream", value = "流id", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "mediaServerId", value = "媒体服务器id", dataTypeClass = String.class, required = false),
-    })
-    @GetMapping(value = "/stream_info_by_app_and_stream")
-    @ResponseBody
-    public WVPResult<StreamInfo> getStreamInfoByAppAndStream(@RequestParam String app, @RequestParam String stream, @RequestParam(required = false) String mediaServerId){
-        StreamInfo streamInfoByAppAndStreamWithCheck = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId);
-        WVPResult<StreamInfo> result = new WVPResult<>();
-        if (streamInfoByAppAndStreamWithCheck != null){
-            result.setCode(0);
-            result.setMsg("scccess");
-            result.setData(streamInfoByAppAndStreamWithCheck);
-        }else {
-            result.setCode(-1);
-            result.setMsg("fail");
-        }
-        return result;
-    }
-
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
deleted file mode 100644
index b26ae76..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
+++ /dev/null
@@ -1,647 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.platform;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
-import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.UpdateChannelParam;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import com.genersoft.iot.vmp.conf.SipConfig;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * 级联平台管理
- */
-@Api(tags = "级联平台管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/platform")
-public class PlatformController {
-
-    private final static Logger logger = LoggerFactory.getLogger(PlatformController.class);
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private SubscribeHolder subscribeHolder;
-
-    @Autowired
-    private ISIPCommanderForPlatform commanderForPlatform;
-
-    @Autowired
-    private SipConfig sipConfig;
-
-	@Autowired
-	private DynamicTask dynamicTask;
-
-    /**
-     * 获取国标服务的配置
-     *
-     * @return
-     */
-    @ApiOperation("获取国标服务的配置")
-    @GetMapping("/server_config")
-    public ResponseEntity<JSONObject> serverConfig() {
-        JSONObject result = new JSONObject();
-        result.put("deviceIp", sipConfig.getIp());
-        result.put("devicePort", sipConfig.getPort());
-        result.put("username", sipConfig.getId());
-        result.put("password", sipConfig.getPassword());
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    /**
-     * 获取级联服务器信息
-     *
-     * @return
-     */
-    @ApiOperation("获取国标服务的配置")
-    @GetMapping("/info/{id}")
-    public ResponseEntity<WVPResult<ParentPlatform>> getPlatform(@PathVariable String id) {
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(id);
-        WVPResult<ParentPlatform> wvpResult = new WVPResult<>();
-        if (parentPlatform != null) {
-            wvpResult.setCode(0);
-            wvpResult.setMsg("success");
-            wvpResult.setData(parentPlatform);
-        } else {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("未查询到此平台");
-        }
-        return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-    }
-
-    /**
-     * 分页查询级联平台
-     *
-     * @param page  当前页
-     * @param count 每页条数
-     * @return
-     */
-    @ApiOperation("分页查询级联平台")
-    @GetMapping("/query/{count}/{page}")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "page", value = "当前页", dataTypeClass = Integer.class),
-            @ApiImplicitParam(name = "count", value = "每页条数", dataTypeClass = Integer.class),
-    })
-    public PageInfo<ParentPlatform> platforms(@PathVariable int page, @PathVariable int count) {
-
-        PageInfo<ParentPlatform> parentPlatformPageInfo = storager.queryParentPlatformList(page, count);
-        if (parentPlatformPageInfo.getList().size() > 0) {
-            for (ParentPlatform platform : parentPlatformPageInfo.getList()) {
-                platform.setGpsSubscribe(subscribeHolder.getMobilePositionSubscribe(platform.getServerGBId()) != null);
-                platform.setCatalogSubscribe(subscribeHolder.getCatalogSubscribe(platform.getServerGBId()) != null);
-            }
-        }
-        return parentPlatformPageInfo;
-    }
-
-    /**
-     * 添加上级平台信息
-     *
-     * @param parentPlatform
-     * @return
-     */
-    @ApiOperation("添加上级平台信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "parentPlatform", value = "上级平台信息", dataTypeClass = ParentPlatform.class),
-    })
-    @PostMapping("/add")
-    @ResponseBody
-    public ResponseEntity<WVPResult<String>> addPlatform(@RequestBody ParentPlatform parentPlatform) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("保存上级平台信息API调用");
-        }
-        WVPResult<String> wvpResult = new WVPResult<>();
-        if (StringUtils.isEmpty(parentPlatform.getName())
-                || StringUtils.isEmpty(parentPlatform.getServerGBId())
-                || StringUtils.isEmpty(parentPlatform.getServerGBDomain())
-                || StringUtils.isEmpty(parentPlatform.getServerIP())
-                || StringUtils.isEmpty(parentPlatform.getServerPort())
-                || StringUtils.isEmpty(parentPlatform.getDeviceGBId())
-                || StringUtils.isEmpty(parentPlatform.getExpires())
-                || StringUtils.isEmpty(parentPlatform.getKeepTimeout())
-                || StringUtils.isEmpty(parentPlatform.getTransport())
-                || StringUtils.isEmpty(parentPlatform.getCharacterSet())
-        ) {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("missing parameters");
-            return new ResponseEntity<>(wvpResult, HttpStatus.BAD_REQUEST);
-        }
-        if (parentPlatform.getServerPort() < 0 || parentPlatform.getServerPort() > 65535) {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("error severPort");
-            return new ResponseEntity<>(wvpResult, HttpStatus.BAD_REQUEST);
-        }
-
-        ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId());
-        if (parentPlatformOld != null) {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("平台 " + parentPlatform.getServerGBId() + " 已存在");
-            return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-        }
-        boolean updateResult = storager.updateParentPlatform(parentPlatform);
-
-        if (updateResult) {
-            // 保存时启用就发送注册
-            if (parentPlatform.isEnable()) {
-                if (parentPlatformOld != null && parentPlatformOld.isStatus()) {
-                    commanderForPlatform.unregister(parentPlatformOld, null, eventResult -> {
-                        //  只要保存就发送注册
-                        commanderForPlatform.register(parentPlatform, null, null);
-                    });
-                } else {
-                    //  只要保存就发送注册
-                    commanderForPlatform.register(parentPlatform, null, null);
-                }
-
-            } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()) { // 关闭启用时注销
-                commanderForPlatform.unregister(parentPlatform, null, null);
-            }
-            wvpResult.setCode(0);
-            wvpResult.setMsg("success");
-            return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-        } else {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("写入数据库失败");
-            return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 保存上级平台信息
-     *
-     * @param parentPlatform
-     * @return
-     */
-    @ApiOperation("保存上级平台信息")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "parentPlatform", value = "上级平台信息", dataTypeClass = ParentPlatform.class),
-    })
-    @PostMapping("/save")
-    @ResponseBody
-    public ResponseEntity<WVPResult<String>> savePlatform(@RequestBody ParentPlatform parentPlatform) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("保存上级平台信息API调用");
-        }
-        WVPResult<String> wvpResult = new WVPResult<>();
-        if (StringUtils.isEmpty(parentPlatform.getName())
-                || StringUtils.isEmpty(parentPlatform.getServerGBId())
-                || StringUtils.isEmpty(parentPlatform.getServerGBDomain())
-                || StringUtils.isEmpty(parentPlatform.getServerIP())
-                || StringUtils.isEmpty(parentPlatform.getServerPort())
-                || StringUtils.isEmpty(parentPlatform.getDeviceGBId())
-                || StringUtils.isEmpty(parentPlatform.getExpires())
-                || StringUtils.isEmpty(parentPlatform.getKeepTimeout())
-                || StringUtils.isEmpty(parentPlatform.getTransport())
-                || StringUtils.isEmpty(parentPlatform.getCharacterSet())
-        ) {
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("missing parameters");
-            return new ResponseEntity<>(wvpResult, HttpStatus.BAD_REQUEST);
-        }
-        parentPlatform.setCharacterSet(parentPlatform.getCharacterSet().toUpperCase());
-        ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId());
-
-        boolean updateResult = storager.updateParentPlatform(parentPlatform);
-
-        if (updateResult) {
-            // 保存时启用就发送注册
-            if (parentPlatform.isEnable()) {
-                if (parentPlatformOld != null && parentPlatformOld.isStatus()) {
-                    commanderForPlatform.unregister(parentPlatformOld, null, null);
-                    try {
-                        Thread.sleep(500);
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                    //  只要保存就发送注册
-                    commanderForPlatform.register(parentPlatform, null, null);
-                } else {
-                    //  只要保存就发送注册
-                    commanderForPlatform.register(parentPlatform, null, null);
-                }
-            } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()) { // 关闭启用时注销
-                commanderForPlatform.unregister(parentPlatformOld, null, null);
-            }
-            wvpResult.setCode(0);
-            wvpResult.setMsg("success");
-            return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-        } else {
-            wvpResult.setCode(0);
-            wvpResult.setMsg("写入数据库失败");
-            return new ResponseEntity<>(wvpResult, HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 删除上级平台
-     *
-     * @param serverGBId 上级平台国标ID
-     * @return
-     */
-    @ApiOperation("删除上级平台")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "serverGBId", value = "上级平台国标ID", dataTypeClass = String.class),
-    })
-    @DeleteMapping("/delete/{serverGBId}")
-    @ResponseBody
-    public ResponseEntity<String> deletePlatform(@PathVariable String serverGBId) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("删除上级平台API调用");
-        }
-        if (StringUtils.isEmpty(serverGBId)
-        ) {
-            return new ResponseEntity<>("missing parameters", HttpStatus.BAD_REQUEST);
-        }
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(serverGBId);
-        if (parentPlatform == null) return new ResponseEntity<>("fail", HttpStatus.OK);
-        // 发送离线消息,无论是否成功都删除缓存
-        commanderForPlatform.unregister(parentPlatform, (event -> {
-            // 清空redis缓存
-            redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
-            redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
-            redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
-        }), (event -> {
-            // 清空redis缓存
-            redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
-            redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
-            redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
-        }));
-
-        boolean deleteResult = storager.deleteParentPlatform(parentPlatform);
-        storager.delCatalogByPlatformId(parentPlatform.getServerGBId());
-        storager.delRelationByPlatformId(parentPlatform.getServerGBId());
-        // 停止发送位置订阅定时任务
-        String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() +  "_MobilePosition_" + parentPlatform.getServerGBId();
-        dynamicTask.stop(key);
-        // 删除缓存的订阅信息
-        subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId());
-        if (deleteResult) {
-            return new ResponseEntity<>("success", HttpStatus.OK);
-        } else {
-            return new ResponseEntity<>("fail", HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 查询上级平台是否存在
-     *
-     * @param serverGBId 上级平台国标ID
-     * @return
-     */
-    @ApiOperation("查询上级平台是否存在")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "serverGBId", value = "上级平台国标ID", dataTypeClass = String.class),
-    })
-    @GetMapping("/exit/{serverGBId}")
-    @ResponseBody
-    public ResponseEntity<String> exitPlatform(@PathVariable String serverGBId) {
-
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询上级平台是否存在API调用:" + serverGBId);
-//        }
-        ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(serverGBId);
-        return new ResponseEntity<>(String.valueOf(parentPlatform != null), HttpStatus.OK);
-    }
-
-    /**
-     * 分页查询级联平台的所有所有通道
-     *
-     * @param page        当前页
-     * @param count       每页条数
-     * @param platformId  上级平台ID
-     * @param query       查询内容
-     * @param online      是否在线
-     * @param channelType 通道类型
-     * @return
-     */
-    @ApiOperation("分页查询级联平台的所有所有通道")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "page", value = "当前页", dataTypeClass = Integer.class),
-            @ApiImplicitParam(name = "count", value = "每页条数", dataTypeClass = Integer.class),
-            @ApiImplicitParam(name = "platformId", value = "上级平台ID", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "catalogId", value = "目录ID", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "query", value = "查询内容", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "online", value = "是否在线", dataTypeClass = Boolean.class),
-            @ApiImplicitParam(name = "channelType", value = "通道类型", dataTypeClass = Boolean.class),
-    })
-    @GetMapping("/channel_list")
-    @ResponseBody
-    public PageInfo<ChannelReduce> channelList(int page, int count,
-                                               @RequestParam(required = false) String platformId,
-                                               @RequestParam(required = false) String catalogId,
-                                               @RequestParam(required = false) String query,
-                                               @RequestParam(required = false) Boolean online,
-                                               @RequestParam(required = false) Boolean channelType) {
-
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询所有所有通道API调用");
-//        }
-        if (StringUtils.isEmpty(platformId)) {
-            platformId = null;
-        }
-        if (StringUtils.isEmpty(query)) {
-            query = null;
-        }
-        if (StringUtils.isEmpty(platformId) || StringUtils.isEmpty(catalogId)) {
-            catalogId = null;
-        }
-        PageInfo<ChannelReduce> channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, platformId, catalogId);
-
-        return channelReduces;
-    }
-
-    /**
-     * 向上级平台添加国标通道
-     *
-     * @param param 通道关联参数
-     * @return
-     */
-    @ApiOperation("向上级平台添加国标通道")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "param", value = "通道关联参数", dataTypeClass = UpdateChannelParam.class),
-    })
-    @PostMapping("/update_channel_for_gb")
-    @ResponseBody
-    public ResponseEntity<String> updateChannelForGB(@RequestBody UpdateChannelParam param) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("给上级平台添加国标通道API调用");
-        }
-        int result = storager.updateChannelForGB(param.getPlatformId(), param.getChannelReduces(), param.getCatalogId());
-
-        return new ResponseEntity<>(String.valueOf(result > 0), HttpStatus.OK);
-    }
-
-    /**
-     * 从上级平台移除国标通道
-     *
-     * @param param 通道关联参数
-     * @return
-     */
-    @ApiOperation("从上级平台移除国标通道")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "param", value = "通道关联参数", dataTypeClass = UpdateChannelParam.class),
-    })
-    @DeleteMapping("/del_channel_for_gb")
-    @ResponseBody
-    public ResponseEntity<String> delChannelForGB(@RequestBody UpdateChannelParam param) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("给上级平台删除国标通道API调用");
-        }
-        int result = storager.delChannelForGB(param.getPlatformId(), param.getChannelReduces());
-
-        return new ResponseEntity<>(String.valueOf(result > 0), HttpStatus.OK);
-    }
-
-    /**
-     * 获取目录
-     *
-     * @param platformId 平台ID
-     * @param parentId   目录父ID
-     * @return
-     */
-    @ApiOperation("获取目录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "platformId", value = "平台ID", dataTypeClass = String.class, required = true),
-            @ApiImplicitParam(name = "parentId", value = "目录父ID", dataTypeClass = String.class, required = true),
-    })
-    @GetMapping("/catalog")
-    @ResponseBody
-    public ResponseEntity<WVPResult<List<PlatformCatalog>>> getCatalogByPlatform(String platformId, String parentId) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("查询目录,platformId: {}, parentId: {}", platformId, parentId);
-        }
-        List<PlatformCatalog> platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId);
-        // 查询下属的国标通道
-//        List<PlatformCatalog> catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId);
-        // 查询下属的直播流通道
-//        List<PlatformCatalog> catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId);
-//        platformCatalogList.addAll(catalogsForChannel);
-//        platformCatalogList.addAll(catalogsForStream);
-        WVPResult<List<PlatformCatalog>> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(platformCatalogList);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    /**
-     * 添加目录
-     *
-     * @param platformCatalog 目录
-     * @return
-     */
-    @ApiOperation("添加目录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "platformCatalog", value = "目录信息", dataTypeClass = PlatformCatalog.class, required = true),
-    })
-    @PostMapping("/catalog/add")
-    @ResponseBody
-    public ResponseEntity<WVPResult<List<PlatformCatalog>>> addCatalog(@RequestBody PlatformCatalog platformCatalog) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("添加目录,{}", JSON.toJSONString(platformCatalog));
-        }
-        PlatformCatalog platformCatalogInStore = storager.getCatalog(platformCatalog.getId());
-        WVPResult<List<PlatformCatalog>> result = new WVPResult<>();
-
-
-        if (platformCatalogInStore != null) {
-            result.setCode(-1);
-            result.setMsg(platformCatalog.getId() + " already exists");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-        int addResult = storager.addCatalog(platformCatalog);
-        if (addResult > 0) {
-            result.setCode(0);
-            result.setMsg("success");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        } else {
-            result.setCode(-500);
-            result.setMsg("save error");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 编辑目录
-     *
-     * @param platformCatalog 目录
-     * @return
-     */
-    @ApiOperation("编辑目录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "platformCatalog", value = "目录信息", dataTypeClass = PlatformCatalog.class, required = true),
-    })
-    @PostMapping("/catalog/edit")
-    @ResponseBody
-    public ResponseEntity<WVPResult<List<PlatformCatalog>>> editCatalog(@RequestBody PlatformCatalog platformCatalog) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("编辑目录,{}", JSON.toJSONString(platformCatalog));
-        }
-        PlatformCatalog platformCatalogInStore = storager.getCatalog(platformCatalog.getId());
-        WVPResult<List<PlatformCatalog>> result = new WVPResult<>();
-        result.setCode(0);
-
-        if (platformCatalogInStore == null) {
-            result.setMsg(platformCatalog.getId() + " not exists");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-        int addResult = storager.updateCatalog(platformCatalog);
-        if (addResult > 0) {
-            result.setMsg("success");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        } else {
-            result.setMsg("save error");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 删除目录
-     *
-     * @param id 目录Id
-     * @return
-     */
-    @ApiOperation("删除目录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", value = "目录Id", dataTypeClass = String.class, required = true),
-    })
-    @DeleteMapping("/catalog/del")
-    @ResponseBody
-    public ResponseEntity<WVPResult<String>> delCatalog(String id, String platformId) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("删除目录,{}", id);
-        }
-        WVPResult<String> result = new WVPResult<>();
-
-        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(platformId)) {
-            result.setCode(-1);
-            result.setMsg("param error");
-            return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST);
-        }
-        result.setCode(0);
-
-        int delResult = storager.delCatalog(id);
-        // 如果删除的是默认目录则根目录设置为默认目录
-        PlatformCatalog parentPlatform = storager.queryDefaultCatalogInPlatform(platformId);
-
-        // 默认节点被移除
-        if (parentPlatform == null) {
-            storager.setDefaultCatalog(platformId, platformId);
-            result.setData(platformId);
-        }
-
-
-        if (delResult > 0) {
-            result.setMsg("success");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        } else {
-            result.setMsg("save error");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-    }
-
-    /**
-     * 删除关联
-     *
-     * @param platformCatalog 关联的信息
-     * @return
-     */
-    @ApiOperation("删除关联")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "platformCatalog", value = "关联的信息", dataTypeClass = PlatformCatalog.class, required = true),
-    })
-    @DeleteMapping("/catalog/relation/del")
-    @ResponseBody
-    public ResponseEntity<WVPResult<List<PlatformCatalog>>> delRelation(@RequestBody PlatformCatalog platformCatalog) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("删除关联,{}", JSON.toJSONString(platformCatalog));
-        }
-        int delResult = storager.delRelation(platformCatalog);
-        WVPResult<List<PlatformCatalog>> result = new WVPResult<>();
-        result.setCode(0);
-
-        if (delResult > 0) {
-            result.setMsg("success");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        } else {
-            result.setMsg("save error");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-    }
-
-
-    /**
-     * 修改默认目录
-     *
-     * @param platformId 平台Id
-     * @param catalogId  目录Id
-     * @return
-     */
-    @ApiOperation("修改默认目录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "platformId", value = "平台Id", dataTypeClass = String.class, required = true),
-            @ApiImplicitParam(name = "catalogId", value = "目录Id", dataTypeClass = String.class, required = true),
-    })
-    @PostMapping("/catalog/default/update")
-    @ResponseBody
-    public ResponseEntity<WVPResult<String>> setDefaultCatalog(String platformId, String catalogId) {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("修改默认目录,{},{}", platformId, catalogId);
-        }
-        int updateResult = storager.setDefaultCatalog(platformId, catalogId);
-        WVPResult<String> result = new WVPResult<>();
-        result.setCode(0);
-
-        if (updateResult > 0) {
-            result.setMsg("success");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        } else {
-            result.setMsg("save error");
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/ChannelReduce.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/ChannelReduce.java
deleted file mode 100644
index 10015e4..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/ChannelReduce.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.platform.bean;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-
-/**
- * 精简的channel信息展示,主要是选择通道的时候展示列表使用
- */
-public class ChannelReduce {
-
-    /**
-     * deviceChannel的数据库自增ID
-     */
-    private int id;
-
-    /**
-     * 通道id
-     */
-    private String channelId;
-
-    /**
-     * 设备id
-     */
-    private String deviceId;
-
-    /**
-     * 通道名
-     */
-    private String name;
-
-    /**
-     * 生产厂商
-     */
-    private String manufacturer;
-
-    /**
-     * wan地址
-     */
-    private String  hostAddress;
-
-    /**
-     * 子节点数
-     */
-    private int  subCount;
-
-    /**
-     * 平台Id
-     */
-    private String  platformId;
-
-    /**
-     * 目录Id
-     */
-    private String  catalogId;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getChannelId() {
-        return channelId;
-    }
-
-    public void setChannelId(String channelId) {
-        this.channelId = channelId;
-    }
-
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(String deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getManufacturer() {
-        return manufacturer;
-    }
-
-    public void setManufacturer(String manufacturer) {
-        this.manufacturer = manufacturer;
-    }
-
-    public String getHostAddress() {
-        return hostAddress;
-    }
-
-    public void setHostAddress(String hostAddress) {
-        this.hostAddress = hostAddress;
-    }
-
-    public int getSubCount() {
-        return subCount;
-    }
-
-    public void setSubCount(int subCount) {
-        this.subCount = subCount;
-    }
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java
deleted file mode 100644
index 5b97f18..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.platform.bean;
-
-import java.util.List;
-
-public class UpdateChannelParam {
-    private String platformId;
-    private String catalogId;
-    private List<ChannelReduce> channelReduces;
-
-    public String getPlatformId() {
-        return platformId;
-    }
-
-    public void setPlatformId(String platformId) {
-        this.platformId = platformId;
-    }
-
-    public List<ChannelReduce> getChannelReduces() {
-        return channelReduces;
-    }
-
-    public void setChannelReduces(List<ChannelReduce> channelReduces) {
-        this.channelReduces = channelReduces;
-    }
-
-    public String getCatalogId() {
-        return catalogId;
-    }
-
-    public void setCatalogId(String catalogId) {
-        this.catalogId = catalogId;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
deleted file mode 100644
index 71f9fd7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ /dev/null
@@ -1,349 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.play;
-
-import com.alibaba.fastjson.JSONArray;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.service.IPlayService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import java.util.List;
-import java.util.UUID;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.sip.message.Response;
-
-@Api(tags = "国标设备点播")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/play")
-public class PlayController {
-
-	private final static Logger logger = LoggerFactory.getLogger(PlayController.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private VideoStreamSessionManager streamSession;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	@Autowired
-	private ZLMRESTfulUtils zlmresTfulUtils;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	@Autowired
-	private IPlayService playService;
-
-	@Autowired
-	private IMediaService mediaService;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@ApiOperation("开始点播")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/start/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<String>> play(@PathVariable String deviceId,
-													   @PathVariable String channelId,HttpServletResponse response) {
-
-		response.setHeader("Access-Control-Allow-Origin", "*");
-		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
-		response.setHeader("Access-Control-Allow-Credentials","true");
-
-		// 获取可用的zlm
-		Device device = storager.queryVideoDevice(deviceId);
-		MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
-		PlayResult playResult = playService.play(newMediaServerItem, deviceId, channelId, null, null, null);
-
-		return playResult.getResult();
-	}
-
-	@ApiOperation("停止点播")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/stop/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<String>> playStop(@PathVariable String deviceId, @PathVariable String channelId) {
-
-		logger.debug(String.format("设备预览/回放停止API调用,streamId:%s_%s", deviceId, channelId ));
-
-		String uuid = UUID.randomUUID().toString();
-		DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>();
-
-		// 录像查询以channelId作为deviceId查询
-		String key = DeferredResultHolder.CALLBACK_CMD_STOP + deviceId + channelId;
-		resultHolder.put(key, uuid, result);
-		StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
-		if (streamInfo == null) {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("点播未找到");
-			resultHolder.invokeAllResult(msg);
-			storager.stopPlay(deviceId, channelId);
-			return result;
-		}
-		cmder.streamByeCmd(deviceId, channelId, streamInfo.getStream(), null, eventResult -> {
-			redisCatchStorage.stopPlay(streamInfo);
-			storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
-			RequestMessage msgForSuccess = new RequestMessage();
-			msgForSuccess.setId(uuid);
-			msgForSuccess.setKey(key);
-			msgForSuccess.setData(String.format("success"));
-			resultHolder.invokeAllResult(msgForSuccess);
-		});
-
-		if (deviceId != null || channelId != null) {
-			JSONObject json = new JSONObject();
-			json.put("deviceId", deviceId);
-			json.put("channelId", channelId);
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(json.toString());
-			resultHolder.invokeAllResult(msg);
-		} else {
-			logger.warn("设备预览/回放停止API调用失败!");
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("streamId null");
-			resultHolder.invokeAllResult(msg);
-		}
-
-		// 超时处理
-		result.onTimeout(()->{
-			logger.warn(String.format("设备预览/回放停止超时,deviceId/channelId:%s_%s ", deviceId, channelId));
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout");
-			resultHolder.invokeAllResult(msg);
-		});
-		return result;
-	}
-
-	/**
-	 * 将不是h264的视频通过ffmpeg 转码为h264 + aac
-	 * @param streamId 流ID
-	 * @return
-	 */
-	@ApiOperation("将不是h264的视频通过ffmpeg 转码为h264 + aac")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "streamId", value = "视频流ID", dataTypeClass = String.class),
-	})
-	@PostMapping("/convert/{streamId}")
-	public ResponseEntity<String> playConvert(@PathVariable String streamId) {
-		StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
-		if (streamInfo == null) {
-			streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-		}
-		if (streamInfo == null) {
-			logger.warn("视频转码API调用失败!, 视频流已经停止!");
-			return new ResponseEntity<String>("未找到视频流信息, 视频流可能已经停止", HttpStatus.OK);
-		}
-		MediaServerItem mediaInfo = mediaServerService.getOne(streamInfo.getMediaServerId());
-		JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaInfo, streamId);
-		if (!rtpInfo.getBoolean("exist")) {
-			logger.warn("视频转码API调用失败!, 视频流已停止推流!");
-			return new ResponseEntity<String>("推流信息在流媒体中不存在, 视频流可能已停止推流", HttpStatus.OK);
-		} else {
-			String dstUrl = String.format("rtmp://%s:%s/convert/%s", "127.0.0.1", mediaInfo.getRtmpPort(),
-					streamId );
-			String srcUrl = String.format("rtsp://%s:%s/rtp/%s", "127.0.0.1", mediaInfo.getRtspPort(), streamId);
-			JSONObject jsonObject = zlmresTfulUtils.addFFmpegSource(mediaInfo, srcUrl, dstUrl, "1000000", true, false, null);
-			logger.info(jsonObject.toJSONString());
-			JSONObject result = new JSONObject();
-			if (jsonObject != null && jsonObject.getInteger("code") == 0) {
-				   result.put("code", 0);
-				JSONObject data = jsonObject.getJSONObject("data");
-				if (data != null) {
-				   	result.put("key", data.getString("key"));
-					StreamInfo streamInfoResult = mediaService.getStreamInfoByAppAndStreamWithCheck("convert", streamId, mediaInfo.getId());
-					result.put("data", streamInfoResult);
-				}
-			}else {
-				result.put("code", 1);
-				result.put("msg", "cover fail");
-			}
-			return new ResponseEntity<String>( result.toJSONString(), HttpStatus.OK);
-		}
-	}
-
-	/**
-	 * 结束转码
-	 * @param key
-	 * @return
-	 */
-	@ApiOperation("结束转码")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "key", value = "视频流key", dataTypeClass = String.class),
-	})
-	@PostMapping("/convertStop/{key}")
-	public ResponseEntity<String> playConvertStop(@PathVariable String key, String mediaServerId) {
-		JSONObject result = new JSONObject();
-		if (mediaServerId == null) {
-			result.put("code", 400);
-			result.put("msg", "mediaServerId is null");
-			return new ResponseEntity<String>( result.toJSONString(), HttpStatus.BAD_REQUEST);
-		}
-		MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
-		if (mediaInfo == null) {
-			result.put("code", 0);
-			result.put("msg", "使用的流媒体已经停止运行");
-			return new ResponseEntity<String>( result.toJSONString(), HttpStatus.OK);
-		}else {
-			JSONObject jsonObject = zlmresTfulUtils.delFFmpegSource(mediaInfo, key);
-			logger.info(jsonObject.toJSONString());
-			if (jsonObject != null && jsonObject.getInteger("code") == 0) {
-				result.put("code", 0);
-				JSONObject data = jsonObject.getJSONObject("data");
-				if (data != null && data.getBoolean("flag")) {
-					result.put("code", "0");
-					result.put("msg", "success");
-				}else {
-
-				}
-			}else {
-				result.put("code", 1);
-				result.put("msg", "delFFmpegSource fail");
-			}
-			return new ResponseEntity<String>( result.toJSONString(), HttpStatus.OK);
-		}
-
-
-	}
-
-	@ApiOperation("语音广播命令")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备Id", dataTypeClass = String.class),
-	})
-    @GetMapping("/broadcast/{deviceId}")
-    @PostMapping("/broadcast/{deviceId}")
-    public DeferredResult<ResponseEntity<String>> broadcastApi(@PathVariable String deviceId) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("语音广播API调用");
-        }
-        Device device = storager.queryVideoDevice(deviceId);
-		DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
-		String key  = DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId;
-		if (resultHolder.exist(key, null)) {
-			result.setResult(new ResponseEntity<>("设备使用中",HttpStatus.OK));
-			return result;
-		}
-		String uuid  = UUID.randomUUID().toString();
-        if (device == null) {
-
-			resultHolder.put(key, key,  result);
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("CmdType", "Broadcast");
-			json.put("Result", "Failed");
-			json.put("Description", "Device 不存在");
-			msg.setData(json);
-			resultHolder.invokeResult(msg);
-			return result;
-		}
-		cmder.audioBroadcastCmd(device, (event) -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("CmdType", "Broadcast");
-			json.put("Result", "Failed");
-			json.put("Description", String.format("语音广播操作失败,错误码: %s, %s", event.statusCode, event.msg));
-			msg.setData(json);
-			resultHolder.invokeResult(msg);
-		});
-
-		result.onTimeout(() -> {
-			logger.warn(String.format("语音广播操作超时, 设备未返回应答指令"));
-			RequestMessage msg = new RequestMessage();
-			msg.setKey(key);
-			msg.setId(uuid);
-			JSONObject json = new JSONObject();
-			json.put("DeviceID", deviceId);
-			json.put("CmdType", "Broadcast");
-			json.put("Result", "Failed");
-			json.put("Error", "Timeout. Device did not response to broadcast command.");
-			msg.setData(json);
-			resultHolder.invokeResult(msg);
-		});
-		resultHolder.put(key, uuid, result);
-		return result;
-	}
-
-	@ApiOperation("获取所有的ssrc")
-	@GetMapping("/ssrc")
-	public WVPResult<JSONObject> getSSRC() {
-		if (logger.isDebugEnabled()) {
-			logger.debug("获取所有的ssrc");
-		}
-		JSONArray objects = new JSONArray();
-		List<SsrcTransaction> allSsrc = streamSession.getAllSsrc();
-		for (SsrcTransaction transaction : allSsrc) {
-			JSONObject jsonObject = new JSONObject();
-			jsonObject.put("deviceId", transaction.getDeviceId());
-			jsonObject.put("channelId", transaction.getChannelId());
-			jsonObject.put("ssrc", transaction.getSsrc());
-			jsonObject.put("streamId", transaction.getStream());
-			objects.add(jsonObject);
-		}
-
-		WVPResult<JSONObject> result = new WVPResult<>();
-		result.setCode(0);
-		result.setMsg("success");
-		JSONObject jsonObject = new JSONObject();
-		jsonObject.put("data", objects);
-		jsonObject.put("count", objects.size());
-		result.setData(jsonObject);
-		return result;
-	}
-
-}
-
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/bean/PlayResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/bean/PlayResult.java
deleted file mode 100644
index 42a6e8b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/bean/PlayResult.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.play.bean;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.context.request.async.DeferredResult;
-
-public class PlayResult {
-
-    private DeferredResult<ResponseEntity<String>> result;
-    private String uuid;
-
-    private Device device;
-
-    public DeferredResult<ResponseEntity<String>> getResult() {
-        return result;
-    }
-
-    public void setResult(DeferredResult<ResponseEntity<String>> result) {
-        this.result = result;
-    }
-
-    public String getUuid() {
-        return uuid;
-    }
-
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
-    }
-
-    public Device getDevice() {
-        return device;
-    }
-
-    public void setDevice(Device device) {
-        this.device = device;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java
deleted file mode 100644
index 4ffbd4b..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.playback;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamInfo;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.service.IPlayService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import javax.sip.message.Response;
-import java.util.UUID;
-
-@Api(tags = "历史媒体下载")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/download")
-public class DownloadController {
-
-	private final static Logger logger = LoggerFactory.getLogger(DownloadController.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	// @Autowired
-	// private ZLMRESTfulUtils zlmresTfulUtils;
-
-	@Autowired
-	private IPlayService playService;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@ApiOperation("开始历史媒体下载")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "downloadSpeed", value = "下载倍速", dataTypeClass = String.class),
-	})
-	@GetMapping("/start/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<String>> play(@PathVariable String deviceId, @PathVariable String channelId,
-													   String startTime, String endTime, String downloadSpeed) {
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("历史媒体下载 API调用,deviceId:%s,channelId:%s,downloadSpeed:%s", deviceId, channelId, downloadSpeed));
-		}
-		String key = DeferredResultHolder.CALLBACK_CMD_DOWNLOAD + deviceId + channelId;
-		String uuid = UUID.randomUUID().toString();
-		DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(30000L);
-		// 超时处理
-		result.onTimeout(()->{
-			logger.warn(String.format("设备下载响应超时,deviceId:%s ,channelId:%s", deviceId, channelId));
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout");
-			resultHolder.invokeAllResult(msg);
-		});
-		if(resultHolder.exist(key, null)) {
-			return result;
-		}
-		resultHolder.put(key, uuid, result);
-		Device device = storager.queryVideoDevice(deviceId);
-
-		MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
-		if (newMediaServerItem == null) {
-			logger.warn(String.format("设备下载响应超时,deviceId:%s ,channelId:%s", deviceId, channelId));
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("Timeout");
-			resultHolder.invokeAllResult(msg);
-			return result;
-		}
-
-		SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true);
-
-		cmder.downloadStreamCmd(newMediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed, (InviteStreamInfo inviteStreamInfo) -> {
-			logger.info("收到订阅消息: " + inviteStreamInfo.getResponse().toJSONString());
-			playService.onPublishHandlerForDownload(inviteStreamInfo, deviceId, channelId, uuid);
-		}, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeAllResult(msg);
-		});
-
-		return result;
-	}
-
-	@ApiOperation("停止历史媒体下载")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "stream", value = "流ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/stop/{deviceId}/{channelId}/{stream}")
-	public ResponseEntity<String> playStop(@PathVariable String deviceId, @PathVariable String channelId, @PathVariable String stream) {
-
-		cmder.streamByeCmd(deviceId, channelId, stream, null);
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备历史媒体下载停止 API调用,deviceId/channelId:%s_%s", deviceId, channelId));
-		}
-
-		if (deviceId != null && channelId != null) {
-			JSONObject json = new JSONObject();
-			json.put("deviceId", deviceId);
-			json.put("channelId", channelId);
-			return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
-		} else {
-			logger.warn("设备历史媒体下载停止API调用失败!");
-			return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
deleted file mode 100644
index 2fccaa8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.playback;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-//import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.service.IPlayService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import java.util.UUID;
-
-@Api(tags = "视频回放")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/playback")
-public class PlaybackController {
-
-	private final static Logger logger = LoggerFactory.getLogger(PlaybackController.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private IRedisCatchStorage redisCatchStorage;
-
-	// @Autowired
-	// private ZLMRESTfulUtils zlmresTfulUtils;
-
-	@Autowired
-	private IPlayService playService;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	@Autowired
-	private IMediaServerService mediaServerService;
-
-	@ApiOperation("开始视频回放")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),
-	})
-	@GetMapping("/start/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<String>> play(@PathVariable String deviceId, @PathVariable String channelId,
-													   String startTime,String endTime) {
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备回放 API调用,deviceId:%s ,channelId:%s", deviceId, channelId));
-		}
-
-		DeferredResult<ResponseEntity<String>> result = playService.playBack(deviceId, channelId, startTime, endTime, null, wvpResult->{
-			resultHolder.invokeResult(wvpResult.getData());
-		});
-
-		return result;
-	}
-
-	@ApiOperation("停止视频回放")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "stream", value = "流ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/stop/{deviceId}/{channelId}/{stream}")
-	public ResponseEntity<String> playStop(
-			@PathVariable String deviceId,
-			@PathVariable String channelId,
-			@PathVariable String stream) {
-
-		cmder.streamByeCmd(deviceId, channelId, stream, null);
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备录像回放停止 API调用,deviceId/channelId:%s/%s", deviceId, channelId));
-		}
-		if (StringUtils.isEmpty(deviceId) || StringUtils.isEmpty(channelId) || StringUtils.isEmpty(stream)) {
-			return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
-		}
-
-		if (deviceId != null && channelId != null) {
-			JSONObject json = new JSONObject();
-			json.put("deviceId", deviceId);
-			json.put("channelId", channelId);
-			return new ResponseEntity<>(json.toString(), HttpStatus.OK);
-		} else {
-			logger.warn("设备录像回放停止API调用失败!");
-			return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-
-	@ApiOperation("回放暂停")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "streamId", value = "回放流ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/pause/{streamId}")
-	public ResponseEntity<String> playPause(@PathVariable String streamId) {
-		logger.info("playPause: "+streamId);
-		JSONObject json = new JSONObject();
-		StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-		if (null == streamInfo) {
-			json.put("msg", "streamId不存在");
-			logger.warn("streamId不存在!");
-			return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST);
-		}
-		Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
-		cmder.playPauseCmd(device, streamInfo);
-		json.put("msg", "ok");
-		return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
-	}
-
-	@ApiOperation("回放恢复")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "streamId", value = "回放流ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/resume/{streamId}")
-	public ResponseEntity<String> playResume(@PathVariable String streamId) {
-		logger.info("playResume: "+streamId);
-		JSONObject json = new JSONObject();
-		StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-		if (null == streamInfo) {
-			json.put("msg", "streamId不存在");
-			logger.warn("streamId不存在!");
-			return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST);
-		}
-		Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
-		cmder.playResumeCmd(device, streamInfo);
-		json.put("msg", "ok");
-		return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
-	}
-
-	@ApiOperation("回放拖动播放")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "streamId", value = "回放流ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "seekTime", value = "拖动偏移量,单位s", dataTypeClass = Long.class),
-	})
-	@GetMapping("/seek/{streamId}/{seekTime}")
-	public ResponseEntity<String> playSeek(@PathVariable String streamId, @PathVariable long seekTime) {
-		logger.info("playSeek: "+streamId+", "+seekTime);
-		JSONObject json = new JSONObject();
-		StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-		if (null == streamInfo) {
-			json.put("msg", "streamId不存在");
-			logger.warn("streamId不存在!");
-			return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST);
-		}
-		Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
-		cmder.playSeekCmd(device, streamInfo, seekTime);
-		json.put("msg", "ok");
-		return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
-	}
-
-	@ApiOperation("回放倍速播放")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "streamId", value = "回放流ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "speed", value = "倍速0.25 0.5 1、2、4", dataTypeClass = Double.class),
-	})
-	@GetMapping("/speed/{streamId}/{speed}")
-	public ResponseEntity<String> playSpeed(@PathVariable String streamId, @PathVariable Double speed) {
-		logger.info("playSpeed: "+streamId+", "+speed);
-		JSONObject json = new JSONObject();
-		StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
-		if (null == streamInfo) {
-			json.put("msg", "streamId不存在");
-			logger.warn("streamId不存在!");
-			return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST);
-		}
-		if(speed != 0.25 && speed != 0.5 && speed != 1 && speed != 2.0 && speed != 4.0) {
-			json.put("msg", "不支持的speed(0.25 0.5 1、2、4)");
-			logger.warn("不支持的speed: " + speed);
-			return new ResponseEntity<String>(json.toString(), HttpStatus.BAD_REQUEST);
-		}
-		Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
-		cmder.playSpeedCmd(device, streamInfo, speed);
-		json.put("msg", "ok");
-		return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
-	}
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java
deleted file mode 100644
index 95d1aef..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.ptz;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import javax.sip.message.Response;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-
-import java.util.UUID;
-
-@Api(tags = "云台控制")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/ptz")
-public class PtzController {
-
-	private final static Logger logger = LoggerFactory.getLogger(PtzController.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	/***
-	 * 云台控制
-	 * @param deviceId 设备id
-	 * @param channelId 通道id
-	 * @param command	控制指令
-	 * @param horizonSpeed	水平移动速度
-	 * @param verticalSpeed	垂直移动速度
-	 * @param zoomSpeed	    缩放速度
-	 * @return String 控制结果
-	 */
-	@ApiOperation("云台控制")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "command", value = "控制指令,允许值: left, right, up, down, upleft, upright, downleft, downright, zoomin, zoomout, stop", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "horizonSpeed", value = "水平速度", dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "verticalSpeed", value = "垂直速度", dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "zoomSpeed", value = "缩放速度", dataTypeClass = Integer.class),
-	})
-	@PostMapping("/control/{deviceId}/{channelId}")
-	public ResponseEntity<String> ptz(@PathVariable String deviceId,@PathVariable String channelId, String command, int horizonSpeed, int verticalSpeed, int zoomSpeed){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备云台控制 API调用,deviceId:%s ,channelId:%s ,command:%s ,horizonSpeed:%d ,verticalSpeed:%d ,zoomSpeed:%d",deviceId, channelId, command, horizonSpeed, verticalSpeed, zoomSpeed));
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		int cmdCode = 0;
-		switch (command){
-			case "left":
-				cmdCode = 2;
-				break;
-			case "right":
-				cmdCode = 1;
-				break;
-			case "up":
-				cmdCode = 8;
-				break;
-			case "down":
-				cmdCode = 4;
-				break;
-			case "upleft":
-				cmdCode = 10;
-				break;
-			case "upright":
-				cmdCode = 9;
-				break;
-			case "downleft":
-				cmdCode = 6;
-				break;
-			case "downright":
-				cmdCode = 5;
-				break;
-			case "zoomin":
-				cmdCode = 16;
-				break;
-			case "zoomout":
-				cmdCode = 32;
-				break;
-			case "stop":
-				cmdCode = 0;
-				break;
-			default:
-				break;
-		}
-		cmder.frontEndCmd(device, channelId, cmdCode, horizonSpeed, verticalSpeed, zoomSpeed);
-		return new ResponseEntity<String>("success",HttpStatus.OK);
-	}
-
-	@ApiOperation("通用前端控制命令")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "cmdCode", value = "指令码", dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "parameter1", value = "数据一", dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "parameter2", value = "数据二", dataTypeClass = Integer.class),
-			@ApiImplicitParam(name = "combindCode2", value = "组合码二", dataTypeClass = Integer.class),
-	})
-	@PostMapping("/front_end_command/{deviceId}/{channelId}")
-	public ResponseEntity<String> frontEndCommand(@PathVariable String deviceId,@PathVariable String channelId,int cmdCode, int parameter1, int parameter2, int combindCode2){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("设备云台控制 API调用,deviceId:%s ,channelId:%s ,cmdCode:%d parameter1:%d parameter2:%d",deviceId, channelId, cmdCode, parameter1, parameter2));
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-
-		cmder.frontEndCmd(device, channelId, cmdCode, parameter1, parameter2, combindCode2);
-		return new ResponseEntity<String>("success",HttpStatus.OK);
-	}
-
-	@ApiOperation("预置位查询")
-	@ApiImplicitParams({
-            @ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-	})
-	@GetMapping("/preset/query/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<String>> presetQueryApi(@PathVariable String deviceId, @PathVariable String channelId) {
-		if (logger.isDebugEnabled()) {
-			logger.debug("设备预置位查询API调用");
-		}
-		Device device = storager.queryVideoDevice(deviceId);
-		String uuid =  UUID.randomUUID().toString();
-		String key =  DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (StringUtils.isEmpty(channelId) ? deviceId : channelId);
-		DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String >> (3 * 1000L);
-		result.onTimeout(()->{
-			logger.warn(String.format("获取设备预置位超时"));
-			// 释放rtpserver
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData("获取设备预置位超时");
-			resultHolder.invokeResult(msg);
-		});
-		if (resultHolder.exist(key, null)) {
-			return result;
-		}
-		resultHolder.put(key, uuid, result);
-		cmder.presetQuery(device, channelId, event -> {
-			RequestMessage msg = new RequestMessage();
-			msg.setId(uuid);
-			msg.setKey(key);
-			msg.setData(String.format("获取设备预置位失败,错误码: %s, %s", event.statusCode, event.msg));
-			resultHolder.invokeResult(msg);
-		});
-
-		return result;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
deleted file mode 100644
index e565981..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.record;
-
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-
-import java.util.UUID;
-
-@Api(tags = "国标录像")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/gb_record")
-public class GBRecordController {
-
-	private final static Logger logger = LoggerFactory.getLogger(GBRecordController.class);
-
-	@Autowired
-	private SIPCommander cmder;
-
-	@Autowired
-	private IVideoManagerStorager storager;
-
-	@Autowired
-	private DeferredResultHolder resultHolder;
-
-	@ApiOperation("录像查询")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "deviceId", value = "设备ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "channelId", value = "通道ID", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "startTime", value = "开始时间", dataTypeClass = String.class),
-			@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),
-	})
-	@GetMapping("/query/{deviceId}/{channelId}")
-	public DeferredResult<ResponseEntity<RecordInfo>> recordinfo(@PathVariable String deviceId,@PathVariable String channelId, String startTime,  String endTime){
-
-		if (logger.isDebugEnabled()) {
-			logger.debug(String.format("录像信息查询 API调用,deviceId:%s ,startTime:%s, startTime:%s",deviceId, startTime, endTime));
-		}
-
-		Device device = storager.queryVideoDevice(deviceId);
-		// 指定超时时间 1分钟30秒
-		DeferredResult<ResponseEntity<RecordInfo>> result = new DeferredResult<>(90*1000L);
-		String uuid = UUID.randomUUID().toString();
-		int sn  =  (int)((Math.random()*9+1)*100000);
-		String key = DeferredResultHolder.CALLBACK_CMD_RECORDINFO + deviceId + sn;
-		RequestMessage msg = new RequestMessage();
-		msg.setId(uuid);
-		msg.setKey(key);
-		cmder.recordInfoQuery(device, channelId, startTime, endTime, sn, null, null, null, (eventResult -> {
-			msg.setData("查询录像失败, status: " +  eventResult.statusCode + ", message: " + eventResult.msg );
-			resultHolder.invokeResult(msg);
-		}));
-
-		// 录像查询以channelId作为deviceId查询
-		resultHolder.put(key, uuid, result);
-		result.onTimeout(()->{
-			msg.setData("timeout");
-			resultHolder.invokeResult(msg);
-		});
-        return result;
-	}
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/session/PlayTypeEnum.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/session/PlayTypeEnum.java
deleted file mode 100644
index 58fbb26..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/session/PlayTypeEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.gb28181.session;
-
-public enum PlayTypeEnum {
-
-    PLAY("0", "直播"),
-    PLAY_BACK("1", "回放");
-
-    private String value;
-    private String name;
-
-    PlayTypeEnum(String value, String name) {
-        this.value = value;
-        this.name = name;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public String getName() {
-        return name;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
deleted file mode 100644
index 650dbe0..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.log;
-
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
-import com.genersoft.iot.vmp.service.ILogService;
-import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-
-@Api(tags = "日志管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/log")
-public class LogController {
-
-    private final static Logger logger = LoggerFactory.getLogger(LogController.class);
-
-    @Autowired
-    private ILogService logService;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    /**
-     *  分页查询日志
-     *
-     * @param query 查询内容
-     * @param page 当前页
-     * @param count 每页查询数量
-     * @param type  类型
-     * @param startTime  开始时间
-     * @param endTime 结束时间
-     * @return
-     */
-    @ApiOperation("分页查询报警")
-    @GetMapping("/all")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
-            @ApiImplicitParam(name="page", value = "当前页", required = true ,dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="count", value = "每页查询数量", required = true ,dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="type", value = "类型" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="startTime", value = "查询内容" ,dataTypeClass = String.class),
-            @ApiImplicitParam(name="endTime", value = "查询内容" ,dataTypeClass = String.class),
-    })
-    public ResponseEntity<PageInfo<LogDto>> getAll(
-            @RequestParam int page,
-            @RequestParam int count,
-            @RequestParam(required = false)  String query,
-            @RequestParam(required = false) String type,
-            @RequestParam(required = false) String startTime,
-            @RequestParam(required = false) String endTime
-    ) {
-        if (StringUtils.isEmpty(query)) query = null;
-        if (StringUtils.isEmpty(startTime)) startTime = null;
-        if (StringUtils.isEmpty(endTime)) endTime = null;
-        if (!userSetup.getLogInDatebase()) {
-            logger.warn("自动记录日志功能已关闭,查询结果可能不完整。");
-        }
-
-        try {
-            if (startTime != null)  format.parse(startTime);
-            if (endTime != null)  format.parse(endTime);
-        } catch (ParseException e) {
-            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
-        }
-
-        PageInfo<LogDto> allLog = logService.getAll(page, count, query, type, startTime, endTime);
-        return new ResponseEntity<>(allLog, HttpStatus.OK);
-    }
-
-    /**
-     *  清空日志
-     *
-     */
-    @ApiOperation("清空日志")
-    @DeleteMapping("/clear")
-    @ApiImplicitParams({})
-    public ResponseEntity<WVPResult<String>> clear() {
-
-        int count = logService.clear();
-        WVPResult wvpResult = new WVPResult();
-        wvpResult.setCode(0);
-        wvpResult.setMsg("success");
-        wvpResult.setData(count);
-        return new ResponseEntity<WVPResult<String>>(wvpResult, HttpStatus.OK);
-    }
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/record/RecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/record/RecordController.java
deleted file mode 100644
index 844c9b7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/record/RecordController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//package com.genersoft.iot.vmp.vmanager.record;
-//
-//import com.alibaba.fastjson.JSONObject;
-//import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-//import com.genersoft.iot.vmp.service.IRecordInfoServer;
-//import com.genersoft.iot.vmp.storager.dao.dto.RecordInfo;
-//import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-//import com.github.pagehelper.PageInfo;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiImplicitParam;
-//import io.swagger.annotations.ApiImplicitParams;
-//import io.swagger.annotations.ApiOperation;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.web.bind.annotation.*;
-//
-//@Api(tags = "云端录像")
-//@CrossOrigin
-//@RestController
-//@RequestMapping("/api/record")
-//public class RecordController {
-//
-//    @Autowired
-//    private IRecordInfoServer recordInfoServer;
-//
-//    @ApiOperation("录像列表查询")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
-//            @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),
-//            @ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
-//    })
-//    @GetMapping(value = "/app/list")
-//    @ResponseBody
-//    public Object list(@RequestParam(required = false)Integer page,
-//                                     @RequestParam(required = false)Integer count ){
-//
-//        PageInfo<RecordInfo> recordList = recordInfoServer.getRecordList(page - 1, page - 1 + count);
-//        return recordList;
-//    }
-//
-//    @ApiOperation("获取录像详情")
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(name="recordInfo", value = "录像记录", required = true, dataTypeClass = RecordInfo.class)
-//    })
-//    @GetMapping(value = "/detail")
-//    @ResponseBody
-//    public JSONObject list(RecordInfo recordInfo, String time ){
-//
-//
-//        return null;
-//    }
-//}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
deleted file mode 100644
index 1500f35..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.server;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.VManageBootstrap;
-import com.genersoft.iot.vmp.common.VersionPo;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.conf.VersionInfo;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.utils.SpringBeanFactory;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import gov.nist.javax.sip.SipStackImpl;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import javax.sip.ListeningPoint;
-import javax.sip.ObjectInUseException;
-import javax.sip.SipProvider;
-import java.util.Iterator;
-import java.util.List;
-
-@SuppressWarnings("rawtypes")
-@Api(tags = "服务控制")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/server")
-public class ServerController {
-
-    @Autowired
-    private ConfigurableApplicationContext context;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    VersionInfo versionInfo;
-
-    @Autowired
-    SipConfig sipConfig;
-
-    @Autowired
-    UserSetup userSetup;
-
-    @Value("${server.port}")
-    private int serverPort;
-
-
-    @ApiOperation("流媒体服务列表")
-    @GetMapping(value = "/media_server/list")
-    @ResponseBody
-    public WVPResult<List<MediaServerItem>> getMediaServerList(boolean detail){
-        WVPResult<List<MediaServerItem>> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(mediaServerService.getAll());
-        return result;
-    }
-
-    @ApiOperation("在线流媒体服务列表")
-    @GetMapping(value = "/media_server/online/list")
-    @ResponseBody
-    public WVPResult<List<MediaServerItem>> getOnlineMediaServerList(){
-        WVPResult<List<MediaServerItem>> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(mediaServerService.getAllOnline());
-        return result;
-    }
-
-    @ApiOperation("获取流媒体服务")
-    @GetMapping(value = "/media_server/one/{id}")
-    @ResponseBody
-    public WVPResult<MediaServerItem> getMediaServer(@PathVariable String id){
-        WVPResult<MediaServerItem> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(mediaServerService.getOne(id));
-        return result;
-    }
-
-    @ApiOperation("测试流媒体服务")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="ip", value = "流媒体服务IP", dataTypeClass = String.class),
-            @ApiImplicitParam(name="port", value = "流媒体服务HTT端口", dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="secret", value = "流媒体服务secret", dataTypeClass = String.class),
-    })
-    @GetMapping(value = "/media_server/check")
-    @ResponseBody
-    public WVPResult<MediaServerItem> checkMediaServer(@RequestParam String ip, @RequestParam int port, @RequestParam String secret){
-        return mediaServerService.checkMediaServer(ip, port, secret);
-    }
-
-    @ApiOperation("测试流媒体录像管理服务")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="ip", value = "流媒体服务IP", dataTypeClass = String.class),
-            @ApiImplicitParam(name="port", value = "流媒体服务HTT端口", dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="secret", value = "流媒体服务secret", dataTypeClass = String.class),
-    })
-    @GetMapping(value = "/media_server/record/check")
-    @ResponseBody
-    public WVPResult<String> checkMediaRecordServer(@RequestParam String ip, @RequestParam int port){
-        boolean checkResult = mediaServerService.checkMediaRecordServer(ip, port);
-        WVPResult<String> result = new WVPResult<>();
-        if (checkResult) {
-            result.setCode(0);
-            result.setMsg("success");
-
-        }else {
-            result.setCode(-1);
-            result.setMsg("连接失败");
-        }
-        return result;
-    }
-
-    @ApiOperation("保存流媒体服务")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="mediaServerItem", value = "流媒体信息", dataTypeClass = MediaServerItem.class)
-    })
-    @PostMapping(value = "/media_server/save")
-    @ResponseBody
-    public WVPResult<String> saveMediaServer(@RequestBody  MediaServerItem mediaServerItem){
-        MediaServerItem mediaServerItemInDatabase = mediaServerService.getOne(mediaServerItem.getId());
-
-        if (mediaServerItemInDatabase != null) {
-            if (StringUtils.isEmpty(mediaServerItemInDatabase.getSendRtpPortRange())
-                    && StringUtils.isEmpty(mediaServerItem.getSendRtpPortRange())){
-                mediaServerItem.setSendRtpPortRange("30000,30500");
-            }
-           mediaServerService.update(mediaServerItem);
-        }else {
-            if (StringUtils.isEmpty(mediaServerItem.getSendRtpPortRange())){
-                mediaServerItem.setSendRtpPortRange("30000,30500");
-            }
-            return mediaServerService.add(mediaServerItem);
-        }
-
-        WVPResult<String> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        return result;
-    }
-
-    @ApiOperation("移除流媒体服务")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="id", value = "流媒体ID", dataTypeClass = String.class)
-    })
-    @DeleteMapping(value = "/media_server/delete")
-    @ResponseBody
-    public WVPResult<String> deleteMediaServer(@RequestParam  String id){
-        if (mediaServerService.getOne(id) != null) {
-            mediaServerService.delete(id);
-            mediaServerService.deleteDb(id);
-        }else {
-            WVPResult<String> result = new WVPResult<>();
-            result.setCode(-1);
-            result.setMsg("未找到此节点");
-            return result;
-        }
-        WVPResult<String> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        return result;
-    }
-
-
-
-    @ApiOperation("重启服务")
-    @GetMapping(value = "/restart")
-    @ResponseBody
-    public Object restart(){
-        Thread restartThread = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    Thread.sleep(3000);
-                    SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
-                    SipStackImpl stack = (SipStackImpl)up.getSipStack();
-                    stack.stop();
-                    Iterator listener = stack.getListeningPoints();
-                    while (listener.hasNext()) {
-                        stack.deleteListeningPoint((ListeningPoint) listener.next());
-                    }
-                    Iterator providers = stack.getSipProviders();
-                    while (providers.hasNext()) {
-                        stack.deleteSipProvider((SipProvider) providers.next());
-                    }
-                    VManageBootstrap.restart();
-                } catch (InterruptedException ignored) {
-                } catch (ObjectInUseException e) {
-                    e.printStackTrace();
-                }
-            }
-        });
-
-        restartThread.setDaemon(false);
-        restartThread.start();
-        return "success";
-    }
-
-    @ApiOperation("版本信息")
-    @GetMapping(value = "/version")
-    @ResponseBody
-    public WVPResult<VersionPo> getVersion(){
-        WVPResult<VersionPo> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(versionInfo.getVersion());
-        return result;
-    }
-
-    @ApiOperation("配置信息")
-    @GetMapping(value = "/config")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="type", value = "配置类型(sip, base)", dataTypeClass = String.class),
-    })
-    @ResponseBody
-    public WVPResult<JSONObject> getVersion(String type){
-        WVPResult<JSONObject> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("server.port", serverPort);
-        if (StringUtils.isEmpty(type)) {
-            jsonObject.put("sip", JSON.toJSON(sipConfig));
-            jsonObject.put("base", JSON.toJSON(userSetup));
-        }else {
-            switch (type){
-                case "sip":
-                    jsonObject.put("sip", sipConfig);
-                    break;
-                case "base":
-                    jsonObject.put("base", userSetup);
-                    break;
-                default:
-                    break;
-            }
-        }
-        result.setData(jsonObject);
-        return result;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
deleted file mode 100644
index 1226eb7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.streamProxy;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.service.IStreamProxyService;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-@SuppressWarnings("rawtypes")
-/**
- * 拉流代理接口
- */
-@Api(tags = "拉流代理")
-@Controller
-@CrossOrigin
-@RequestMapping(value = "/api/proxy")
-public class StreamProxyController {
-
-    private final static Logger logger = LoggerFactory.getLogger(StreamProxyController.class);
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private IStreamProxyService streamProxyService;
-
-
-    @ApiOperation("分页查询流代理")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
-            @ApiImplicitParam(name="online", value = "是否在线", dataTypeClass = Boolean.class),
-    })
-    @GetMapping(value = "/list")
-    @ResponseBody
-    public PageInfo<StreamProxyItem> list(@RequestParam(required = false)Integer page,
-                                          @RequestParam(required = false)Integer count,
-                                          @RequestParam(required = false)String query,
-                                          @RequestParam(required = false)Boolean online ){
-
-        return streamProxyService.getAll(page, count);
-    }
-
-    @ApiOperation("保存代理")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "param", value = "代理参数", dataTypeClass = StreamProxyItem.class),
-    })
-    @PostMapping(value = "/save")
-    @ResponseBody
-    public WVPResult save(@RequestBody StreamProxyItem param){
-        logger.info("添加代理: " + JSONObject.toJSONString(param));
-        if (StringUtils.isEmpty(param.getMediaServerId())) param.setMediaServerId("auto");
-        if (StringUtils.isEmpty(param.getType())) param.setType("default");
-        if (StringUtils.isEmpty(param.getGbId())) param.setGbId(null);
-        WVPResult<StreamInfo> result = streamProxyService.save(param);
-        return result;
-    }
-
-    @ApiOperation("获取ffmpeg.cmd模板")
-    @GetMapping(value = "/ffmpeg_cmd/list")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "mediaServerId", value = "流媒体ID", dataTypeClass = String.class),
-    })
-    @ResponseBody
-    public WVPResult getFFmpegCMDs(@RequestParam String mediaServerId){
-        logger.debug("获取节点[ {} ]ffmpeg.cmd模板", mediaServerId );
-
-        MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-        JSONObject data = streamProxyService.getFFmpegCMDs(mediaServerItem);
-        WVPResult<JSONObject> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(data);
-        return result;
-    }
-
-    @ApiOperation("移除代理")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "stream", value = "流ID", required = true, dataTypeClass = String.class),
-    })
-    @DeleteMapping(value = "/del")
-    @ResponseBody
-    public WVPResult del(@RequestParam String app, @RequestParam String stream){
-        logger.info("移除代理: " + app + "/" + stream);
-        WVPResult<Object> result = new WVPResult<>();
-        if (app == null || stream == null) {
-            result.setCode(400);
-            result.setMsg(app == null ?"app不能为null":"stream不能为null");
-        }else {
-            streamProxyService.del(app, stream);
-            result.setCode(0);
-            result.setMsg("success");
-        }
-        return result;
-    }
-
-    @ApiOperation("启用代理")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "stream", value = "流ID", dataTypeClass = String.class),
-    })
-    @GetMapping(value = "/start")
-    @ResponseBody
-    public Object start(String app, String stream){
-        logger.info("启用代理: " + app + "/" + stream);
-        boolean result = streamProxyService.start(app, stream);
-        return result?"success":"fail";
-    }
-
-    @ApiOperation("停用代理")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "stream", value = "流ID", dataTypeClass = String.class),
-    })
-    @GetMapping(value = "/stop")
-    @ResponseBody
-    public Object stop(String app, String stream){
-        logger.info("停用代理: " + app + "/" + stream);
-        boolean result = streamProxyService.stop(app, stream);
-        return result?"success":"fail";
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
deleted file mode 100644
index cf0fed8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.streamPush;
-
-import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.ExcelReader;
-import com.alibaba.excel.read.metadata.ReadSheet;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
-import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.service.impl.StreamPushUploadFileHandler;
-import com.genersoft.iot.vmp.vmanager.bean.BatchGBStreamParam;
-import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.poi.sl.usermodel.Sheet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-@Api(tags = "推流信息管理")
-@Controller
-@CrossOrigin
-@RequestMapping(value = "/api/push")
-public class StreamPushController {
-
-    private final static Logger logger = LoggerFactory.getLogger(StreamPushController.class);
-
-    @Autowired
-    private IStreamPushService streamPushService;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
-
-    @Autowired
-    private DeferredResultHolder resultHolder;
-
-    @ApiOperation("推流列表查询")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),
-            @ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
-            @ApiImplicitParam(name="pushing", value = "是否正在推流", dataTypeClass = Boolean.class),
-            @ApiImplicitParam(name="mediaServerId", value = "流媒体ID", dataTypeClass = String.class),
-    })
-    @GetMapping(value = "/list")
-    @ResponseBody
-    public PageInfo<StreamPushItem> list(@RequestParam(required = false)Integer page,
-                                         @RequestParam(required = false)Integer count,
-                                         @RequestParam(required = false)String query,
-                                         @RequestParam(required = false)Boolean pushing,
-                                         @RequestParam(required = false)String mediaServerId ){
-
-        if (StringUtils.isEmpty(query)) {
-            query = null;
-        }
-        if (StringUtils.isEmpty(mediaServerId)) {
-            mediaServerId = null;
-        }
-        PageInfo<StreamPushItem> pushList = streamPushService.getPushList(page, count, query, pushing, mediaServerId);
-        return pushList;
-    }
-
-    @ApiOperation("将推流添加到国标")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "stream", value = "直播流关联国标平台", dataTypeClass = GbStream.class),
-    })
-    @PostMapping(value = "/save_to_gb")
-    @ResponseBody
-    public Object saveToGB(@RequestBody GbStream stream){
-        if (streamPushService.saveToGB(stream)){
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-
-
-    @ApiOperation("将推流移出到国标")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "stream", value = "直播流关联国标平台", dataTypeClass = GbStream.class),
-    })
-    @DeleteMapping(value = "/remove_form_gb")
-    @ResponseBody
-    public Object removeFormGB(@RequestBody GbStream stream){
-        if (streamPushService.removeFromGB(stream)){
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-
-
-    @ApiOperation("中止一个推流")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "streamId", value = "流ID", required = true, dataTypeClass = String.class),
-    })
-    @PostMapping(value = "/stop")
-    @ResponseBody
-    public Object stop(String app, String streamId){
-        if (streamPushService.stop(app, streamId)){
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-
-    @ApiOperation("中止多个推流")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "app", value = "应用名", required = true, dataTypeClass = String.class),
-            @ApiImplicitParam(name = "streamId", value = "流ID", required = true, dataTypeClass = String.class),
-    })
-    @DeleteMapping(value = "/batchStop")
-    @ResponseBody
-    public Object batchStop(@RequestBody BatchGBStreamParam batchGBStreamParam){
-        if (batchGBStreamParam.getGbStreams().size() == 0) {
-            return "fail";
-        }
-        if (streamPushService.batchStop(batchGBStreamParam.getGbStreams())){
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-
-    @PostMapping(value = "upload")
-    @ResponseBody
-    public DeferredResult<ResponseEntity<WVPResult<Object>>> uploadChannelFile(@RequestParam(value = "file") MultipartFile file){
-
-        // 最多处理文件一个小时
-        DeferredResult<ResponseEntity<WVPResult<Object>>> result = new DeferredResult<>(60*60*1000L);
-        // 录像查询以channelId作为deviceId查询
-        String key = DeferredResultHolder.UPLOAD_FILE_CHANNEL;
-        String uuid = UUID.randomUUID().toString();
-        logger.info("通道导入文件类型: {}",file.getContentType() );
-        if (file.isEmpty()) {
-            logger.warn("通道导入文件为空");
-            WVPResult<Object> wvpResult = new WVPResult<>();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("文件为空");
-            result.setResult(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(wvpResult));
-            return result;
-        }
-        if (file.getContentType() == null) {
-            WVPResult<Object> wvpResult = new WVPResult<>();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("无法识别文件类型");
-            result.setResult(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(wvpResult));
-            return result;
-        }
-        // 同时只处理一个文件
-        if (resultHolder.exist(key, null)) {
-            logger.warn("已有导入任务正在执行");
-            WVPResult<Object> wvpResult = new WVPResult<>();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("已有导入任务正在执行");
-            result.setResult(ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).body(wvpResult));
-            return result;
-        }
-
-        resultHolder.put(key, uuid, result);
-        result.onTimeout(()->{
-            logger.warn("通道导入超时,可能文件过大");
-            RequestMessage msg = new RequestMessage();
-            msg.setKey(key);
-            WVPResult<Object> wvpResult = new WVPResult<>();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("导入超时,可能文件过大");
-            msg.setData(wvpResult);
-            resultHolder.invokeAllResult(msg);
-        });
-        //获取文件流
-        InputStream inputStream = null;
-        try {
-            String name = file.getName();
-            inputStream = file.getInputStream();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        try {
-            //传入参数
-            ExcelReader excelReader = EasyExcel.read(inputStream, StreamPushExcelDto.class,
-                    new StreamPushUploadFileHandler(streamPushService, mediaServerService.getDefaultMediaServer().getId(), (errorStreams, errorGBs)->{
-                        logger.info("通道导入成功,存在重复App+Stream为{}个,存在国标ID为{}个", errorStreams.size(), errorGBs.size());
-                        RequestMessage msg = new RequestMessage();
-                        msg.setKey(key);
-                        WVPResult<Map<String, List<String>>> wvpResult = new WVPResult<>();
-                        if (errorStreams.size() == 0 && errorGBs.size() == 0) {
-                            wvpResult.setCode(0);
-                            wvpResult.setMsg("成功");
-                        }else {
-                            wvpResult.setCode(1);
-                            wvpResult.setMsg("导入成功。但是存在重复数据");
-                            Map<String, List<String>> errorData = new HashMap<>();
-                            errorData.put("gbId", errorGBs);
-                            errorData.put("stream", errorStreams);
-                            wvpResult.setData(errorData);
-                        }
-                        msg.setData(wvpResult);
-                        resultHolder.invokeAllResult(msg);
-                    })).build();
-            ReadSheet readSheet = EasyExcel.readSheet(0).build();
-            excelReader.read(readSheet);
-            excelReader.finish();
-        }catch (Exception e) {
-            logger.warn("通道导入失败:", e);
-            RequestMessage msg = new RequestMessage();
-            msg.setKey(key);
-            WVPResult<Object> wvpResult = new WVPResult<>();
-            wvpResult.setCode(-1);
-            wvpResult.setMsg("通道导入失败: " + e.getMessage() );
-            msg.setData(wvpResult);
-            resultHolder.invokeAllResult(msg);
-        }
-
-
-        return result;
-    }
-
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java
deleted file mode 100644
index 6a75e1d..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.user;
-
-import com.genersoft.iot.vmp.conf.security.SecurityUtils;
-import com.genersoft.iot.vmp.service.IRoleService;
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.util.DigestUtils;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-@Api(tags = "角色管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/role")
-public class RoleController {
-
-    @Autowired
-    private IRoleService roleService;
-
-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @ApiOperation("添加角色")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "name", required = true, value = "角色名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "authority", required = true, value = "权限(自行定义内容,目前未使用)", dataTypeClass = String.class),
-    })
-    @PostMapping("/add")
-    public ResponseEntity<WVPResult<Integer>> add(@RequestParam String name,
-                                                  @RequestParam(required = false) String authority){
-        WVPResult<Integer> result = new WVPResult<>();
-        // 获取当前登录用户id
-        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
-        if (currenRoleId != 1) {
-            // 只用角色id为1才可以删除和添加用户
-            result.setCode(-1);
-            result.setMsg("用户无权限");
-            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
-        }
-
-        Role role = new Role();
-        role.setName(name);
-        role.setAuthority(authority);
-        role.setCreateTime(format.format(System.currentTimeMillis()));
-        role.setUpdateTime(format.format(System.currentTimeMillis()));
-
-        int addResult = roleService.add(role);
-
-        result.setCode(addResult > 0 ? 0 : -1);
-        result.setMsg(addResult > 0 ? "success" : "fail");
-        result.setData(addResult);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    @ApiOperation("删除角色")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", required = true, value = "用户Id", dataTypeClass = Integer.class),
-    })
-    @DeleteMapping("/delete")
-    public ResponseEntity<WVPResult<String>> delete(@RequestParam Integer id){
-        // 获取当前登录用户id
-        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
-        WVPResult<String> result = new WVPResult<>();
-        if (currenRoleId != 1) {
-            // 只用角色id为0才可以删除和添加用户
-            result.setCode(-1);
-            result.setMsg("用户无权限");
-            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
-        }
-        int deleteResult = roleService.delete(id);
-
-        result.setCode(deleteResult>0? 0 : -1);
-        result.setMsg(deleteResult>0? "success" : "fail");
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    @ApiOperation("查询角色")
-    @ApiImplicitParams({})
-    @GetMapping("/all")
-    public ResponseEntity<WVPResult<List<Role>>> all(){
-        // 获取当前登录用户id
-        List<Role> allRoles = roleService.getAll();
-        WVPResult<List<Role>> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(allRoles);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
deleted file mode 100644
index 17fe2fb..0000000
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.genersoft.iot.vmp.vmanager.user;
-
-import com.genersoft.iot.vmp.conf.security.SecurityUtils;
-import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
-import com.genersoft.iot.vmp.service.IRoleService;
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.util.DigestUtils;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import javax.security.sasl.AuthenticationException;
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-@Api(tags = "用户管理")
-@CrossOrigin
-@RestController
-@RequestMapping("/api/user")
-public class UserController {
-
-    @Autowired
-    private AuthenticationManager authenticationManager;
-
-    @Autowired
-    private IUserService userService;
-
-    @Autowired
-    private IRoleService roleService;
-
-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @ApiOperation("登录")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "username", required = true, value = "用户名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "password", required = true, value = "密码(32位md5加密)", dataTypeClass = String.class),
-    })
-    @GetMapping("/login")
-    public WVPResult<LoginUser> login(@RequestParam String username, @RequestParam String password){
-        LoginUser user = null;
-        WVPResult<LoginUser> result = new WVPResult<>();
-        try {
-            user = SecurityUtils.login(username, password, authenticationManager);
-        } catch (AuthenticationException e) {
-            e.printStackTrace();
-            result.setCode(-1);
-            result.setMsg("fail");
-        }
-        if (user != null) {
-            result.setCode(0);
-            result.setMsg("success");
-            result.setData(user);
-        }else {
-            result.setCode(-1);
-            result.setMsg("fail");
-        }
-        return result;
-    }
-
-    @ApiOperation("修改密码")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "username", required = true, value = "用户名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "oldpassword", required = true, value = "旧密码(已md5加密的密码)", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "password", required = true, value = "新密码(未md5加密的密码)", dataTypeClass = String.class),
-    })
-    @PostMapping("/changePassword")
-    public String changePassword(@RequestParam String oldPassword, @RequestParam String password){
-        // 获取当前登录用户id
-        LoginUser userInfo = SecurityUtils.getUserInfo();
-        if (userInfo== null) {
-            return "fail";
-        }
-        String username = userInfo.getUsername();
-        LoginUser user = null;
-        try {
-            user = SecurityUtils.login(username, oldPassword, authenticationManager);
-            if (user != null) {
-                int userId = SecurityUtils.getUserId();
-                boolean result = userService.changePassword(userId, DigestUtils.md5DigestAsHex(password.getBytes()));
-                if (result) {
-                    return "success";
-                }
-            }
-        } catch (AuthenticationException e) {
-            e.printStackTrace();
-        }
-        return "fail";
-    }
-
-
-    @ApiOperation("添加用户")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "username", required = true, value = "用户名", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "password", required = true, value = "密码(未md5加密的密码)", dataTypeClass = String.class),
-            @ApiImplicitParam(name = "roleId", required = true, value = "角色ID", dataTypeClass = String.class),
-    })
-    @PostMapping("/add")
-    public ResponseEntity<WVPResult<Integer>> add(@RequestParam String username,
-                                                 @RequestParam String password,
-                                                 @RequestParam Integer roleId){
-        WVPResult<Integer> result = new WVPResult<>();
-        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || roleId == null) {
-            result.setCode(-1);
-            result.setMsg("参数不可为空");
-            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
-        }
-        // 获取当前登录用户id
-        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
-        if (currenRoleId != 1) {
-            // 只用角色id为1才可以删除和添加用户
-            result.setCode(-1);
-            result.setMsg("用户无权限");
-            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
-        }
-        User user = new User();
-        user.setUsername(username);
-        user.setPassword(DigestUtils.md5DigestAsHex(password.getBytes()));
-
-        Role role = roleService.getRoleById(roleId);
-
-        if (role == null) {
-            result.setCode(-1);
-            result.setMsg("roleId is not found");
-            // 角色不存在
-            return new ResponseEntity<>(result, HttpStatus.OK);
-        }
-        user.setRole(role);
-        user.setCreateTime(format.format(System.currentTimeMillis()));
-        user.setUpdateTime(format.format(System.currentTimeMillis()));
-        int addResult = userService.addUser(user);
-
-        result.setCode(addResult > 0 ? 0 : -1);
-        result.setMsg(addResult > 0 ? "success" : "fail");
-        result.setData(addResult);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    @ApiOperation("删除用户")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id", required = true, value = "用户Id", dataTypeClass = Integer.class),
-    })
-    @DeleteMapping("/delete")
-    public ResponseEntity<WVPResult<String>> delete(@RequestParam Integer id){
-        // 获取当前登录用户id
-        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
-        WVPResult<String> result = new WVPResult<>();
-        if (currenRoleId != 1) {
-            // 只用角色id为0才可以删除和添加用户
-            result.setCode(-1);
-            result.setMsg("用户无权限");
-            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
-        }
-        int deleteResult = userService.deleteUser(id);
-
-        result.setCode(deleteResult>0? 0 : -1);
-        result.setMsg(deleteResult>0? "success" : "fail");
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-    @ApiOperation("查询用户")
-    @ApiImplicitParams({})
-    @GetMapping("/all")
-    public ResponseEntity<WVPResult<List<User>>> all(){
-        // 获取当前登录用户id
-        List<User> allUsers = userService.getAllUsers();
-        WVPResult<List<User>> result = new WVPResult<>();
-        result.setCode(0);
-        result.setMsg("success");
-        result.setData(allUsers);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java
deleted file mode 100644
index eac742c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.genersoft.iot.vmp.web.gb28181;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * API兼容:设备控制
- */
-@CrossOrigin
-@RestController
-@RequestMapping(value = "/api/v1/control")
-public class ApiControlController {
-
-    private final static Logger logger = LoggerFactory.getLogger(ApiControlController.class);
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    /**
-     * 设备控制 - 云台控制
-     * @param serial 设备编号
-     * @param command 控制指令 允许值: left, right, up, down, upleft, upright, downleft, downright, zoomin, zoomout, stop
-     * @param channel 通道序号
-     * @param code 通道编号
-     * @param speed 速度(0~255) 默认值: 129
-     * @return
-     */
-    @RequestMapping(value = "/ptz")
-    private JSONObject list(String serial,String command,
-                            @RequestParam(required = false)Integer channel,
-                            @RequestParam(required = false)String code,
-                            @RequestParam(required = false)Integer speed){
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("模拟接口> 设备云台控制 API调用,deviceId:{} ,channelId:{} ,command:{} ,speed:{} ",
-                    serial, code, command, speed);
-        }
-        if (channel == null) {channel = 0;}
-        if (speed == null) {speed = 0;}
-        Device device = storager.queryVideoDevice(serial);
-        if (device == null) {
-            JSONObject result = new JSONObject();
-            result.put("error","device[ " + serial + " ]未找到");
-            return result;
-        }
-        int cmdCode = 0;
-        switch (command){
-            case "left":
-                cmdCode = 2;
-                break;
-            case "right":
-                cmdCode = 1;
-                break;
-            case "up":
-                cmdCode = 8;
-                break;
-            case "down":
-                cmdCode = 4;
-                break;
-            case "upleft":
-                cmdCode = 10;
-                break;
-            case "upright":
-                cmdCode = 9;
-                break;
-            case "downleft":
-                cmdCode = 6;
-                break;
-            case "downright":
-                cmdCode = 5;
-                break;
-            case "zoomin":
-                cmdCode = 16;
-                break;
-            case "zoomout":
-                cmdCode = 32;
-                break;
-            case "stop":
-                cmdCode = 0;
-                break;
-            default:
-                break;
-        }
-        // 默认值 50
-        cmder.frontEndCmd(device, code, cmdCode, speed, speed, speed);
-        return null;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java
deleted file mode 100644
index faf873e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.genersoft.iot.vmp.web.gb28181;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-/**
- * API兼容:系统接口
- */
-@Controller
-@CrossOrigin
-@RequestMapping(value = "/api/v1")
-public class ApiController {
-
-    private final static Logger logger = LoggerFactory.getLogger(ApiController.class);
-
-    @Autowired
-    private SipConfig sipConfig;
-
-
-    @RequestMapping("/getserverinfo")
-    private JSONObject getserverinfo(){
-        JSONObject result = new JSONObject();
-        result.put("Authorization","ceshi");
-        result.put("Hardware","");
-        result.put("InterfaceVersion","2.5.5");
-        result.put("IsDemo","");
-        result.put("Hardware","false");
-        result.put("APIAuth","false");
-        result.put("RemainDays","永久");
-        result.put("RunningTime","");
-        result.put("ServerTime","2020-09-02 17:11");
-        result.put("StartUpTime","2020-09-02 17:11");
-        result.put("Server","");
-        result.put("SIPSerial", sipConfig.getId());
-        result.put("SIPRealm", sipConfig.getDomain());
-        result.put("SIPHost", sipConfig.getIp());
-        result.put("SIPPort", sipConfig.getPort());
-        result.put("ChannelCount","1000");
-        result.put("VersionType","");
-        result.put("LogoMiniText","");
-        result.put("LogoText","");
-        result.put("CopyrightText","");
-
-        return result;
-    }
-
-    @RequestMapping(value = "/userinfo")
-    private JSONObject userinfo(){
-//        JSONObject result = new JSONObject();
-//        result.put("ID","ceshi");
-//        result.put("Hardware","");
-//        result.put("InterfaceVersion","2.5.5");
-//        result.put("IsDemo","");
-//        result.put("Hardware","false");
-//        result.put("APIAuth","false");
-//        result.put("RemainDays","永久");
-//        result.put("RunningTime","");
-//        result.put("ServerTime","2020-09-02 17:11");
-//        result.put("StartUpTime","2020-09-02 17:11");
-//        result.put("Server","");
-//        result.put("SIPSerial", sipConfig.getId());
-//        result.put("SIPRealm", sipConfig.getDomain());
-//        result.put("SIPHost", sipConfig.getIp());
-//        result.put("SIPPort", sipConfig.getPort());
-//        result.put("ChannelCount","1000");
-//        result.put("VersionType","");
-//        result.put("LogoMiniText","");
-//        result.put("LogoText","");
-//        result.put("CopyrightText","");
-
-        return null;
-    }
-
-    /**
-     *  系统接口 - 登录
-     * @param username 用户名
-     * @param password 密码(经过md5加密,32位长度,不带中划线,不区分大小写)
-     * @return
-     */
-    @RequestMapping(value = "/login")
-    @ResponseBody
-    private JSONObject login(String username,String password ){
-        if (logger.isDebugEnabled()) {
-            logger.debug(String.format("模拟接口> 登录 API调用,username:%s ,password:%s ",
-                    username, password));
-        }
-
-        JSONObject result = new JSONObject();
-        result.put("CookieToken","ynBDDiKMg");
-        result.put("URLToken","MOBkORkqnrnoVGcKIAHXppgfkNWRdV7utZSkDrI448Q.oxNjAxNTM4NDk3LCJwIjoiZGJjODg5NzliNzVj" +
-                "Nzc2YmU5MzBjM2JjNjg1ZWFiNGI5ZjhhN2Y0N2RlZjg3NWUyOTJkY2VkYjkwYmEwMTA0NyIsInQiOjE2MDA5MzM2OTcsInUiOiI" +
-                "4ODlkZDYyM2ViIn0eyJlIj.GciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJhb");
-        result.put("TokenTimeout",604800);
-        result.put("AuthToken","MOBkORkqnrnoVGcKIAHXppgfkNWRdV7utZSkDrI448Q.oxNjAxNTM4NDk3LCJwIjoiZGJjODg5NzliNzVj" +
-                "Nzc2YmU5MzBjM2JjNjg1ZWFiNGI5ZjhhN2Y0N2RlZjg3NWUyOTJkY2VkYjkwYmEwMTA0NyIsInQiOjE2MDA5MzM2OTcsInUiOiI" +
-                "4ODlkZDYyM2ViIn0eyJlIj.GciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJhb");
-        result.put("Token","ynBDDiKMg");
-        return result;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
deleted file mode 100644
index 2e96fbe..0000000
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.genersoft.iot.vmp.web.gb28181;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.github.pagehelper.PageInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * API兼容:设备信息
- */
-@SuppressWarnings("unchecked")
-@CrossOrigin
-@RestController
-@RequestMapping(value = "/api/v1/device")
-public class ApiDeviceController {
-
-    private final static Logger logger = LoggerFactory.getLogger(ApiDeviceController.class);
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    // @Autowired
-    // private SIPCommander cmder;
-
-    // @Autowired
-    // private DeferredResultHolder resultHolder;
-
-    // @Autowired
-    // private DeviceOffLineDetector offLineDetector;
-
-    /**
-     * 分页获取设备列表 TODO 现在直接返回,尚未实现分页
-     * @param start
-     * @param limit
-     * @param q
-     * @param online
-     * @return
-     */
-    @RequestMapping(value = "/list")
-    public JSONObject list( @RequestParam(required = false)Integer start,
-                            @RequestParam(required = false)Integer limit,
-                            @RequestParam(required = false)String q,
-                            @RequestParam(required = false)Boolean online ){
-
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询所有视频设备API调用");
-//        }
-        JSONObject result = new JSONObject();
-        List<Device> devices;
-        if (start == null || limit ==null) {
-            devices = storager.queryVideoDeviceList();
-            result.put("DeviceCount", devices.size());
-        }else {
-            PageInfo<Device> deviceList = storager.queryVideoDeviceList(start/limit, limit);
-            result.put("DeviceCount", deviceList.getTotal());
-            devices = deviceList.getList();
-        }
-
-        JSONArray deviceJSONList = new JSONArray();
-        for (Device device : devices) {
-            JSONObject deviceJsonObject = new JSONObject();
-            deviceJsonObject.put("ID", device.getDeviceId());
-            deviceJsonObject.put("Name", device.getName());
-            deviceJsonObject.put("Type", "GB");
-            deviceJsonObject.put("ChannelCount", device.getChannelCount());
-            deviceJsonObject.put("RecvStreamIP", "");
-            deviceJsonObject.put("CatalogInterval", 3600); // 通道目录抓取周期
-            deviceJsonObject.put("SubscribeInterval", device.getSubscribeCycleForCatalog()); // 订阅周期(秒), 0 表示后台不周期订阅
-            deviceJsonObject.put("Online", device.getOnline() == 1);
-            deviceJsonObject.put("Password", "");
-            deviceJsonObject.put("MediaTransport", device.getTransport());
-            deviceJsonObject.put("RemoteIP", device.getIp());
-            deviceJsonObject.put("RemotePort", device.getPort());
-            deviceJsonObject.put("LastRegisterAt", "");
-            deviceJsonObject.put("LastKeepaliveAt", "");
-            deviceJsonObject.put("UpdatedAt", "");
-            deviceJsonObject.put("CreatedAt", "");
-            deviceJSONList.add(deviceJsonObject);
-        }
-        result.put("DeviceList",deviceJSONList);
-        return result;
-    }
-
-    @RequestMapping(value = "/channellist")
-    public JSONObject channellist( String serial,
-                                   @RequestParam(required = false)String channel_type,
-                                   @RequestParam(required = false)String dir_serial ,
-                                   @RequestParam(required = false)Integer start,
-                                   @RequestParam(required = false)Integer limit,
-                                   @RequestParam(required = false)String q,
-                                   @RequestParam(required = false)Boolean online ){
-
-//        if (logger.isDebugEnabled()) {
-//            logger.debug("查询所有视频设备API调用");
-//        }
-        JSONObject result = new JSONObject();
-        // 查询设备是否存在
-        Device device = storager.queryVideoDevice(serial);
-        if (device == null) {
-            result.put("ChannelCount", 0);
-            result.put("ChannelList", "[]");
-            return result;
-        }
-        List<DeviceChannel> deviceChannels;
-        List<DeviceChannel> allDeviceChannelList = storager.queryChannelsByDeviceId(serial);
-        if (start == null || limit ==null) {
-            deviceChannels = allDeviceChannelList;
-            result.put("ChannelCount", deviceChannels.size());
-        }else {
-            deviceChannels = storager.queryChannelsByDeviceIdWithStartAndLimit(serial, null, null, null,start, limit);
-            int total = allDeviceChannelList.size();
-            result.put("ChannelCount", total);
-        }
-
-        JSONArray channleJSONList = new JSONArray();
-        for (DeviceChannel deviceChannel : deviceChannels) {
-            JSONObject deviceJOSNChannel = new JSONObject();
-            deviceJOSNChannel.put("ID", deviceChannel.getChannelId());
-            deviceJOSNChannel.put("DeviceID", device.getDeviceId());
-            deviceJOSNChannel.put("DeviceName", device.getName());
-            deviceJOSNChannel.put("DeviceOnline", device.getOnline() == 1);
-            deviceJOSNChannel.put("Channel", 0); // TODO 自定义序号
-            deviceJOSNChannel.put("Name", deviceChannel.getName());
-            deviceJOSNChannel.put("Custom", false);
-            deviceJOSNChannel.put("CustomName", "");
-            deviceJOSNChannel.put("SubCount", deviceChannel.getSubCount()); // TODO ? 子节点数, SubCount > 0 表示该通道为子目录
-            deviceJOSNChannel.put("SnapURL", "");
-            deviceJOSNChannel.put("Manufacturer ", deviceChannel.getManufacture());
-            deviceJOSNChannel.put("Model", deviceChannel.getModel());
-            deviceJOSNChannel.put("Owner", deviceChannel.getOwner());
-            deviceJOSNChannel.put("CivilCode", deviceChannel.getCivilCode());
-            deviceJOSNChannel.put("Address", deviceChannel.getAddress());
-            deviceJOSNChannel.put("Parental", deviceChannel.getParental()); // 当为通道设备时, 是否有通道子设备, 1-有,0-没有
-            deviceJOSNChannel.put("ParentID", deviceChannel.getParentId()); // 直接上级编号
-            deviceJOSNChannel.put("Secrecy", deviceChannel.getSecrecy());
-            deviceJOSNChannel.put("RegisterWay", 1); // 注册方式, 缺省为1, 允许值: 1, 2, 3
-                                                     // 1-IETF RFC3261,
-                                                     // 2-基于口令的双向认证,
-                                                     // 3-基于数字证书的双向认证
-            deviceJOSNChannel.put("Status", deviceChannel.getStatus());
-            deviceJOSNChannel.put("Longitude", deviceChannel.getLongitude());
-            deviceJOSNChannel.put("Latitude", deviceChannel.getLatitude());
-            deviceJOSNChannel.put("PTZType ", deviceChannel.getPTZType()); // 云台类型, 0 - 未知, 1 - 球机, 2 - 半球,
-                                                                            //   3 - 固定枪机, 4 - 遥控枪机
-            deviceJOSNChannel.put("CustomPTZType", "");
-            deviceJOSNChannel.put("StreamID", deviceChannel.getStreamId()); // StreamID 直播流ID, 有值表示正在直播
-            deviceJOSNChannel.put("NumOutputs ", -1); // 直播在线人数
-            channleJSONList.add(deviceJOSNChannel);
-        }
-        result.put("ChannelList", channleJSONList);
-        return result;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
deleted file mode 100644
index dfc2c44..0000000
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.genersoft.iot.vmp.web.gb28181;
-
-import com.alibaba.fastjson.JSONObject;
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IPlayService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.async.DeferredResult;
-
-/**
- * API兼容:实时直播
- */
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-@CrossOrigin
-@RestController
-@RequestMapping(value = "/api/v1/stream")
-public class ApiStreamController {
-
-    private final static Logger logger = LoggerFactory.getLogger(ApiStreamController.class);
-
-    @Autowired
-    private SIPCommander cmder;
-
-    @Autowired
-    private IVideoManagerStorager storager;
-
-    @Autowired
-    private UserSetup userSetup;
-
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
-    private IPlayService playService;
-
-    /**
-     * 实时直播 - 开始直播
-     * @param serial 设备编号
-     * @param channel 通道序号 默认值: 1
-     * @param code 通道编号,通过 /api/v1/device/channellist 获取的 ChannelList.ID, 该参数和 channel 二选一传递即可
-     * @param cdn TODO 转推 CDN 地址, 形如: [rtmp|rtsp]://xxx, encodeURIComponent
-     * @param audio TODO 是否开启音频, 默认 开启
-     * @param transport 流传输模式, 默认 UDP
-     * @param checkchannelstatus TODO 是否检查通道状态, 默认 false, 表示 拉流前不检查通道状态是否在线
-     * @param transportmode TODO 当 transport=TCP 时有效, 指示流传输主被动模式, 默认被动
-     * @param timeout TODO 拉流超时(秒),
-     * @return
-     */
-    @RequestMapping(value = "/start")
-    private DeferredResult<JSONObject> start(String serial ,
-                                             @RequestParam(required = false)Integer channel ,
-                                             @RequestParam(required = false)String code,
-                                             @RequestParam(required = false)String cdn,
-                                             @RequestParam(required = false)String audio,
-                                             @RequestParam(required = false)String transport,
-                                             @RequestParam(required = false)String checkchannelstatus ,
-                                             @RequestParam(required = false)String transportmode,
-                                             @RequestParam(required = false)String timeout
-
-    ){
-        DeferredResult<JSONObject> resultDeferredResult = new DeferredResult<>(userSetup.getPlayTimeout() + 10);
-        Device device = storager.queryVideoDevice(serial);
-        if (device == null ) {
-            JSONObject result = new JSONObject();
-            result.put("error","device[ " + serial + " ]未找到");
-            resultDeferredResult.setResult(result);
-        }else if (device.getOnline() == 0) {
-            JSONObject result = new JSONObject();
-            result.put("error","device[ " + code + " ]offline");
-            resultDeferredResult.setResult(result);
-        }
-        resultDeferredResult.onTimeout(()->{
-            logger.info("播放等待超时");
-            JSONObject result = new JSONObject();
-            result.put("error","timeout");
-            resultDeferredResult.setResult(result);
-
-             // 清理RTP server
-        });
-
-        DeviceChannel deviceChannel = storager.queryChannel(serial, code);
-        if (deviceChannel == null) {
-            JSONObject result = new JSONObject();
-            result.put("error","channel[ " + code + " ]未找到");
-            resultDeferredResult.setResult(result);
-        }else if (deviceChannel.getStatus() == 0) {
-            JSONObject result = new JSONObject();
-            result.put("error","channel[ " + code + " ]offline");
-            resultDeferredResult.setResult(result);
-        }
-        MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
-        PlayResult play = playService.play(newMediaServerItem, serial, code, (mediaServerItem, response)->{
-            StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(serial, code);
-            JSONObject result = new JSONObject();
-            result.put("StreamID", streamInfo.getStream());
-            result.put("DeviceID", device.getDeviceId());
-            result.put("ChannelID", code);
-            result.put("ChannelName", deviceChannel.getName());
-            result.put("ChannelCustomName", "");
-            result.put("FLV", streamInfo.getFlv());
-            result.put("WS_FLV", streamInfo.getWs_flv());
-            result.put("RTMP", streamInfo.getRtmp());
-            result.put("HLS", streamInfo.getHls());
-            result.put("RTSP", streamInfo.getRtsp());
-            result.put("CDN", "");
-            result.put("SnapURL", "");
-            result.put("Transport", device.getTransport());
-            result.put("StartAt", "");
-            result.put("Duration", "");
-            result.put("SourceVideoCodecName", "");
-            result.put("SourceVideoWidth", "");
-            result.put("SourceVideoHeight", "");
-            result.put("SourceVideoFrameRate", "");
-            result.put("SourceAudioCodecName", "");
-            result.put("SourceAudioSampleRate", "");
-            result.put("AudioEnable", "");
-            result.put("Ondemand", "");
-            result.put("InBytes", "");
-            result.put("InBitRate", "");
-            result.put("OutBytes", "");
-            result.put("NumOutputs", "");
-            result.put("CascadeSize", "");
-            result.put("RelaySize", "");
-            result.put("ChannelPTZType", "0");
-            resultDeferredResult.setResult(result);
-//            Class<?> aClass = responseEntity.getClass().getSuperclass();
-//            Field body = null;
-//            try {
-//                // 使用反射动态修改返回的body
-//                body = aClass.getDeclaredField("body");
-//                body.setAccessible(true);
-//                body.set(responseEntity, result);
-//            } catch (NoSuchFieldException e) {
-//                e.printStackTrace();
-//            } catch (IllegalAccessException e) {
-//                e.printStackTrace();
-//            }
-        }, (eventResult) -> {
-            JSONObject result = new JSONObject();
-            result.put("error", "channel[ " + code + " ] " + eventResult.msg);
-            resultDeferredResult.setResult(result);
-        }, null);
-        return resultDeferredResult;
-    }
-
-    /**
-     * 实时直播 - 直播流停止
-     * @param serial 设备编号
-     * @param channel 通道序号
-     * @param code 通道国标编号
-     * @param check_outputs
-     * @return
-     */
-    @RequestMapping(value = "/stop")
-    @ResponseBody
-    private JSONObject stop(String serial ,
-                             @RequestParam(required = false)Integer channel ,
-                             @RequestParam(required = false)String code,
-                             @RequestParam(required = false)String check_outputs
-
-    ){
-
-        StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(serial, code);
-        if (streamInfo == null) {
-            JSONObject result = new JSONObject();
-            result.put("error","未找到流信息");
-            return result;
-        }
-        cmder.streamByeCmd(serial, code, streamInfo.getStream(), null);
-        redisCatchStorage.stopPlay(streamInfo);
-        storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
-        return null;
-    }
-
-    /**
-     * 实时直播 - 直播流保活
-     * @param serial 设备编号
-     * @param channel 通道序号
-     * @param code 通道国标编号
-     * @return
-     */
-    @RequestMapping(value = "/touch")
-    @ResponseBody
-    private JSONObject touch(String serial ,String t,
-                            @RequestParam(required = false)Integer channel ,
-                            @RequestParam(required = false)String code,
-                            @RequestParam(required = false)String autorestart,
-                            @RequestParam(required = false)String audio,
-                            @RequestParam(required = false)String cdn
-    ){
-        return null;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
deleted file mode 100644
index abefa42..0000000
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.web.gb28181;
-
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-@CrossOrigin
-@RestController
-@RequestMapping(value = "/auth")
-public class AuthController {
-
-    @Autowired
-    private IUserService userService;
-
-    @RequestMapping("/login")
-    public String devices(String name, String passwd){
-        User user = userService.getUser(name, passwd);
-        if (user != null) {
-            return "success";
-        }else {
-            return "fail";
-        }
-    }
-}
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
deleted file mode 100644
index a7a9924..0000000
--- a/src/main/resources/all-application.yml
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
-
-# 此配置文件只是用作展示所有配置项, 不可直接使用
-
-
-spring:
-    # [可选]上传文件大小限制
-    servlet:
-        multipart:
-            max-file-size: 10MB
-            max-request-size: 100MB
-    # REDIS数据库配置
-    redis:
-        # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-        host: 127.0.0.1
-        # [必须修改] 端口号
-        port: 6379
-        # [可选] 数据库 DB
-        database: 6
-        # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-        password:
-        # [可选] 超时时间
-        timeout: 10000
-        # [可选] 一个pool最多可分配多少个jedis实例
-        poolMaxTotal: 1000
-        # [可选] 一个pool最多有多少个状态为idle(空闲)的jedis实例
-        poolMaxIdle: 500
-        # [可选] 最大的等待时间(秒)
-        poolMaxWait: 5
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    datasource:
-        type: com.alibaba.druid.pool.DruidDataSource
-        driver-class-name: com.mysql.cj.jdbc.Driver
-        url: jdbc:mysql://36.14.131.101:3306/videos?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false
-        username: root
-        password: 123456
-        druid:
-            initialSize: 10                       # 连接池初始化连接数
-            maxActive: 200                        # 连接池最大连接数
-            minIdle: 5                            # 连接池最小空闲连接数
-            maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
-            keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
-            validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
-            testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
-            testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-            testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-            poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
-            timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
-            minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
-            filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
-            useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
-            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-            connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
-            #stat-view-servlet.url-pattern: /admin/druid/*
-
-# druid管理监控页面的一些配置
-rj-druid-manage:
-    allow:                        # 访问druid监控页面的IP白名单
-    deny: 192.168.1.100           # 访问druid监控页面IP黑名单
-    loginUsername: rjAdmin          # 访问druid监控页面账号
-    loginPassword: rj@2022     # 访问druid监控页面密码
-
-#mybatis:
-#    configuration:
-#        # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
-#        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-#        # 返回类型为Map,显示null对应的字段
-#        call-setters-on-nulls: true
-## [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-
-# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-    port: 18080
-    # [可选] HTTPS配置, 默认不开启
-    ssl:
-        # [可选] 是否开启HTTPS访问
-        enabled: false
-        # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名
-        key-store: classpath:xxx.jks
-        # [可选] 证书密码
-        key-password: password
-        # [可选] 证书类型, 默认为jks,根据实际修改
-        key-store-type: JKS
-
-# 作为28181服务器的配置
-sip:
-    # [必须修改] 本机的IP, 必须是网卡上的IP,用于sip下协议栈监听ip,如果监听所有设置为0.0.0.0
-    monitor-ip: 36.14.131.101
-    # [必须修改] 本机的IP
-    ip: 36.14.131.101
-    # [可选] 28181服务监听的端口
-    port: 5060
-    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-    # 后两位为行业编码,定义参照附录D.3
-    # 3701020049标识山东济南历下区 信息行业接入
-    # [可选]
-    domain: 4401020049
-    # [可选]
-    id: 44010200492000000001
-    # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-    password: admin123
-    # [可选] 心跳超时时间, 建议设置为心跳周期的三倍
-    keepalive-timeout: 255
-    # [可选] 国标级联注册失败,再次发起注册的时间间隔。 默认60秒
-    register-time-interval: 60
-    # [可选] 云台控制速度
-    ptz-speed: 50
-    # TODO [可选] 收到心跳后自动上线, 重启服务后会将所有设备置为离线,默认false,等待注册后上线。设置为true则收到心跳设置为上线。
-    # keepalliveToOnline: false
-    # 是否存储alarm信息
-    alarm: false
-
-#zlm 默认服务器配置
-media:
-    # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId
-    id:
-    # [必须修改] zlm服务器的内网IP
-    ip: 192.168.0.119
-    # [可选] 返回流地址时的ip,置空使用 media.ip
-    stream-ip:
-    # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
-    sdp-ip:
-    # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
-    hook-ip:
-    # [必须修改] zlm服务器的http.port
-    http-port: 80
-    # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置
-    http-ssl-port:
-    # [可选] zlm服务器的rtmp.port, 置空使用zlm配置文件配置
-    rtmp-port:
-    # [可选] zlm服务器的rtmp.sslport, 置空使用zlm配置文件配置
-    rtmp-ssl-port:
-    # [可选] zlm服务器的 rtp_proxy.port, 置空使用zlm配置文件配置
-    rtp-proxy-port:
-    # [可选] zlm服务器的 rtsp.port, 置空使用zlm配置文件配置
-    rtsp-port:
-    # [可选] zlm服务器的 rtsp.sslport, 置空使用zlm配置文件配置
-    rtsp-ssl-port:
-    # [可选] 是否自动配置ZLM, 如果希望手动配置ZLM, 可以设为false, 不建议新接触的用户修改
-    auto-config: true
-    # [可选] zlm服务器的hook.admin_params=secret
-    secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-    # [可选] zlm服务器的general.streamNoneReaderDelayMS
-    stream-none-reader-delay-ms:  18000  # 无人观看多久自动关闭流, -1表示永不自动关闭,即 关闭按需拉流
-    # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-    rtp:
-        # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-        enable: true
-        # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
-        port-range: 30000,30500 # 端口范围
-        # [可选] 国标级联在此范围内选择端口发送媒体流,
-        send-port-range: 30000,30500 # 端口范围
-    # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-    record-assist-port: 0
-
-# [可选] 日志配置, 一般不需要改
-logging:
-    config: classpath:logback-spring-local.xml
-
-# [根据业务需求配置]
-user-settings:
-    # [可选] 服务ID,不写则为000000
-    server-id:
-    # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
-    auto-apply-play: false
-    # [可选] 部分设备需要扩展SDP,需要打开此设置
-    senior-sdp: false
-    # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认)
-    save-position-history: false
-    # 点播等待超时时间,单位:毫秒
-    play-timeout: 3000
-    # 是否开启接口鉴权
-    interface-authentication: true
-    # 自动配置redis 可以过期事件
-    redis-config: true
-    # 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录
-    interface-authentication-excludes:
-        - /api/v1/**
-    # 推流直播是否录制
-    record-push-live: true
-    # 国标是否录制
-    record-sip: true
-    # 是否将日志存储进数据库
-    logInDatebase: true
-    # 第三方匹配,用于从stream钟获取有效信息
-    thirdPartyGBIdReg: "[\\s\\S]*"
-
-# 在线文档: swagger-ui(生产环境建议关闭)
-swagger-ui:
-    enabled: true
-
-# 版本信息, 不需修改
-version:
-    version: "@project.version@"
-    description: "@project.description@"
-    artifact-id: "@project.artifactId@"
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
deleted file mode 100644
index 38deab2..0000000
--- a/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-spring:
-  # [可选]上传文件大小限制
-  servlet:
-    multipart:
-      max-file-size: 10MB
-      max-request-size: 100MB
-  # REDIS数据库配置
-  redis:
-    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-    host: 127.0.0.1
-    # [必须修改] 端口号
-    port: 6385
-    # [可选] 数据库 DB
-    database: 6
-    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-    password:
-    # [可选] 超时时间
-    timeout: 10000
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    # mysql数据源
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://36.14.131.102:3306/videos?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowPublicKeyRetrieval=true
-    username: root
-    password: ft@135246
-    druid:
-      initialSize: 10                       # 连接池初始化连接数
-      maxActive: 200                        # 连接池最大连接数
-      minIdle: 5                            # 连接池最小空闲连接数
-      maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所\下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
-      keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
-      validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
-      testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
-      testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
-      timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
-      minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
-      filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
-      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
-      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
-      #stat-view-servlet.url-pattern: /admin/druid/*
-
-#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-  port: 18085
-
-# 作为28181服务器的配置
-sip:
-  monitor-ip: 0.0.0.0
-  # [必须修改] 本机的IP
-  ip: 36.14.131.102
-  # [可选] 28181服务监听的端口
-  port: 5060
-  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-  # 后两位为行业编码,定义参照附录D.3
-  # 3701020049标识山东济南历下区 信息行业接入
-  # [可选]
-  domain: 3402000000
-  # [可选]
-  id: 34020000002000000001
-  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-  password: 12345678
-
-#zlm 默认服务器配置
-media:
-  id: your_server_id
-  # [必须修改] zlm服务器的内网IP
-  ip: 36.14.131.102
-  # [必须修改] zlm服务器的http.port
-  http-port: 8880
-  # [可选] zlm服务器的hook.admin_params=secret
-  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-  rtp:
-    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-    enable: true
-    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
-    port-range: 30000,30500 # 端口范围
-    # [可选] 国标级联在此范围内选择端口发送媒体流,
-    send-port-range: 30000,30500 # 端口范围
-  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-  record-assist-port: 18081
-# [可选] 日志配置, 一般不需要改
-logging:
-  config: classpath:logback-spring-local.xml
-user-settings:
-  play-timeout: 5000
-  # 推流直播是否录制
-  record-push-live: true
-  # 国标是否录制
-  record-sip: true
-# 版本信息, 不需修改
-version:
-  version: "@project.version@"
-  description: "@project.description@"
-  artifact-id: "@project.artifactId@"
-
-# 手台,执法记录仪udp接收端口
-syscfg:
-  udpReceivePort: 7687
-
-
-#mybatis 配置
-mybatis:
-  mapper-locations: classpath:**/mapper/*Mapper.xml
diff --git a/src/main/resources/application-docker.yml b/src/main/resources/application-docker.yml
deleted file mode 100644
index d7d2148..0000000
--- a/src/main/resources/application-docker.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-spring:
-    # 上传文件大小限制
-    servlet:
-        multipart:
-            max-file-size: 10MB
-            max-request-size: 100MB
-    # REDIS数据库配置
-    redis:
-        # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-        host: ${REDIS_HOST:127.0.0.1}
-        # [必须修改] 端口号
-        port: ${REDIS_PORT:6379}
-        # [可选] 数据库 DB
-        database: ${REDIS_DB:6}
-        # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-        password: ${REDIS_PWD:root}
-        # [可选] 超时时间
-        timeout: 10000
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    datasource:
-        # 使用mysql 打开23-28行注释, 删除29-36行
-         name: wvp
-         url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&allowMultiQueries=true&useSSL=false
-         username: root
-         password: root
-         type: com.alibaba.druid.pool.DruidDataSource
-         driver-class-name: com.mysql.cj.jdbc.Driver
-
-# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-    port: 18080
-
-# 作为28181服务器的配置
-sip:
-    # [必须修改] 本机的IP
-    ip: ${WVP_HOST:127.0.0.1}
-    # [可选] 28181服务监听的端口
-    port: ${WVP_PORT:5060}
-    # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-    # 后两位为行业编码,定义参照附录D.3
-    # 3701020049标识山东济南历下区 信息行业接入
-    # [可选]
-    domain: ${WVP_DOMAIN:4401020049}
-    # [可选]
-    id: ${WVP_ID:44010200492000000001}
-    # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-    password: ${WVP_PWD:admin123}
-
-#zlm 默认服务器配置
-media:
-    # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId
-    id:
-    # [必须修改] zlm服务器的内网IP
-    ip: ${ZLM_HOST:127.0.0.1}
-    # [必须修改] zlm服务器的http.port
-    http-port: ${ZLM_PORT:80}
-    # [可选] zlm服务器的hook.admin_params=secret
-    secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-    # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-    rtp:
-        # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-        enable: true
-        # [可选] 在此范围内选择端口用于媒体流传输,
-        port-range: 30000,30500 # 端口范围
-        # [可选] 国标级联在此范围内选择端口发送媒体流,
-        send-port-range: 30000,30500 # 端口范围
-    # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-    record-assist-port: 18081
-    sdp-ip: ${sip.ip}
-    stream-ip: ${sip.ip}
-# [可选] 日志配置, 一般不需要改
-# [可选] 日志配置, 一般不需要改
-logging:
-    config: classpath:logback-spring-local.xml
-
-# [根据业务需求配置]
-user-settings:
-    # 推流直播是否录制
-    record-push-live: true
-    auto-apply-play: true
-
-# 在线文档: swagger-ui(生产环境建议关闭)
-swagger-ui:
-    enabled: true
-
-# 版本信息, 不需修改
-version:
-    version: "@project.version@"
-    description: "@project.description@"
-    artifact-id: "@project.artifactId@"
-
-syscfg:
-    udpReceivePort: 7687
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
deleted file mode 100644
index 651ba71..0000000
--- a/src/main/resources/application-test.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-spring:
-  # [可选]上传文件大小限制
-  servlet:
-    multipart:
-      max-file-size: 10MB
-      max-request-size: 100MB
-  # REDIS数据库配置
-  redis:
-    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
-    host: 127.0.0.1
-    # [必须修改] 端口号
-    port: 6379
-    # [可选] 数据库 DB
-    database: 9
-    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
-    password:
-    # [可选] 超时时间
-    timeout: 10000
-    # [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
-    # mysql数据源
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://106.225.193.35:3306/videos_test?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowPublicKeyRetrieval=true
-    username: root
-    password: HCyj@2022
-    druid:
-      initialSize: 10                       # 连接池初始化连接数
-      maxActive: 500                        # 连接池最大连接数
-      minIdle: 5                            # 连接池最小空闲连接数
-      maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所\下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
-      keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
-      validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
-      testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
-      testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
-      poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小
-      timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
-      minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒
-      filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
-      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
-      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
-      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
-      #stat-view-servlet.url-pattern: /admin/druid/*
-
-#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
-server:
-  port: 18185
-
-# 作为28181服务器的配置
-sip:
-  monitor-ip: 0.0.0.0
-  # [必须修改] 本机的IP
-  ip: 192.168.1.170
-  # [可选] 28181服务监听的端口
-  port: 5070
-  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
-  # 后两位为行业编码,定义参照附录D.3
-  # 3701020049标识山东济南历下区 信息行业接入
-  # [可选]
-  domain: 3402000000
-  # [可选]
-  id: 34020000002000000001
-  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
-  password: 12345678
-
-#zlm 默认服务器配置
-media:
-  id: your_server_id
-  # [必须修改] zlm服务器的内网IP
-  ip: 192.168.0.160
-  # [必须修改] zlm服务器的http.port
-  http-port: 8880
-  # [可选] zlm服务器的hook.admin_params=secret
-  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
-  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
-  rtp:
-    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
-    enable: true
-    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
-    port-range: 30000,30500 # 端口范围
-    # [可选] 国标级联在此范围内选择端口发送媒体流,
-    send-port-range: 30000,30500 # 端口范围
-  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
-  record-assist-port: 18081
-# [可选] 日志配置, 一般不需要改
-logging:
-  config: classpath:logback-spring-local.xml
-user-settings:
-  play-timeout: 5000
-  # 推流直播是否录制
-  record-push-live: true
-  # 国标是否录制
-  record-sip: true
-# 版本信息, 不需修改
-version:
-  version: "@project.version@"
-  description: "@project.description@"
-  artifact-id: "@project.artifactId@"
-
-# 手台,执法记录仪udp接收端口
-syscfg:
-  udpReceivePort: 7687
-
-#mybatis 配置
-mybatis:
-  mapper-locations: classpath:**/mapper/*Mapper.xml
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
deleted file mode 100644
index 3d7808a..0000000
--- a/src/main/resources/application.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-spring:
-  profiles:
-    active: dev
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
deleted file mode 100644
index 0c7250d..0000000
--- a/src/main/resources/banner.txt
+++ /dev/null
@@ -1,9 +0,0 @@
- ___       __   ___      ___ ________                ________  ________  ________     
-|\  \     |\  \|\  \    /  /|\   __  \              |\   __  \|\   __  \|\   __  \    
-\ \  \    \ \  \ \  \  /  / | \  \|\  \ ____________\ \  \|\  \ \  \|\  \ \  \|\  \   
- \ \  \  __\ \  \ \  \/  / / \ \   ____\\____________\ \   ____\ \   _  _\ \  \\\  \  
-  \ \  \|\__\_\  \ \    / /   \ \  \___\|____________|\ \  \___|\ \  \\  \\ \  \\\  \ 
-   \ \____________\ \__/ /     \ \__\                  \ \__\    \ \__\\ _\\ \_______\
-    \|____________|\|__|/       \|__|                   \|__|     \|__|\|__|\|_______|
-
-版本:${version.version}
\ No newline at end of file
diff --git a/src/main/resources/logback-spring-local.xml b/src/main/resources/logback-spring-local.xml
deleted file mode 100644
index 2b4cfd0..0000000
--- a/src/main/resources/logback-spring-local.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration debug="false">
-	<!--定义日志文件的存储地址 -->
-	<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
-	<property name="LOG_HOME" value="logs/${spring.application.name}" />
-
-	<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
-	<!-- 控制台输出 -->
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
-		</encoder>
-	</appender>
-
-	<!-- 按照每天生成日志文件 DEBUG以上级别的日志,仅用于测试环境,正式环境为info级别以上的日志-->
-	<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
-
-		<!-- 文件路径 -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<!--历史日志文件输出的文件名 -->
-			<FileNamePattern>${LOG_HOME}/wvp-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
-			<!--日志文件保留天数 -->
-			<MaxHistory>30</MaxHistory>
-			<maxFileSize>20MB</maxFileSize>
-		</rollingPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<!--与ThresholdFilter的区别,允许onmatch-->
-			<!--设置日志级别 接收info级别的日志-->
-			<level>DEBUG</level>
-		</filter>
-	</appender>
-
-	<!-- 生成 error格式日志开始 -->
-	<appender name="RollingFileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
-
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<!--历史日志文件输出的文件名 -->
-			<FileNamePattern>${LOG_HOME}/error-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
-			<!--日志文件保留天数 -->
-			<MaxHistory>30</MaxHistory>
-			<maxFileSize>20MB</maxFileSize>
-		</rollingPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<!--设置日志级别,过滤掉info日志,只输入error日志-->
-			<level>WARN</level>
-			<!--			<onMatch>ACCEPT</onMatch>  &lt;!&ndash; 用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉 &ndash;&gt;-->
-			<!--			<onMismatch>DENY</onMismatch>-->
-		</filter>
-	</appender>
-
-	<!-- 生成 druid日志追加 -->
-	<appender name="druidSqlRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<!--历史日志文件输出的文件名 -->
-			<FileNamePattern>${LOG_HOME}/druid-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
-			<!--日志文件保留天数 -->
-			<MaxHistory>30</MaxHistory>
-			<maxFileSize>50MB</maxFileSize>
-		</rollingPolicy>
-		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<!--设置日志级别,过滤掉info日志,只输入error日志-->
-			<level>WARN</level>
-			<!--			<onMatch>ACCEPT</onMatch>  &lt;!&ndash; 用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉 &ndash;&gt;-->
-			<!--			<onMismatch>DENY</onMismatch>-->
-		</filter>
-	</appender>
-
-
-	<!-- 日志输出级别 -->
-	<root level="INFO">
-		<appender-ref ref="STDOUT" />
-		<appender-ref ref="RollingFile" />
-		<appender-ref ref="RollingFileError" />
-	</root>
-
-	<logger name="com.genersoft.iot.vmp.storager.dao" level="INFO">
-		<appender-ref ref="STDOUT"/>
-	</logger>
-	<logger name="com.genersoft.iot.vmp.gb28181" level="INFO">
-		<appender-ref ref="STDOUT"/>
-	</logger>
-
-	<!--记录druid-sql的记录-->
-	<logger name="druid.sql.Statement" level="warn" additivity="true">
-		<!--AppenderRef ref="Console"/-->
-		<appender-ref ref="RollingFile"/>
-		<appender-ref ref="RollingFileError"/>
-		<appender-ref ref="druidSqlRollingFile"/>
-	</logger>
-
-	<!--gb28181包日志的记录-->
-	<logger name="com.genersoft.iot.vmp.gb28181" level="info" additivity="true">
-		<!--AppenderRef ref="Console"/-->
-		<appender-ref ref="RollingFile"/>
-		<appender-ref ref="RollingFileError"/>
-		<appender-ref ref="druidSqlRollingFile"/>
-	</logger>
-
-	<!--gb28181包日志的记录-->
-<!--	<logger name="com.genersoft.iot.vmp.netty" level="info" additivity="true">-->
-<!--		&lt;!&ndash;AppenderRef ref="Console"/&ndash;&gt;-->
-<!--		<appender-ref ref="RollingFile"/>-->
-<!--		<appender-ref ref="RollingFileError"/>-->
-<!--		<appender-ref ref="druidSqlRollingFile"/>-->
-<!--	</logger>-->
-</configuration>
\ No newline at end of file
diff --git a/src/main/resources/wvpssl.jks b/src/main/resources/wvpssl.jks
deleted file mode 100644
index 92b98b7..0000000
--- a/src/main/resources/wvpssl.jks
+++ /dev/null
Binary files differ
diff --git a/src/test/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImplTest.java b/src/test/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImplTest.java
deleted file mode 100644
index 23b9f6b..0000000
--- a/src/test/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImplTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-class DeviceAlarmServiceImplTest {
-
-    @Resource
-    private IDeviceAlarmService deviceAlarmService;
-
-    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @org.junit.jupiter.api.Test
-    void getAllAlarm() {
-//        deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111",null,null,null, null, null);
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, null, null, null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", null, null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", "1", null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", "2", null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", "3", null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", "4", null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", "5", null, null,
-//                null, null).getSize());
-//
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", null, "1", null,
-//                null, null).getSize());
-
-//        System.out.println(deviceAlarmService.getAllAlarm(0, 10000, "11111111111111111111", null, "1", null,
-//                null, null).getSize());
-
-
-    }
-
-
-    @org.junit.jupiter.api.Test
-    void add() {
-        for (int i = 0; i < 1000; i++) {
-            DeviceAlarm deviceAlarm = new DeviceAlarm();
-            deviceAlarm.setDeviceId("11111111111111111111");
-            deviceAlarm.setAlarmDescription("test_" + i);
-
-            /**
-             * 报警方式 , 1为电话报警, 2为设备报警, 3为短信报警, 4为 GPS报警, 5为视频报警, 6为设备故障报警,
-             * 	 * 7其他报警;可以为直接组合如12为电话报警或 设备报警-
-             */
-            deviceAlarm.setAlarmMethod((int)(Math.random()*7 + 1) + "");
-            Date date = randomDate("2021-01-01 00:00:00", "2021-06-01 00:00:00");
-            deviceAlarm.setAlarmTime(format.format(date));
-            /**
-             * 报警级别, 1为一级警情, 2为二级警情, 3为三级警情, 4为四级 警情-
-             */
-            deviceAlarm.setAlarmPriority((int)(Math.random()*4 + 1) + "");
-            deviceAlarm.setLongitude(116.325);
-            deviceAlarm.setLatitude(39.562);
-            deviceAlarmService.add(deviceAlarm);
-        }
-
-    }
-
-    @org.junit.jupiter.api.Test
-    void clearAlarmBeforeTime() {
-        deviceAlarmService.clearAlarmBeforeTime(null,null, null);
-    }
-
-
-
-
-    private Date randomDate(String beginDate, String endDate) {
-        try {
-
-            Date start = format.parse(beginDate);//构造开始日期
-            Date end = format.parse(endDate);//构造结束日期
-            //getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
-            if (start.getTime() >= end.getTime()) {
-                return null;
-            }
-            long date = random(start.getTime(), end.getTime());
-            return new Date(date);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    private static long random(long begin, long end) {
-        long rtn = begin + (long) (Math.random() * (end - begin));
-        //如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
-        if (rtn == begin || rtn == end) {
-            return random(begin, end);
-        }
-        return rtn;
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java b/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java
deleted file mode 100644
index 13479fe..0000000
--- a/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.service.IRoleService;
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-class RoleServiceImplTest {
-
-    @Resource
-    private IRoleService roleService;
-
-    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    @org.junit.jupiter.api.Test
-    void getAllUser() {
-        List<Role> all = roleService.getAll();
-        Role roleById = roleService.getRoleById(1);
-
-    }
-
-
-    @org.junit.jupiter.api.Test
-    void add() {
-        for (int i = 0; i < 10; i++) {
-            Role role = new Role();
-            role.setName("test+" + i);
-            role.setAuthority("adadadda");
-            role.setCreateTime(format.format(System.currentTimeMillis()));
-            role.setUpdateTime(format.format(System.currentTimeMillis()));
-            roleService.add(role);
-        }
-    }
-
-    @org.junit.jupiter.api.Test
-    void delete() {
-        roleService.delete(20);
-    }
-
-    @org.junit.jupiter.api.Test
-    void update() {
-        Role role = new Role();
-        role.setId(21);
-        role.setName("TTTTTT");
-        role.setAuthority("adadadda");
-        roleService.update(role);
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java b/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java
deleted file mode 100644
index 4114870..0000000
--- a/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.genersoft.iot.vmp.service.impl;
-
-import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
-import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import com.genersoft.iot.vmp.service.IUserService;
-import com.genersoft.iot.vmp.storager.dao.dto.Role;
-import com.genersoft.iot.vmp.storager.dao.dto.User;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-class UserServiceImplTest {
-
-    @Resource
-    private IUserService userService;
-
-    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    @org.junit.jupiter.api.Test
-    void getAllUser() {
-        List<User> allUsers = userService.getAllUsers();
-        User admin = userService.getUser("admin", "21232f297a57a5a743894a0e4a801fc3");
-        User admin1 = userService.getUserByUsername("admin");
-    }
-
-
-    @org.junit.jupiter.api.Test
-    void add() {
-        for (int i = 0; i < 10; i++) {
-            User user = new User();
-            user.setUsername("admin_" + i);
-            user.setPassword("admin_password_" + i);
-
-            Role role = new Role();
-            role.setId(1);
-            user.setRole(role);
-            user.setCreateTime(format.format(System.currentTimeMillis()));
-            user.setUpdateTime(format.format(System.currentTimeMillis()));
-            userService.addUser(user);
-        }
-    }
-
-    @org.junit.jupiter.api.Test
-    void delete() {
-        userService.deleteUser(1002);
-    }
-
-    @org.junit.jupiter.api.Test
-    void update() {
-        User user = new User();
-        user.setId(11);
-        user.setUsername("update" );
-        user.setPassword("update");
-        Role role = new Role();
-        role.setId(2);
-        user.setRole(role);
-        user.setUpdateTime(format.format(System.currentTimeMillis()));
-        userService.updateUsers(user);
-    }
-
-
-}
\ No newline at end of file
diff --git a/web_src/.babelrc b/web_src/.babelrc
deleted file mode 100644
index 3a280ba..0000000
--- a/web_src/.babelrc
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "presets": [
-    ["env", {
-      "modules": false,
-      "targets": {
-        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
-      }
-    }],
-    "stage-2"
-  ],
-  "plugins": ["transform-vue-jsx", "transform-runtime"]
-}
diff --git a/web_src/.editorconfig b/web_src/.editorconfig
deleted file mode 100644
index 9d08a1a..0000000
--- a/web_src/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
diff --git a/web_src/.gitignore b/web_src/.gitignore
deleted file mode 100644
index 541a820..0000000
--- a/web_src/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-.DS_Store
-node_modules/
-/dist/
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
diff --git a/web_src/.postcssrc.js b/web_src/.postcssrc.js
deleted file mode 100644
index f8737a1..0000000
--- a/web_src/.postcssrc.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// https://github.com/michael-ciniawsky/postcss-load-config
-
-module.exports = {
-  "plugins": {
-    "postcss-import": {},
-    "postcss-url": {},
-    // to edit target browsers: use "browserslist" field in package.json
-    "autoprefixer": {},
-    'postcss-pxtorem': {
-      rootValue: 16,
-      propList: ['font-size'] // 只转化font-size
-    }
-  }
-}
diff --git a/web_src/README.md b/web_src/README.md
deleted file mode 100644
index 4141ef7..0000000
--- a/web_src/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# gb_web
-
-> A Vue.js project
-
-## Build Setup
-
-``` bash
-# install dependencies
-npm install
-
-# serve with hot reload at localhost:8080
-npm run dev
-
-# build for production with minification
-npm run build
-
-# build for production and view the bundle analyzer report
-npm run build --report
-```
-
-For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
diff --git a/web_src/build/build.js b/web_src/build/build.js
deleted file mode 100644
index 8f2ad8a..0000000
--- a/web_src/build/build.js
+++ /dev/null
@@ -1,41 +0,0 @@
-'use strict'
-require('./check-versions')()
-
-process.env.NODE_ENV = 'production'
-
-const ora = require('ora')
-const rm = require('rimraf')
-const path = require('path')
-const chalk = require('chalk')
-const webpack = require('webpack')
-const config = require('../config')
-const webpackConfig = require('./webpack.prod.conf')
-
-const spinner = ora('building for production...')
-spinner.start()
-
-rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
-  if (err) throw err
-  webpack(webpackConfig, (err, stats) => {
-    spinner.stop()
-    if (err) throw err
-    process.stdout.write(stats.toString({
-      colors: true,
-      modules: false,
-      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
-      chunks: false,
-      chunkModules: false
-    }) + '\n\n')
-
-    if (stats.hasErrors()) {
-      console.log(chalk.red('  Build failed with errors.\n'))
-      process.exit(1)
-    }
-
-    console.log(chalk.cyan('  Build complete.\n'))
-    console.log(chalk.yellow(
-      '  Tip: built files are meant to be served over an HTTP server.\n' +
-      '  Opening index.html over file:// won\'t work.\n'
-    ))
-  })
-})
diff --git a/web_src/build/check-versions.js b/web_src/build/check-versions.js
deleted file mode 100644
index 3ef972a..0000000
--- a/web_src/build/check-versions.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict'
-const chalk = require('chalk')
-const semver = require('semver')
-const packageConfig = require('../package.json')
-const shell = require('shelljs')
-
-function exec (cmd) {
-  return require('child_process').execSync(cmd).toString().trim()
-}
-
-const versionRequirements = [
-  {
-    name: 'node',
-    currentVersion: semver.clean(process.version),
-    versionRequirement: packageConfig.engines.node
-  }
-]
-
-if (shell.which('npm')) {
-  versionRequirements.push({
-    name: 'npm',
-    currentVersion: exec('npm --version'),
-    versionRequirement: packageConfig.engines.npm
-  })
-}
-
-module.exports = function () {
-  const warnings = []
-
-  for (let i = 0; i < versionRequirements.length; i++) {
-    const mod = versionRequirements[i]
-
-    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
-      warnings.push(mod.name + ': ' +
-        chalk.red(mod.currentVersion) + ' should be ' +
-        chalk.green(mod.versionRequirement)
-      )
-    }
-  }
-
-  if (warnings.length) {
-    console.log('')
-    console.log(chalk.yellow('To use this template, you must update following to modules:'))
-    console.log()
-
-    for (let i = 0; i < warnings.length; i++) {
-      const warning = warnings[i]
-      console.log('  ' + warning)
-    }
-
-    console.log()
-    process.exit(1)
-  }
-}
diff --git a/web_src/build/logo.png b/web_src/build/logo.png
deleted file mode 100644
index f3d2503..0000000
--- a/web_src/build/logo.png
+++ /dev/null
Binary files differ
diff --git a/web_src/build/utils.js b/web_src/build/utils.js
deleted file mode 100644
index e534fb0..0000000
--- a/web_src/build/utils.js
+++ /dev/null
@@ -1,101 +0,0 @@
-'use strict'
-const path = require('path')
-const config = require('../config')
-const ExtractTextPlugin = require('extract-text-webpack-plugin')
-const packageConfig = require('../package.json')
-
-exports.assetsPath = function (_path) {
-  const assetsSubDirectory = process.env.NODE_ENV === 'production'
-    ? config.build.assetsSubDirectory
-    : config.dev.assetsSubDirectory
-
-  return path.posix.join(assetsSubDirectory, _path)
-}
-
-exports.cssLoaders = function (options) {
-  options = options || {}
-
-  const cssLoader = {
-    loader: 'css-loader',
-    options: {
-      sourceMap: options.sourceMap
-    }
-  }
-
-  const postcssLoader = {
-    loader: 'postcss-loader',
-    options: {
-      sourceMap: options.sourceMap
-    }
-  }
-
-  // generate loader string to be used with extract text plugin
-  function generateLoaders (loader, loaderOptions) {
-    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
-
-    if (loader) {
-      loaders.push({
-        loader: loader + '-loader',
-        options: Object.assign({}, loaderOptions, {
-          sourceMap: options.sourceMap
-        })
-      })
-    }
-
-    // Extract CSS when that option is specified
-    // (which is the case during production build)
-    if (options.extract) {
-      return ExtractTextPlugin.extract({
-        use: loaders,
-        fallback: 'vue-style-loader'
-      })
-    } else {
-      return ['vue-style-loader'].concat(loaders)
-    }
-  }
-
-  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
-  return {
-    css: generateLoaders(),
-    postcss: generateLoaders(),
-    less: generateLoaders('less'),
-    sass: generateLoaders('sass', { indentedSyntax: true }),
-    scss: generateLoaders('sass'),
-    stylus: generateLoaders('stylus'),
-    styl: generateLoaders('stylus')
-  }
-}
-
-// Generate loaders for standalone style files (outside of .vue)
-exports.styleLoaders = function (options) {
-  const output = []
-  const loaders = exports.cssLoaders(options)
-
-  for (const extension in loaders) {
-    const loader = loaders[extension]
-    output.push({
-      test: new RegExp('\\.' + extension + '$'),
-      use: loader
-    })
-  }
-
-  return output
-}
-
-exports.createNotifierCallback = () => {
-  const notifier = require('node-notifier')
-
-  return (severity, errors) => {
-    if (severity !== 'error') return
-
-    const error = errors[0]
-    const filename = error.file && error.file.split('!').pop()
-
-    notifier.notify({
-      title: packageConfig.name,
-      message: severity + ': ' + error.name,
-      subtitle: filename || '',
-      icon: path.join(__dirname, 'logo.png')
-    })
-  }
-}
diff --git a/web_src/build/vue-loader.conf.js b/web_src/build/vue-loader.conf.js
deleted file mode 100644
index 33ed58b..0000000
--- a/web_src/build/vue-loader.conf.js
+++ /dev/null
@@ -1,22 +0,0 @@
-'use strict'
-const utils = require('./utils')
-const config = require('../config')
-const isProduction = process.env.NODE_ENV === 'production'
-const sourceMapEnabled = isProduction
-  ? config.build.productionSourceMap
-  : config.dev.cssSourceMap
-
-module.exports = {
-  loaders: utils.cssLoaders({
-    sourceMap: sourceMapEnabled,
-    extract: isProduction
-  }),
-  cssSourceMap: sourceMapEnabled,
-  cacheBusting: config.dev.cacheBusting,
-  transformToRequire: {
-    video: ['src', 'poster'],
-    source: 'src',
-    img: 'src',
-    image: 'xlink:href'
-  }
-}
diff --git a/web_src/build/webpack.base.conf.js b/web_src/build/webpack.base.conf.js
deleted file mode 100644
index 72539e3..0000000
--- a/web_src/build/webpack.base.conf.js
+++ /dev/null
@@ -1,83 +0,0 @@
-'use strict'
-const path = require('path')
-const utils = require('./utils')
-const config = require('../config')
-const vueLoaderConfig = require('./vue-loader.conf')
-
-function resolve (dir) {
-  return path.join(__dirname, '..', dir)
-}
-
-
-
-module.exports = {
-  context: path.resolve(__dirname, '../'),
-  entry: {
-    app: './src/main.js'
-  },
-  output: {
-    path: config.build.assetsRoot,
-    filename: '[name].js',
-    publicPath: process.env.NODE_ENV === 'production'
-      ? config.build.assetsPublicPath
-      : config.dev.assetsPublicPath
-  },
-  resolve: {
-    extensions: ['.js', '.vue', '.json'],
-    alias: {
-      'vue$': 'vue/dist/vue.esm.js',
-      '@': resolve('src'),
-      '@static': resolve('static'),
-    }
-  },
-  module: {
-    rules: [
-      {
-        test: /\.vue$/,
-        loader: 'vue-loader',
-        options: vueLoaderConfig
-      },
-      {
-        test: /\.js$/,
-        loader: 'babel-loader',
-        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
-      },
-      {
-        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
-        loader: 'url-loader',
-        options: {
-          limit: 10000,
-          name: utils.assetsPath('img/[name].[hash:7].[ext]')
-        }
-      },
-      {
-        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
-        loader: 'url-loader',
-        options: {
-          limit: 10000,
-          name: utils.assetsPath('media/[name].[hash:7].[ext]')
-        }
-      },
-      {
-        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
-        loader: 'url-loader',
-        options: {
-          limit: 10000,
-          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
-        }
-      }
-    ]
-  },
-  node: {
-    // prevent webpack from injecting useless setImmediate polyfill because Vue
-    // source contains it (although only uses it if it's native).
-    setImmediate: false,
-    // prevent webpack from injecting mocks to Node native modules
-    // that does not make sense for the client
-    dgram: 'empty',
-    fs: 'empty',
-    net: 'empty',
-    tls: 'empty',
-    child_process: 'empty'
-  }
-}
diff --git a/web_src/build/webpack.dev.conf.js b/web_src/build/webpack.dev.conf.js
deleted file mode 100644
index 070ae22..0000000
--- a/web_src/build/webpack.dev.conf.js
+++ /dev/null
@@ -1,95 +0,0 @@
-'use strict'
-const utils = require('./utils')
-const webpack = require('webpack')
-const config = require('../config')
-const merge = require('webpack-merge')
-const path = require('path')
-const baseWebpackConfig = require('./webpack.base.conf')
-const CopyWebpackPlugin = require('copy-webpack-plugin')
-const HtmlWebpackPlugin = require('html-webpack-plugin')
-const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
-const portfinder = require('portfinder')
-
-const HOST = process.env.HOST
-const PORT = process.env.PORT && Number(process.env.PORT)
-
-const devWebpackConfig = merge(baseWebpackConfig, {
-  module: {
-    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
-  },
-  // cheap-module-eval-source-map is faster for development
-  devtool: config.dev.devtool,
-
-  // these devServer options should be customized in /config/index.js
-  devServer: {
-    clientLogLevel: 'warning',
-    historyApiFallback: {
-      rewrites: [
-        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
-      ],
-    },
-    hot: true,
-    contentBase: false, // since we use CopyWebpackPlugin.
-    compress: true,
-    host: HOST || config.dev.host,
-    port: PORT || config.dev.port,
-    open: config.dev.autoOpenBrowser,
-    overlay: config.dev.errorOverlay
-      ? { warnings: false, errors: true }
-      : false,
-    publicPath: config.dev.assetsPublicPath,
-    proxy: config.dev.proxyTable,
-    quiet: true, // necessary for FriendlyErrorsPlugin
-    watchOptions: {
-      poll: config.dev.poll,
-    }
-  },
-  plugins: [
-    new webpack.DefinePlugin({
-      'process.env': require('../config/dev.env')
-    }),
-    new webpack.HotModuleReplacementPlugin(),
-    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
-    new webpack.NoEmitOnErrorsPlugin(),
-    // https://github.com/ampedandwired/html-webpack-plugin
-    new HtmlWebpackPlugin({
-      filename: 'index.html',
-      template: 'index.html',
-      inject: true
-    }),
-    // copy custom static assets
-    new CopyWebpackPlugin([
-      {
-        from: path.resolve(__dirname, '../static'),
-        to: config.dev.assetsSubDirectory,
-        ignore: ['.*']
-      }
-    ])
-  ]
-})
-
-module.exports = new Promise((resolve, reject) => {
-  portfinder.basePort = process.env.PORT || config.dev.port
-  portfinder.getPort((err, port) => {
-    if (err) {
-      reject(err)
-    } else {
-      // publish the new Port, necessary for e2e tests
-      process.env.PORT = port
-      // add port to devServer config
-      devWebpackConfig.devServer.port = port
-
-      // Add FriendlyErrorsPlugin
-      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
-        compilationSuccessInfo: {
-          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
-        },
-        onErrors: config.dev.notifyOnErrors
-        ? utils.createNotifierCallback()
-        : undefined
-      }))
-
-      resolve(devWebpackConfig)
-    }
-  })
-})
diff --git a/web_src/build/webpack.prod.conf.js b/web_src/build/webpack.prod.conf.js
deleted file mode 100644
index 8ad9ec3..0000000
--- a/web_src/build/webpack.prod.conf.js
+++ /dev/null
@@ -1,145 +0,0 @@
-'use strict'
-const path = require('path')
-const utils = require('./utils')
-const webpack = require('webpack')
-const config = require('../config')
-const merge = require('webpack-merge')
-const baseWebpackConfig = require('./webpack.base.conf')
-const CopyWebpackPlugin = require('copy-webpack-plugin')
-const HtmlWebpackPlugin = require('html-webpack-plugin')
-const ExtractTextPlugin = require('extract-text-webpack-plugin')
-const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
-const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
-
-const env = require('../config/prod.env')
-
-const webpackConfig = merge(baseWebpackConfig, {
-  module: {
-    rules: utils.styleLoaders({
-      sourceMap: config.build.productionSourceMap,
-      extract: true,
-      usePostCSS: true
-    })
-  },
-  devtool: config.build.productionSourceMap ? config.build.devtool : false,
-  output: {
-    path: config.build.assetsRoot,
-    filename: utils.assetsPath('js/[name].[chunkhash].js'),
-    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
-  },
-  plugins: [
-    // http://vuejs.github.io/vue-loader/en/workflow/production.html
-    new webpack.DefinePlugin({
-      'process.env': env
-    }),
-    new UglifyJsPlugin({
-      uglifyOptions: {
-        compress: {
-          warnings: false
-        }
-      },
-      sourceMap: config.build.productionSourceMap,
-      parallel: true
-    }),
-    // extract css into its own file
-    new ExtractTextPlugin({
-      filename: utils.assetsPath('css/[name].[contenthash].css'),
-      // Setting the following option to `false` will not extract CSS from codesplit chunks.
-      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
-      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
-      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
-      allChunks: true,
-    }),
-    // Compress extracted CSS. We are using this plugin so that possible
-    // duplicated CSS from different components can be deduped.
-    new OptimizeCSSPlugin({
-      cssProcessorOptions: config.build.productionSourceMap
-        ? { safe: true, map: { inline: false } }
-        : { safe: true }
-    }),
-    // generate dist index.html with correct asset hash for caching.
-    // you can customize output by editing /index.html
-    // see https://github.com/ampedandwired/html-webpack-plugin
-    new HtmlWebpackPlugin({
-      filename: config.build.index,
-      template: 'index.html',
-      inject: true,
-      minify: {
-        removeComments: true,
-        collapseWhitespace: true,
-        removeAttributeQuotes: true
-        // more options:
-        // https://github.com/kangax/html-minifier#options-quick-reference
-      },
-      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
-      chunksSortMode: 'dependency'
-    }),
-    // keep module.id stable when vendor modules does not change
-    new webpack.HashedModuleIdsPlugin(),
-    // enable scope hoisting
-    new webpack.optimize.ModuleConcatenationPlugin(),
-    // split vendor js into its own file
-    new webpack.optimize.CommonsChunkPlugin({
-      name: 'vendor',
-      minChunks (module) {
-        // any required modules inside node_modules are extracted to vendor
-        return (
-          module.resource &&
-          /\.js$/.test(module.resource) &&
-          module.resource.indexOf(
-            path.join(__dirname, '../node_modules')
-          ) === 0
-        )
-      }
-    }),
-    // extract webpack runtime and module manifest to its own file in order to
-    // prevent vendor hash from being updated whenever app bundle is updated
-    new webpack.optimize.CommonsChunkPlugin({
-      name: 'manifest',
-      minChunks: Infinity
-    }),
-    // This instance extracts shared chunks from code splitted chunks and bundles them
-    // in a separate chunk, similar to the vendor chunk
-    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
-    new webpack.optimize.CommonsChunkPlugin({
-      name: 'app',
-      async: 'vendor-async',
-      children: true,
-      minChunks: 3
-    }),
-
-    // copy custom static assets
-    new CopyWebpackPlugin([
-      {
-        from: path.resolve(__dirname, '../static'),
-        to: config.build.assetsSubDirectory,
-        ignore: ['.*']
-      }
-    ])
-  ]
-})
-
-if (config.build.productionGzip) {
-  const CompressionWebpackPlugin = require('compression-webpack-plugin')
-
-  webpackConfig.plugins.push(
-    new CompressionWebpackPlugin({
-      asset: '[path].gz[query]',
-      algorithm: 'gzip',
-      test: new RegExp(
-        '\\.(' +
-        config.build.productionGzipExtensions.join('|') +
-        ')$'
-      ),
-      threshold: 10240,
-      minRatio: 0.8
-    })
-  )
-}
-
-if (config.build.bundleAnalyzerReport) {
-  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
-  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
-}
-
-module.exports = webpackConfig
diff --git a/web_src/config/dev.env.js b/web_src/config/dev.env.js
deleted file mode 100644
index 930fce4..0000000
--- a/web_src/config/dev.env.js
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict'
-const merge = require('webpack-merge')
-const prodEnv = require('./prod.env')
-
-module.exports = merge(prodEnv, {
-  NODE_ENV: '"development"',
-  BASE_API: '"/debug"'
-})
diff --git a/web_src/config/index.js b/web_src/config/index.js
deleted file mode 100644
index cec91b8..0000000
--- a/web_src/config/index.js
+++ /dev/null
@@ -1,85 +0,0 @@
-'use strict'
-// Template version: 1.3.1
-// see http://vuejs-templates.github.io/webpack for documentation.
-
-const path = require('path')
-
-module.exports = {
-  dev: {
-
-    // Paths
-    assetsSubDirectory: 'static',
-    assetsPublicPath: '/',
-    proxyTable: {
-      '/debug': {
-        target: 'http://localhost:18080',
-        changeOrigin: true,
-        pathRewrite: {
-          '^/debug': '/'
-        }
-      },
-      '/static/snap': {
-        target: 'http://localhost:18080',
-        changeOrigin: true,
-        // pathRewrite: {
-        //   '^/static/snap': '/static/snap'
-        // }
-      },
-
-    },
-
-    // Various Dev Server settings
-    host: 'localhost', // can be overwritten by process.env.HOST
-    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
-    autoOpenBrowser: false,
-    errorOverlay: true,
-    notifyOnErrors: true,
-    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
-
-
-    /**
-     * Source Maps
-     */
-
-    // https://webpack.js.org/configuration/devtool/#development
-    devtool: 'cheap-module-eval-source-map',
-
-    // If you have problems debugging vue-files in devtools,
-    // set this to false - it *may* help
-    // https://vue-loader.vuejs.org/en/options.html#cachebusting
-    cacheBusting: true,
-
-    cssSourceMap: true
-  },
-
-  build: {
-    // Template for index.html
-    index: path.resolve(__dirname, '../../src/main/resources/static/index.html'),
-
-    // Paths
-    assetsRoot: path.resolve(__dirname, '../../src/main/resources/static/'),
-    assetsSubDirectory: './static',
-    assetsPublicPath: '/',
-
-    /**
-     * Source Maps
-     */
-
-    productionSourceMap: true,
-    // https://webpack.js.org/configuration/devtool/#production
-    devtool: '#source-map',
-
-    // Gzip off by default as many popular static hosts such as
-    // Surge or Netlify already gzip all static assets for you.
-    // Before setting to `true`, make sure to:
-    // npm install --save-dev compression-webpack-plugin
-    productionGzip: false,
-    productionGzipExtensions: ['js', 'css'],
-
-    // Run the build command with an extra argument to
-    // View the bundle analyzer report after build finishes:
-    // `npm run build --report`
-    // Set to `true` or `false` to always turn it on or off
-    bundleAnalyzerReport: process.env.npm_config_report
-  }
-}
diff --git a/web_src/config/prod.env.js b/web_src/config/prod.env.js
deleted file mode 100644
index a6f9976..0000000
--- a/web_src/config/prod.env.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict'
-module.exports = {
-  NODE_ENV: '"production"'
-}
diff --git a/web_src/index.html b/web_src/index.html
deleted file mode 100644
index af1cad2..0000000
--- a/web_src/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <title>国标28181</title>
-    <link rel="shortcut icon" href="static/favicon.ico" type="image/x-icon">
-    <link rel="stylesheet" type="text/css" href="./static/css/iconfont.css">
-    <link rel="stylesheet" type="text/css" href="./static/css/login.css">
-  </head>
-  <body>
-    <script type="text/javascript" src="./static/js/jessibuca/index.js"></script>
-    <script type="text/javascript" src="./static/js/EasyWasmPlayer.js"></script>
-    <script type="text/javascript" src="./static/js/ZLMRTCClient.js"></script>
-    <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=rk73w8dv1rkE4UdZsataG68VarhYQzrx&s=1"></script>
-    <div id="app"></div>
-    <!-- built files will be auto injected -->
-  </body>
-</html>
diff --git a/web_src/package-lock.json b/web_src/package-lock.json
deleted file mode 100644
index 356bbcc..0000000
--- a/web_src/package-lock.json
+++ /dev/null
@@ -1,26212 +0,0 @@
-{
-  "name": "gb_web",
-  "version": "1.0.0",
-  "lockfileVersion": 2,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "gb_web",
-      "version": "1.0.0",
-      "dependencies": {
-        "axios": "^0.24.0",
-        "core-js": "^2.6.5",
-        "echarts": "^4.9.0",
-        "element-ui": "^2.15.6",
-        "fingerprintjs2": "^2.1.2",
-        "moment": "^2.29.1",
-        "postcss-pxtorem": "^5.1.1",
-        "vue": "^2.6.11",
-        "vue-baidu-map": "^0.21.22",
-        "vue-clipboard2": "^0.3.1",
-        "vue-clipboards": "^1.3.0",
-        "vue-contextmenujs": "^1.3.13",
-        "vue-cookies": "^1.7.4",
-        "vue-router": "^3.1.6"
-      },
-      "devDependencies": {
-        "autoprefixer": "^7.1.2",
-        "babel-core": "^6.22.1",
-        "babel-helper-vue-jsx-merge-props": "^2.0.3",
-        "babel-loader": "^7.1.1",
-        "babel-plugin-syntax-jsx": "^6.18.0",
-        "babel-plugin-transform-runtime": "^6.22.0",
-        "babel-plugin-transform-vue-jsx": "^3.5.0",
-        "babel-preset-env": "^1.3.2",
-        "babel-preset-stage-2": "^6.22.0",
-        "chalk": "^2.0.1",
-        "copy-webpack-plugin": "^4.6.0",
-        "css-loader": "^0.28.11",
-        "extract-text-webpack-plugin": "^3.0.0",
-        "file-loader": "^1.1.4",
-        "friendly-errors-webpack-plugin": "^1.6.1",
-        "html-webpack-plugin": "^2.30.1",
-        "node-notifier": "^5.1.2",
-        "optimize-css-assets-webpack-plugin": "^3.2.0",
-        "ora": "^1.2.0",
-        "portfinder": "^1.0.13",
-        "postcss-import": "^11.0.0",
-        "postcss-loader": "^2.0.8",
-        "postcss-url": "^7.2.1",
-        "rimraf": "^2.6.0",
-        "semver": "^5.3.0",
-        "shelljs": "^0.7.6",
-        "uglifyjs-webpack-plugin": "^1.1.1",
-        "url-loader": "^0.5.8",
-        "vue-loader": "^13.3.0",
-        "vue-style-loader": "^3.0.1",
-        "vue-template-compiler": "^2.5.2",
-        "webpack": "^3.6.0",
-        "webpack-bundle-analyzer": "^2.9.0",
-        "webpack-dev-server": "^2.9.1",
-        "webpack-merge": "^4.1.0"
-      },
-      "engines": {
-        "node": ">= 6.0.0",
-        "npm": ">= 3.0.0"
-      }
-    },
-    "node_modules/@types/q": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
-      "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
-      "dev": true
-    },
-    "node_modules/accepts": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
-      "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
-      "dev": true,
-      "dependencies": {
-        "mime-types": "~2.1.24",
-        "negotiator": "0.6.2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz",
-      "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-dynamic-import": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz",
-      "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^4.0.3"
-      }
-    },
-    "node_modules/acorn-dynamic-import/node_modules/acorn": {
-      "version": "4.0.13",
-      "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz",
-      "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "5.5.2",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-5.5.2.tgz",
-      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-      "dev": true,
-      "dependencies": {
-        "co": "^4.6.0",
-        "fast-deep-equal": "^1.0.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.3.0"
-      }
-    },
-    "node_modules/ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
-      "dev": true,
-      "peerDependencies": {
-        "ajv": "^6.9.1"
-      }
-    },
-    "node_modules/align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2",
-        "longest": "^1.0.1",
-        "repeat-string": "^1.5.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/alphanum-sort": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
-      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
-      "dev": true
-    },
-    "node_modules/ansi-html": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz",
-      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
-      "dev": true,
-      "engines": [
-        "node >= 0.8.0"
-      ],
-      "bin": {
-        "ansi-html": "bin/ansi-html"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
-      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/anymatch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz",
-      "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz",
-      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
-      "dev": true
-    },
-    "node_modules/argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
-      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
-      "dependencies": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "node_modules/arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz",
-      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/array-find-index": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
-      "dev": true
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz",
-      "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "is-string": "^1.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "dev": true,
-      "dependencies": {
-        "array-uniq": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/asn1.js": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
-      "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "safer-buffer": "^2.1.0"
-      }
-    },
-    "node_modules/asn1.js/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
-      "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
-      "dev": true,
-      "dependencies": {
-        "object-assign": "^4.1.1",
-        "util": "0.10.3"
-      }
-    },
-    "node_modules/assert/node_modules/inherits": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
-      "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-      "dev": true
-    },
-    "node_modules/assert/node_modules/util": {
-      "version": "0.10.3",
-      "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz",
-      "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "2.0.1"
-      }
-    },
-    "node_modules/assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/async": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz",
-      "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.14"
-      }
-    },
-    "node_modules/async-each": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
-      "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
-      "dev": true
-    },
-    "node_modules/async-limiter": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
-      "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
-      "dev": true
-    },
-    "node_modules/async-validator": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
-      "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
-      "dependencies": {
-        "babel-runtime": "6.x"
-      }
-    },
-    "node_modules/atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
-      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
-      "dev": true,
-      "bin": {
-        "atob": "bin/atob.js"
-      },
-      "engines": {
-        "node": ">= 4.5.0"
-      }
-    },
-    "node_modules/autoprefixer": {
-      "version": "7.2.6",
-      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-7.2.6.tgz?cache=0&sync_timestamp=1601167517316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-7.2.6.tgz",
-      "integrity": "sha1-JWZy+G98c12oScTwfQCKuwVgZ9w=",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^2.11.3",
-        "caniuse-lite": "^1.0.30000805",
-        "normalize-range": "^0.1.2",
-        "num2fraction": "^1.2.2",
-        "postcss": "^6.0.17",
-        "postcss-value-parser": "^3.2.3"
-      },
-      "bin": {
-        "autoprefixer-info": "bin/autoprefixer-info"
-      }
-    },
-    "node_modules/axios": {
-      "version": "0.24.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
-      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
-      "dependencies": {
-        "follow-redirects": "^1.14.4"
-      }
-    },
-    "node_modules/axios/node_modules/follow-redirects": {
-      "version": "1.14.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
-      "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==",
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/babel-code-frame": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz",
-      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "esutils": "^2.0.2",
-        "js-tokens": "^3.0.2"
-      }
-    },
-    "node_modules/babel-code-frame/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/babel-code-frame/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/babel-code-frame/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/babel-core": {
-      "version": "6.26.3",
-      "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz",
-      "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=",
-      "dev": true,
-      "dependencies": {
-        "babel-code-frame": "^6.26.0",
-        "babel-generator": "^6.26.0",
-        "babel-helpers": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-register": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "convert-source-map": "^1.5.1",
-        "debug": "^2.6.9",
-        "json5": "^0.5.1",
-        "lodash": "^4.17.4",
-        "minimatch": "^3.0.4",
-        "path-is-absolute": "^1.0.1",
-        "private": "^0.1.8",
-        "slash": "^1.0.0",
-        "source-map": "^0.5.7"
-      }
-    },
-    "node_modules/babel-core/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/babel-generator": {
-      "version": "6.26.1",
-      "resolved": "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz",
-      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
-      "dev": true,
-      "dependencies": {
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "detect-indent": "^4.0.0",
-        "jsesc": "^1.3.0",
-        "lodash": "^4.17.4",
-        "source-map": "^0.5.7",
-        "trim-right": "^1.0.1"
-      }
-    },
-    "node_modules/babel-generator/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/babel-helper-bindify-decorators": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-bindify-decorators/download/babel-helper-bindify-decorators-6.24.1.tgz",
-      "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-builder-binary-assignment-operator-visitor": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
-      "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-explode-assignable-expression": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-call-delegate": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz",
-      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-hoist-variables": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-define-map": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz",
-      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "node_modules/babel-helper-explode-assignable-expression": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz",
-      "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-explode-class": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-explode-class/download/babel-helper-explode-class-6.24.1.tgz",
-      "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-bindify-decorators": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz",
-      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-get-function-arity": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-get-function-arity": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz",
-      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-hoist-variables": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz",
-      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-optimise-call-expression": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz",
-      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-regex": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz",
-      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "node_modules/babel-helper-remap-async-to-generator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz",
-      "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-replace-supers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz",
-      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-optimise-call-expression": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-helper-vue-jsx-merge-props": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
-    },
-    "node_modules/babel-helpers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz",
-      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-loader": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-7.1.5.tgz",
-      "integrity": "sha1-4+4M1zlKpVfgE7AtPkkr/QeqbWg=",
-      "dev": true,
-      "dependencies": {
-        "find-cache-dir": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "mkdirp": "^0.5.1"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "babel-core": "6",
-        "webpack": "2 || 3 || 4"
-      }
-    },
-    "node_modules/babel-messages": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz",
-      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-check-es2015-constants": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz",
-      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-syntax-async-functions": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz",
-      "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-async-generators": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-generators/download/babel-plugin-syntax-async-generators-6.13.0.tgz",
-      "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-class-properties": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz",
-      "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-decorators": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz",
-      "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-dynamic-import": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
-      "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-exponentiation-operator": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
-      "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-jsx": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz",
-      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-object-rest-spread": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
-      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-syntax-trailing-function-commas": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
-      "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
-      "dev": true
-    },
-    "node_modules/babel-plugin-transform-async-generator-functions": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-generator-functions/download/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
-      "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-remap-async-to-generator": "^6.24.1",
-        "babel-plugin-syntax-async-generators": "^6.5.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-async-to-generator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz",
-      "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-remap-async-to-generator": "^6.24.1",
-        "babel-plugin-syntax-async-functions": "^6.8.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-class-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz",
-      "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-plugin-syntax-class-properties": "^6.8.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-decorators": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-decorators/download/babel-plugin-transform-decorators-6.24.1.tgz",
-      "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-explode-class": "^6.24.1",
-        "babel-plugin-syntax-decorators": "^6.13.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-arrow-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
-      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-block-scoped-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
-      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-block-scoping": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
-      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-classes": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz",
-      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-define-map": "^6.24.1",
-        "babel-helper-function-name": "^6.24.1",
-        "babel-helper-optimise-call-expression": "^6.24.1",
-        "babel-helper-replace-supers": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-computed-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
-      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-destructuring": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
-      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-duplicate-keys": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
-      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-for-of": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
-      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
-      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz",
-      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-modules-amd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
-      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-modules-commonjs": {
-      "version": "6.26.2",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
-      "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-transform-strict-mode": "^6.24.1",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-types": "^6.26.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-modules-systemjs": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
-      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-hoist-variables": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-modules-umd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
-      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-object-super": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
-      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-replace-supers": "^6.24.1",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-parameters": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
-      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-call-delegate": "^6.24.1",
-        "babel-helper-get-function-arity": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-shorthand-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz?cache=0&sync_timestamp=1589682670915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-es2015-shorthand-properties%2Fdownload%2Fbabel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
-      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-spread": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz",
-      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-sticky-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
-      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-regex": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-template-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
-      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-typeof-symbol": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
-      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-es2015-unicode-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
-      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-regex": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "regexpu-core": "^2.0.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-exponentiation-operator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
-      "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
-      "dev": true,
-      "dependencies": {
-        "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
-        "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-object-rest-spread": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
-      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
-        "babel-runtime": "^6.26.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-regenerator": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz",
-      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
-      "dev": true,
-      "dependencies": {
-        "regenerator-transform": "^0.10.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-runtime": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz",
-      "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "node_modules/babel-plugin-transform-strict-mode": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz",
-      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "node_modules/babel-plugin-transform-vue-jsx": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-3.7.0.tgz",
-      "integrity": "sha1-1ASS5mkqNrWU9+mhko9D6Wl0CWA=",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "peerDependencies": {
-        "babel-helper-vue-jsx-merge-props": "^2.0.0"
-      }
-    },
-    "node_modules/babel-preset-env": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-env/download/babel-preset-env-1.7.0.tgz?cache=0&sync_timestamp=1591204557603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-env%2Fdownload%2Fbabel-preset-env-1.7.0.tgz",
-      "integrity": "sha1-3qefpOvriDzTXasH4mDBycBN93o=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-check-es2015-constants": "^6.22.0",
-        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
-        "babel-plugin-transform-async-to-generator": "^6.22.0",
-        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
-        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
-        "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
-        "babel-plugin-transform-es2015-classes": "^6.23.0",
-        "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
-        "babel-plugin-transform-es2015-destructuring": "^6.23.0",
-        "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
-        "babel-plugin-transform-es2015-for-of": "^6.23.0",
-        "babel-plugin-transform-es2015-function-name": "^6.22.0",
-        "babel-plugin-transform-es2015-literals": "^6.22.0",
-        "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
-        "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
-        "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
-        "babel-plugin-transform-es2015-object-super": "^6.22.0",
-        "babel-plugin-transform-es2015-parameters": "^6.23.0",
-        "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
-        "babel-plugin-transform-es2015-spread": "^6.22.0",
-        "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
-        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
-        "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
-        "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
-        "babel-plugin-transform-exponentiation-operator": "^6.22.0",
-        "babel-plugin-transform-regenerator": "^6.22.0",
-        "browserslist": "^3.2.6",
-        "invariant": "^2.2.2",
-        "semver": "^5.3.0"
-      }
-    },
-    "node_modules/babel-preset-env/node_modules/browserslist": {
-      "version": "3.2.8",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz",
-      "integrity": "sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y=",
-      "dev": true,
-      "dependencies": {
-        "caniuse-lite": "^1.0.30000844",
-        "electron-to-chromium": "^1.3.47"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      }
-    },
-    "node_modules/babel-preset-stage-2": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-stage-2/download/babel-preset-stage-2-6.24.1.tgz",
-      "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-syntax-dynamic-import": "^6.18.0",
-        "babel-plugin-transform-class-properties": "^6.24.1",
-        "babel-plugin-transform-decorators": "^6.24.1",
-        "babel-preset-stage-3": "^6.24.1"
-      }
-    },
-    "node_modules/babel-preset-stage-3": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-stage-3/download/babel-preset-stage-3-6.24.1.tgz",
-      "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
-        "babel-plugin-transform-async-generator-functions": "^6.24.1",
-        "babel-plugin-transform-async-to-generator": "^6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "^6.24.1",
-        "babel-plugin-transform-object-rest-spread": "^6.22.0"
-      }
-    },
-    "node_modules/babel-register": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz",
-      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
-      "dev": true,
-      "dependencies": {
-        "babel-core": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "core-js": "^2.5.0",
-        "home-or-tmp": "^2.0.0",
-        "lodash": "^4.17.4",
-        "mkdirp": "^0.5.1",
-        "source-map-support": "^0.4.15"
-      }
-    },
-    "node_modules/babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dependencies": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      }
-    },
-    "node_modules/babel-template": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz",
-      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "node_modules/babel-traverse": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz",
-      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
-      "dev": true,
-      "dependencies": {
-        "babel-code-frame": "^6.26.0",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "debug": "^2.6.8",
-        "globals": "^9.18.0",
-        "invariant": "^2.2.2",
-        "lodash": "^4.17.4"
-      }
-    },
-    "node_modules/babel-types": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz",
-      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.26.0",
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.4",
-        "to-fast-properties": "^1.0.3"
-      }
-    },
-    "node_modules/babylon": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz",
-      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
-      "dev": true,
-      "bin": {
-        "babylon": "bin/babylon.js"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "node_modules/base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
-      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
-      "dev": true,
-      "dependencies": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base64-js": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz",
-      "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=",
-      "dev": true
-    },
-    "node_modules/batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
-      "dev": true
-    },
-    "node_modules/bfj-node4": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npm.taobao.org/bfj-node4/download/bfj-node4-5.3.1.tgz",
-      "integrity": "sha1-4j2LJwV/HQIU/FYRQq2duZjyaDA=",
-      "deprecated": "Switch to the `bfj` package for fixes and new features!",
-      "dev": true,
-      "dependencies": {
-        "bluebird": "^3.5.1",
-        "check-types": "^7.3.0",
-        "tryer": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/big.js": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
-      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/binary-extensions": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz",
-      "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
-      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
-    "node_modules/bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
-      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
-      "dev": true
-    },
-    "node_modules/bmaplib.curveline": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz",
-      "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q=="
-    },
-    "node_modules/bmaplib.heatmap": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz",
-      "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q=="
-    },
-    "node_modules/bmaplib.lushu": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz",
-      "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w=="
-    },
-    "node_modules/bmaplib.markerclusterer": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz",
-      "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==",
-      "dependencies": {
-        "bmaplib.texticonoverlay": "^1.0.2"
-      }
-    },
-    "node_modules/bmaplib.texticonoverlay": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz",
-      "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg=="
-    },
-    "node_modules/bn.js": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz",
-      "integrity": "sha1-vsoAVAj2Quvr6oCwQrTRjSrA7ms=",
-      "dev": true
-    },
-    "node_modules/body-parser": {
-      "version": "1.19.0",
-      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
-      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.0",
-        "content-type": "~1.0.4",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "on-finished": "~2.3.0",
-        "qs": "6.7.0",
-        "raw-body": "2.4.0",
-        "type-is": "~1.6.17"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/bonjour": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
-      "dev": true,
-      "dependencies": {
-        "array-flatten": "^2.1.0",
-        "deep-equal": "^1.0.1",
-        "dns-equal": "^1.0.0",
-        "dns-txt": "^2.0.2",
-        "multicast-dns": "^6.0.1",
-        "multicast-dns-service-types": "^1.1.0"
-      }
-    },
-    "node_modules/bonjour/node_modules/array-flatten": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz",
-      "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
-      "dev": true
-    },
-    "node_modules/boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-      "dev": true
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898201980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
-      "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "fill-range": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/brorand": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
-      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
-      "dev": true
-    },
-    "node_modules/browserify-aes": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
-      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
-      "dev": true,
-      "dependencies": {
-        "buffer-xor": "^1.0.3",
-        "cipher-base": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.3",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "node_modules/browserify-cipher": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
-      "dev": true,
-      "dependencies": {
-        "browserify-aes": "^1.0.4",
-        "browserify-des": "^1.0.0",
-        "evp_bytestokey": "^1.0.0"
-      }
-    },
-    "node_modules/browserify-des": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
-      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
-      "dev": true,
-      "dependencies": {
-        "cipher-base": "^1.0.1",
-        "des.js": "^1.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      }
-    },
-    "node_modules/browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.1.0",
-        "randombytes": "^2.0.1"
-      }
-    },
-    "node_modules/browserify-rsa/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/browserify-sign": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557809886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz",
-      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^5.1.1",
-        "browserify-rsa": "^4.0.1",
-        "create-hash": "^1.2.0",
-        "create-hmac": "^1.1.7",
-        "elliptic": "^6.5.3",
-        "inherits": "^2.0.4",
-        "parse-asn1": "^5.1.5",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
-      }
-    },
-    "node_modules/browserify-sign/node_modules/readable-stream": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-      "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/browserify-sign/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
-      "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
-      "dev": true
-    },
-    "node_modules/browserify-zlib": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
-      "dev": true,
-      "dependencies": {
-        "pako": "~1.0.5"
-      }
-    },
-    "node_modules/browserslist": {
-      "version": "2.11.3",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-2.11.3.tgz",
-      "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=",
-      "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
-      "dev": true,
-      "dependencies": {
-        "caniuse-lite": "^1.0.30000792",
-        "electron-to-chromium": "^1.3.30"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      }
-    },
-    "node_modules/buffer": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz",
-      "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
-      "dev": true,
-      "dependencies": {
-        "base64-js": "^1.0.2",
-        "ieee754": "^1.1.4",
-        "isarray": "^1.0.0"
-      }
-    },
-    "node_modules/buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
-      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
-      "dev": true
-    },
-    "node_modules/buffer-indexof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
-      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
-      "dev": true
-    },
-    "node_modules/buffer-xor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
-      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-      "dev": true
-    },
-    "node_modules/builtin-status-codes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-      "dev": true
-    },
-    "node_modules/bytes": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
-      "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/cacache": {
-      "version": "10.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
-      "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
-      "dev": true,
-      "dependencies": {
-        "bluebird": "^3.5.1",
-        "chownr": "^1.0.1",
-        "glob": "^7.1.2",
-        "graceful-fs": "^4.1.11",
-        "lru-cache": "^4.1.1",
-        "mississippi": "^2.0.0",
-        "mkdirp": "^0.5.1",
-        "move-concurrently": "^1.0.1",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.2",
-        "ssri": "^5.2.4",
-        "unique-filename": "^1.1.0",
-        "y18n": "^4.0.0"
-      }
-    },
-    "node_modules/cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz",
-      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
-      "dev": true,
-      "dependencies": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      }
-    },
-    "node_modules/caller-callsite": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz",
-      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/caller-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz",
-      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
-      "dev": true,
-      "dependencies": {
-        "caller-callsite": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
-      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/camel-case": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz",
-      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
-      "dev": true,
-      "dependencies": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.1.1"
-      }
-    },
-    "node_modules/camelcase": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz",
-      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^2.0.0",
-        "map-obj": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/camelcase-keys/node_modules/camelcase": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz",
-      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/caniuse-api": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-1.6.1.tgz",
-      "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^1.3.6",
-        "caniuse-db": "^1.0.30000529",
-        "lodash.memoize": "^4.1.2",
-        "lodash.uniq": "^4.5.0"
-      }
-    },
-    "node_modules/caniuse-api/node_modules/browserslist": {
-      "version": "1.7.7",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-      "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-      "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
-      "dev": true,
-      "dependencies": {
-        "caniuse-db": "^1.0.30000639",
-        "electron-to-chromium": "^1.2.7"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      }
-    },
-    "node_modules/caniuse-db": {
-      "version": "1.0.30001244",
-      "resolved": "https://registry.nlark.com/caniuse-db/download/caniuse-db-1.0.30001244.tgz?cache=0&sync_timestamp=1626154539434&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001244.tgz",
-      "integrity": "sha1-pt/zJHNkjfCwrg+Z2YeXrft89Fk=",
-      "dev": true
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001230",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz",
-      "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==",
-      "dev": true
-    },
-    "node_modules/center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "dev": true,
-      "dependencies": {
-        "align-text": "^0.1.3",
-        "lazy-cache": "^1.0.3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
-      "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/check-types": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-7.4.0.tgz",
-      "integrity": "sha1-A3jsG5YW7HH3dJMaPGUW+tjBUvQ=",
-      "dev": true
-    },
-    "node_modules/chokidar": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz",
-      "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "anymatch": "~3.1.1",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.0",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.4.0"
-      },
-      "engines": {
-        "node": ">= 8.10.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.1.2"
-      }
-    },
-    "node_modules/chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz",
-      "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
-      "dev": true
-    },
-    "node_modules/cipher-base": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
-      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "node_modules/clap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npm.taobao.org/clap/download/clap-1.2.3.tgz",
-      "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/clap/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/clap/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/clap/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
-      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
-      "dev": true,
-      "dependencies": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/class-utils/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/clean-css": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz",
-      "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
-      "dev": true,
-      "dependencies": {
-        "source-map": "~0.6.0"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
-    "node_modules/cli-cursor": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz",
-      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
-      "dev": true,
-      "dependencies": {
-        "restore-cursor": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cli-spinners": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz",
-      "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/clipboard": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.6.tgz",
-      "integrity": "sha1-UpISlu7A/fd+rRdJQhshyWhkc3Y=",
-      "dependencies": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      }
-    },
-    "node_modules/cliui": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-2.1.0.tgz",
-      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-      "dev": true,
-      "dependencies": {
-        "center-align": "^0.1.1",
-        "right-align": "^0.1.1",
-        "wordwrap": "0.0.2"
-      }
-    },
-    "node_modules/clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz",
-      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true,
-      "engines": {
-        "iojs": ">= 1.0.0",
-        "node": ">= 0.12.0"
-      }
-    },
-    "node_modules/coa": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/coa/download/coa-1.0.4.tgz",
-      "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "dev": true,
-      "dependencies": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/color": {
-      "version": "0.11.4",
-      "resolved": "https://registry.npm.taobao.org/color/download/color-0.11.4.tgz",
-      "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
-      "dev": true,
-      "dependencies": {
-        "clone": "^1.0.2",
-        "color-convert": "^1.3.0",
-        "color-string": "^0.3.0"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
-      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
-    "node_modules/color-string": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-0.3.0.tgz?cache=0&sync_timestamp=1602228058149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-string%2Fdownload%2Fcolor-string-0.3.0.tgz",
-      "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
-      "dev": true,
-      "dependencies": {
-        "color-name": "^1.0.0"
-      }
-    },
-    "node_modules/colorette": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
-      "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
-      "dev": true
-    },
-    "node_modules/colormin": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/colormin/download/colormin-1.1.2.tgz",
-      "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
-      "dev": true,
-      "dependencies": {
-        "color": "^0.11.0",
-        "css-color-names": "0.0.4",
-        "has": "^1.0.1"
-      }
-    },
-    "node_modules/colors": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz?cache=0&sync_timestamp=1589682043437&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolors%2Fdownload%2Fcolors-1.1.2.tgz",
-      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.1.90"
-      }
-    },
-    "node_modules/commander": {
-      "version": "2.17.1",
-      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
-      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
-      "dev": true
-    },
-    "node_modules/commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-      "dev": true
-    },
-    "node_modules/component-emitter": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
-      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
-      "dev": true
-    },
-    "node_modules/compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz",
-      "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=",
-      "dev": true,
-      "dependencies": {
-        "mime-db": ">= 1.43.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/compression": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
-      "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.5",
-        "bytes": "3.0.0",
-        "compressible": "~2.0.16",
-        "debug": "2.6.9",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.1.2",
-        "vary": "~1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/compression/node_modules/bytes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
-      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "node_modules/concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
-      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
-      "dev": true,
-      "engines": [
-        "node >= 0.8"
-      ],
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "node_modules/connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/console-browserify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
-      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
-      "dev": true
-    },
-    "node_modules/consolidate": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz?cache=0&sync_timestamp=1599596654038&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.14.5.tgz",
-      "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
-      "dev": true,
-      "dependencies": {
-        "bluebird": "^3.1.1"
-      }
-    },
-    "node_modules/constants-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
-      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
-      "dev": true
-    },
-    "node_modules/content-disposition": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
-      "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "5.1.2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
-      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz",
-      "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.1"
-      }
-    },
-    "node_modules/cookie": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
-      "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
-      "dev": true
-    },
-    "node_modules/copy-concurrently": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
-      "dev": true,
-      "dependencies": {
-        "aproba": "^1.1.1",
-        "fs-write-stream-atomic": "^1.0.8",
-        "iferr": "^0.1.5",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.0"
-      }
-    },
-    "node_modules/copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/copy-webpack-plugin": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
-      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
-      "dev": true,
-      "dependencies": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
-        "globby": "^7.1.1",
-        "is-glob": "^4.0.0",
-        "loader-utils": "^1.1.0",
-        "minimatch": "^3.0.4",
-        "p-limit": "^1.0.0",
-        "serialize-javascript": "^1.4.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/core-js": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz",
-      "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=",
-      "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
-      "hasInstallScript": true
-    },
-    "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-      "dev": true
-    },
-    "node_modules/cosmiconfig": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz",
-      "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
-      "dev": true,
-      "dependencies": {
-        "import-fresh": "^2.0.0",
-        "is-directory": "^0.3.1",
-        "js-yaml": "^3.13.1",
-        "parse-json": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cosmiconfig/node_modules/esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
-      "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
-      "dev": true,
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cosmiconfig/node_modules/js-yaml": {
-      "version": "3.14.0",
-      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz",
-      "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/create-ecdh": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz?cache=0&sync_timestamp=1596557441827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-ecdh%2Fdownload%2Fcreate-ecdh-4.0.4.tgz",
-      "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.1.0",
-        "elliptic": "^6.5.3"
-      }
-    },
-    "node_modules/create-ecdh/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/create-hash": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
-      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
-      "dev": true,
-      "dependencies": {
-        "cipher-base": "^1.0.1",
-        "inherits": "^2.0.1",
-        "md5.js": "^1.3.4",
-        "ripemd160": "^2.0.1",
-        "sha.js": "^2.4.0"
-      }
-    },
-    "node_modules/create-hmac": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
-      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
-      "dev": true,
-      "dependencies": {
-        "cipher-base": "^1.0.3",
-        "create-hash": "^1.1.0",
-        "inherits": "^2.0.1",
-        "ripemd160": "^2.0.0",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^4.0.1",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      }
-    },
-    "node_modules/crypto-browserify": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
-      "dev": true,
-      "dependencies": {
-        "browserify-cipher": "^1.0.0",
-        "browserify-sign": "^4.0.0",
-        "create-ecdh": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.0",
-        "diffie-hellman": "^5.0.0",
-        "inherits": "^2.0.1",
-        "pbkdf2": "^3.0.3",
-        "public-encrypt": "^4.0.0",
-        "randombytes": "^2.0.0",
-        "randomfill": "^1.0.3"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/css-color-names": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz",
-      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/css-declaration-sorter": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
-      "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.1",
-        "timsort": "^0.3.0"
-      },
-      "engines": {
-        "node": ">4"
-      }
-    },
-    "node_modules/css-declaration-sorter/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/css-declaration-sorter/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/css-loader": {
-      "version": "0.28.11",
-      "resolved": "https://registry.nlark.com/css-loader/download/css-loader-0.28.11.tgz?cache=0&sync_timestamp=1621865230592&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-0.28.11.tgz",
-      "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=",
-      "dev": true,
-      "dependencies": {
-        "babel-code-frame": "^6.26.0",
-        "css-selector-tokenizer": "^0.7.0",
-        "cssnano": "^3.10.0",
-        "icss-utils": "^2.1.0",
-        "loader-utils": "^1.0.2",
-        "lodash.camelcase": "^4.3.0",
-        "object-assign": "^4.1.1",
-        "postcss": "^5.0.6",
-        "postcss-modules-extract-imports": "^1.2.0",
-        "postcss-modules-local-by-default": "^1.2.0",
-        "postcss-modules-scope": "^1.1.0",
-        "postcss-modules-values": "^1.3.0",
-        "postcss-value-parser": "^3.3.0",
-        "source-list-map": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.12.0 || >= 4.3.0 < 5.0.0 || >=5.10"
-      }
-    },
-    "node_modules/css-loader/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/css-loader/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/css-loader/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/css-loader/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/css-loader/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/css-loader/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/css-loader/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/css-select-base-adapter": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
-      "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
-      "dev": true
-    },
-    "node_modules/css-selector-tokenizer": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.3.tgz?cache=0&sync_timestamp=1595335280942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-selector-tokenizer%2Fdownload%2Fcss-selector-tokenizer-0.7.3.tgz",
-      "integrity": "sha1-c18mGG5nx0mq8nV4NAXPBmH66PE=",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "fastparse": "^1.1.2"
-      }
-    },
-    "node_modules/css-tree": {
-      "version": "1.0.0-alpha.37",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
-      "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
-      "dev": true,
-      "dependencies": {
-        "mdn-data": "2.0.4",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
-      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
-      "dev": true,
-      "bin": {
-        "cssesc": "bin/cssesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cssnano": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-3.10.0.tgz?cache=0&sync_timestamp=1599670481279&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-3.10.0.tgz",
-      "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
-      "dev": true,
-      "dependencies": {
-        "autoprefixer": "^6.3.1",
-        "decamelize": "^1.1.2",
-        "defined": "^1.0.0",
-        "has": "^1.0.1",
-        "object-assign": "^4.0.1",
-        "postcss": "^5.0.14",
-        "postcss-calc": "^5.2.0",
-        "postcss-colormin": "^2.1.8",
-        "postcss-convert-values": "^2.3.4",
-        "postcss-discard-comments": "^2.0.4",
-        "postcss-discard-duplicates": "^2.0.1",
-        "postcss-discard-empty": "^2.0.1",
-        "postcss-discard-overridden": "^0.1.1",
-        "postcss-discard-unused": "^2.2.1",
-        "postcss-filter-plugins": "^2.0.0",
-        "postcss-merge-idents": "^2.1.5",
-        "postcss-merge-longhand": "^2.0.1",
-        "postcss-merge-rules": "^2.0.3",
-        "postcss-minify-font-values": "^1.0.2",
-        "postcss-minify-gradients": "^1.0.1",
-        "postcss-minify-params": "^1.0.4",
-        "postcss-minify-selectors": "^2.0.4",
-        "postcss-normalize-charset": "^1.1.0",
-        "postcss-normalize-url": "^3.0.7",
-        "postcss-ordered-values": "^2.1.0",
-        "postcss-reduce-idents": "^2.2.2",
-        "postcss-reduce-initial": "^1.0.0",
-        "postcss-reduce-transforms": "^1.0.3",
-        "postcss-svgo": "^2.1.1",
-        "postcss-unique-selectors": "^2.0.2",
-        "postcss-value-parser": "^3.2.3",
-        "postcss-zindex": "^2.0.1"
-      }
-    },
-    "node_modules/cssnano-preset-default": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
-      "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
-      "dev": true,
-      "dependencies": {
-        "css-declaration-sorter": "^4.0.1",
-        "cssnano-util-raw-cache": "^4.0.1",
-        "postcss": "^7.0.0",
-        "postcss-calc": "^7.0.1",
-        "postcss-colormin": "^4.0.3",
-        "postcss-convert-values": "^4.0.1",
-        "postcss-discard-comments": "^4.0.2",
-        "postcss-discard-duplicates": "^4.0.2",
-        "postcss-discard-empty": "^4.0.1",
-        "postcss-discard-overridden": "^4.0.1",
-        "postcss-merge-longhand": "^4.0.11",
-        "postcss-merge-rules": "^4.0.3",
-        "postcss-minify-font-values": "^4.0.2",
-        "postcss-minify-gradients": "^4.0.2",
-        "postcss-minify-params": "^4.0.2",
-        "postcss-minify-selectors": "^4.0.2",
-        "postcss-normalize-charset": "^4.0.1",
-        "postcss-normalize-display-values": "^4.0.2",
-        "postcss-normalize-positions": "^4.0.2",
-        "postcss-normalize-repeat-style": "^4.0.2",
-        "postcss-normalize-string": "^4.0.2",
-        "postcss-normalize-timing-functions": "^4.0.2",
-        "postcss-normalize-unicode": "^4.0.1",
-        "postcss-normalize-url": "^4.0.1",
-        "postcss-normalize-whitespace": "^4.0.2",
-        "postcss-ordered-values": "^4.1.2",
-        "postcss-reduce-initial": "^4.0.3",
-        "postcss-reduce-transforms": "^4.0.2",
-        "postcss-svgo": "^4.0.3",
-        "postcss-unique-selectors": "^4.0.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/browserslist": {
-      "version": "4.16.6",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-      "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-      "dev": true,
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001219",
-        "colorette": "^1.2.2",
-        "electron-to-chromium": "^1.3.723",
-        "escalade": "^3.1.1",
-        "node-releases": "^1.1.71"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/caniuse-api": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
-      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "caniuse-lite": "^1.0.0",
-        "lodash.memoize": "^4.1.2",
-        "lodash.uniq": "^4.5.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/coa": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
-      "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
-      "dev": true,
-      "dependencies": {
-        "@types/q": "^1.5.1",
-        "chalk": "^2.4.1",
-        "q": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/color": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
-      "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.1",
-        "color-string": "^1.5.4"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/color-string": {
-      "version": "1.5.5",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
-      "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "^1.0.0",
-        "simple-swizzle": "^0.2.2"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/css-select": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
-      "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "^1.0.0",
-        "css-what": "^3.2.1",
-        "domutils": "^1.7.0",
-        "nth-check": "^1.0.2"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/css-what": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
-      "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/csso": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
-      "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
-      "dev": true,
-      "dependencies": {
-        "css-tree": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/csso/node_modules/css-tree": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
-      "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
-      "dev": true,
-      "dependencies": {
-        "mdn-data": "2.0.14",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/domutils": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-      "dev": true,
-      "dependencies": {
-        "dom-serializer": "0",
-        "domelementtype": "1"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true,
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/js-yaml": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/mdn-data": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
-      "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
-      "dev": true
-    },
-    "node_modules/cssnano-preset-default/node_modules/normalize-url": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
-      "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-calc": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
-      "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.27",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.0.2"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-calc/node_modules/postcss-value-parser": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-      "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-      "dev": true
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-colormin": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
-      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "color": "^3.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-convert-values": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
-      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-discard-comments": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
-      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-discard-duplicates": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
-      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-discard-empty": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
-      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-discard-overridden": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
-      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-merge-longhand": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
-      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
-      "dev": true,
-      "dependencies": {
-        "css-color-names": "0.0.4",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "stylehacks": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-merge-rules": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
-      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "caniuse-api": "^3.0.0",
-        "cssnano-util-same-parent": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-selector-parser": "^3.0.0",
-        "vendors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-      "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-      "dev": true,
-      "dependencies": {
-        "dot-prop": "^5.2.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-minify-font-values": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
-      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-minify-gradients": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
-      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "is-color-stop": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-minify-params": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
-      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.0",
-        "browserslist": "^4.0.0",
-        "cssnano-util-get-arguments": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "uniqs": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-minify-selectors": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
-      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-selector-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-      "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-      "dev": true,
-      "dependencies": {
-        "dot-prop": "^5.2.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-normalize-charset": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
-      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-normalize-url": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
-      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
-      "dev": true,
-      "dependencies": {
-        "is-absolute-url": "^2.0.0",
-        "normalize-url": "^3.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-ordered-values": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
-      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-reduce-initial": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
-      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "caniuse-api": "^3.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-reduce-transforms": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
-      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-match": "^4.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-selector-parser": {
-      "version": "6.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-      "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-svgo": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
-      "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0",
-        "svgo": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/postcss-unique-selectors": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
-      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.0",
-        "postcss": "^7.0.0",
-        "uniqs": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/cssnano-preset-default/node_modules/svgo": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
-      "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
-      "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.1",
-        "coa": "^2.0.2",
-        "css-select": "^2.0.0",
-        "css-select-base-adapter": "^0.1.1",
-        "css-tree": "1.0.0-alpha.37",
-        "csso": "^4.0.2",
-        "js-yaml": "^3.13.1",
-        "mkdirp": "~0.5.1",
-        "object.values": "^1.1.0",
-        "sax": "~1.2.4",
-        "stable": "^0.1.8",
-        "unquote": "~1.1.1",
-        "util.promisify": "~1.0.0"
-      },
-      "bin": {
-        "svgo": "bin/svgo"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/cssnano-util-get-arguments": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
-      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-util-get-match": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
-      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-util-raw-cache": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
-      "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano-util-raw-cache/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/cssnano-util-raw-cache/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/cssnano-util-same-parent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
-      "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/autoprefixer": {
-      "version": "6.7.7",
-      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-6.7.7.tgz?cache=0&sync_timestamp=1601167517316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-6.7.7.tgz",
-      "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^1.7.6",
-        "caniuse-db": "^1.0.30000634",
-        "normalize-range": "^0.1.2",
-        "num2fraction": "^1.2.2",
-        "postcss": "^5.2.16",
-        "postcss-value-parser": "^3.2.3"
-      }
-    },
-    "node_modules/cssnano/node_modules/browserslist": {
-      "version": "1.7.7",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-      "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-      "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
-      "dev": true,
-      "dependencies": {
-        "caniuse-db": "^1.0.30000639",
-        "electron-to-chromium": "^1.2.7"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      }
-    },
-    "node_modules/cssnano/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/cssnano/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cssnano/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/csso": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/csso/download/csso-2.3.2.tgz",
-      "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
-      "dev": true,
-      "dependencies": {
-        "clap": "^1.0.9",
-        "source-map": "^0.5.3"
-      },
-      "bin": {
-        "csso": "bin/csso"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/csso/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cuint": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/cuint/download/cuint-0.2.2.tgz",
-      "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
-      "dev": true
-    },
-    "node_modules/currently-unhandled": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-      "dev": true,
-      "dependencies": {
-        "array-find-index": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/cyclist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz",
-      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
-      "dev": true
-    },
-    "node_modules/d": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz",
-      "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=",
-      "dev": true,
-      "dependencies": {
-        "es5-ext": "^0.10.50",
-        "type": "^1.0.1"
-      }
-    },
-    "node_modules/de-indent": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
-      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
-      "dev": true
-    },
-    "node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
-      "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/deep-equal": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz",
-      "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
-      "dev": true,
-      "dependencies": {
-        "is-arguments": "^1.0.4",
-        "is-date-object": "^1.0.1",
-        "is-regex": "^1.0.4",
-        "object-is": "^1.0.1",
-        "object-keys": "^1.1.1",
-        "regexp.prototype.flags": "^1.2.0"
-      }
-    },
-    "node_modules/deepmerge": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
-      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
-      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
-      "dev": true,
-      "dependencies": {
-        "object-keys": "^1.0.12"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
-      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/defined": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz",
-      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
-      "dev": true
-    },
-    "node_modules/del": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz?cache=0&sync_timestamp=1601076806416&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-3.0.0.tgz",
-      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
-      "dev": true,
-      "dependencies": {
-        "globby": "^6.1.0",
-        "is-path-cwd": "^1.0.0",
-        "is-path-in-cwd": "^1.0.0",
-        "p-map": "^1.1.1",
-        "pify": "^3.0.0",
-        "rimraf": "^2.2.8"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/del/node_modules/globby": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz",
-      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^1.0.1",
-        "glob": "^7.0.3",
-        "object-assign": "^4.0.1",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/del/node_modules/globby/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/delegate": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz",
-      "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
-    },
-    "node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
-      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/des.js": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz",
-      "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "node_modules/destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
-      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
-      "dev": true
-    },
-    "node_modules/detect-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz",
-      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
-      "dev": true,
-      "dependencies": {
-        "repeating": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/detect-node": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz",
-      "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=",
-      "dev": true
-    },
-    "node_modules/diffie-hellman": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.1.0",
-        "miller-rabin": "^4.0.0",
-        "randombytes": "^2.0.0"
-      }
-    },
-    "node_modules/diffie-hellman/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/dir-glob": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
-      "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/dns-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
-      "dev": true
-    },
-    "node_modules/dns-packet": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
-      "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
-      "dev": true,
-      "dependencies": {
-        "ip": "^1.1.0",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "node_modules/dns-txt": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
-      "dev": true,
-      "dependencies": {
-        "buffer-indexof": "^1.0.0"
-      }
-    },
-    "node_modules/dom-converter": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
-      "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
-      "dev": true,
-      "dependencies": {
-        "utila": "~0.4"
-      }
-    },
-    "node_modules/dom-serializer": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1600028888021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
-      "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.0.1",
-        "entities": "^2.0.0"
-      }
-    },
-    "node_modules/dom-serializer/node_modules/domelementtype": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.2.tgz?cache=0&sync_timestamp=1600028450905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.0.2.tgz",
-      "integrity": "sha1-87blSSAeRvWItZRj3XcYcTH+aXE=",
-      "dev": true
-    },
-    "node_modules/domain-browser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
-      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4",
-        "npm": ">=1.2"
-      }
-    },
-    "node_modules/domelementtype": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1600028450905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
-      "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
-      "dev": true
-    },
-    "node_modules/dot-prop": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
-      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
-      "dev": true,
-      "dependencies": {
-        "is-obj": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/duplexer": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
-      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
-      "dev": true
-    },
-    "node_modules/duplexify": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz",
-      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
-      "dev": true,
-      "dependencies": {
-        "end-of-stream": "^1.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "node_modules/echarts": {
-      "version": "4.9.0",
-      "resolved": "https://registry.nlark.com/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1619495447964&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz",
-      "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=",
-      "dependencies": {
-        "zrender": "4.3.2"
-      }
-    },
-    "node_modules/ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-      "dev": true
-    },
-    "node_modules/ejs": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1597678424776&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz",
-      "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
-      "dev": true,
-      "hasInstallScript": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.3.742",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz",
-      "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==",
-      "dev": true
-    },
-    "node_modules/element-ui": {
-      "version": "2.15.6",
-      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.6.tgz",
-      "integrity": "sha512-rcYXEKd/j2G0AgficAOk1Zd1AsnHRkhmrK4yLHmNOiimU2JfsywgfKUjMoFuT6pQx0luhovj8lFjpE4Fnt58Iw==",
-      "dependencies": {
-        "async-validator": "~1.8.1",
-        "babel-helper-vue-jsx-merge-props": "^2.0.0",
-        "deepmerge": "^1.2.0",
-        "normalize-wheel": "^1.0.1",
-        "resize-observer-polyfill": "^1.5.0",
-        "throttle-debounce": "^1.0.1"
-      },
-      "peerDependencies": {
-        "vue": "^2.5.17"
-      }
-    },
-    "node_modules/elliptic": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
-      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.11.9",
-        "brorand": "^1.1.0",
-        "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.1",
-        "inherits": "^2.0.4",
-        "minimalistic-assert": "^1.0.1",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "node_modules/elliptic/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/emojis-list": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
-      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
-      "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.4.0"
-      }
-    },
-    "node_modules/enhanced-resolve": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz",
-      "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "memory-fs": "^0.4.0",
-        "object-assign": "^4.0.1",
-        "tapable": "^0.2.7"
-      },
-      "engines": {
-        "node": ">=4.3.0 <5.0.0 || >=5.10"
-      }
-    },
-    "node_modules/entities": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.0.3.tgz",
-      "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=",
-      "dev": true
-    },
-    "node_modules/errno": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz",
-      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
-      "dev": true,
-      "dependencies": {
-        "prr": "~1.0.1"
-      },
-      "bin": {
-        "errno": "cli.js"
-      }
-    },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
-      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
-      "dev": true,
-      "dependencies": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "node_modules/error-stack-parser": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz",
-      "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
-      "dev": true,
-      "dependencies": {
-        "stackframe": "^1.1.1"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.18.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
-      "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.2",
-        "is-callable": "^1.2.3",
-        "is-negative-zero": "^2.0.1",
-        "is-regex": "^1.1.3",
-        "is-string": "^1.0.6",
-        "object-inspect": "^1.10.3",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.2",
-        "string.prototype.trimend": "^1.0.4",
-        "string.prototype.trimstart": "^1.0.4",
-        "unbox-primitive": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
-      "dev": true,
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es5-ext": {
-      "version": "0.10.53",
-      "resolved": "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.53.tgz",
-      "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=",
-      "dev": true,
-      "dependencies": {
-        "es6-iterator": "~2.0.3",
-        "es6-symbol": "~3.1.3",
-        "next-tick": "~1.0.0"
-      }
-    },
-    "node_modules/es6-iterator": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz",
-      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "^0.10.35",
-        "es6-symbol": "^3.1.1"
-      }
-    },
-    "node_modules/es6-map": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz",
-      "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "~0.10.14",
-        "es6-iterator": "~2.0.1",
-        "es6-set": "~0.1.5",
-        "es6-symbol": "~3.1.1",
-        "event-emitter": "~0.3.5"
-      }
-    },
-    "node_modules/es6-set": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz",
-      "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "~0.10.14",
-        "es6-iterator": "~2.0.1",
-        "es6-symbol": "3.1.1",
-        "event-emitter": "~0.3.5"
-      }
-    },
-    "node_modules/es6-set/node_modules/es6-symbol": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz",
-      "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "~0.10.14"
-      }
-    },
-    "node_modules/es6-symbol": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz",
-      "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=",
-      "dev": true,
-      "dependencies": {
-        "d": "^1.0.1",
-        "ext": "^1.1.2"
-      }
-    },
-    "node_modules/es6-weak-map": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz",
-      "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "^0.10.46",
-        "es6-iterator": "^2.0.3",
-        "es6-symbol": "^3.1.1"
-      }
-    },
-    "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-      "dev": true
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/escope": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz",
-      "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
-      "dev": true,
-      "dependencies": {
-        "es6-map": "^0.1.3",
-        "es6-weak-map": "^2.0.1",
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/esprima": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz",
-      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-      "dev": true,
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
-      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esrecurse/node_modules/estraverse": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz",
-      "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
-      "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
-      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/event-emitter": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz",
-      "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
-      "dev": true,
-      "dependencies": {
-        "d": "1",
-        "es5-ext": "~0.10.14"
-      }
-    },
-    "node_modules/eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517795415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz",
-      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
-      "dev": true
-    },
-    "node_modules/events": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422602348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz",
-      "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.x"
-      }
-    },
-    "node_modules/eventsource": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
-      "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
-      "dev": true,
-      "dependencies": {
-        "original": ">=0.0.5"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/evp_bytestokey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
-      "dev": true,
-      "dependencies": {
-        "md5.js": "^1.3.4",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "node_modules/execa": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
-      "dev": true,
-      "dependencies": {
-        "cross-spawn": "^5.0.1",
-        "get-stream": "^3.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-      "dev": true,
-      "dependencies": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/expand-brackets/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/express": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz",
-      "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.7",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.19.0",
-        "content-disposition": "0.5.3",
-        "content-type": "~1.0.4",
-        "cookie": "0.4.0",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "~1.1.2",
-        "fresh": "0.5.2",
-        "merge-descriptors": "1.0.1",
-        "methods": "~1.1.2",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
-        "proxy-addr": "~2.0.5",
-        "qs": "6.7.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.1.2",
-        "send": "0.17.1",
-        "serve-static": "1.14.1",
-        "setprototypeof": "1.1.1",
-        "statuses": "~1.5.0",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/ext": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz",
-      "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=",
-      "dev": true,
-      "dependencies": {
-        "type": "^2.0.0"
-      }
-    },
-    "node_modules/ext/node_modules/type": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/type/download/type-2.1.0.tgz?cache=0&sync_timestamp=1598016600310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.1.0.tgz",
-      "integrity": "sha1-m9wixkjPjPht0j0yM2pBz7ZHXj8=",
-      "dev": true
-    },
-    "node_modules/extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-      "dev": true,
-      "dependencies": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extend-shallow/node_modules/is-extendable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-      "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
-      "dev": true,
-      "dependencies": {
-        "is-plain-object": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
-      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
-      "dev": true,
-      "dependencies": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extract-text-webpack-plugin": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/extract-text-webpack-plugin/download/extract-text-webpack-plugin-3.0.2.tgz",
-      "integrity": "sha1-XwQ+qgL5dQqSWLeMCm4NwUCPsvc=",
-      "deprecated": "Deprecated. Please use https://github.com/webpack-contrib/mini-css-extract-plugin",
-      "dev": true,
-      "dependencies": {
-        "async": "^2.4.1",
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^0.3.0",
-        "webpack-sources": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 4.8 < 5.0.0 || >= 5.10"
-      },
-      "peerDependencies": {
-        "webpack": "^3.1.0"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz",
-      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-      "dev": true
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
-      "dev": true
-    },
-    "node_modules/fastparse": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz",
-      "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=",
-      "dev": true
-    },
-    "node_modules/faye-websocket": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz",
-      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
-      "dev": true,
-      "dependencies": {
-        "websocket-driver": ">=0.5.1"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/file-loader": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-1.1.11.tgz",
-      "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=",
-      "dev": true,
-      "dependencies": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^0.4.5"
-      },
-      "engines": {
-        "node": ">= 4.3 < 5.0.0 || >= 5.10"
-      },
-      "peerDependencies": {
-        "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
-      }
-    },
-    "node_modules/file-loader/node_modules/ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-      "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "node_modules/file-loader/node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-      "dev": true
-    },
-    "node_modules/file-loader/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-      "dev": true
-    },
-    "node_modules/file-loader/node_modules/schema-utils": {
-      "version": "0.4.7",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-      "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
-      "dev": true,
-      "optional": true
-    },
-    "node_modules/filesize": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz",
-      "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
-      "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/finalhandler": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
-      "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "statuses": "~1.5.0",
-        "unpipe": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/find-cache-dir": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz",
-      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
-      "dev": true,
-      "dependencies": {
-        "commondir": "^1.0.1",
-        "make-dir": "^1.0.0",
-        "pkg-dir": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/fingerprintjs2": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/fingerprintjs2/-/fingerprintjs2-2.1.2.tgz",
-      "integrity": "sha512-ZPsLgjziFRbUb5tXWpEMtWp4XFnzSah8SiNfl3aoURDZ+2zi2tuIOYUULqDBV+Cb6paN+raWT+Q2qpOaCbX/Yw==",
-      "deprecated": "Package has been renamed to @fingerprintjs/fingerprintjs. Install @fingerprintjs/fingerprintjs to get updates."
-    },
-    "node_modules/flatten": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/flatten/download/flatten-1.0.3.tgz",
-      "integrity": "sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=",
-      "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.",
-      "dev": true
-    },
-    "node_modules/flush-write-stream": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
-      "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.3.6"
-      }
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057997789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz",
-      "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/forwarded": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
-      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-      "dev": true,
-      "dependencies": {
-        "map-cache": "^0.2.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/friendly-errors-webpack-plugin": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.7.0.tgz",
-      "integrity": "sha1-78hsu4FiJFZYYaG+ep2E0Kr+oTY=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "error-stack-parser": "^2.0.0",
-        "string-width": "^2.0.0"
-      },
-      "peerDependencies": {
-        "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
-      }
-    },
-    "node_modules/friendly-errors-webpack-plugin/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/friendly-errors-webpack-plugin/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/friendly-errors-webpack-plugin/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/from2": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0"
-      }
-    },
-    "node_modules/fs-write-stream-atomic": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
-      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "iferr": "^0.1.5",
-        "imurmurhash": "^0.1.4",
-        "readable-stream": "1 || 2"
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "node_modules/fsevents": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz",
-      "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=",
-      "deprecated": "\"Please update to latest v2.3 or v2.2\"",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
-      "dev": true
-    },
-    "node_modules/get-caller-file": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz",
-      "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
-      "dev": true
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1"
-      }
-    },
-    "node_modules/get-stdin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056464385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz",
-      "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/globals": {
-      "version": "9.18.0",
-      "resolved": "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz?cache=0&sync_timestamp=1596709369054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-9.18.0.tgz",
-      "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/globby": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz",
-      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^1.0.1",
-        "dir-glob": "^2.0.0",
-        "glob": "^7.1.2",
-        "ignore": "^3.3.5",
-        "pify": "^3.0.0",
-        "slash": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/good-listener": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz",
-      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-      "dependencies": {
-        "delegate": "^3.1.2"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.4",
-      "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz",
-      "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=",
-      "dev": true
-    },
-    "node_modules/growly": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-      "dev": true
-    },
-    "node_modules/gzip-size": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-4.1.0.tgz",
-      "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=",
-      "dev": true,
-      "dependencies": {
-        "duplexer": "^0.1.1",
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
-      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
-      "dev": true
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/has-ansi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-bigints": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
-      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
-      "dev": true
-    },
-    "node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
-      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "dev": true,
-      "dependencies": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "dev": true,
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/has-values/node_modules/kind-of": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
-      "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-      "dev": true,
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/hash-base": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
-      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/hash-base/node_modules/readable-stream": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-      "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/hash-base/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
-      "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
-      "dev": true
-    },
-    "node_modules/hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
-      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
-      "dev": true
-    },
-    "node_modules/hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
-      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
-      }
-    },
-    "node_modules/he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
-      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
-      "dev": true,
-      "bin": {
-        "he": "bin/he"
-      }
-    },
-    "node_modules/hex-color-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
-      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
-      "dev": true
-    },
-    "node_modules/hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-      "dev": true,
-      "dependencies": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "node_modules/home-or-tmp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz",
-      "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
-      "dev": true,
-      "dependencies": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true
-    },
-    "node_modules/hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "node_modules/hsl-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
-      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
-      "dev": true
-    },
-    "node_modules/hsla-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
-      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
-      "dev": true
-    },
-    "node_modules/html-comment-regex": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
-      "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
-      "dev": true
-    },
-    "node_modules/html-entities": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz",
-      "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=",
-      "dev": true
-    },
-    "node_modules/html-minifier": {
-      "version": "3.5.21",
-      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
-      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
-      "dev": true,
-      "dependencies": {
-        "camel-case": "3.0.x",
-        "clean-css": "4.2.x",
-        "commander": "2.17.x",
-        "he": "1.2.x",
-        "param-case": "2.1.x",
-        "relateurl": "0.2.x",
-        "uglify-js": "3.4.x"
-      },
-      "bin": {
-        "html-minifier": "cli.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/html-webpack-plugin": {
-      "version": "2.30.1",
-      "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-2.30.1.tgz?cache=0&sync_timestamp=1600690506465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-2.30.1.tgz",
-      "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
-      "deprecated": "out of support",
-      "dev": true,
-      "dependencies": {
-        "bluebird": "^3.4.7",
-        "html-minifier": "^3.2.3",
-        "loader-utils": "^0.2.16",
-        "lodash": "^4.17.3",
-        "pretty-error": "^2.0.2",
-        "toposort": "^1.0.0"
-      },
-      "peerDependencies": {
-        "webpack": "1 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3"
-      }
-    },
-    "node_modules/html-webpack-plugin/node_modules/big.js": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
-      "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/html-webpack-plugin/node_modules/emojis-list": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
-      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/html-webpack-plugin/node_modules/loader-utils": {
-      "version": "0.2.17",
-      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
-      "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^3.1.3",
-        "emojis-list": "^2.0.0",
-        "json5": "^0.5.0",
-        "object-assign": "^4.0.1"
-      }
-    },
-    "node_modules/http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
-      "dev": true
-    },
-    "node_modules/http-errors": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
-      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
-      "dev": true,
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.1",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/http-errors/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
-    },
-    "node_modules/http-parser-js": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.2.tgz",
-      "integrity": "sha1-2i4x0jezk6rnKs5DiC3X4nCo/3c=",
-      "dev": true
-    },
-    "node_modules/http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz",
-      "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
-      "dev": true,
-      "dependencies": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/http-proxy-middleware": {
-      "version": "0.19.2",
-      "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.2.tgz",
-      "integrity": "sha1-7nPcyDSBZa/v6N4v9xd1HRgWCO4=",
-      "dev": true,
-      "dependencies": {
-        "http-proxy": "^1.18.1",
-        "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
-        "micromatch": "^3.1.10"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
-      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-      "dev": true
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
-      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
-      "dev": true,
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/icss-replace-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
-      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
-      "dev": true
-    },
-    "node_modules/icss-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz?cache=0&sync_timestamp=1600767333663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-2.1.0.tgz",
-      "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^6.0.1"
-      }
-    },
-    "node_modules/ieee754": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
-      "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
-      "dev": true
-    },
-    "node_modules/iferr": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
-      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
-      "dev": true
-    },
-    "node_modules/ignore": {
-      "version": "3.3.10",
-      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz",
-      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
-      "dev": true
-    },
-    "node_modules/import-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
-      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
-      "dev": true,
-      "dependencies": {
-        "import-from": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz",
-      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-      "dev": true,
-      "dependencies": {
-        "caller-path": "^2.0.0",
-        "resolve-from": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/import-from": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
-      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
-      "dev": true,
-      "dependencies": {
-        "resolve-from": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/import-local": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz",
-      "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=",
-      "dev": true,
-      "dependencies": {
-        "pkg-dir": "^2.0.0",
-        "resolve-cwd": "^2.0.0"
-      },
-      "bin": {
-        "import-local-fixture": "fixtures/cli.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/indent-string": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz",
-      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-      "dev": true,
-      "dependencies": {
-        "repeating": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/indexes-of": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
-      "dev": true
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
-      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
-      "dev": true
-    },
-    "node_modules/internal-ip": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-1.2.0.tgz?cache=0&sync_timestamp=1596563415126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-1.2.0.tgz",
-      "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
-      "dev": true,
-      "dependencies": {
-        "meow": "^3.3.0"
-      },
-      "bin": {
-        "internal-ip": "cli.js"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz",
-      "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz",
-      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
-      "dev": true,
-      "dependencies": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "node_modules/invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
-      "dev": true
-    },
-    "node_modules/ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/is-absolute-url": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz",
-      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-arguments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz",
-      "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "node_modules/is-bigint": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
-      "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
-      "dev": true
-    },
-    "node_modules/is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
-      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "binary-extensions": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
-      "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-      "dev": true
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
-      "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-color-stop": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
-      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
-      "dev": true,
-      "dependencies": {
-        "css-color-names": "^0.0.4",
-        "hex-color-regex": "^1.1.0",
-        "hsl-regex": "^1.0.0",
-        "hsla-regex": "^1.0.0",
-        "rgb-regex": "^1.0.1",
-        "rgba-regex": "^1.0.0"
-      }
-    },
-    "node_modules/is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz",
-      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
-      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-descriptor/node_modules/kind-of": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
-      "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-directory": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
-      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-finite": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz",
-      "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
-      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
-      "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
-      "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
-      "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-obj": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-path-cwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz",
-      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-path-in-cwd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz",
-      "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
-      "dev": true,
-      "dependencies": {
-        "is-path-inside": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-path-inside": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz",
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
-      "dev": true,
-      "dependencies": {
-        "path-is-inside": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz",
-      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
-      "dev": true,
-      "dependencies": {
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
-      "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-resolvable": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
-      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
-      "dev": true
-    },
-    "node_modules/is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
-      "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-svg": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-2.1.0.tgz",
-      "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
-      "dev": true,
-      "dependencies": {
-        "html-comment-regex": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz",
-      "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
-    "node_modules/is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
-      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "node_modules/isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/js-base64": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1599897619557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz",
-      "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=",
-      "dev": true
-    },
-    "node_modules/js-tokens": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz",
-      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
-      "dev": true
-    },
-    "node_modules/js-yaml": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
-      "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^2.6.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/jsesc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz",
-      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
-    "node_modules/json-loader": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/json-loader/download/json-loader-0.5.7.tgz",
-      "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=",
-      "dev": true
-    },
-    "node_modules/json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
-      "dev": true
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.3.1.tgz",
-      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-      "dev": true
-    },
-    "node_modules/json3": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
-      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/killable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
-      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
-      "dev": true
-    },
-    "node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "dev": true,
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/last-call-webpack-plugin": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/last-call-webpack-plugin/download/last-call-webpack-plugin-2.1.2.tgz",
-      "integrity": "sha1-rYDG4xCZgpTS7SGApo6VieR2jEQ=",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.4",
-        "webpack-sources": "^1.0.1"
-      }
-    },
-    "node_modules/lazy-cache": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dev": true,
-      "dependencies": {
-        "invert-kv": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
-      "dependencies": {
-        "uc.micro": "^1.0.1"
-      }
-    },
-    "node_modules/load-json-file": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz",
-      "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/load-json-file/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/load-json-file/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/loader-runner": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1601450715716&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
-      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
-      "dev": true,
-      "engines": {
-        "node": ">=4.3.0 <5.0.0 || >=5.10"
-      }
-    },
-    "node_modules/loader-utils": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
-      "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/loader-utils/node_modules/json5": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
-      "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
-    },
-    "node_modules/lodash.camelcase": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz",
-      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
-      "dev": true
-    },
-    "node_modules/lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
-      "dev": true
-    },
-    "node_modules/lodash.uniq": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-      "dev": true
-    },
-    "node_modules/log-symbols": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1589682056270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz",
-      "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/loglevel": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz?cache=0&sync_timestamp=1598447642950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.0.tgz",
-      "integrity": "sha1-coFmhVp0DVnTjbAc9G8ELKoEG7A=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
-    "node_modules/longest": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
-      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
-      "dev": true,
-      "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
-    "node_modules/loud-rejection": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-      "dev": true,
-      "dependencies": {
-        "currently-unhandled": "^0.4.1",
-        "signal-exit": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
-      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
-      "dev": true
-    },
-    "node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427519396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
-      "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
-      "dev": true,
-      "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
-    "node_modules/make-dir": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz",
-      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
-      "dev": true,
-      "dependencies": {
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-      "dev": true,
-      "dependencies": {
-        "object-visit": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/markdown-it": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
-      "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "entities": "~1.1.1",
-        "linkify-it": "^2.0.0",
-        "mdurl": "^1.0.1",
-        "uc.micro": "^1.0.5"
-      },
-      "bin": {
-        "markdown-it": "bin/markdown-it.js"
-      }
-    },
-    "node_modules/markdown-it/node_modules/entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
-    },
-    "node_modules/math-expression-evaluator": {
-      "version": "1.3.8",
-      "resolved": "https://registry.nlark.com/math-expression-evaluator/download/math-expression-evaluator-1.3.8.tgz",
-      "integrity": "sha1-Mg2jsrwVEvT1D8MCCysc1cjp1Xc=",
-      "dev": true
-    },
-    "node_modules/md5.js": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
-      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
-      "dev": true,
-      "dependencies": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      }
-    },
-    "node_modules/mdn-data": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
-      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
-      "dev": true
-    },
-    "node_modules/mdurl": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
-      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
-    },
-    "node_modules/media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mem": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz",
-      "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/memory-fs": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
-      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
-      "dev": true,
-      "dependencies": {
-        "errno": "^0.1.3",
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "node_modules/meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz?cache=0&sync_timestamp=1598693287069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-      "dev": true,
-      "dependencies": {
-        "camelcase-keys": "^2.0.0",
-        "decamelize": "^1.1.2",
-        "loud-rejection": "^1.0.0",
-        "map-obj": "^1.0.1",
-        "minimist": "^1.1.3",
-        "normalize-package-data": "^2.3.4",
-        "object-assign": "^4.0.1",
-        "read-pkg-up": "^1.0.1",
-        "redent": "^1.0.0",
-        "trim-newlines": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/find-up": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
-      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-      "dev": true,
-      "dependencies": {
-        "path-exists": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/load-json-file": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
-      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0",
-        "strip-bom": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/path-exists": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
-      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-      "dev": true,
-      "dependencies": {
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/path-type": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
-      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/read-pkg": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
-      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-      "dev": true,
-      "dependencies": {
-        "load-json-file": "^1.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/read-pkg-up": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
-      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^1.0.0",
-        "read-pkg": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/meow/node_modules/strip-bom": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
-      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-      "dev": true,
-      "dependencies": {
-        "is-utf8": "^0.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
-      "dev": true
-    },
-    "node_modules/methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
-      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
-      "dev": true,
-      "dependencies": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-      "dev": true,
-      "dependencies": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "dev": true,
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "dev": true,
-      "dependencies": {
-        "is-buffer": "^1.1.5"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/micromatch/node_modules/to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/miller-rabin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
-      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.0.0",
-        "brorand": "^1.0.1"
-      },
-      "bin": {
-        "miller-rabin": "bin/miller-rabin"
-      }
-    },
-    "node_modules/miller-rabin/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz",
-      "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
-      "dev": true,
-      "bin": {
-        "mime": "cli.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.44.0",
-      "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz",
-      "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.27",
-      "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz",
-      "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.44.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mimic-fn": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz",
-      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
-      "dev": true
-    },
-    "node_modules/minimalistic-crypto-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
-      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-      "dev": true
-    },
-    "node_modules/minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
-      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
-      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
-      "dev": true
-    },
-    "node_modules/mississippi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz",
-      "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
-      "dev": true,
-      "dependencies": {
-        "concat-stream": "^1.5.0",
-        "duplexify": "^3.4.2",
-        "end-of-stream": "^1.1.0",
-        "flush-write-stream": "^1.0.0",
-        "from2": "^2.1.0",
-        "parallel-transform": "^1.1.0",
-        "pump": "^2.0.1",
-        "pumpify": "^1.3.3",
-        "stream-each": "^1.1.0",
-        "through2": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
-      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
-      "dev": true,
-      "dependencies": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/mixin-deep/node_modules/is-extendable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-      "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
-      "dev": true,
-      "dependencies": {
-        "is-plain-object": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz",
-      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.5"
-      },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      }
-    },
-    "node_modules/moment": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983423917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz",
-      "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/move-concurrently": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
-      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
-      "dev": true,
-      "dependencies": {
-        "aproba": "^1.1.1",
-        "copy-concurrently": "^1.0.0",
-        "fs-write-stream-atomic": "^1.0.8",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.3"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-      "dev": true
-    },
-    "node_modules/multicast-dns": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz",
-      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
-      "dev": true,
-      "dependencies": {
-        "dns-packet": "^1.3.1",
-        "thunky": "^1.0.2"
-      },
-      "bin": {
-        "multicast-dns": "cli.js"
-      }
-    },
-    "node_modules/multicast-dns-service-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
-      "dev": true
-    },
-    "node_modules/nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz",
-      "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=",
-      "dev": true,
-      "optional": true
-    },
-    "node_modules/nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
-      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
-      "dev": true,
-      "dependencies": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/nanomatch/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/negotiator": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
-      "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317437265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz",
-      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
-      "dev": true
-    },
-    "node_modules/next-tick": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz",
-      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
-      "dev": true
-    },
-    "node_modules/no-case": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
-      "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
-      "dev": true,
-      "dependencies": {
-        "lower-case": "^1.1.1"
-      }
-    },
-    "node_modules/node-forge": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz?cache=0&sync_timestamp=1599010730714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.10.0.tgz",
-      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
-      "dev": true,
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
-    "node_modules/node-libs-browser": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
-      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
-      "dev": true,
-      "dependencies": {
-        "assert": "^1.1.1",
-        "browserify-zlib": "^0.2.0",
-        "buffer": "^4.3.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "^1.0.0",
-        "crypto-browserify": "^3.11.0",
-        "domain-browser": "^1.1.1",
-        "events": "^3.0.0",
-        "https-browserify": "^1.0.0",
-        "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.1",
-        "process": "^0.11.10",
-        "punycode": "^1.2.4",
-        "querystring-es3": "^0.2.0",
-        "readable-stream": "^2.3.3",
-        "stream-browserify": "^2.0.1",
-        "stream-http": "^2.7.2",
-        "string_decoder": "^1.0.0",
-        "timers-browserify": "^2.0.4",
-        "tty-browserify": "0.0.0",
-        "url": "^0.11.0",
-        "util": "^0.11.0",
-        "vm-browserify": "^1.0.1"
-      }
-    },
-    "node_modules/node-libs-browser/node_modules/punycode": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
-      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-      "dev": true
-    },
-    "node_modules/node-notifier": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz?cache=0&sync_timestamp=1597311297466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-notifier%2Fdownload%2Fnode-notifier-5.4.3.tgz",
-      "integrity": "sha1-y3La+UyTkECY4oucWQ/YZuRkvVA=",
-      "dev": true,
-      "dependencies": {
-        "growly": "^1.3.0",
-        "is-wsl": "^1.1.0",
-        "semver": "^5.5.0",
-        "shellwords": "^0.1.1",
-        "which": "^1.3.0"
-      }
-    },
-    "node_modules/node-releases": {
-      "version": "1.1.72",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
-      "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
-      "dev": true
-    },
-    "node_modules/normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
-      "dev": true,
-      "dependencies": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "node_modules/normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
-      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/normalize-url": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1601463025217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz",
-      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
-      "dev": true,
-      "dependencies": {
-        "object-assign": "^4.0.1",
-        "prepend-http": "^1.0.0",
-        "query-string": "^4.1.0",
-        "sort-keys": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/normalize-wheel": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
-      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
-    },
-    "node_modules/npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/nth-check": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",
-      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "~1.0.0"
-      }
-    },
-    "node_modules/num2fraction": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz",
-      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-      "dev": true
-    },
-    "node_modules/number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "dev": true,
-      "dependencies": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-copy/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.10.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
-      "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
-      "dev": true
-    },
-    "node_modules/object-is": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.3.tgz?cache=0&sync_timestamp=1601503177879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.3.tgz",
-      "integrity": "sha1-LjueZVYBN0Ve471irsTZCi6hzIE=",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.0-next.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
-      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "dev": true,
-      "dependencies": {
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz",
-      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.getownpropertydescriptors": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
-      "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.0-next.2"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "dev": true,
-      "dependencies": {
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
-      "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz",
-      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
-      "dev": true
-    },
-    "node_modules/on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
-      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-      "dev": true,
-      "dependencies": {
-        "ee-first": "1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
-      "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/onetime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz",
-      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/opener": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733310448&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz",
-      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
-      "dev": true,
-      "bin": {
-        "opener": "bin/opener-bin.js"
-      }
-    },
-    "node_modules/opn": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz",
-      "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=",
-      "dev": true,
-      "dependencies": {
-        "is-wsl": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/optimize-css-assets-webpack-plugin": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-3.2.1.tgz?cache=0&sync_timestamp=1598800822300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptimize-css-assets-webpack-plugin%2Fdownload%2Foptimize-css-assets-webpack-plugin-3.2.1.tgz",
-      "integrity": "sha1-nRhlSg4FjAkL3ZkbBLyw9vJIZXM=",
-      "dev": true,
-      "dependencies": {
-        "cssnano": "^4.1.10",
-        "last-call-webpack-plugin": "^2.1.2"
-      }
-    },
-    "node_modules/optimize-css-assets-webpack-plugin/node_modules/cssnano": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
-      "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^5.0.0",
-        "cssnano-preset-default": "^4.0.8",
-        "is-resolvable": "^1.0.0",
-        "postcss": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/optimize-css-assets-webpack-plugin/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
-      "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/ora": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/ora/download/ora-1.4.0.tgz?cache=0&sync_timestamp=1599423139882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-1.4.0.tgz",
-      "integrity": "sha1-iERYIVs6XUCXWSKF+TMhu3p54uU=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.1.0",
-        "cli-cursor": "^2.1.0",
-        "cli-spinners": "^1.0.1",
-        "log-symbols": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/original": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz",
-      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
-      "dev": true,
-      "dependencies": {
-        "url-parse": "^1.4.3"
-      }
-    },
-    "node_modules/os-browserify": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz",
-      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-      "dev": true
-    },
-    "node_modules/os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/os-locale": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
-      "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
-      "dev": true,
-      "dependencies": {
-        "execa": "^0.7.0",
-        "lcid": "^1.0.0",
-        "mem": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
-      "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz",
-      "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz",
-      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
-      "dev": true
-    },
-    "node_modules/parallel-transform": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz",
-      "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
-      "dev": true,
-      "dependencies": {
-        "cyclist": "^1.0.1",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.1.5"
-      }
-    },
-    "node_modules/param-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz",
-      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
-      "dev": true,
-      "dependencies": {
-        "no-case": "^2.2.0"
-      }
-    },
-    "node_modules/parse-asn1": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz",
-      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
-      "dev": true,
-      "dependencies": {
-        "asn1.js": "^5.2.0",
-        "browserify-aes": "^1.0.0",
-        "evp_bytestokey": "^1.0.0",
-        "pbkdf2": "^3.0.3",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
-      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
-      "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
-      "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
-      "dev": true
-    },
-    "node_modules/path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true
-    },
-    "node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-is-inside": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
-      "dev": true
-    },
-    "node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz",
-      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
-      "dev": true
-    },
-    "node_modules/path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz",
-      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
-      "dev": true,
-      "dependencies": {
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pbkdf2": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz",
-      "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=",
-      "dev": true,
-      "dependencies": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/picomatch": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz",
-      "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "dev": true,
-      "dependencies": {
-        "pinkie": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/pkg-dir": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz",
-      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/portfinder": {
-      "version": "1.0.28",
-      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018172434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz",
-      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
-      "dev": true,
-      "dependencies": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.5"
-      },
-      "engines": {
-        "node": ">= 0.12.0"
-      }
-    },
-    "node_modules/portfinder/node_modules/debug": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz",
-      "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
-      "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/portfinder/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-      "dev": true
-    },
-    "node_modules/posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "6.0.23",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz",
-      "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.1",
-        "source-map": "^0.6.1",
-        "supports-color": "^5.4.0"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/postcss-calc": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-5.3.1.tgz?cache=0&sync_timestamp=1601732624081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-5.3.1.tgz",
-      "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.2",
-        "postcss-message-helpers": "^2.0.0",
-        "reduce-css-calc": "^1.2.6"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-calc/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-colormin": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-2.2.2.tgz?cache=0&sync_timestamp=1599670485775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-2.2.2.tgz",
-      "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
-      "dev": true,
-      "dependencies": {
-        "colormin": "^1.0.5",
-        "postcss": "^5.0.13",
-        "postcss-value-parser": "^3.2.3"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-colormin/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-convert-values": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-2.6.1.tgz?cache=0&sync_timestamp=1599674174819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-2.6.1.tgz",
-      "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.11",
-        "postcss-value-parser": "^3.1.2"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-convert-values/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-comments": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-2.0.4.tgz?cache=0&sync_timestamp=1599674175141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-2.0.4.tgz",
-      "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.14"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-comments/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-2.1.0.tgz?cache=0&sync_timestamp=1599674175412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-2.1.0.tgz",
-      "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-duplicates/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-empty": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-2.1.0.tgz?cache=0&sync_timestamp=1599670482017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-2.1.0.tgz",
-      "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.14"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-empty/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-0.1.1.tgz?cache=0&sync_timestamp=1599670482109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-0.1.1.tgz",
-      "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.16"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-overridden/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-unused": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-unused/download/postcss-discard-unused-2.2.3.tgz?cache=0&sync_timestamp=1599672334828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-unused%2Fdownload%2Fpostcss-discard-unused-2.2.3.tgz",
-      "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.14",
-        "uniqs": "^2.0.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-discard-unused/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-filter-plugins/download/postcss-filter-plugins-2.0.3.tgz",
-      "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-filter-plugins/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-import": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-import/download/postcss-import-11.1.0.tgz",
-      "integrity": "sha1-Vck2LJGSmU7GiGXSJEGd8dspgfA=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^6.0.1",
-        "postcss-value-parser": "^3.2.3",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
-      }
-    },
-    "node_modules/postcss-load-config": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1601607668112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.2.tgz",
-      "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^5.0.0",
-        "import-cwd": "^2.0.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/postcss-load-options": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-options/download/postcss-load-options-1.2.0.tgz",
-      "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^2.1.0",
-        "object-assign": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-load-options/node_modules/cosmiconfig": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-      "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-      "dev": true,
-      "dependencies": {
-        "is-directory": "^0.3.1",
-        "js-yaml": "^3.4.3",
-        "minimist": "^1.2.0",
-        "object-assign": "^4.1.0",
-        "os-homedir": "^1.0.1",
-        "parse-json": "^2.2.0",
-        "require-from-string": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-load-options/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-load-plugins": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-plugins/download/postcss-load-plugins-2.3.0.tgz",
-      "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^2.1.1",
-        "object-assign": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-load-plugins/node_modules/cosmiconfig": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-      "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-      "dev": true,
-      "dependencies": {
-        "is-directory": "^0.3.1",
-        "js-yaml": "^3.4.3",
-        "minimist": "^1.2.0",
-        "object-assign": "^4.1.0",
-        "os-homedir": "^1.0.1",
-        "parse-json": "^2.2.0",
-        "require-from-string": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-load-plugins/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-loader": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.1.6.tgz",
-      "integrity": "sha1-HX3XsXxrojS5vtWvE+C+pApC10A=",
-      "dev": true,
-      "dependencies": {
-        "loader-utils": "^1.1.0",
-        "postcss": "^6.0.0",
-        "postcss-load-config": "^2.0.0",
-        "schema-utils": "^0.4.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/postcss-loader/node_modules/ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-      "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "node_modules/postcss-loader/node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-      "dev": true
-    },
-    "node_modules/postcss-loader/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-      "dev": true
-    },
-    "node_modules/postcss-loader/node_modules/schema-utils": {
-      "version": "0.4.7",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-      "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/postcss-merge-idents": {
-      "version": "2.1.7",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-idents/download/postcss-merge-idents-2.1.7.tgz?cache=0&sync_timestamp=1599672336407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-idents%2Fdownload%2Fpostcss-merge-idents-2.1.7.tgz",
-      "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.10",
-        "postcss-value-parser": "^3.1.1"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-idents/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-2.0.2.tgz?cache=0&sync_timestamp=1599670482411&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-2.0.2.tgz",
-      "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-longhand/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-merge-rules": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-2.1.2.tgz?cache=0&sync_timestamp=1599670482522&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-2.1.2.tgz",
-      "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^1.5.2",
-        "caniuse-api": "^1.5.2",
-        "postcss": "^5.0.4",
-        "postcss-selector-parser": "^2.2.2",
-        "vendors": "^1.0.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/browserslist": {
-      "version": "1.7.7",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-      "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-      "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
-      "dev": true,
-      "dependencies": {
-        "caniuse-db": "^1.0.30000639",
-        "electron-to-chromium": "^1.2.7"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-merge-rules/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-message-helpers": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-message-helpers/download/postcss-message-helpers-2.0.0.tgz",
-      "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
-      "dev": true
-    },
-    "node_modules/postcss-minify-font-values": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-1.0.5.tgz?cache=0&sync_timestamp=1599670482669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-1.0.5.tgz",
-      "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
-      "dev": true,
-      "dependencies": {
-        "object-assign": "^4.0.1",
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.2"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-font-values/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-1.0.5.tgz?cache=0&sync_timestamp=1599670482761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-1.0.5.tgz",
-      "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.12",
-        "postcss-value-parser": "^3.3.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-gradients/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-params": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-1.2.2.tgz?cache=0&sync_timestamp=1599670482880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-1.2.2.tgz",
-      "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.1",
-        "postcss": "^5.0.2",
-        "postcss-value-parser": "^3.0.2",
-        "uniqs": "^2.0.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-params/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-2.1.1.tgz?cache=0&sync_timestamp=1599670483082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-2.1.1.tgz",
-      "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.2",
-        "has": "^1.0.1",
-        "postcss": "^5.0.14",
-        "postcss-selector-parser": "^2.0.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-minify-selectors/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-modules-extract-imports": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz?cache=0&sync_timestamp=1600776084988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-1.2.1.tgz",
-      "integrity": "sha1-3IfjQUjsfqtfeR981YSYMzdbdBo=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^6.0.1"
-      }
-    },
-    "node_modules/postcss-modules-local-by-default": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz",
-      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
-      "dev": true,
-      "dependencies": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "node_modules/postcss-modules-scope": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz?cache=0&sync_timestamp=1600778003060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-1.1.0.tgz",
-      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
-      "dev": true,
-      "dependencies": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "node_modules/postcss-modules-values": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz?cache=0&sync_timestamp=1602187018990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-1.3.0.tgz",
-      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
-      "dev": true,
-      "dependencies": {
-        "icss-replace-symbols": "^1.1.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "node_modules/postcss-normalize-charset": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-1.1.1.tgz?cache=0&sync_timestamp=1599670482967&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-1.1.1.tgz",
-      "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.5"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-normalize-display-values": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
-      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-display-values/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-display-values/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-positions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
-      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-positions/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-positions/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-repeat-style": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
-      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-repeat-style/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-string": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
-      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-string/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-string/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-timing-functions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
-      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-timing-functions/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-unicode": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
-      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-unicode/node_modules/browserslist": {
-      "version": "4.16.6",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-      "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-      "dev": true,
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001219",
-        "colorette": "^1.2.2",
-        "electron-to-chromium": "^1.3.723",
-        "escalade": "^3.1.1",
-        "node-releases": "^1.1.71"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/postcss-normalize-unicode/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-unicode/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-normalize-url": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-3.0.8.tgz?cache=0&sync_timestamp=1599670483753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-3.0.8.tgz",
-      "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
-      "dev": true,
-      "dependencies": {
-        "is-absolute-url": "^2.0.0",
-        "normalize-url": "^1.4.0",
-        "postcss": "^5.0.14",
-        "postcss-value-parser": "^3.2.3"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-normalize-url/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-normalize-whitespace": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
-      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/postcss-normalize-whitespace/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-normalize-whitespace/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-ordered-values": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-2.2.3.tgz?cache=0&sync_timestamp=1599670483946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-2.2.3.tgz",
-      "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.1"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-ordered-values/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-pxtorem": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz",
-      "integrity": "sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg==",
-      "dependencies": {
-        "postcss": "^7.0.27"
-      }
-    },
-    "node_modules/postcss-pxtorem/node_modules/postcss": {
-      "version": "7.0.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-      "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/postcss-pxtorem/node_modules/supports-color": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/postcss-reduce-idents": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-idents/download/postcss-reduce-idents-2.4.0.tgz?cache=0&sync_timestamp=1599672339373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-idents%2Fdownload%2Fpostcss-reduce-idents-2.4.0.tgz",
-      "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.2"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-idents/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-1.0.1.tgz?cache=0&sync_timestamp=1599670484036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-1.0.1.tgz",
-      "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
-      "dev": true,
-      "dependencies": {
-        "postcss": "^5.0.4"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-initial/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-1.0.4.tgz?cache=0&sync_timestamp=1599670484213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-1.0.4.tgz",
-      "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.8",
-        "postcss-value-parser": "^3.0.1"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-reduce-transforms/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-selector-parser": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz?cache=0&sync_timestamp=1601045323543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-2.2.3.tgz",
-      "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
-      "dev": true,
-      "dependencies": {
-        "flatten": "^1.0.2",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      }
-    },
-    "node_modules/postcss-svgo": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-2.1.6.tgz?cache=0&sync_timestamp=1599670484324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-2.1.6.tgz",
-      "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
-      "dev": true,
-      "dependencies": {
-        "is-svg": "^2.0.0",
-        "postcss": "^5.0.14",
-        "postcss-value-parser": "^3.2.3",
-        "svgo": "^0.7.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-svgo/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-2.0.2.tgz?cache=0&sync_timestamp=1599670484407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-2.0.2.tgz",
-      "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
-      "dev": true,
-      "dependencies": {
-        "alphanum-sort": "^1.0.1",
-        "postcss": "^5.0.4",
-        "uniqs": "^2.0.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-unique-selectors/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-url": {
-      "version": "7.3.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-url/download/postcss-url-7.3.2.tgz",
-      "integrity": "sha1-X+onOAf7hLOMRhw8mp6KvSNfcSA=",
-      "dev": true,
-      "dependencies": {
-        "mime": "^1.4.1",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.0",
-        "postcss": "^6.0.1",
-        "xxhashjs": "^0.2.1"
-      }
-    },
-    "node_modules/postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
-      "dev": true
-    },
-    "node_modules/postcss-zindex": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-zindex/download/postcss-zindex-2.2.0.tgz?cache=0&sync_timestamp=1599670556187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-zindex%2Fdownload%2Fpostcss-zindex-2.2.0.tgz",
-      "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.4",
-        "uniqs": "^2.0.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/chalk/node_modules/supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-      "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^1.1.3",
-        "js-base64": "^2.1.9",
-        "source-map": "^0.5.6",
-        "supports-color": "^3.2.3"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postcss-zindex/node_modules/supports-color": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-      "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/prepend-http": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1600217249280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
-      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
-      "dev": true,
-      "bin": {
-        "prettier": "bin-prettier.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
-      "dev": true,
-      "dependencies": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
-      }
-    },
-    "node_modules/private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
-      "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
-      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
-      "dev": true
-    },
-    "node_modules/promise-inflight": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
-      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
-      "dev": true
-    },
-    "node_modules/proxy-addr": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
-      "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=",
-      "dev": true,
-      "dependencies": {
-        "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-      "dev": true
-    },
-    "node_modules/pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
-    "node_modules/public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
-      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
-      "dev": true,
-      "dependencies": {
-        "bn.js": "^4.1.0",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "parse-asn1": "^5.0.0",
-        "randombytes": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      }
-    },
-    "node_modules/public-encrypt/node_modules/bn.js": {
-      "version": "4.11.9",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-      "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-      "dev": true
-    },
-    "node_modules/pump": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
-      "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
-      "dev": true,
-      "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "node_modules/pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
-      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
-      "dev": true,
-      "dependencies": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
-      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/q": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6.0",
-        "teleport": ">=0.2.0"
-      }
-    },
-    "node_modules/qs": {
-      "version": "6.7.0",
-      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
-      "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/query-string": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz",
-      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
-      "dev": true,
-      "dependencies": {
-        "object-assign": "^4.1.0",
-        "strict-uri-encode": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-      "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.x"
-      }
-    },
-    "node_modules/querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
-      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.x"
-      }
-    },
-    "node_modules/querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz",
-      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
-      "dev": true
-    },
-    "node_modules/randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
-      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "node_modules/randomfill": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
-      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
-      "dev": true,
-      "dependencies": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "node_modules/range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
-      "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/raw-body": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz",
-      "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.0",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz",
-      "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
-      "dev": true,
-      "dependencies": {
-        "pify": "^2.3.0"
-      }
-    },
-    "node_modules/read-cache/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/read-pkg": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz",
-      "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
-      "dev": true,
-      "dependencies": {
-        "load-json-file": "^2.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/read-pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz",
-      "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/read-pkg/node_modules/path-type": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz",
-      "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
-      "dev": true,
-      "dependencies": {
-        "pify": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/read-pkg/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
-      "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
-      "dev": true,
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz",
-      "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "dependencies": {
-        "resolve": "^1.1.6"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/redent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-      "dev": true,
-      "dependencies": {
-        "indent-string": "^2.1.0",
-        "strip-indent": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/reduce-css-calc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-1.3.0.tgz",
-      "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^0.4.2",
-        "math-expression-evaluator": "^1.2.14",
-        "reduce-function-call": "^1.0.1"
-      }
-    },
-    "node_modules/reduce-css-calc/node_modules/balanced-match": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz",
-      "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
-      "dev": true
-    },
-    "node_modules/reduce-function-call": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/reduce-function-call/download/reduce-function-call-1.0.3.tgz",
-      "integrity": "sha1-YDUPf7JSwKZ+sQ/UaU0WkJlxMA8=",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/regenerate": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz",
-      "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=",
-      "dev": true
-    },
-    "node_modules/regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
-      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
-    },
-    "node_modules/regenerator-transform": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.10.1.tgz",
-      "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=",
-      "dev": true,
-      "dependencies": {
-        "babel-runtime": "^6.18.0",
-        "babel-types": "^6.19.0",
-        "private": "^0.1.6"
-      }
-    },
-    "node_modules/regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz",
-      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
-      "dev": true,
-      "dependencies": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz",
-      "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/regexpu-core": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz?cache=0&sync_timestamp=1600413529161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-2.0.0.tgz",
-      "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
-      "dev": true,
-      "dependencies": {
-        "regenerate": "^1.2.1",
-        "regjsgen": "^0.2.0",
-        "regjsparser": "^0.1.4"
-      }
-    },
-    "node_modules/regjsgen": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz?cache=0&sync_timestamp=1590335923060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsgen%2Fdownload%2Fregjsgen-0.2.0.tgz",
-      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
-      "dev": true
-    },
-    "node_modules/regjsparser": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz",
-      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
-      "dev": true,
-      "dependencies": {
-        "jsesc": "~0.5.0"
-      },
-      "bin": {
-        "regjsparser": "bin/parser"
-      }
-    },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
-      "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
-    "node_modules/relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz",
-      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
-    },
-    "node_modules/renderkid": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
-      "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
-      "dev": true,
-      "dependencies": {
-        "css-select": "^4.1.3",
-        "dom-converter": "^0.2.0",
-        "htmlparser2": "^6.1.0",
-        "lodash": "^4.17.21",
-        "strip-ansi": "^3.0.1"
-      }
-    },
-    "node_modules/renderkid/node_modules/css-select": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
-      "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "^1.0.0",
-        "css-what": "^5.1.0",
-        "domhandler": "^4.3.0",
-        "domutils": "^2.8.0",
-        "nth-check": "^2.0.1"
-      }
-    },
-    "node_modules/renderkid/node_modules/css-what": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
-      "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/renderkid/node_modules/dom-serializer": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
-      "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.2.0",
-        "entities": "^2.0.0"
-      }
-    },
-    "node_modules/renderkid/node_modules/domelementtype": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
-      "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
-      "dev": true
-    },
-    "node_modules/renderkid/node_modules/domhandler": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
-      "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.2.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/renderkid/node_modules/domutils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
-      "dev": true,
-      "dependencies": {
-        "dom-serializer": "^1.0.1",
-        "domelementtype": "^2.2.0",
-        "domhandler": "^4.2.0"
-      }
-    },
-    "node_modules/renderkid/node_modules/htmlparser2": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
-      "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.0.0",
-        "domutils": "^2.5.2",
-        "entities": "^2.0.0"
-      }
-    },
-    "node_modules/renderkid/node_modules/nth-check": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
-      "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "^1.0.0"
-      }
-    },
-    "node_modules/repeat-element": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz",
-      "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "dev": true,
-      "dependencies": {
-        "is-finite": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-from-string": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/require-from-string/download/require-from-string-1.2.1.tgz",
-      "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
-      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-      "dev": true
-    },
-    "node_modules/requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
-      "dev": true
-    },
-    "node_modules/resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
-    },
-    "node_modules/resolve": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz",
-      "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=",
-      "dev": true,
-      "dependencies": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "node_modules/resolve-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz",
-      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
-      "dev": true,
-      "dependencies": {
-        "resolve-from": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
-      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-      "deprecated": "https://github.com/lydell/resolve-url#deprecated",
-      "dev": true
-    },
-    "node_modules/restore-cursor": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz",
-      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^2.0.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz",
-      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/rgb-regex": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
-      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
-      "dev": true
-    },
-    "node_modules/rgba-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
-      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
-      "dev": true
-    },
-    "node_modules/right-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "dev": true,
-      "dependencies": {
-        "align-text": "^0.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz",
-      "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      }
-    },
-    "node_modules/ripemd160": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
-      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
-      "dev": true,
-      "dependencies": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1"
-      }
-    },
-    "node_modules/run-queue": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
-      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
-      "dev": true,
-      "dependencies": {
-        "aproba": "^1.1.1"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
-      "dev": true
-    },
-    "node_modules/safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "dev": true,
-      "dependencies": {
-        "ret": "~0.1.10"
-      }
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
-      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
-      "dev": true
-    },
-    "node_modules/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz?cache=0&sync_timestamp=1589682064084&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsax%2Fdownload%2Fsax-1.2.4.tgz",
-      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
-      "dev": true
-    },
-    "node_modules/schema-utils": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.3.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.3.0.tgz",
-      "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^5.0.0"
-      },
-      "engines": {
-        "node": ">= 4.3 < 5.0.0 || >= 5.10"
-      }
-    },
-    "node_modules/select": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/select/download/select-1.1.2.tgz",
-      "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
-    },
-    "node_modules/select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
-      "dev": true
-    },
-    "node_modules/selfsigned": {
-      "version": "1.10.8",
-      "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.8.tgz?cache=0&sync_timestamp=1600186082996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.8.tgz",
-      "integrity": "sha1-DRcgi30Swz+OrIXEGDXyf8PYGjA=",
-      "dev": true,
-      "dependencies": {
-        "node-forge": "^0.10.0"
-      }
-    },
-    "node_modules/semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
-      "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/send": {
-      "version": "0.17.1",
-      "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
-      "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "~1.7.2",
-        "mime": "1.6.0",
-        "ms": "2.1.1",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.1",
-        "statuses": "~1.5.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/send/node_modules/ms": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
-      "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
-      "dev": true
-    },
-    "node_modules/serialize-javascript": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
-      "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
-      "dev": true
-    },
-    "node_modules/serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/serve-index/node_modules/http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz",
-      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-      "dev": true,
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": ">= 1.4.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/setprototypeof": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
-      "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
-      "dev": true
-    },
-    "node_modules/serve-static": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
-      "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
-      "dev": true,
-      "dependencies": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.17.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
-    },
-    "node_modules/set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz",
-      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
-      "dev": true,
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/set-value/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/setimmediate": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-      "dev": true
-    },
-    "node_modules/setprototypeof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
-      "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=",
-      "dev": true
-    },
-    "node_modules/sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
-      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      },
-      "bin": {
-        "sha.js": "bin.js"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1596697357985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/shelljs": {
-      "version": "0.7.8",
-      "resolved": "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz",
-      "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.0.0",
-        "interpret": "^1.0.0",
-        "rechoir": "^0.6.2"
-      },
-      "bin": {
-        "shjs": "bin/shjs"
-      },
-      "engines": {
-        "iojs": "*",
-        "node": ">=0.11.0"
-      }
-    },
-    "node_modules/shellwords": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz",
-      "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
-      "dev": true
-    },
-    "node_modules/signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
-      "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
-      "dev": true
-    },
-    "node_modules/simple-swizzle": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
-      "dev": true,
-      "dependencies": {
-        "is-arrayish": "^0.3.1"
-      }
-    },
-    "node_modules/simple-swizzle/node_modules/is-arrayish": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-      "dev": true
-    },
-    "node_modules/slash": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
-      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
-      "dev": true,
-      "dependencies": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
-      "dev": true,
-      "dependencies": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sockjs": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz",
-      "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=",
-      "dev": true,
-      "dependencies": {
-        "faye-websocket": "^0.10.0",
-        "uuid": "^3.0.1"
-      }
-    },
-    "node_modules/sockjs-client": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.5.tgz?cache=0&sync_timestamp=1596409908572&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.1.5.tgz",
-      "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
-      "dev": true,
-      "dependencies": {
-        "debug": "^2.6.6",
-        "eventsource": "0.1.6",
-        "faye-websocket": "~0.11.0",
-        "inherits": "^2.0.1",
-        "json3": "^3.3.2",
-        "url-parse": "^1.1.8"
-      }
-    },
-    "node_modules/sockjs-client/node_modules/faye-websocket": {
-      "version": "0.11.3",
-      "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz",
-      "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=",
-      "dev": true,
-      "dependencies": {
-        "websocket-driver": ">=0.5.1"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/sort-keys": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
-      "dev": true,
-      "dependencies": {
-        "is-plain-obj": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-list-map": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
-      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=",
-      "dev": true
-    },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-resolve": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
-      "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
-      "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
-      "dev": true,
-      "dependencies": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.4.18",
-      "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz",
-      "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
-      "dev": true,
-      "dependencies": {
-        "source-map": "^0.5.6"
-      }
-    },
-    "node_modules/source-map-support/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-      "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
-      "dev": true
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz",
-      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
-      "dev": true,
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
-      "dev": true
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz?cache=0&sync_timestamp=1589682217985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-expression-parse%2Fdownload%2Fspdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
-      "dev": true,
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz?cache=0&sync_timestamp=1600286627478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.6.tgz",
-      "integrity": "sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4=",
-      "dev": true
-    },
-    "node_modules/spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz",
-      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
-      "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      }
-    },
-    "node_modules/spdy-transport/node_modules/debug": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
-      "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
-      "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/spdy-transport/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-      "dev": true
-    },
-    "node_modules/spdy-transport/node_modules/readable-stream": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-      "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/spdy/node_modules/debug": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
-      "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
-      "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/spdy/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-      "dev": true
-    },
-    "node_modules/split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
-      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
-      "dev": true,
-      "dependencies": {
-        "extend-shallow": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "node_modules/ssri": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
-      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "node_modules/stable": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-      "dev": true
-    },
-    "node_modules/stackframe": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854186823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz",
-      "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
-      "dev": true
-    },
-    "node_modules/static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "dev": true,
-      "dependencies": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/static-extend/node_modules/define-property": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-      "dev": true,
-      "dependencies": {
-        "is-descriptor": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz",
-      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/stream-browserify": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
-      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "~2.0.1",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "node_modules/stream-each": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz",
-      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
-      "dev": true,
-      "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "node_modules/stream-http": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz",
-      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
-      "dev": true,
-      "dependencies": {
-        "builtin-status-codes": "^3.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.3.6",
-        "to-arraybuffer": "^1.0.0",
-        "xtend": "^4.0.0"
-      }
-    },
-    "node_modules/stream-shift": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz",
-      "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=",
-      "dev": true
-    },
-    "node_modules/strict-uri-encode": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
-      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
-      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
-      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
-      "dev": true,
-      "dependencies": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
-      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1596697387823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
-      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
-      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1596697387823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/strip-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz",
-      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-      "dev": true,
-      "dependencies": {
-        "get-stdin": "^4.0.1"
-      },
-      "bin": {
-        "strip-indent": "cli.js"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/stylehacks": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.0.tgz",
-      "integrity": "sha1-ZLMjlRxKJOX8ey7AbBN78y0VXoo=",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "postcss": "^6.0.0",
-        "postcss-selector-parser": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/stylehacks/node_modules/browserslist": {
-      "version": "4.16.6",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-      "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-      "dev": true,
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001219",
-        "colorette": "^1.2.2",
-        "electron-to-chromium": "^1.3.723",
-        "escalade": "^3.1.1",
-        "node-releases": "^1.1.71"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/stylehacks/node_modules/postcss-selector-parser": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-      "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-      "dev": true,
-      "dependencies": {
-        "dot-prop": "^5.2.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
-      "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/svgo": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz",
-      "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
-      "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.",
-      "dev": true,
-      "dependencies": {
-        "coa": "~1.0.1",
-        "colors": "~1.1.2",
-        "csso": "~2.3.1",
-        "js-yaml": "~3.7.0",
-        "mkdirp": "~0.5.1",
-        "sax": "~1.2.1",
-        "whet.extend": "~0.9.9"
-      },
-      "bin": {
-        "svgo": "bin/svgo"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/svgo/node_modules/js-yaml": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
-      "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^2.6.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/tapable": {
-      "version": "0.2.9",
-      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-0.2.9.tgz?cache=0&sync_timestamp=1600381257656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-0.2.9.tgz",
-      "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/throttle-debounce": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
-      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz",
-      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
-      "dev": true,
-      "dependencies": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      }
-    },
-    "node_modules/thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz",
-      "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
-      "dev": true
-    },
-    "node_modules/time-stamp": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/time-stamp/download/time-stamp-2.2.0.tgz",
-      "integrity": "sha1-kX4KZpBWiHkOx7u94EBGJZr4P1c=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz",
-      "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=",
-      "dev": true,
-      "dependencies": {
-        "setimmediate": "^1.0.4"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/timsort": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
-      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
-      "dev": true
-    },
-    "node_modules/tiny-emitter": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
-      "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
-    },
-    "node_modules/to-arraybuffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
-      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-      "dev": true
-    },
-    "node_modules/to-fast-properties": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz",
-      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz",
-      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
-      "dev": true,
-      "dependencies": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
-      "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toidentifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
-      "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/toposort": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
-      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
-      "dev": true
-    },
-    "node_modules/trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/tryer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz",
-      "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
-      "dev": true
-    },
-    "node_modules/tty-browserify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz",
-      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
-      "dev": true
-    },
-    "node_modules/type": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1598016600310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz",
-      "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=",
-      "dev": true
-    },
-    "node_modules/type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
-      "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
-      "dev": true,
-      "dependencies": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz?cache=0&sync_timestamp=1596697411295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray%2Fdownload%2Ftypedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
-      "dev": true
-    },
-    "node_modules/uc.micro": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
-      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
-    },
-    "node_modules/uglify-js": {
-      "version": "3.4.10",
-      "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
-      "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
-      "dev": true,
-      "dependencies": {
-        "commander": "~2.19.0",
-        "source-map": "~0.6.1"
-      },
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/uglify-js/node_modules/commander": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
-      "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
-      "dev": true
-    },
-    "node_modules/uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "dev": true,
-      "optional": true
-    },
-    "node_modules/uglifyjs-webpack-plugin": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.3.0.tgz",
-      "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=",
-      "dev": true,
-      "dependencies": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
-        "schema-utils": "^0.4.5",
-        "serialize-javascript": "^1.4.0",
-        "source-map": "^0.6.1",
-        "uglify-es": "^3.3.4",
-        "webpack-sources": "^1.1.0",
-        "worker-farm": "^1.5.2"
-      },
-      "engines": {
-        "node": ">= 4.8 < 5.0.0 || >= 5.10"
-      },
-      "peerDependencies": {
-        "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
-      }
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-      "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/commander": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.13.0.tgz",
-      "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=",
-      "dev": true
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-      "dev": true
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-      "dev": true
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/schema-utils": {
-      "version": "0.4.7",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-      "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/uglifyjs-webpack-plugin/node_modules/uglify-es": {
-      "version": "3.3.9",
-      "resolved": "https://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.9.tgz",
-      "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=",
-      "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0",
-      "dev": true,
-      "dependencies": {
-        "commander": "~2.13.0",
-        "source-map": "~0.6.1"
-      },
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
-      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has-bigints": "^1.0.1",
-        "has-symbols": "^1.0.2",
-        "which-boxed-primitive": "^1.0.2"
-      }
-    },
-    "node_modules/union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz",
-      "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
-      "dev": true,
-      "dependencies": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/uniq": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
-      "dev": true
-    },
-    "node_modules/uniqs": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz",
-      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
-      "dev": true
-    },
-    "node_modules/unique-filename": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz",
-      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
-      "dev": true,
-      "dependencies": {
-        "unique-slug": "^2.0.0"
-      }
-    },
-    "node_modules/unique-slug": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz",
-      "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4"
-      }
-    },
-    "node_modules/unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/unquote": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
-      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
-      "dev": true
-    },
-    "node_modules/unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "dev": true,
-      "dependencies": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-value": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz",
-      "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-      "dev": true,
-      "dependencies": {
-        "get-value": "^2.0.3",
-        "has-values": "^0.1.4",
-        "isobject": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
-      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-      "dev": true,
-      "dependencies": {
-        "isarray": "1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unset-value/node_modules/has-values": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz",
-      "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/upath": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz",
-      "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=4",
-        "yarn": "*"
-      }
-    },
-    "node_modules/upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz",
-      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
-      "dev": true
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz",
-      "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-      "deprecated": "Please see https://github.com/lydell/urix#deprecated",
-      "dev": true
-    },
-    "node_modules/url": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
-      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-      "dev": true,
-      "dependencies": {
-        "punycode": "1.3.2",
-        "querystring": "0.2.0"
-      }
-    },
-    "node_modules/url-loader": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
-      "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==",
-      "dev": true,
-      "dependencies": {
-        "loader-utils": "^1.0.2",
-        "mime": "1.3.x"
-      },
-      "peerDependencies": {
-        "file-loader": "*"
-      }
-    },
-    "node_modules/url-loader/node_modules/mime": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.3.6.tgz",
-      "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=",
-      "dev": true,
-      "bin": {
-        "mime": "cli.js"
-      }
-    },
-    "node_modules/url-parse": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",
-      "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==",
-      "dev": true,
-      "dependencies": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "node_modules/url/node_modules/punycode": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
-      "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-      "dev": true
-    },
-    "node_modules/use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
-      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/util": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz",
-      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
-      "dev": true,
-      "dependencies": {
-        "inherits": "2.0.3"
-      }
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-      "dev": true
-    },
-    "node_modules/util.promisify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
-      "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.2",
-        "has-symbols": "^1.0.1",
-        "object.getownpropertydescriptors": "^2.1.0"
-      }
-    },
-    "node_modules/util/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
-    },
-    "node_modules/utila": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz",
-      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
-      "dev": true
-    },
-    "node_modules/utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1601826530476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
-      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
-      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
-      "dev": true,
-      "bin": {
-        "uuid": "bin/uuid"
-      }
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
-      "dev": true,
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/vendors": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz",
-      "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=",
-      "dev": true
-    },
-    "node_modules/vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",
-      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
-      "dev": true
-    },
-    "node_modules/vue": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1600441238751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz",
-      "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
-    },
-    "node_modules/vue-baidu-map": {
-      "version": "0.21.22",
-      "resolved": "https://registry.npmjs.org/vue-baidu-map/-/vue-baidu-map-0.21.22.tgz",
-      "integrity": "sha512-WQMPCih4UTh0AZCKKH/OVOYnyAWjfRNeK6BIeoLmscyY5aF8zzlJhz/NOHLb3mdztIpB0Z6aohn4Jd9mfCSjQw==",
-      "dependencies": {
-        "bmaplib.curveline": "^1.0.0",
-        "bmaplib.heatmap": "^1.0.4",
-        "bmaplib.lushu": "^1.0.7",
-        "bmaplib.markerclusterer": "^1.0.13",
-        "markdown-it": "^8.4.0"
-      },
-      "peerDependencies": {
-        "vue": "^2.1.8"
-      }
-    },
-    "node_modules/vue-clipboard2": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
-      "integrity": "sha1-blUft704SImyiw2jsSKJ7WvKSJQ=",
-      "dependencies": {
-        "clipboard": "^2.0.0"
-      }
-    },
-    "node_modules/vue-clipboards": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/vue-clipboards/-/vue-clipboards-1.3.0.tgz",
-      "integrity": "sha512-VMDYHpLQH0EUmqfk9b5XMrkvSu/HjNsLW2EBR4OS6JZHcv/PxmWYdoTBPVlp5eYrhWy07La8nWpRwAh09Mgufw==",
-      "dependencies": {
-        "clipboard": "^1.7.1"
-      }
-    },
-    "node_modules/vue-clipboards/node_modules/clipboard": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
-      "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
-      "dependencies": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      }
-    },
-    "node_modules/vue-contextmenujs": {
-      "version": "1.3.13",
-      "resolved": "https://registry.npmmirror.com/vue-contextmenujs/download/vue-contextmenujs-1.3.13.tgz",
-      "integrity": "sha1-O9rgI8e9QgleeNpCWAACUNUKuO8="
-    },
-    "node_modules/vue-cookies": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/vue-cookies/download/vue-cookies-1.7.4.tgz?cache=0&sync_timestamp=1598941352058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-cookies%2Fdownload%2Fvue-cookies-1.7.4.tgz",
-      "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0="
-    },
-    "node_modules/vue-hot-reload-api": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
-      "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
-      "dev": true
-    },
-    "node_modules/vue-loader": {
-      "version": "13.7.3",
-      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-13.7.3.tgz?cache=0&sync_timestamp=1600850410121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-13.7.3.tgz",
-      "integrity": "sha1-4HRA94IwpjnQCtpNp7ltDp1iA38=",
-      "dev": true,
-      "dependencies": {
-        "consolidate": "^0.14.0",
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.1.0",
-        "lru-cache": "^4.1.1",
-        "postcss": "^6.0.8",
-        "postcss-load-config": "^1.1.0",
-        "postcss-selector-parser": "^2.0.0",
-        "prettier": "^1.7.0",
-        "resolve": "^1.4.0",
-        "source-map": "^0.6.1",
-        "vue-hot-reload-api": "^2.2.0",
-        "vue-style-loader": "^3.0.0",
-        "vue-template-es2015-compiler": "^1.6.0"
-      },
-      "peerDependencies": {
-        "css-loader": "*",
-        "vue-template-compiler": "^2.0.0"
-      }
-    },
-    "node_modules/vue-loader/node_modules/cosmiconfig": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-      "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-      "dev": true,
-      "dependencies": {
-        "is-directory": "^0.3.1",
-        "js-yaml": "^3.4.3",
-        "minimist": "^1.2.0",
-        "object-assign": "^4.1.0",
-        "os-homedir": "^1.0.1",
-        "parse-json": "^2.2.0",
-        "require-from-string": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/vue-loader/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/vue-loader/node_modules/postcss-load-config": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-1.2.0.tgz?cache=0&sync_timestamp=1601607668112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-1.2.0.tgz",
-      "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^2.1.0",
-        "object-assign": "^4.1.0",
-        "postcss-load-options": "^1.2.0",
-        "postcss-load-plugins": "^2.3.0"
-      },
-      "engines": {
-        "node": ">=0.12"
-      }
-    },
-    "node_modules/vue-router": {
-      "version": "3.4.6",
-      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.6.tgz?cache=0&sync_timestamp=1602076636169&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.4.6.tgz",
-      "integrity": "sha1-972iyaQ9OYN2IcmgK6d4n12qJLI="
-    },
-    "node_modules/vue-style-loader": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-3.1.2.tgz",
-      "integrity": "sha1-a2atNJmPyVIMLx5NX6QJFkHBWXo=",
-      "dev": true,
-      "dependencies": {
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.0.2"
-      }
-    },
-    "node_modules/vue-template-compiler": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1597927391993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz",
-      "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
-      "dev": true,
-      "dependencies": {
-        "de-indent": "^1.0.2",
-        "he": "^1.1.0"
-      }
-    },
-    "node_modules/vue-template-es2015-compiler": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
-      "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
-      "dev": true
-    },
-    "node_modules/watchpack": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz?cache=0&sync_timestamp=1600385388649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.4.tgz",
-      "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0"
-      },
-      "optionalDependencies": {
-        "chokidar": "^3.4.1",
-        "watchpack-chokidar2": "^2.0.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz",
-      "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "chokidar": "^2.1.8"
-      },
-      "engines": {
-        "node": "<8.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "remove-trailing-separator": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/binary-extensions": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
-      "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
-      "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
-      "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
-      },
-      "optionalDependencies": {
-        "fsevents": "^1.2.7"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/fsevents": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-      "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
-      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "dependencies": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-extglob": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "binary-extensions": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/watchpack-chokidar2/node_modules/to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz",
-      "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
-      "dev": true,
-      "dependencies": {
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "node_modules/webpack": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
-      "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^5.0.0",
-        "acorn-dynamic-import": "^2.0.0",
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0",
-        "async": "^2.1.2",
-        "enhanced-resolve": "^3.4.0",
-        "escope": "^3.6.0",
-        "interpret": "^1.0.0",
-        "json-loader": "^0.5.4",
-        "json5": "^0.5.1",
-        "loader-runner": "^2.3.0",
-        "loader-utils": "^1.1.0",
-        "memory-fs": "~0.4.1",
-        "mkdirp": "~0.5.0",
-        "node-libs-browser": "^2.0.0",
-        "source-map": "^0.5.3",
-        "supports-color": "^4.2.1",
-        "tapable": "^0.2.7",
-        "uglifyjs-webpack-plugin": "^0.4.6",
-        "watchpack": "^1.4.0",
-        "webpack-sources": "^1.0.1",
-        "yargs": "^8.0.2"
-      },
-      "bin": {
-        "webpack": "bin/webpack.js"
-      },
-      "engines": {
-        "node": ">=4.3.0 <5.0.0 || >=5.10"
-      }
-    },
-    "node_modules/webpack-bundle-analyzer": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz",
-      "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^5.3.0",
-        "bfj-node4": "^5.2.0",
-        "chalk": "^2.3.0",
-        "commander": "^2.13.0",
-        "ejs": "^2.5.7",
-        "express": "^4.16.2",
-        "filesize": "^3.5.11",
-        "gzip-size": "^4.1.0",
-        "lodash": "^4.17.4",
-        "mkdirp": "^0.5.1",
-        "opener": "^1.4.3",
-        "ws": "^4.0.0"
-      },
-      "bin": {
-        "webpack-bundle-analyzer": "lib/bin/analyzer.js"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/webpack-dev-middleware": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-1.12.2.tgz?cache=0&sync_timestamp=1594744509096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-1.12.2.tgz",
-      "integrity": "sha1-+PwRIM47T8VoDO7LQ9d3lmshEF4=",
-      "dev": true,
-      "dependencies": {
-        "memory-fs": "~0.4.1",
-        "mime": "^1.5.0",
-        "path-is-absolute": "^1.0.0",
-        "range-parser": "^1.0.3",
-        "time-stamp": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "peerDependencies": {
-        "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0"
-      }
-    },
-    "node_modules/webpack-dev-server": {
-      "version": "2.11.5",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz",
-      "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==",
-      "dev": true,
-      "dependencies": {
-        "ansi-html": "0.0.7",
-        "array-includes": "^3.0.3",
-        "bonjour": "^3.5.0",
-        "chokidar": "^2.1.2",
-        "compression": "^1.7.3",
-        "connect-history-api-fallback": "^1.3.0",
-        "debug": "^3.1.0",
-        "del": "^3.0.0",
-        "express": "^4.16.2",
-        "html-entities": "^1.2.0",
-        "http-proxy-middleware": "^0.19.1",
-        "import-local": "^1.0.0",
-        "internal-ip": "1.2.0",
-        "ip": "^1.1.5",
-        "killable": "^1.0.0",
-        "loglevel": "^1.4.1",
-        "opn": "^5.1.0",
-        "portfinder": "^1.0.9",
-        "selfsigned": "^1.9.1",
-        "serve-index": "^1.9.1",
-        "sockjs": "0.3.19",
-        "sockjs-client": "1.1.5",
-        "spdy": "^4.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^5.1.0",
-        "webpack-dev-middleware": "1.12.2",
-        "yargs": "6.6.0"
-      },
-      "bin": {
-        "webpack-dev-server": "bin/webpack-dev-server.js"
-      },
-      "engines": {
-        "node": ">=4.7"
-      },
-      "peerDependencies": {
-        "webpack": "^2.2.0 || ^3.0.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-      "dev": true,
-      "dependencies": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "dev": true,
-      "dependencies": {
-        "remove-trailing-separator": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/binary-extensions": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
-      "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-      "dev": true,
-      "dependencies": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/camelcase": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz",
-      "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
-      "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
-      "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
-      "dev": true,
-      "dependencies": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
-      },
-      "optionalDependencies": {
-        "fsevents": "^1.2.7"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/cliui": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wrap-ansi": "^2.0.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/debug": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz",
-      "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
-      "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/extend-shallow": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-      "dev": true,
-      "dependencies": {
-        "is-extendable": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "dev": true,
-      "dependencies": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/find-up": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
-      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-      "dev": true,
-      "dependencies": {
-        "path-exists": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/fsevents": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-      "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
-      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "dependencies": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "dev": true,
-      "dependencies": {
-        "binary-extensions": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
-      "dependencies": {
-        "number-is-nan": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/load-json-file": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
-      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0",
-        "strip-bom": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-      "dev": true
-    },
-    "node_modules/webpack-dev-server/node_modules/os-locale": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "dev": true,
-      "dependencies": {
-        "lcid": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/path-exists": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
-      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-      "dev": true,
-      "dependencies": {
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/path-type": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
-      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/read-pkg": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
-      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-      "dev": true,
-      "dependencies": {
-        "load-json-file": "^1.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/read-pkg-up": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
-      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^1.0.0",
-        "read-pkg": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
-      "dependencies": {
-        "code-point-at": "^1.0.0",
-        "is-fullwidth-code-point": "^1.0.0",
-        "strip-ansi": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/strip-bom": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
-      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-      "dev": true,
-      "dependencies": {
-        "is-utf8": "^0.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/which-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz",
-      "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-      "dev": true
-    },
-    "node_modules/webpack-dev-server/node_modules/y18n": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-      "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-      "dev": true
-    },
-    "node_modules/webpack-dev-server/node_modules/yargs": {
-      "version": "6.6.0",
-      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-6.6.0.tgz",
-      "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^3.0.0",
-        "cliui": "^3.2.0",
-        "decamelize": "^1.1.1",
-        "get-caller-file": "^1.0.1",
-        "os-locale": "^1.4.0",
-        "read-pkg-up": "^1.0.1",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^1.0.1",
-        "set-blocking": "^2.0.0",
-        "string-width": "^1.0.2",
-        "which-module": "^1.0.0",
-        "y18n": "^3.2.1",
-        "yargs-parser": "^4.2.0"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/yargs-parser": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-4.2.1.tgz",
-      "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^3.0.0"
-      }
-    },
-    "node_modules/webpack-merge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1602063025787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz",
-      "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.15"
-      }
-    },
-    "node_modules/webpack-sources": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz",
-      "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
-      "dev": true,
-      "dependencies": {
-        "source-list-map": "^2.0.0",
-        "source-map": "~0.6.1"
-      }
-    },
-    "node_modules/webpack/node_modules/ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-      "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "node_modules/webpack/node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-      "dev": true
-    },
-    "node_modules/webpack/node_modules/has-flag": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz",
-      "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-      "dev": true
-    },
-    "node_modules/webpack/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/webpack/node_modules/supports-color": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-4.5.0.tgz",
-      "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/webpack/node_modules/uglify-js": {
-      "version": "2.8.29",
-      "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz",
-      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
-      "dev": true,
-      "dependencies": {
-        "source-map": "~0.5.1",
-        "yargs": "~3.10.0"
-      },
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      },
-      "optionalDependencies": {
-        "uglify-to-browserify": "~1.0.0"
-      }
-    },
-    "node_modules/webpack/node_modules/uglify-js/node_modules/yargs": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz",
-      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^1.0.2",
-        "cliui": "^2.1.0",
-        "decamelize": "^1.0.0",
-        "window-size": "0.1.0"
-      }
-    },
-    "node_modules/webpack/node_modules/uglifyjs-webpack-plugin": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-0.4.6.tgz",
-      "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
-      "dev": true,
-      "hasInstallScript": true,
-      "dependencies": {
-        "source-map": "^0.5.6",
-        "uglify-js": "^2.8.29",
-        "webpack-sources": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4.3.0 <5.0.0 || >=5.10"
-      },
-      "peerDependencies": {
-        "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0"
-      }
-    },
-    "node_modules/websocket-driver": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.7.4.tgz",
-      "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
-      "dev": true,
-      "dependencies": {
-        "http-parser-js": ">=0.5.1",
-        "safe-buffer": ">=5.1.0",
-        "websocket-extensions": ">=0.1.1"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/websocket-extensions": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/whet.extend": {
-      "version": "0.9.9",
-      "resolved": "https://registry.npm.taobao.org/whet.extend/download/whet.extend-0.9.9.tgz",
-      "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
-      "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "which": "bin/which"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      }
-    },
-    "node_modules/which-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-      "dev": true
-    },
-    "node_modules/window-size": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
-      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/wordwrap": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
-      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/worker-farm": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz",
-      "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=",
-      "dev": true,
-      "dependencies": {
-        "errno": "~0.1.7"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
-      "dependencies": {
-        "number-is-nan": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi/node_modules/string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
-      "dependencies": {
-        "code-point-at": "^1.0.0",
-        "is-fullwidth-code-point": "^1.0.0",
-        "strip-ansi": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "node_modules/ws": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/ws/download/ws-4.1.0.tgz?cache=0&sync_timestamp=1593925601875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-4.1.0.tgz",
-      "integrity": "sha1-qXm119TaaL9U7+BAiWfDJIaacok=",
-      "dev": true,
-      "dependencies": {
-        "async-limiter": "~1.0.0",
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1596697437792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz",
-      "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
-    "node_modules/xxhashjs": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/xxhashjs/download/xxhashjs-0.2.2.tgz",
-      "integrity": "sha1-imJRVnYhocRqWuIE2gJJx/jKqdg=",
-      "dev": true,
-      "dependencies": {
-        "cuint": "^0.2.2"
-      }
-    },
-    "node_modules/y18n": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
-      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
-      "dev": true
-    },
-    "node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-      "dev": true
-    },
-    "node_modules/yargs": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz",
-      "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^4.1.0",
-        "cliui": "^3.2.0",
-        "decamelize": "^1.1.1",
-        "get-caller-file": "^1.0.1",
-        "os-locale": "^2.0.0",
-        "read-pkg-up": "^2.0.0",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^1.0.1",
-        "set-blocking": "^2.0.0",
-        "string-width": "^2.0.0",
-        "which-module": "^2.0.0",
-        "y18n": "^3.2.1",
-        "yargs-parser": "^7.0.0"
-      }
-    },
-    "node_modules/yargs-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-7.0.0.tgz",
-      "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^4.1.0"
-      }
-    },
-    "node_modules/yargs-parser/node_modules/camelcase": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
-      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/yargs/node_modules/camelcase": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
-      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/yargs/node_modules/cliui": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wrap-ansi": "^2.0.0"
-      }
-    },
-    "node_modules/yargs/node_modules/cliui/node_modules/string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
-      "dependencies": {
-        "code-point-at": "^1.0.0",
-        "is-fullwidth-code-point": "^1.0.0",
-        "strip-ansi": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/yargs/node_modules/is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
-      "dependencies": {
-        "number-is-nan": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/yargs/node_modules/y18n": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-      "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-      "dev": true
-    },
-    "node_modules/zrender": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz",
-      "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY="
-    }
-  },
-  "dependencies": {
-    "@types/q": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
-      "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",
-      "dev": true
-    },
-    "accepts": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
-      "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
-      "dev": true,
-      "requires": {
-        "mime-types": "~2.1.24",
-        "negotiator": "0.6.2"
-      }
-    },
-    "acorn": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz",
-      "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
-      "dev": true
-    },
-    "acorn-dynamic-import": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz",
-      "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
-      "dev": true,
-      "requires": {
-        "acorn": "^4.0.3"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "4.0.13",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz",
-          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
-          "dev": true
-        }
-      }
-    },
-    "ajv": {
-      "version": "5.5.2",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-5.5.2.tgz",
-      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-      "dev": true,
-      "requires": {
-        "co": "^4.6.0",
-        "fast-deep-equal": "^1.0.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.3.0"
-      }
-    },
-    "ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
-      "dev": true,
-      "requires": {}
-    },
-    "align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2",
-        "longest": "^1.0.1",
-        "repeat-string": "^1.5.2"
-      }
-    },
-    "alphanum-sort": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
-      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
-      "dev": true
-    },
-    "ansi-html": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz",
-      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
-      "dev": true
-    },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true
-    },
-    "ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
-      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-      "requires": {
-        "color-convert": "^1.9.0"
-      }
-    },
-    "anymatch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz",
-      "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      }
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz",
-      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
-      "dev": true
-    },
-    "argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
-      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
-      "requires": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
-      "dev": true
-    },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz",
-      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
-      "dev": true
-    },
-    "arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
-      "dev": true
-    },
-    "array-find-index": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
-      "dev": true
-    },
-    "array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
-      "dev": true
-    },
-    "array-includes": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz",
-      "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "is-string": "^1.0.5"
-      }
-    },
-    "array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "dev": true,
-      "requires": {
-        "array-uniq": "^1.0.1"
-      }
-    },
-    "array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-      "dev": true
-    },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
-      "dev": true
-    },
-    "asn1.js": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
-      "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "safer-buffer": "^2.1.0"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
-      "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.1.1",
-        "util": "0.10.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
-          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-          "dev": true
-        },
-        "util": {
-          "version": "0.10.3",
-          "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz",
-          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-          "dev": true,
-          "requires": {
-            "inherits": "2.0.1"
-          }
-        }
-      }
-    },
-    "assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
-      "dev": true
-    },
-    "async": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz",
-      "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.14"
-      }
-    },
-    "async-each": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz",
-      "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
-      "dev": true
-    },
-    "async-limiter": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
-      "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
-      "dev": true
-    },
-    "async-validator": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
-      "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
-      "requires": {
-        "babel-runtime": "6.x"
-      }
-    },
-    "atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
-      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
-      "dev": true
-    },
-    "autoprefixer": {
-      "version": "7.2.6",
-      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-7.2.6.tgz?cache=0&sync_timestamp=1601167517316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-7.2.6.tgz",
-      "integrity": "sha1-JWZy+G98c12oScTwfQCKuwVgZ9w=",
-      "dev": true,
-      "requires": {
-        "browserslist": "^2.11.3",
-        "caniuse-lite": "^1.0.30000805",
-        "normalize-range": "^0.1.2",
-        "num2fraction": "^1.2.2",
-        "postcss": "^6.0.17",
-        "postcss-value-parser": "^3.2.3"
-      }
-    },
-    "axios": {
-      "version": "0.24.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
-      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
-      "requires": {
-        "follow-redirects": "^1.14.4"
-      },
-      "dependencies": {
-        "follow-redirects": {
-          "version": "1.14.6",
-          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
-          "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A=="
-        }
-      }
-    },
-    "babel-code-frame": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz",
-      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
-      "dev": true,
-      "requires": {
-        "chalk": "^1.1.3",
-        "esutils": "^2.0.2",
-        "js-tokens": "^3.0.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
-      }
-    },
-    "babel-core": {
-      "version": "6.26.3",
-      "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz",
-      "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "babel-generator": "^6.26.0",
-        "babel-helpers": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-register": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "convert-source-map": "^1.5.1",
-        "debug": "^2.6.9",
-        "json5": "^0.5.1",
-        "lodash": "^4.17.4",
-        "minimatch": "^3.0.4",
-        "path-is-absolute": "^1.0.1",
-        "private": "^0.1.8",
-        "slash": "^1.0.0",
-        "source-map": "^0.5.7"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "babel-generator": {
-      "version": "6.26.1",
-      "resolved": "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz",
-      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
-      "dev": true,
-      "requires": {
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "detect-indent": "^4.0.0",
-        "jsesc": "^1.3.0",
-        "lodash": "^4.17.4",
-        "source-map": "^0.5.7",
-        "trim-right": "^1.0.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "babel-helper-bindify-decorators": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-bindify-decorators/download/babel-helper-bindify-decorators-6.24.1.tgz",
-      "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-builder-binary-assignment-operator-visitor": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
-      "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
-      "dev": true,
-      "requires": {
-        "babel-helper-explode-assignable-expression": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-call-delegate": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz",
-      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
-      "dev": true,
-      "requires": {
-        "babel-helper-hoist-variables": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-define-map": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz",
-      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-helper-explode-assignable-expression": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz",
-      "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-explode-class": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-explode-class/download/babel-helper-explode-class-6.24.1.tgz",
-      "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
-      "dev": true,
-      "requires": {
-        "babel-helper-bindify-decorators": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz",
-      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
-      "dev": true,
-      "requires": {
-        "babel-helper-get-function-arity": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-get-function-arity": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz",
-      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-hoist-variables": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz",
-      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-optimise-call-expression": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz",
-      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-regex": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz",
-      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-helper-remap-async-to-generator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz",
-      "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-replace-supers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz",
-      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
-      "dev": true,
-      "requires": {
-        "babel-helper-optimise-call-expression": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-helper-vue-jsx-merge-props": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
-    },
-    "babel-helpers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz",
-      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-loader": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-7.1.5.tgz",
-      "integrity": "sha1-4+4M1zlKpVfgE7AtPkkr/QeqbWg=",
-      "dev": true,
-      "requires": {
-        "find-cache-dir": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "mkdirp": "^0.5.1"
-      }
-    },
-    "babel-messages": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz",
-      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-check-es2015-constants": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz",
-      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-syntax-async-functions": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz",
-      "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
-      "dev": true
-    },
-    "babel-plugin-syntax-async-generators": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-generators/download/babel-plugin-syntax-async-generators-6.13.0.tgz",
-      "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
-      "dev": true
-    },
-    "babel-plugin-syntax-class-properties": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz",
-      "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
-      "dev": true
-    },
-    "babel-plugin-syntax-decorators": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz",
-      "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
-      "dev": true
-    },
-    "babel-plugin-syntax-dynamic-import": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
-      "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
-      "dev": true
-    },
-    "babel-plugin-syntax-exponentiation-operator": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
-      "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
-      "dev": true
-    },
-    "babel-plugin-syntax-jsx": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz",
-      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
-      "dev": true
-    },
-    "babel-plugin-syntax-object-rest-spread": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
-      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
-      "dev": true
-    },
-    "babel-plugin-syntax-trailing-function-commas": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
-      "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
-      "dev": true
-    },
-    "babel-plugin-transform-async-generator-functions": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-generator-functions/download/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
-      "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
-      "dev": true,
-      "requires": {
-        "babel-helper-remap-async-to-generator": "^6.24.1",
-        "babel-plugin-syntax-async-generators": "^6.5.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-async-to-generator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz",
-      "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
-      "dev": true,
-      "requires": {
-        "babel-helper-remap-async-to-generator": "^6.24.1",
-        "babel-plugin-syntax-async-functions": "^6.8.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-class-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz",
-      "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-plugin-syntax-class-properties": "^6.8.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-decorators": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-decorators/download/babel-plugin-transform-decorators-6.24.1.tgz",
-      "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
-      "dev": true,
-      "requires": {
-        "babel-helper-explode-class": "^6.24.1",
-        "babel-plugin-syntax-decorators": "^6.13.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-arrow-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
-      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-block-scoped-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
-      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-block-scoping": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
-      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-plugin-transform-es2015-classes": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz",
-      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
-      "dev": true,
-      "requires": {
-        "babel-helper-define-map": "^6.24.1",
-        "babel-helper-function-name": "^6.24.1",
-        "babel-helper-optimise-call-expression": "^6.24.1",
-        "babel-helper-replace-supers": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-computed-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
-      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-destructuring": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
-      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-duplicate-keys": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
-      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-for-of": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
-      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
-      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz",
-      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-amd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
-      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-commonjs": {
-      "version": "6.26.2",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
-      "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-strict-mode": "^6.24.1",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-types": "^6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-systemjs": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
-      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
-      "dev": true,
-      "requires": {
-        "babel-helper-hoist-variables": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-umd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
-      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-object-super": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
-      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
-      "dev": true,
-      "requires": {
-        "babel-helper-replace-supers": "^6.24.1",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-parameters": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
-      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
-      "dev": true,
-      "requires": {
-        "babel-helper-call-delegate": "^6.24.1",
-        "babel-helper-get-function-arity": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1",
-        "babel-traverse": "^6.24.1",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-shorthand-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz?cache=0&sync_timestamp=1589682670915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-es2015-shorthand-properties%2Fdownload%2Fbabel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
-      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-spread": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz",
-      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-sticky-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
-      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
-      "dev": true,
-      "requires": {
-        "babel-helper-regex": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-es2015-template-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
-      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-typeof-symbol": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
-      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-es2015-unicode-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
-      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
-      "dev": true,
-      "requires": {
-        "babel-helper-regex": "^6.24.1",
-        "babel-runtime": "^6.22.0",
-        "regexpu-core": "^2.0.0"
-      }
-    },
-    "babel-plugin-transform-exponentiation-operator": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
-      "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
-      "dev": true,
-      "requires": {
-        "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
-        "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-object-rest-spread": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
-      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
-        "babel-runtime": "^6.26.0"
-      }
-    },
-    "babel-plugin-transform-regenerator": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz",
-      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
-      "dev": true,
-      "requires": {
-        "regenerator-transform": "^0.10.0"
-      }
-    },
-    "babel-plugin-transform-runtime": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz",
-      "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
-    },
-    "babel-plugin-transform-strict-mode": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz",
-      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-plugin-transform-vue-jsx": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-3.7.0.tgz",
-      "integrity": "sha1-1ASS5mkqNrWU9+mhko9D6Wl0CWA=",
-      "dev": true,
-      "requires": {
-        "esutils": "^2.0.2"
-      }
-    },
-    "babel-preset-env": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-env/download/babel-preset-env-1.7.0.tgz?cache=0&sync_timestamp=1591204557603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-env%2Fdownload%2Fbabel-preset-env-1.7.0.tgz",
-      "integrity": "sha1-3qefpOvriDzTXasH4mDBycBN93o=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-check-es2015-constants": "^6.22.0",
-        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
-        "babel-plugin-transform-async-to-generator": "^6.22.0",
-        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
-        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
-        "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
-        "babel-plugin-transform-es2015-classes": "^6.23.0",
-        "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
-        "babel-plugin-transform-es2015-destructuring": "^6.23.0",
-        "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
-        "babel-plugin-transform-es2015-for-of": "^6.23.0",
-        "babel-plugin-transform-es2015-function-name": "^6.22.0",
-        "babel-plugin-transform-es2015-literals": "^6.22.0",
-        "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
-        "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
-        "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
-        "babel-plugin-transform-es2015-object-super": "^6.22.0",
-        "babel-plugin-transform-es2015-parameters": "^6.23.0",
-        "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
-        "babel-plugin-transform-es2015-spread": "^6.22.0",
-        "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
-        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
-        "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
-        "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
-        "babel-plugin-transform-exponentiation-operator": "^6.22.0",
-        "babel-plugin-transform-regenerator": "^6.22.0",
-        "browserslist": "^3.2.6",
-        "invariant": "^2.2.2",
-        "semver": "^5.3.0"
-      },
-      "dependencies": {
-        "browserslist": {
-          "version": "3.2.8",
-          "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz",
-          "integrity": "sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y=",
-          "dev": true,
-          "requires": {
-            "caniuse-lite": "^1.0.30000844",
-            "electron-to-chromium": "^1.3.47"
-          }
-        }
-      }
-    },
-    "babel-preset-stage-2": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-stage-2/download/babel-preset-stage-2-6.24.1.tgz",
-      "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-syntax-dynamic-import": "^6.18.0",
-        "babel-plugin-transform-class-properties": "^6.24.1",
-        "babel-plugin-transform-decorators": "^6.24.1",
-        "babel-preset-stage-3": "^6.24.1"
-      }
-    },
-    "babel-preset-stage-3": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-stage-3/download/babel-preset-stage-3-6.24.1.tgz",
-      "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
-        "babel-plugin-transform-async-generator-functions": "^6.24.1",
-        "babel-plugin-transform-async-to-generator": "^6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "^6.24.1",
-        "babel-plugin-transform-object-rest-spread": "^6.22.0"
-      }
-    },
-    "babel-register": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz",
-      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
-      "dev": true,
-      "requires": {
-        "babel-core": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "core-js": "^2.5.0",
-        "home-or-tmp": "^2.0.0",
-        "lodash": "^4.17.4",
-        "mkdirp": "^0.5.1",
-        "source-map-support": "^0.4.15"
-      }
-    },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "requires": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      }
-    },
-    "babel-template": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz",
-      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-traverse": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz",
-      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "debug": "^2.6.8",
-        "globals": "^9.18.0",
-        "invariant": "^2.2.2",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-types": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz",
-      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.4",
-        "to-fast-properties": "^1.0.3"
-      }
-    },
-    "babylon": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz",
-      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
-      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
-      "dev": true,
-      "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        }
-      }
-    },
-    "base64-js": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz",
-      "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=",
-      "dev": true
-    },
-    "batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
-      "dev": true
-    },
-    "bfj-node4": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npm.taobao.org/bfj-node4/download/bfj-node4-5.3.1.tgz",
-      "integrity": "sha1-4j2LJwV/HQIU/FYRQq2duZjyaDA=",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.5.1",
-        "check-types": "^7.3.0",
-        "tryer": "^1.0.0"
-      }
-    },
-    "big.js": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
-      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
-      "dev": true
-    },
-    "binary-extensions": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz",
-      "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=",
-      "dev": true,
-      "optional": true
-    },
-    "bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
-      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
-    "bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
-      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
-      "dev": true
-    },
-    "bmaplib.curveline": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz",
-      "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q=="
-    },
-    "bmaplib.heatmap": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz",
-      "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q=="
-    },
-    "bmaplib.lushu": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz",
-      "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w=="
-    },
-    "bmaplib.markerclusterer": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz",
-      "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==",
-      "requires": {
-        "bmaplib.texticonoverlay": "^1.0.2"
-      }
-    },
-    "bmaplib.texticonoverlay": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz",
-      "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg=="
-    },
-    "bn.js": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz",
-      "integrity": "sha1-vsoAVAj2Quvr6oCwQrTRjSrA7ms=",
-      "dev": true
-    },
-    "body-parser": {
-      "version": "1.19.0",
-      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz",
-      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
-      "dev": true,
-      "requires": {
-        "bytes": "3.1.0",
-        "content-type": "~1.0.4",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "on-finished": "~2.3.0",
-        "qs": "6.7.0",
-        "raw-body": "2.4.0",
-        "type-is": "~1.6.17"
-      }
-    },
-    "bonjour": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
-      "dev": true,
-      "requires": {
-        "array-flatten": "^2.1.0",
-        "deep-equal": "^1.0.1",
-        "dns-equal": "^1.0.0",
-        "dns-txt": "^2.0.2",
-        "multicast-dns": "^6.0.1",
-        "multicast-dns-service-types": "^1.1.0"
-      },
-      "dependencies": {
-        "array-flatten": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz",
-          "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
-          "dev": true
-        }
-      }
-    },
-    "boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-      "dev": true
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898201980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
-      "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "fill-range": "^7.0.1"
-      }
-    },
-    "brorand": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz",
-      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
-      "dev": true
-    },
-    "browserify-aes": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
-      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
-      "dev": true,
-      "requires": {
-        "buffer-xor": "^1.0.3",
-        "cipher-base": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.3",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "browserify-cipher": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
-      "dev": true,
-      "requires": {
-        "browserify-aes": "^1.0.4",
-        "browserify-des": "^1.0.0",
-        "evp_bytestokey": "^1.0.0"
-      }
-    },
-    "browserify-des": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
-      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
-      "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "des.js": "^1.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      }
-    },
-    "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "randombytes": "^2.0.1"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "browserify-sign": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557809886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz",
-      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^5.1.1",
-        "browserify-rsa": "^4.0.1",
-        "create-hash": "^1.2.0",
-        "create-hmac": "^1.1.7",
-        "elliptic": "^6.5.3",
-        "inherits": "^2.0.4",
-        "parse-asn1": "^5.1.5",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
-          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
-          "dev": true
-        }
-      }
-    },
-    "browserify-zlib": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
-      "dev": true,
-      "requires": {
-        "pako": "~1.0.5"
-      }
-    },
-    "browserslist": {
-      "version": "2.11.3",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-2.11.3.tgz",
-      "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=",
-      "dev": true,
-      "requires": {
-        "caniuse-lite": "^1.0.30000792",
-        "electron-to-chromium": "^1.3.30"
-      }
-    },
-    "buffer": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz",
-      "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
-      "dev": true,
-      "requires": {
-        "base64-js": "^1.0.2",
-        "ieee754": "^1.1.4",
-        "isarray": "^1.0.0"
-      }
-    },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
-      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
-      "dev": true
-    },
-    "buffer-indexof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
-      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
-      "dev": true
-    },
-    "buffer-xor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
-      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-      "dev": true
-    },
-    "builtin-status-codes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-      "dev": true
-    },
-    "bytes": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz",
-      "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
-      "dev": true
-    },
-    "cacache": {
-      "version": "10.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
-      "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.5.1",
-        "chownr": "^1.0.1",
-        "glob": "^7.1.2",
-        "graceful-fs": "^4.1.11",
-        "lru-cache": "^4.1.1",
-        "mississippi": "^2.0.0",
-        "mkdirp": "^0.5.1",
-        "move-concurrently": "^1.0.1",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.2",
-        "ssri": "^5.2.4",
-        "unique-filename": "^1.1.0",
-        "y18n": "^4.0.0"
-      }
-    },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz",
-      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
-      "dev": true,
-      "requires": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      }
-    },
-    "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      }
-    },
-    "caller-callsite": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz",
-      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
-      "dev": true,
-      "requires": {
-        "callsites": "^2.0.0"
-      }
-    },
-    "caller-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz",
-      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
-      "dev": true,
-      "requires": {
-        "caller-callsite": "^2.0.0"
-      }
-    },
-    "callsites": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
-      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-      "dev": true
-    },
-    "camel-case": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz",
-      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.1.1"
-      }
-    },
-    "camelcase": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz",
-      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-      "dev": true
-    },
-    "camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-      "dev": true,
-      "requires": {
-        "camelcase": "^2.0.0",
-        "map-obj": "^1.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-          "dev": true
-        }
-      }
-    },
-    "caniuse-api": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-1.6.1.tgz",
-      "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
-      "dev": true,
-      "requires": {
-        "browserslist": "^1.3.6",
-        "caniuse-db": "^1.0.30000529",
-        "lodash.memoize": "^4.1.2",
-        "lodash.uniq": "^4.5.0"
-      },
-      "dependencies": {
-        "browserslist": {
-          "version": "1.7.7",
-          "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-          "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-          "dev": true,
-          "requires": {
-            "caniuse-db": "^1.0.30000639",
-            "electron-to-chromium": "^1.2.7"
-          }
-        }
-      }
-    },
-    "caniuse-db": {
-      "version": "1.0.30001244",
-      "resolved": "https://registry.nlark.com/caniuse-db/download/caniuse-db-1.0.30001244.tgz?cache=0&sync_timestamp=1626154539434&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001244.tgz",
-      "integrity": "sha1-pt/zJHNkjfCwrg+Z2YeXrft89Fk=",
-      "dev": true
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001230",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz",
-      "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==",
-      "dev": true
-    },
-    "center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "dev": true,
-      "requires": {
-        "align-text": "^0.1.3",
-        "lazy-cache": "^1.0.3"
-      }
-    },
-    "chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
-      "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      }
-    },
-    "check-types": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-7.4.0.tgz",
-      "integrity": "sha1-A3jsG5YW7HH3dJMaPGUW+tjBUvQ=",
-      "dev": true
-    },
-    "chokidar": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz",
-      "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "anymatch": "~3.1.1",
-        "braces": "~3.0.2",
-        "fsevents": "~2.1.2",
-        "glob-parent": "~5.1.0",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.4.0"
-      }
-    },
-    "chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz",
-      "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
-      "dev": true
-    },
-    "cipher-base": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
-      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "clap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npm.taobao.org/clap/download/clap-1.2.3.tgz",
-      "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
-      "dev": true,
-      "requires": {
-        "chalk": "^1.1.3"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
-      }
-    },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
-      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
-      "dev": true,
-      "requires": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "clean-css": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz",
-      "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
-      "dev": true,
-      "requires": {
-        "source-map": "~0.6.0"
-      }
-    },
-    "cli-cursor": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz",
-      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
-      "dev": true,
-      "requires": {
-        "restore-cursor": "^2.0.0"
-      }
-    },
-    "cli-spinners": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz",
-      "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=",
-      "dev": true
-    },
-    "clipboard": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.6.tgz",
-      "integrity": "sha1-UpISlu7A/fd+rRdJQhshyWhkc3Y=",
-      "requires": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      }
-    },
-    "cliui": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-2.1.0.tgz",
-      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-      "dev": true,
-      "requires": {
-        "center-align": "^0.1.1",
-        "right-align": "^0.1.1",
-        "wordwrap": "0.0.2"
-      }
-    },
-    "clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz",
-      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-      "dev": true
-    },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "coa": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/coa/download/coa-1.0.4.tgz",
-      "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
-      "dev": true,
-      "requires": {
-        "q": "^1.1.2"
-      }
-    },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true
-    },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "dev": true,
-      "requires": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      }
-    },
-    "color": {
-      "version": "0.11.4",
-      "resolved": "https://registry.npm.taobao.org/color/download/color-0.11.4.tgz",
-      "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
-      "dev": true,
-      "requires": {
-        "clone": "^1.0.2",
-        "color-convert": "^1.3.0",
-        "color-string": "^0.3.0"
-      }
-    },
-    "color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
-      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
-      "requires": {
-        "color-name": "1.1.3"
-      }
-    },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
-    "color-string": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-0.3.0.tgz?cache=0&sync_timestamp=1602228058149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-string%2Fdownload%2Fcolor-string-0.3.0.tgz",
-      "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
-      "dev": true,
-      "requires": {
-        "color-name": "^1.0.0"
-      }
-    },
-    "colorette": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
-      "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
-      "dev": true
-    },
-    "colormin": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/colormin/download/colormin-1.1.2.tgz",
-      "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
-      "dev": true,
-      "requires": {
-        "color": "^0.11.0",
-        "css-color-names": "0.0.4",
-        "has": "^1.0.1"
-      }
-    },
-    "colors": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz?cache=0&sync_timestamp=1589682043437&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolors%2Fdownload%2Fcolors-1.1.2.tgz",
-      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
-      "dev": true
-    },
-    "commander": {
-      "version": "2.17.1",
-      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
-      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
-      "dev": true
-    },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-      "dev": true
-    },
-    "component-emitter": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
-      "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
-      "dev": true
-    },
-    "compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz",
-      "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=",
-      "dev": true,
-      "requires": {
-        "mime-db": ">= 1.43.0 < 2"
-      }
-    },
-    "compression": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz",
-      "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=",
-      "dev": true,
-      "requires": {
-        "accepts": "~1.3.5",
-        "bytes": "3.0.0",
-        "compressible": "~2.0.16",
-        "debug": "2.6.9",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.1.2",
-        "vary": "~1.1.2"
-      },
-      "dependencies": {
-        "bytes": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
-          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-          "dev": true
-        }
-      }
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
-      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
-      "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
-      "dev": true
-    },
-    "console-browserify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
-      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
-      "dev": true
-    },
-    "consolidate": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz?cache=0&sync_timestamp=1599596654038&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.14.5.tgz",
-      "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.1.1"
-      }
-    },
-    "constants-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
-      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
-      "dev": true
-    },
-    "content-disposition": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
-      "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "5.1.2"
-      }
-    },
-    "content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
-      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
-      "dev": true
-    },
-    "convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz",
-      "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      }
-    },
-    "cookie": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
-      "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
-      "dev": true
-    },
-    "cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
-      "dev": true
-    },
-    "copy-concurrently": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
-      "dev": true,
-      "requires": {
-        "aproba": "^1.1.1",
-        "fs-write-stream-atomic": "^1.0.8",
-        "iferr": "^0.1.5",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.0"
-      }
-    },
-    "copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
-      "dev": true
-    },
-    "copy-webpack-plugin": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
-      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
-      "dev": true,
-      "requires": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
-        "globby": "^7.1.1",
-        "is-glob": "^4.0.0",
-        "loader-utils": "^1.1.0",
-        "minimatch": "^3.0.4",
-        "p-limit": "^1.0.0",
-        "serialize-javascript": "^1.4.0"
-      }
-    },
-    "core-js": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz",
-      "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-      "dev": true
-    },
-    "cosmiconfig": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz",
-      "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
-      "dev": true,
-      "requires": {
-        "import-fresh": "^2.0.0",
-        "is-directory": "^0.3.1",
-        "js-yaml": "^3.13.1",
-        "parse-json": "^4.0.0"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
-          "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
-          "dev": true
-        },
-        "js-yaml": {
-          "version": "3.14.0",
-          "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz",
-          "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        }
-      }
-    },
-    "create-ecdh": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz?cache=0&sync_timestamp=1596557441827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-ecdh%2Fdownload%2Fcreate-ecdh-4.0.4.tgz",
-      "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "elliptic": "^6.5.3"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "create-hash": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
-      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
-      "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "inherits": "^2.0.1",
-        "md5.js": "^1.3.4",
-        "ripemd160": "^2.0.1",
-        "sha.js": "^2.4.0"
-      }
-    },
-    "create-hmac": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
-      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
-      "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.3",
-        "create-hash": "^1.1.0",
-        "inherits": "^2.0.1",
-        "ripemd160": "^2.0.0",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "cross-spawn": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
-      "dev": true,
-      "requires": {
-        "lru-cache": "^4.0.1",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      }
-    },
-    "crypto-browserify": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
-      "dev": true,
-      "requires": {
-        "browserify-cipher": "^1.0.0",
-        "browserify-sign": "^4.0.0",
-        "create-ecdh": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.0",
-        "diffie-hellman": "^5.0.0",
-        "inherits": "^2.0.1",
-        "pbkdf2": "^3.0.3",
-        "public-encrypt": "^4.0.0",
-        "randombytes": "^2.0.0",
-        "randomfill": "^1.0.3"
-      }
-    },
-    "css-color-names": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz",
-      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
-      "dev": true
-    },
-    "css-declaration-sorter": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
-      "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
-      "dev": true,
-      "requires": {
-        "postcss": "^7.0.1",
-        "timsort": "^0.3.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "css-loader": {
-      "version": "0.28.11",
-      "resolved": "https://registry.nlark.com/css-loader/download/css-loader-0.28.11.tgz?cache=0&sync_timestamp=1621865230592&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-0.28.11.tgz",
-      "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "css-selector-tokenizer": "^0.7.0",
-        "cssnano": "^3.10.0",
-        "icss-utils": "^2.1.0",
-        "loader-utils": "^1.0.2",
-        "lodash.camelcase": "^4.3.0",
-        "object-assign": "^4.1.1",
-        "postcss": "^5.0.6",
-        "postcss-modules-extract-imports": "^1.2.0",
-        "postcss-modules-local-by-default": "^1.2.0",
-        "postcss-modules-scope": "^1.1.0",
-        "postcss-modules-values": "^1.3.0",
-        "postcss-value-parser": "^3.3.0",
-        "source-list-map": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "css-select-base-adapter": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
-      "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
-      "dev": true
-    },
-    "css-selector-tokenizer": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.3.tgz?cache=0&sync_timestamp=1595335280942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-selector-tokenizer%2Fdownload%2Fcss-selector-tokenizer-0.7.3.tgz",
-      "integrity": "sha1-c18mGG5nx0mq8nV4NAXPBmH66PE=",
-      "dev": true,
-      "requires": {
-        "cssesc": "^3.0.0",
-        "fastparse": "^1.1.2"
-      }
-    },
-    "css-tree": {
-      "version": "1.0.0-alpha.37",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
-      "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
-      "dev": true,
-      "requires": {
-        "mdn-data": "2.0.4",
-        "source-map": "^0.6.1"
-      }
-    },
-    "cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
-      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
-      "dev": true
-    },
-    "cssnano": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-3.10.0.tgz?cache=0&sync_timestamp=1599670481279&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-3.10.0.tgz",
-      "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
-      "dev": true,
-      "requires": {
-        "autoprefixer": "^6.3.1",
-        "decamelize": "^1.1.2",
-        "defined": "^1.0.0",
-        "has": "^1.0.1",
-        "object-assign": "^4.0.1",
-        "postcss": "^5.0.14",
-        "postcss-calc": "^5.2.0",
-        "postcss-colormin": "^2.1.8",
-        "postcss-convert-values": "^2.3.4",
-        "postcss-discard-comments": "^2.0.4",
-        "postcss-discard-duplicates": "^2.0.1",
-        "postcss-discard-empty": "^2.0.1",
-        "postcss-discard-overridden": "^0.1.1",
-        "postcss-discard-unused": "^2.2.1",
-        "postcss-filter-plugins": "^2.0.0",
-        "postcss-merge-idents": "^2.1.5",
-        "postcss-merge-longhand": "^2.0.1",
-        "postcss-merge-rules": "^2.0.3",
-        "postcss-minify-font-values": "^1.0.2",
-        "postcss-minify-gradients": "^1.0.1",
-        "postcss-minify-params": "^1.0.4",
-        "postcss-minify-selectors": "^2.0.4",
-        "postcss-normalize-charset": "^1.1.0",
-        "postcss-normalize-url": "^3.0.7",
-        "postcss-ordered-values": "^2.1.0",
-        "postcss-reduce-idents": "^2.2.2",
-        "postcss-reduce-initial": "^1.0.0",
-        "postcss-reduce-transforms": "^1.0.3",
-        "postcss-svgo": "^2.1.1",
-        "postcss-unique-selectors": "^2.0.2",
-        "postcss-value-parser": "^3.2.3",
-        "postcss-zindex": "^2.0.1"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "autoprefixer": {
-          "version": "6.7.7",
-          "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-6.7.7.tgz?cache=0&sync_timestamp=1601167517316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-6.7.7.tgz",
-          "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
-          "dev": true,
-          "requires": {
-            "browserslist": "^1.7.6",
-            "caniuse-db": "^1.0.30000634",
-            "normalize-range": "^0.1.2",
-            "num2fraction": "^1.2.2",
-            "postcss": "^5.2.16",
-            "postcss-value-parser": "^3.2.3"
-          }
-        },
-        "browserslist": {
-          "version": "1.7.7",
-          "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-          "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-          "dev": true,
-          "requires": {
-            "caniuse-db": "^1.0.30000639",
-            "electron-to-chromium": "^1.2.7"
-          }
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "cssnano-preset-default": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
-      "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
-      "dev": true,
-      "requires": {
-        "css-declaration-sorter": "^4.0.1",
-        "cssnano-util-raw-cache": "^4.0.1",
-        "postcss": "^7.0.0",
-        "postcss-calc": "^7.0.1",
-        "postcss-colormin": "^4.0.3",
-        "postcss-convert-values": "^4.0.1",
-        "postcss-discard-comments": "^4.0.2",
-        "postcss-discard-duplicates": "^4.0.2",
-        "postcss-discard-empty": "^4.0.1",
-        "postcss-discard-overridden": "^4.0.1",
-        "postcss-merge-longhand": "^4.0.11",
-        "postcss-merge-rules": "^4.0.3",
-        "postcss-minify-font-values": "^4.0.2",
-        "postcss-minify-gradients": "^4.0.2",
-        "postcss-minify-params": "^4.0.2",
-        "postcss-minify-selectors": "^4.0.2",
-        "postcss-normalize-charset": "^4.0.1",
-        "postcss-normalize-display-values": "^4.0.2",
-        "postcss-normalize-positions": "^4.0.2",
-        "postcss-normalize-repeat-style": "^4.0.2",
-        "postcss-normalize-string": "^4.0.2",
-        "postcss-normalize-timing-functions": "^4.0.2",
-        "postcss-normalize-unicode": "^4.0.1",
-        "postcss-normalize-url": "^4.0.1",
-        "postcss-normalize-whitespace": "^4.0.2",
-        "postcss-ordered-values": "^4.1.2",
-        "postcss-reduce-initial": "^4.0.3",
-        "postcss-reduce-transforms": "^4.0.2",
-        "postcss-svgo": "^4.0.3",
-        "postcss-unique-selectors": "^4.0.1"
-      },
-      "dependencies": {
-        "browserslist": {
-          "version": "4.16.6",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-          "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-          "dev": true,
-          "requires": {
-            "caniuse-lite": "^1.0.30001219",
-            "colorette": "^1.2.2",
-            "electron-to-chromium": "^1.3.723",
-            "escalade": "^3.1.1",
-            "node-releases": "^1.1.71"
-          }
-        },
-        "caniuse-api": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
-          "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-          "dev": true,
-          "requires": {
-            "browserslist": "^4.0.0",
-            "caniuse-lite": "^1.0.0",
-            "lodash.memoize": "^4.1.2",
-            "lodash.uniq": "^4.5.0"
-          }
-        },
-        "coa": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
-          "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
-          "dev": true,
-          "requires": {
-            "@types/q": "^1.5.1",
-            "chalk": "^2.4.1",
-            "q": "^1.1.2"
-          }
-        },
-        "color": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
-          "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.1",
-            "color-string": "^1.5.4"
-          }
-        },
-        "color-string": {
-          "version": "1.5.5",
-          "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
-          "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
-          "dev": true,
-          "requires": {
-            "color-name": "^1.0.0",
-            "simple-swizzle": "^0.2.2"
-          }
-        },
-        "css-select": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
-          "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
-          "dev": true,
-          "requires": {
-            "boolbase": "^1.0.0",
-            "css-what": "^3.2.1",
-            "domutils": "^1.7.0",
-            "nth-check": "^1.0.2"
-          }
-        },
-        "css-what": {
-          "version": "3.4.2",
-          "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
-          "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
-          "dev": true
-        },
-        "csso": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
-          "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
-          "dev": true,
-          "requires": {
-            "css-tree": "^1.1.2"
-          },
-          "dependencies": {
-            "css-tree": {
-              "version": "1.1.3",
-              "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
-              "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
-              "dev": true,
-              "requires": {
-                "mdn-data": "2.0.14",
-                "source-map": "^0.6.1"
-              }
-            }
-          }
-        },
-        "domutils": {
-          "version": "1.7.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-          "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "0",
-            "domelementtype": "1"
-          }
-        },
-        "esprima": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-          "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-          "dev": true
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "mdn-data": {
-          "version": "2.0.14",
-          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
-          "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
-          "dev": true
-        },
-        "normalize-url": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
-          "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "postcss-calc": {
-          "version": "7.0.5",
-          "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
-          "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.27",
-            "postcss-selector-parser": "^6.0.2",
-            "postcss-value-parser": "^4.0.2"
-          },
-          "dependencies": {
-            "postcss-value-parser": {
-              "version": "4.1.0",
-              "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-              "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-              "dev": true
-            }
-          }
-        },
-        "postcss-colormin": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
-          "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
-          "dev": true,
-          "requires": {
-            "browserslist": "^4.0.0",
-            "color": "^3.0.0",
-            "has": "^1.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-convert-values": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
-          "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-discard-comments": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
-          "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-discard-duplicates": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
-          "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-discard-empty": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
-          "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-discard-overridden": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
-          "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-merge-longhand": {
-          "version": "4.0.11",
-          "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
-          "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
-          "dev": true,
-          "requires": {
-            "css-color-names": "0.0.4",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0",
-            "stylehacks": "^4.0.0"
-          }
-        },
-        "postcss-merge-rules": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
-          "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
-          "dev": true,
-          "requires": {
-            "browserslist": "^4.0.0",
-            "caniuse-api": "^3.0.0",
-            "cssnano-util-same-parent": "^4.0.0",
-            "postcss": "^7.0.0",
-            "postcss-selector-parser": "^3.0.0",
-            "vendors": "^1.0.0"
-          },
-          "dependencies": {
-            "postcss-selector-parser": {
-              "version": "3.1.2",
-              "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-              "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-              "dev": true,
-              "requires": {
-                "dot-prop": "^5.2.0",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
-              }
-            }
-          }
-        },
-        "postcss-minify-font-values": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
-          "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-minify-gradients": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
-          "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
-          "dev": true,
-          "requires": {
-            "cssnano-util-get-arguments": "^4.0.0",
-            "is-color-stop": "^1.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-minify-params": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
-          "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
-          "dev": true,
-          "requires": {
-            "alphanum-sort": "^1.0.0",
-            "browserslist": "^4.0.0",
-            "cssnano-util-get-arguments": "^4.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0",
-            "uniqs": "^2.0.0"
-          }
-        },
-        "postcss-minify-selectors": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
-          "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
-          "dev": true,
-          "requires": {
-            "alphanum-sort": "^1.0.0",
-            "has": "^1.0.0",
-            "postcss": "^7.0.0",
-            "postcss-selector-parser": "^3.0.0"
-          },
-          "dependencies": {
-            "postcss-selector-parser": {
-              "version": "3.1.2",
-              "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-              "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-              "dev": true,
-              "requires": {
-                "dot-prop": "^5.2.0",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
-              }
-            }
-          }
-        },
-        "postcss-normalize-charset": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
-          "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-normalize-url": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
-          "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
-          "dev": true,
-          "requires": {
-            "is-absolute-url": "^2.0.0",
-            "normalize-url": "^3.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-ordered-values": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
-          "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
-          "dev": true,
-          "requires": {
-            "cssnano-util-get-arguments": "^4.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-reduce-initial": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
-          "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
-          "dev": true,
-          "requires": {
-            "browserslist": "^4.0.0",
-            "caniuse-api": "^3.0.0",
-            "has": "^1.0.0",
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss-reduce-transforms": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
-          "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
-          "dev": true,
-          "requires": {
-            "cssnano-util-get-match": "^4.0.0",
-            "has": "^1.0.0",
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0"
-          }
-        },
-        "postcss-selector-parser": {
-          "version": "6.0.6",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-          "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-          "dev": true,
-          "requires": {
-            "cssesc": "^3.0.0",
-            "util-deprecate": "^1.0.2"
-          }
-        },
-        "postcss-svgo": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
-          "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
-          "dev": true,
-          "requires": {
-            "postcss": "^7.0.0",
-            "postcss-value-parser": "^3.0.0",
-            "svgo": "^1.0.0"
-          }
-        },
-        "postcss-unique-selectors": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
-          "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
-          "dev": true,
-          "requires": {
-            "alphanum-sort": "^1.0.0",
-            "postcss": "^7.0.0",
-            "uniqs": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "svgo": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
-          "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.1",
-            "coa": "^2.0.2",
-            "css-select": "^2.0.0",
-            "css-select-base-adapter": "^0.1.1",
-            "css-tree": "1.0.0-alpha.37",
-            "csso": "^4.0.2",
-            "js-yaml": "^3.13.1",
-            "mkdirp": "~0.5.1",
-            "object.values": "^1.1.0",
-            "sax": "~1.2.4",
-            "stable": "^0.1.8",
-            "unquote": "~1.1.1",
-            "util.promisify": "~1.0.0"
-          }
-        }
-      }
-    },
-    "cssnano-util-get-arguments": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
-      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
-      "dev": true
-    },
-    "cssnano-util-get-match": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
-      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
-      "dev": true
-    },
-    "cssnano-util-raw-cache": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
-      "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
-      "dev": true,
-      "requires": {
-        "postcss": "^7.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "cssnano-util-same-parent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
-      "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
-      "dev": true
-    },
-    "csso": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/csso/download/csso-2.3.2.tgz",
-      "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
-      "dev": true,
-      "requires": {
-        "clap": "^1.0.9",
-        "source-map": "^0.5.3"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "cuint": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/cuint/download/cuint-0.2.2.tgz",
-      "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
-      "dev": true
-    },
-    "currently-unhandled": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-      "dev": true,
-      "requires": {
-        "array-find-index": "^1.0.1"
-      }
-    },
-    "cyclist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz",
-      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
-      "dev": true
-    },
-    "d": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz",
-      "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=",
-      "dev": true,
-      "requires": {
-        "es5-ext": "^0.10.50",
-        "type": "^1.0.1"
-      }
-    },
-    "de-indent": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
-      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
-      "dev": true
-    },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
-      "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-      "dev": true,
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
-    },
-    "decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-      "dev": true
-    },
-    "deep-equal": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz",
-      "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
-      "dev": true,
-      "requires": {
-        "is-arguments": "^1.0.4",
-        "is-date-object": "^1.0.1",
-        "is-regex": "^1.0.4",
-        "object-is": "^1.0.1",
-        "object-keys": "^1.1.1",
-        "regexp.prototype.flags": "^1.2.0"
-      }
-    },
-    "deepmerge": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
-      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
-    },
-    "define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
-      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
-      "dev": true,
-      "requires": {
-        "object-keys": "^1.0.12"
-      }
-    },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz",
-      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
-      "dev": true,
-      "requires": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        }
-      }
-    },
-    "defined": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz",
-      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
-      "dev": true
-    },
-    "del": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz?cache=0&sync_timestamp=1601076806416&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-3.0.0.tgz",
-      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
-      "dev": true,
-      "requires": {
-        "globby": "^6.1.0",
-        "is-path-cwd": "^1.0.0",
-        "is-path-in-cwd": "^1.0.0",
-        "p-map": "^1.1.1",
-        "pify": "^3.0.0",
-        "rimraf": "^2.2.8"
-      },
-      "dependencies": {
-        "globby": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz",
-          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-          "dev": true,
-          "requires": {
-            "array-union": "^1.0.1",
-            "glob": "^7.0.3",
-            "object-assign": "^4.0.1",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-              "dev": true
-            }
-          }
-        }
-      }
-    },
-    "delegate": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz",
-      "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
-    },
-    "depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
-      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-      "dev": true
-    },
-    "des.js": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz",
-      "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
-      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
-      "dev": true
-    },
-    "detect-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz",
-      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
-      "dev": true,
-      "requires": {
-        "repeating": "^2.0.0"
-      }
-    },
-    "detect-node": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz",
-      "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=",
-      "dev": true
-    },
-    "diffie-hellman": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "miller-rabin": "^4.0.0",
-        "randombytes": "^2.0.0"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "dir-glob": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
-      "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=",
-      "dev": true,
-      "requires": {
-        "path-type": "^3.0.0"
-      }
-    },
-    "dns-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
-      "dev": true
-    },
-    "dns-packet": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
-      "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
-      "dev": true,
-      "requires": {
-        "ip": "^1.1.0",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "dns-txt": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
-      "dev": true,
-      "requires": {
-        "buffer-indexof": "^1.0.0"
-      }
-    },
-    "dom-converter": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
-      "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
-      "dev": true,
-      "requires": {
-        "utila": "~0.4"
-      }
-    },
-    "dom-serializer": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1600028888021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
-      "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
-      "dev": true,
-      "requires": {
-        "domelementtype": "^2.0.1",
-        "entities": "^2.0.0"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.2.tgz?cache=0&sync_timestamp=1600028450905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.0.2.tgz",
-          "integrity": "sha1-87blSSAeRvWItZRj3XcYcTH+aXE=",
-          "dev": true
-        }
-      }
-    },
-    "domain-browser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
-      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
-      "dev": true
-    },
-    "domelementtype": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1600028450905&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
-      "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
-      "dev": true
-    },
-    "dot-prop": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
-      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
-      "dev": true,
-      "requires": {
-        "is-obj": "^2.0.0"
-      }
-    },
-    "duplexer": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
-      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
-      "dev": true
-    },
-    "duplexify": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz",
-      "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "^1.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "echarts": {
-      "version": "4.9.0",
-      "resolved": "https://registry.nlark.com/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1619495447964&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz",
-      "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=",
-      "requires": {
-        "zrender": "4.3.2"
-      }
-    },
-    "ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-      "dev": true
-    },
-    "ejs": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1597678424776&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz",
-      "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
-      "dev": true
-    },
-    "electron-to-chromium": {
-      "version": "1.3.742",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz",
-      "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==",
-      "dev": true
-    },
-    "element-ui": {
-      "version": "2.15.6",
-      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.6.tgz",
-      "integrity": "sha512-rcYXEKd/j2G0AgficAOk1Zd1AsnHRkhmrK4yLHmNOiimU2JfsywgfKUjMoFuT6pQx0luhovj8lFjpE4Fnt58Iw==",
-      "requires": {
-        "async-validator": "~1.8.1",
-        "babel-helper-vue-jsx-merge-props": "^2.0.0",
-        "deepmerge": "^1.2.0",
-        "normalize-wheel": "^1.0.1",
-        "resize-observer-polyfill": "^1.5.0",
-        "throttle-debounce": "^1.0.1"
-      }
-    },
-    "elliptic": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
-      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.11.9",
-        "brorand": "^1.1.0",
-        "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.1",
-        "inherits": "^2.0.4",
-        "minimalistic-assert": "^1.0.1",
-        "minimalistic-crypto-utils": "^1.0.1"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "emojis-list": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
-      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
-      "dev": true
-    },
-    "encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-      "dev": true
-    },
-    "end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
-      "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
-      "dev": true,
-      "requires": {
-        "once": "^1.4.0"
-      }
-    },
-    "enhanced-resolve": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz",
-      "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "memory-fs": "^0.4.0",
-        "object-assign": "^4.0.1",
-        "tapable": "^0.2.7"
-      }
-    },
-    "entities": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.0.3.tgz",
-      "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=",
-      "dev": true
-    },
-    "errno": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz",
-      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
-      "dev": true,
-      "requires": {
-        "prr": "~1.0.1"
-      }
-    },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
-      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "error-stack-parser": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz",
-      "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=",
-      "dev": true,
-      "requires": {
-        "stackframe": "^1.1.1"
-      }
-    },
-    "es-abstract": {
-      "version": "1.18.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
-      "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.2",
-        "is-callable": "^1.2.3",
-        "is-negative-zero": "^2.0.1",
-        "is-regex": "^1.1.3",
-        "is-string": "^1.0.6",
-        "object-inspect": "^1.10.3",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.2",
-        "string.prototype.trimend": "^1.0.4",
-        "string.prototype.trimstart": "^1.0.4",
-        "unbox-primitive": "^1.0.1"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      }
-    },
-    "es5-ext": {
-      "version": "0.10.53",
-      "resolved": "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.53.tgz",
-      "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=",
-      "dev": true,
-      "requires": {
-        "es6-iterator": "~2.0.3",
-        "es6-symbol": "~3.1.3",
-        "next-tick": "~1.0.0"
-      }
-    },
-    "es6-iterator": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz",
-      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
-      "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "^0.10.35",
-        "es6-symbol": "^3.1.1"
-      }
-    },
-    "es6-map": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz",
-      "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
-      "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.14",
-        "es6-iterator": "~2.0.1",
-        "es6-set": "~0.1.5",
-        "es6-symbol": "~3.1.1",
-        "event-emitter": "~0.3.5"
-      }
-    },
-    "es6-set": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz",
-      "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
-      "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.14",
-        "es6-iterator": "~2.0.1",
-        "es6-symbol": "3.1.1",
-        "event-emitter": "~0.3.5"
-      },
-      "dependencies": {
-        "es6-symbol": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz",
-          "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
-          "dev": true,
-          "requires": {
-            "d": "1",
-            "es5-ext": "~0.10.14"
-          }
-        }
-      }
-    },
-    "es6-symbol": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz",
-      "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=",
-      "dev": true,
-      "requires": {
-        "d": "^1.0.1",
-        "ext": "^1.1.2"
-      }
-    },
-    "es6-weak-map": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz",
-      "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=",
-      "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "^0.10.46",
-        "es6-iterator": "^2.0.3",
-        "es6-symbol": "^3.1.1"
-      }
-    },
-    "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true
-    },
-    "escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-      "dev": true
-    },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
-    "escope": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz",
-      "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
-      "dev": true,
-      "requires": {
-        "es6-map": "^0.1.3",
-        "es6-weak-map": "^2.0.1",
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      }
-    },
-    "esprima": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz",
-      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-      "dev": true
-    },
-    "esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
-      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.2.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz",
-          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
-          "dev": true
-        }
-      }
-    },
-    "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
-      "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
-      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
-      "dev": true
-    },
-    "etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
-      "dev": true
-    },
-    "event-emitter": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz",
-      "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
-      "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.14"
-      }
-    },
-    "eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517795415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz",
-      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
-      "dev": true
-    },
-    "events": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422602348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz",
-      "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=",
-      "dev": true
-    },
-    "eventsource": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
-      "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
-      "dev": true,
-      "requires": {
-        "original": ">=0.0.5"
-      }
-    },
-    "evp_bytestokey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
-      "dev": true,
-      "requires": {
-        "md5.js": "^1.3.4",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "execa": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
-      "dev": true,
-      "requires": {
-        "cross-spawn": "^5.0.1",
-        "get-stream": "^3.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      }
-    },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-      "dev": true,
-      "requires": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "express": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz",
-      "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=",
-      "dev": true,
-      "requires": {
-        "accepts": "~1.3.7",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.19.0",
-        "content-disposition": "0.5.3",
-        "content-type": "~1.0.4",
-        "cookie": "0.4.0",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "~1.1.2",
-        "fresh": "0.5.2",
-        "merge-descriptors": "1.0.1",
-        "methods": "~1.1.2",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
-        "proxy-addr": "~2.0.5",
-        "qs": "6.7.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.1.2",
-        "send": "0.17.1",
-        "serve-static": "1.14.1",
-        "setprototypeof": "1.1.1",
-        "statuses": "~1.5.0",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      }
-    },
-    "ext": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz",
-      "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=",
-      "dev": true,
-      "requires": {
-        "type": "^2.0.0"
-      },
-      "dependencies": {
-        "type": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/type/download/type-2.1.0.tgz?cache=0&sync_timestamp=1598016600310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.1.0.tgz",
-          "integrity": "sha1-m9wixkjPjPht0j0yM2pBz7ZHXj8=",
-          "dev": true
-        }
-      }
-    },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-      "dev": true,
-      "requires": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz",
-      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
-      "dev": true,
-      "requires": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        }
-      }
-    },
-    "extract-text-webpack-plugin": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/extract-text-webpack-plugin/download/extract-text-webpack-plugin-3.0.2.tgz",
-      "integrity": "sha1-XwQ+qgL5dQqSWLeMCm4NwUCPsvc=",
-      "dev": true,
-      "requires": {
-        "async": "^2.4.1",
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^0.3.0",
-        "webpack-sources": "^1.0.1"
-      }
-    },
-    "fast-deep-equal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz",
-      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-      "dev": true
-    },
-    "fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
-      "dev": true
-    },
-    "fastparse": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz",
-      "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=",
-      "dev": true
-    },
-    "faye-websocket": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz",
-      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
-      "dev": true,
-      "requires": {
-        "websocket-driver": ">=0.5.1"
-      }
-    },
-    "file-loader": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-1.1.11.tgz",
-      "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=",
-      "dev": true,
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^0.4.5"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.5",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-          "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-          "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-          "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-          "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
-      "dev": true,
-      "optional": true
-    },
-    "filesize": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz",
-      "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
-      "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "to-regex-range": "^5.0.1"
-      }
-    },
-    "finalhandler": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz",
-      "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "statuses": "~1.5.0",
-        "unpipe": "~1.0.0"
-      }
-    },
-    "find-cache-dir": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz",
-      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
-      "dev": true,
-      "requires": {
-        "commondir": "^1.0.1",
-        "make-dir": "^1.0.0",
-        "pkg-dir": "^2.0.0"
-      }
-    },
-    "find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "dev": true,
-      "requires": {
-        "locate-path": "^2.0.0"
-      }
-    },
-    "fingerprintjs2": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/fingerprintjs2/-/fingerprintjs2-2.1.2.tgz",
-      "integrity": "sha512-ZPsLgjziFRbUb5tXWpEMtWp4XFnzSah8SiNfl3aoURDZ+2zi2tuIOYUULqDBV+Cb6paN+raWT+Q2qpOaCbX/Yw=="
-    },
-    "flatten": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/flatten/download/flatten-1.0.3.tgz",
-      "integrity": "sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=",
-      "dev": true
-    },
-    "flush-write-stream": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz",
-      "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.3.6"
-      }
-    },
-    "follow-redirects": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057997789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz",
-      "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=",
-      "dev": true
-    },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true
-    },
-    "forwarded": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz",
-      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
-      "dev": true
-    },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-      "dev": true,
-      "requires": {
-        "map-cache": "^0.2.2"
-      }
-    },
-    "fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
-      "dev": true
-    },
-    "friendly-errors-webpack-plugin": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.7.0.tgz",
-      "integrity": "sha1-78hsu4FiJFZYYaG+ep2E0Kr+oTY=",
-      "dev": true,
-      "requires": {
-        "chalk": "^1.1.3",
-        "error-stack-parser": "^2.0.0",
-        "string-width": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
-      }
-    },
-    "from2": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0"
-      }
-    },
-    "fs-write-stream-atomic": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
-      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "iferr": "^0.1.5",
-        "imurmurhash": "^0.1.4",
-        "readable-stream": "1 || 2"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "fsevents": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz",
-      "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=",
-      "dev": true,
-      "optional": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
-      "dev": true
-    },
-    "get-caller-file": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz",
-      "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
-      "dev": true
-    },
-    "get-intrinsic": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1"
-      }
-    },
-    "get-stdin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-      "dev": true
-    },
-    "get-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056464385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-      "dev": true
-    },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-      "dev": true
-    },
-    "glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz",
-      "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
-      "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      }
-    },
-    "glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-glob": "^4.0.1"
-      }
-    },
-    "globals": {
-      "version": "9.18.0",
-      "resolved": "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz?cache=0&sync_timestamp=1596709369054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-9.18.0.tgz",
-      "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
-      "dev": true
-    },
-    "globby": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz",
-      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
-      "dev": true,
-      "requires": {
-        "array-union": "^1.0.1",
-        "dir-glob": "^2.0.0",
-        "glob": "^7.1.2",
-        "ignore": "^3.3.5",
-        "pify": "^3.0.0",
-        "slash": "^1.0.0"
-      }
-    },
-    "good-listener": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz",
-      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-      "requires": {
-        "delegate": "^3.1.2"
-      }
-    },
-    "graceful-fs": {
-      "version": "4.2.4",
-      "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz",
-      "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=",
-      "dev": true
-    },
-    "growly": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-      "dev": true
-    },
-    "gzip-size": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-4.1.0.tgz",
-      "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=",
-      "dev": true,
-      "requires": {
-        "duplexer": "^0.1.1",
-        "pify": "^3.0.0"
-      }
-    },
-    "handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
-      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
-      "dev": true
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "has-ansi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^2.0.0"
-      }
-    },
-    "has-bigints": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
-      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
-      "dev": true
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
-    },
-    "has-symbols": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
-      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
-      "dev": true
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "dev": true,
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "hash-base": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
-      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
-          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
-          "dev": true
-        }
-      }
-    },
-    "hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
-      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
-      "dev": true
-    },
-    "hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
-      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
-      }
-    },
-    "he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
-      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
-      "dev": true
-    },
-    "hex-color-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
-      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
-      "dev": true
-    },
-    "hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-      "dev": true,
-      "requires": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "home-or-tmp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz",
-      "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.1"
-      }
-    },
-    "hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true
-    },
-    "hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "hsl-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
-      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
-      "dev": true
-    },
-    "hsla-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
-      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
-      "dev": true
-    },
-    "html-comment-regex": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
-      "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
-      "dev": true
-    },
-    "html-entities": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz",
-      "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=",
-      "dev": true
-    },
-    "html-minifier": {
-      "version": "3.5.21",
-      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
-      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
-      "dev": true,
-      "requires": {
-        "camel-case": "3.0.x",
-        "clean-css": "4.2.x",
-        "commander": "2.17.x",
-        "he": "1.2.x",
-        "param-case": "2.1.x",
-        "relateurl": "0.2.x",
-        "uglify-js": "3.4.x"
-      }
-    },
-    "html-webpack-plugin": {
-      "version": "2.30.1",
-      "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-2.30.1.tgz?cache=0&sync_timestamp=1600690506465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-2.30.1.tgz",
-      "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.4.7",
-        "html-minifier": "^3.2.3",
-        "loader-utils": "^0.2.16",
-        "lodash": "^4.17.3",
-        "pretty-error": "^2.0.2",
-        "toposort": "^1.0.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
-          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "0.2.17",
-          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
-          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0",
-            "object-assign": "^4.0.1"
-          }
-        }
-      }
-    },
-    "http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
-      "dev": true
-    },
-    "http-errors": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
-      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
-      "dev": true,
-      "requires": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.1",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.0"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        }
-      }
-    },
-    "http-parser-js": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.2.tgz",
-      "integrity": "sha1-2i4x0jezk6rnKs5DiC3X4nCo/3c=",
-      "dev": true
-    },
-    "http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz",
-      "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
-      "dev": true,
-      "requires": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "http-proxy-middleware": {
-      "version": "0.19.2",
-      "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.2.tgz",
-      "integrity": "sha1-7nPcyDSBZa/v6N4v9xd1HRgWCO4=",
-      "dev": true,
-      "requires": {
-        "http-proxy": "^1.18.1",
-        "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
-        "micromatch": "^3.1.10"
-      }
-    },
-    "https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
-      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-      "dev": true
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
-      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
-      "dev": true,
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "icss-replace-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
-      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
-      "dev": true
-    },
-    "icss-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz?cache=0&sync_timestamp=1600767333663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-2.1.0.tgz",
-      "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
-      "dev": true,
-      "requires": {
-        "postcss": "^6.0.1"
-      }
-    },
-    "ieee754": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
-      "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
-      "dev": true
-    },
-    "iferr": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
-      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
-      "dev": true
-    },
-    "ignore": {
-      "version": "3.3.10",
-      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz",
-      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
-      "dev": true
-    },
-    "import-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
-      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
-      "dev": true,
-      "requires": {
-        "import-from": "^2.1.0"
-      }
-    },
-    "import-fresh": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz",
-      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-      "dev": true,
-      "requires": {
-        "caller-path": "^2.0.0",
-        "resolve-from": "^3.0.0"
-      }
-    },
-    "import-from": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
-      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
-      "dev": true,
-      "requires": {
-        "resolve-from": "^3.0.0"
-      }
-    },
-    "import-local": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz",
-      "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=",
-      "dev": true,
-      "requires": {
-        "pkg-dir": "^2.0.0",
-        "resolve-cwd": "^2.0.0"
-      }
-    },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true
-    },
-    "indent-string": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz",
-      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-      "dev": true,
-      "requires": {
-        "repeating": "^2.0.0"
-      }
-    },
-    "indexes-of": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
-      "dev": true
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
-      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
-      "dev": true
-    },
-    "internal-ip": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-1.2.0.tgz?cache=0&sync_timestamp=1596563415126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-1.2.0.tgz",
-      "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
-      "dev": true,
-      "requires": {
-        "meow": "^3.3.0"
-      }
-    },
-    "interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz",
-      "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=",
-      "dev": true
-    },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz",
-      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
-      "dev": true,
-      "requires": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "dev": true
-    },
-    "ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
-      "dev": true
-    },
-    "ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
-      "dev": true
-    },
-    "is-absolute-url": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz",
-      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
-      "dev": true
-    },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-arguments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz",
-      "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=",
-      "dev": true
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "is-bigint": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
-      "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
-      "dev": true
-    },
-    "is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
-      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "binary-extensions": "^2.0.0"
-      }
-    },
-    "is-boolean-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
-      "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2"
-      }
-    },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-      "dev": true
-    },
-    "is-callable": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
-      "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
-      "dev": true
-    },
-    "is-color-stop": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
-      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
-      "dev": true,
-      "requires": {
-        "css-color-names": "^0.0.4",
-        "hex-color-regex": "^1.1.0",
-        "hsl-regex": "^1.0.0",
-        "hsla-regex": "^1.0.0",
-        "rgb-regex": "^1.0.1",
-        "rgba-regex": "^1.0.0"
-      }
-    },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-date-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz",
-      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
-      "dev": true
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
-      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
-      "dev": true,
-      "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
-          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
-          "dev": true
-        }
-      }
-    },
-    "is-directory": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
-      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
-      "dev": true
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
-    },
-    "is-finite": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz",
-      "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=",
-      "dev": true
-    },
-    "is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
-      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
-      "dev": true,
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-negative-zero": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
-      "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
-      "dev": true
-    },
-    "is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
-      "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
-      "dev": true,
-      "optional": true
-    },
-    "is-number-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
-      "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
-      "dev": true
-    },
-    "is-obj": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-      "dev": true
-    },
-    "is-path-cwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz",
-      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-      "dev": true
-    },
-    "is-path-in-cwd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz",
-      "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
-      "dev": true,
-      "requires": {
-        "is-path-inside": "^1.0.0"
-      }
-    },
-    "is-path-inside": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz",
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
-      "dev": true,
-      "requires": {
-        "path-is-inside": "^1.0.1"
-      }
-    },
-    "is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
-      "dev": true
-    },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz",
-      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "is-regex": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
-      "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-symbols": "^1.0.2"
-      }
-    },
-    "is-resolvable": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
-      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
-      "dev": true
-    },
-    "is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-      "dev": true
-    },
-    "is-string": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
-      "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
-      "dev": true
-    },
-    "is-svg": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-2.1.0.tgz",
-      "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
-      "dev": true,
-      "requires": {
-        "html-comment-regex": "^1.1.0"
-      }
-    },
-    "is-symbol": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz",
-      "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.1"
-      }
-    },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
-      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
-      "dev": true
-    },
-    "is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
-      "dev": true
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-      "dev": true
-    },
-    "js-base64": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1599897619557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz",
-      "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=",
-      "dev": true
-    },
-    "js-tokens": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz",
-      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
-      "dev": true
-    },
-    "js-yaml": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
-      "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
-      "dev": true,
-      "requires": {
-        "argparse": "^1.0.7",
-        "esprima": "^2.6.0"
-      }
-    },
-    "jsesc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz",
-      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-      "dev": true
-    },
-    "json-loader": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npm.taobao.org/json-loader/download/json-loader-0.5.7.tgz",
-      "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=",
-      "dev": true
-    },
-    "json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
-      "dev": true
-    },
-    "json-schema-traverse": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.3.1.tgz",
-      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-      "dev": true
-    },
-    "json3": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
-      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
-      "dev": true
-    },
-    "json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-      "dev": true
-    },
-    "killable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
-      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
-      "dev": true
-    },
-    "kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "dev": true,
-      "requires": {
-        "is-buffer": "^1.1.5"
-      }
-    },
-    "last-call-webpack-plugin": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/last-call-webpack-plugin/download/last-call-webpack-plugin-2.1.2.tgz",
-      "integrity": "sha1-rYDG4xCZgpTS7SGApo6VieR2jEQ=",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.4",
-        "webpack-sources": "^1.0.1"
-      }
-    },
-    "lazy-cache": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
-      "dev": true
-    },
-    "lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dev": true,
-      "requires": {
-        "invert-kv": "^1.0.0"
-      }
-    },
-    "linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
-      "requires": {
-        "uc.micro": "^1.0.1"
-      }
-    },
-    "load-json-file": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz",
-      "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "dependencies": {
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        }
-      }
-    },
-    "loader-runner": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1601450715716&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
-      "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
-      "dev": true
-    },
-    "loader-utils": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
-      "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
-      "dev": true,
-      "requires": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^1.0.1"
-      },
-      "dependencies": {
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
-          "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        }
-      }
-    },
-    "locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-      "dev": true,
-      "requires": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      }
-    },
-    "lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
-    },
-    "lodash.camelcase": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz",
-      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
-      "dev": true
-    },
-    "lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
-      "dev": true
-    },
-    "lodash.uniq": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-      "dev": true
-    },
-    "log-symbols": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1589682056270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz",
-      "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1"
-      }
-    },
-    "loglevel": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz?cache=0&sync_timestamp=1598447642950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.0.tgz",
-      "integrity": "sha1-coFmhVp0DVnTjbAc9G8ELKoEG7A=",
-      "dev": true
-    },
-    "longest": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
-      "dev": true
-    },
-    "loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
-      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
-      "dev": true,
-      "requires": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      }
-    },
-    "loud-rejection": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-      "dev": true,
-      "requires": {
-        "currently-unhandled": "^0.4.1",
-        "signal-exit": "^3.0.0"
-      }
-    },
-    "lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
-      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
-      "dev": true
-    },
-    "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427519396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
-      "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
-      "dev": true,
-      "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
-    "make-dir": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz",
-      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      }
-    },
-    "map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
-      "dev": true
-    },
-    "map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-      "dev": true
-    },
-    "map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-      "dev": true,
-      "requires": {
-        "object-visit": "^1.0.0"
-      }
-    },
-    "markdown-it": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
-      "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
-      "requires": {
-        "argparse": "^1.0.7",
-        "entities": "~1.1.1",
-        "linkify-it": "^2.0.0",
-        "mdurl": "^1.0.1",
-        "uc.micro": "^1.0.5"
-      },
-      "dependencies": {
-        "entities": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
-        }
-      }
-    },
-    "math-expression-evaluator": {
-      "version": "1.3.8",
-      "resolved": "https://registry.nlark.com/math-expression-evaluator/download/math-expression-evaluator-1.3.8.tgz",
-      "integrity": "sha1-Mg2jsrwVEvT1D8MCCysc1cjp1Xc=",
-      "dev": true
-    },
-    "md5.js": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
-      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
-      "dev": true,
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      }
-    },
-    "mdn-data": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
-      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
-      "dev": true
-    },
-    "mdurl": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
-      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
-    },
-    "media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
-      "dev": true
-    },
-    "mem": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz",
-      "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
-      "dev": true,
-      "requires": {
-        "mimic-fn": "^1.0.0"
-      }
-    },
-    "memory-fs": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
-      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
-      "dev": true,
-      "requires": {
-        "errno": "^0.1.3",
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz?cache=0&sync_timestamp=1598693287069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-      "dev": true,
-      "requires": {
-        "camelcase-keys": "^2.0.0",
-        "decamelize": "^1.1.2",
-        "loud-rejection": "^1.0.0",
-        "map-obj": "^1.0.1",
-        "minimist": "^1.1.3",
-        "normalize-package-data": "^2.3.4",
-        "object-assign": "^4.0.1",
-        "read-pkg-up": "^1.0.1",
-        "redent": "^1.0.0",
-        "trim-newlines": "^1.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
-          }
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "^0.2.0"
-          }
-        }
-      }
-    },
-    "merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
-      "dev": true
-    },
-    "methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
-      "dev": true
-    },
-    "micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz",
-      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
-      "dev": true,
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "dependencies": {
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-          "dev": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        }
-      }
-    },
-    "miller-rabin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
-      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.0.0",
-        "brorand": "^1.0.1"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz",
-      "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
-      "dev": true
-    },
-    "mime-db": {
-      "version": "1.44.0",
-      "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz",
-      "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=",
-      "dev": true
-    },
-    "mime-types": {
-      "version": "2.1.27",
-      "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz",
-      "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=",
-      "dev": true,
-      "requires": {
-        "mime-db": "1.44.0"
-      }
-    },
-    "mimic-fn": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz",
-      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
-      "dev": true
-    },
-    "minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
-      "dev": true
-    },
-    "minimalistic-crypto-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
-      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
-      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
-      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
-      "dev": true
-    },
-    "mississippi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz",
-      "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
-      "dev": true,
-      "requires": {
-        "concat-stream": "^1.5.0",
-        "duplexify": "^3.4.2",
-        "end-of-stream": "^1.1.0",
-        "flush-write-stream": "^1.0.0",
-        "from2": "^2.1.0",
-        "parallel-transform": "^1.1.0",
-        "pump": "^2.0.1",
-        "pumpify": "^1.3.3",
-        "stream-each": "^1.1.0",
-        "through2": "^2.0.0"
-      }
-    },
-    "mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
-      "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=",
-      "dev": true,
-      "requires": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz",
-          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz",
-      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
-      "dev": true,
-      "requires": {
-        "minimist": "^1.2.5"
-      }
-    },
-    "moment": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983423917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz",
-      "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
-    },
-    "move-concurrently": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
-      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
-      "dev": true,
-      "requires": {
-        "aproba": "^1.1.1",
-        "copy-concurrently": "^1.0.0",
-        "fs-write-stream-atomic": "^1.0.8",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.3"
-      }
-    },
-    "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-      "dev": true
-    },
-    "multicast-dns": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz",
-      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
-      "dev": true,
-      "requires": {
-        "dns-packet": "^1.3.1",
-        "thunky": "^1.0.2"
-      }
-    },
-    "multicast-dns-service-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
-      "dev": true
-    },
-    "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz",
-      "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=",
-      "dev": true,
-      "optional": true
-    },
-    "nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz",
-      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
-      "dev": true,
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        }
-      }
-    },
-    "negotiator": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
-      "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=",
-      "dev": true
-    },
-    "neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317437265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz",
-      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
-      "dev": true
-    },
-    "next-tick": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz",
-      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
-      "dev": true
-    },
-    "no-case": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
-      "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
-      "dev": true,
-      "requires": {
-        "lower-case": "^1.1.1"
-      }
-    },
-    "node-forge": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz?cache=0&sync_timestamp=1599010730714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.10.0.tgz",
-      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
-      "dev": true
-    },
-    "node-libs-browser": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
-      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
-      "dev": true,
-      "requires": {
-        "assert": "^1.1.1",
-        "browserify-zlib": "^0.2.0",
-        "buffer": "^4.3.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "^1.0.0",
-        "crypto-browserify": "^3.11.0",
-        "domain-browser": "^1.1.1",
-        "events": "^3.0.0",
-        "https-browserify": "^1.0.0",
-        "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.1",
-        "process": "^0.11.10",
-        "punycode": "^1.2.4",
-        "querystring-es3": "^0.2.0",
-        "readable-stream": "^2.3.3",
-        "stream-browserify": "^2.0.1",
-        "stream-http": "^2.7.2",
-        "string_decoder": "^1.0.0",
-        "timers-browserify": "^2.0.4",
-        "tty-browserify": "0.0.0",
-        "url": "^0.11.0",
-        "util": "^0.11.0",
-        "vm-browserify": "^1.0.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-          "dev": true
-        }
-      }
-    },
-    "node-notifier": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz?cache=0&sync_timestamp=1597311297466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-notifier%2Fdownload%2Fnode-notifier-5.4.3.tgz",
-      "integrity": "sha1-y3La+UyTkECY4oucWQ/YZuRkvVA=",
-      "dev": true,
-      "requires": {
-        "growly": "^1.3.0",
-        "is-wsl": "^1.1.0",
-        "semver": "^5.5.0",
-        "shellwords": "^0.1.1",
-        "which": "^1.3.0"
-      }
-    },
-    "node-releases": {
-      "version": "1.1.72",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
-      "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
-      "dev": true
-    },
-    "normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
-      "dev": true,
-      "requires": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
-      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
-      "dev": true
-    },
-    "normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-      "dev": true
-    },
-    "normalize-url": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1601463025217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz",
-      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.0.1",
-        "prepend-http": "^1.0.0",
-        "query-string": "^4.1.0",
-        "sort-keys": "^1.0.0"
-      }
-    },
-    "normalize-wheel": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
-      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
-    },
-    "npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "dev": true,
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
-    "nth-check": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",
-      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
-      "dev": true,
-      "requires": {
-        "boolbase": "~1.0.0"
-      }
-    },
-    "num2fraction": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz",
-      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-      "dev": true
-    },
-    "number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "dev": true,
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "object-inspect": {
-      "version": "1.10.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
-      "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
-      "dev": true
-    },
-    "object-is": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.3.tgz?cache=0&sync_timestamp=1601503177879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.3.tgz",
-      "integrity": "sha1-LjueZVYBN0Ve471irsTZCi6hzIE=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.0-next.1"
-      }
-    },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
-      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
-      "dev": true
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz",
-      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
-        "object-keys": "^1.1.1"
-      }
-    },
-    "object.getownpropertydescriptors": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
-      "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.0-next.2"
-      }
-    },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "object.values": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
-      "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.18.2"
-      }
-    },
-    "obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz",
-      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
-      "dev": true
-    },
-    "on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
-      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-      "dev": true,
-      "requires": {
-        "ee-first": "1.1.1"
-      }
-    },
-    "on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz",
-      "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=",
-      "dev": true
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "onetime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz",
-      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-      "dev": true,
-      "requires": {
-        "mimic-fn": "^1.0.0"
-      }
-    },
-    "opener": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733310448&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz",
-      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
-      "dev": true
-    },
-    "opn": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz",
-      "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=",
-      "dev": true,
-      "requires": {
-        "is-wsl": "^1.1.0"
-      }
-    },
-    "optimize-css-assets-webpack-plugin": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-3.2.1.tgz?cache=0&sync_timestamp=1598800822300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptimize-css-assets-webpack-plugin%2Fdownload%2Foptimize-css-assets-webpack-plugin-3.2.1.tgz",
-      "integrity": "sha1-nRhlSg4FjAkL3ZkbBLyw9vJIZXM=",
-      "dev": true,
-      "requires": {
-        "cssnano": "^4.1.10",
-        "last-call-webpack-plugin": "^2.1.2"
-      },
-      "dependencies": {
-        "cssnano": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
-          "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
-          "dev": true,
-          "requires": {
-            "cosmiconfig": "^5.0.0",
-            "cssnano-preset-default": "^4.0.8",
-            "is-resolvable": "^1.0.0",
-            "postcss": "^7.0.0"
-          }
-        },
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
-          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "ora": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/ora/download/ora-1.4.0.tgz?cache=0&sync_timestamp=1599423139882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-1.4.0.tgz",
-      "integrity": "sha1-iERYIVs6XUCXWSKF+TMhu3p54uU=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.1.0",
-        "cli-cursor": "^2.1.0",
-        "cli-spinners": "^1.0.1",
-        "log-symbols": "^2.1.0"
-      }
-    },
-    "original": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz",
-      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
-      "dev": true,
-      "requires": {
-        "url-parse": "^1.4.3"
-      }
-    },
-    "os-browserify": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz",
-      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-      "dev": true
-    },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-locale": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
-      "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
-      "dev": true,
-      "requires": {
-        "execa": "^0.7.0",
-        "lcid": "^1.0.0",
-        "mem": "^1.1.0"
-      }
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
-    },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-      "dev": true
-    },
-    "p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
-      "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
-      "dev": true,
-      "requires": {
-        "p-try": "^1.0.0"
-      }
-    },
-    "p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "dev": true,
-      "requires": {
-        "p-limit": "^1.1.0"
-      }
-    },
-    "p-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz",
-      "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
-      "dev": true
-    },
-    "p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-      "dev": true
-    },
-    "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz",
-      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
-      "dev": true
-    },
-    "parallel-transform": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz",
-      "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=",
-      "dev": true,
-      "requires": {
-        "cyclist": "^1.0.1",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.1.5"
-      }
-    },
-    "param-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz",
-      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
-    "parse-asn1": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz",
-      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
-      "dev": true,
-      "requires": {
-        "asn1.js": "^5.2.0",
-        "browserify-aes": "^1.0.0",
-        "evp_bytestokey": "^1.0.0",
-        "pbkdf2": "^3.0.3",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
-      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-      "dev": true,
-      "requires": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
-      }
-    },
-    "parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
-      "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
-      "dev": true
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-      "dev": true
-    },
-    "path-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
-      "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
-      "dev": true
-    },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true
-    },
-    "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "path-is-inside": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
-      "dev": true
-    },
-    "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-      "dev": true
-    },
-    "path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz",
-      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
-      "dev": true
-    },
-    "path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz",
-      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      }
-    },
-    "pbkdf2": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz",
-      "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=",
-      "dev": true,
-      "requires": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "picomatch": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz",
-      "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=",
-      "dev": true,
-      "optional": true
-    },
-    "pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-      "dev": true
-    },
-    "pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-      "dev": true
-    },
-    "pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "dev": true,
-      "requires": {
-        "pinkie": "^2.0.0"
-      }
-    },
-    "pkg-dir": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz",
-      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
-      "dev": true,
-      "requires": {
-        "find-up": "^2.1.0"
-      }
-    },
-    "portfinder": {
-      "version": "1.0.28",
-      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018172434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz",
-      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
-      "dev": true,
-      "requires": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.5"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz",
-          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
-      }
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-      "dev": true
-    },
-    "postcss": {
-      "version": "6.0.23",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz",
-      "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.4.1",
-        "source-map": "^0.6.1",
-        "supports-color": "^5.4.0"
-      }
-    },
-    "postcss-calc": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-5.3.1.tgz?cache=0&sync_timestamp=1601732624081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-5.3.1.tgz",
-      "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.2",
-        "postcss-message-helpers": "^2.0.0",
-        "reduce-css-calc": "^1.2.6"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-colormin": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-2.2.2.tgz?cache=0&sync_timestamp=1599670485775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-2.2.2.tgz",
-      "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
-      "dev": true,
-      "requires": {
-        "colormin": "^1.0.5",
-        "postcss": "^5.0.13",
-        "postcss-value-parser": "^3.2.3"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-convert-values": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-2.6.1.tgz?cache=0&sync_timestamp=1599674174819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-2.6.1.tgz",
-      "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.11",
-        "postcss-value-parser": "^3.1.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-discard-comments": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-2.0.4.tgz?cache=0&sync_timestamp=1599674175141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-2.0.4.tgz",
-      "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.14"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-discard-duplicates": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-2.1.0.tgz?cache=0&sync_timestamp=1599674175412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-2.1.0.tgz",
-      "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-discard-empty": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-2.1.0.tgz?cache=0&sync_timestamp=1599670482017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-2.1.0.tgz",
-      "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.14"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-discard-overridden": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-0.1.1.tgz?cache=0&sync_timestamp=1599670482109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-0.1.1.tgz",
-      "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.16"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-discard-unused": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-unused/download/postcss-discard-unused-2.2.3.tgz?cache=0&sync_timestamp=1599672334828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-unused%2Fdownload%2Fpostcss-discard-unused-2.2.3.tgz",
-      "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.14",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-filter-plugins": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-filter-plugins/download/postcss-filter-plugins-2.0.3.tgz",
-      "integrity": "sha1-giRf34IzcEFkXkdxFNjlk6oYuOw=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-import": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-import/download/postcss-import-11.1.0.tgz",
-      "integrity": "sha1-Vck2LJGSmU7GiGXSJEGd8dspgfA=",
-      "dev": true,
-      "requires": {
-        "postcss": "^6.0.1",
-        "postcss-value-parser": "^3.2.3",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
-      }
-    },
-    "postcss-load-config": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1601607668112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.2.tgz",
-      "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
-      "dev": true,
-      "requires": {
-        "cosmiconfig": "^5.0.0",
-        "import-cwd": "^2.0.0"
-      }
-    },
-    "postcss-load-options": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-options/download/postcss-load-options-1.2.0.tgz",
-      "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
-      "dev": true,
-      "requires": {
-        "cosmiconfig": "^2.1.0",
-        "object-assign": "^4.1.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-          "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-          "dev": true,
-          "requires": {
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.4.3",
-            "minimist": "^1.2.0",
-            "object-assign": "^4.1.0",
-            "os-homedir": "^1.0.1",
-            "parse-json": "^2.2.0",
-            "require-from-string": "^1.1.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        }
-      }
-    },
-    "postcss-load-plugins": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-plugins/download/postcss-load-plugins-2.3.0.tgz",
-      "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
-      "dev": true,
-      "requires": {
-        "cosmiconfig": "^2.1.1",
-        "object-assign": "^4.1.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-          "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-          "dev": true,
-          "requires": {
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.4.3",
-            "minimist": "^1.2.0",
-            "object-assign": "^4.1.0",
-            "os-homedir": "^1.0.1",
-            "parse-json": "^2.2.0",
-            "require-from-string": "^1.1.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        }
-      }
-    },
-    "postcss-loader": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.1.6.tgz",
-      "integrity": "sha1-HX3XsXxrojS5vtWvE+C+pApC10A=",
-      "dev": true,
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "postcss": "^6.0.0",
-        "postcss-load-config": "^2.0.0",
-        "schema-utils": "^0.4.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.5",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-          "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-          "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-          "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-          "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "postcss-merge-idents": {
-      "version": "2.1.7",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-idents/download/postcss-merge-idents-2.1.7.tgz?cache=0&sync_timestamp=1599672336407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-idents%2Fdownload%2Fpostcss-merge-idents-2.1.7.tgz",
-      "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.10",
-        "postcss-value-parser": "^3.1.1"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-merge-longhand": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-2.0.2.tgz?cache=0&sync_timestamp=1599670482411&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-2.0.2.tgz",
-      "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-merge-rules": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-2.1.2.tgz?cache=0&sync_timestamp=1599670482522&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-2.1.2.tgz",
-      "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
-      "dev": true,
-      "requires": {
-        "browserslist": "^1.5.2",
-        "caniuse-api": "^1.5.2",
-        "postcss": "^5.0.4",
-        "postcss-selector-parser": "^2.2.2",
-        "vendors": "^1.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "browserslist": {
-          "version": "1.7.7",
-          "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz",
-          "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-          "dev": true,
-          "requires": {
-            "caniuse-db": "^1.0.30000639",
-            "electron-to-chromium": "^1.2.7"
-          }
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-message-helpers": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-message-helpers/download/postcss-message-helpers-2.0.0.tgz",
-      "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
-      "dev": true
-    },
-    "postcss-minify-font-values": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-1.0.5.tgz?cache=0&sync_timestamp=1599670482669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-1.0.5.tgz",
-      "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.0.1",
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-minify-gradients": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-1.0.5.tgz?cache=0&sync_timestamp=1599670482761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-1.0.5.tgz",
-      "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.12",
-        "postcss-value-parser": "^3.3.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-minify-params": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-1.2.2.tgz?cache=0&sync_timestamp=1599670482880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-1.2.2.tgz",
-      "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
-      "dev": true,
-      "requires": {
-        "alphanum-sort": "^1.0.1",
-        "postcss": "^5.0.2",
-        "postcss-value-parser": "^3.0.2",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-minify-selectors": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-2.1.1.tgz?cache=0&sync_timestamp=1599670483082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-2.1.1.tgz",
-      "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
-      "dev": true,
-      "requires": {
-        "alphanum-sort": "^1.0.2",
-        "has": "^1.0.1",
-        "postcss": "^5.0.14",
-        "postcss-selector-parser": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-modules-extract-imports": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz?cache=0&sync_timestamp=1600776084988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-1.2.1.tgz",
-      "integrity": "sha1-3IfjQUjsfqtfeR981YSYMzdbdBo=",
-      "dev": true,
-      "requires": {
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-local-by-default": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz",
-      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
-      "dev": true,
-      "requires": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-scope": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz?cache=0&sync_timestamp=1600778003060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-1.1.0.tgz",
-      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
-      "dev": true,
-      "requires": {
-        "css-selector-tokenizer": "^0.7.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-modules-values": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz?cache=0&sync_timestamp=1602187018990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-1.3.0.tgz",
-      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
-      "dev": true,
-      "requires": {
-        "icss-replace-symbols": "^1.1.0",
-        "postcss": "^6.0.1"
-      }
-    },
-    "postcss-normalize-charset": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-1.1.1.tgz?cache=0&sync_timestamp=1599670482967&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-1.1.1.tgz",
-      "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.5"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-display-values": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
-      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
-      "dev": true,
-      "requires": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-positions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
-      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
-      "dev": true,
-      "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-repeat-style": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
-      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
-      "dev": true,
-      "requires": {
-        "cssnano-util-get-arguments": "^4.0.0",
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-string": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
-      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-timing-functions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
-      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
-      "dev": true,
-      "requires": {
-        "cssnano-util-get-match": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-unicode": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
-      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
-      "dev": true,
-      "requires": {
-        "browserslist": "^4.0.0",
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "browserslist": {
-          "version": "4.16.6",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-          "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-          "dev": true,
-          "requires": {
-            "caniuse-lite": "^1.0.30001219",
-            "colorette": "^1.2.2",
-            "electron-to-chromium": "^1.3.723",
-            "escalade": "^3.1.1",
-            "node-releases": "^1.1.71"
-          }
-        },
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-url": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-3.0.8.tgz?cache=0&sync_timestamp=1599670483753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-3.0.8.tgz",
-      "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
-      "dev": true,
-      "requires": {
-        "is-absolute-url": "^2.0.0",
-        "normalize-url": "^1.4.0",
-        "postcss": "^5.0.14",
-        "postcss-value-parser": "^3.2.3"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-normalize-whitespace": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
-      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
-      "dev": true,
-      "requires": {
-        "postcss": "^7.0.0",
-        "postcss-value-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-ordered-values": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-2.2.3.tgz?cache=0&sync_timestamp=1599670483946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-2.2.3.tgz",
-      "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.1"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-pxtorem": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz",
-      "integrity": "sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg==",
-      "requires": {
-        "postcss": "^7.0.27"
-      },
-      "dependencies": {
-        "postcss": {
-          "version": "7.0.35",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
-          "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-reduce-idents": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-idents/download/postcss-reduce-idents-2.4.0.tgz?cache=0&sync_timestamp=1599672339373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-idents%2Fdownload%2Fpostcss-reduce-idents-2.4.0.tgz",
-      "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4",
-        "postcss-value-parser": "^3.0.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-reduce-initial": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-1.0.1.tgz?cache=0&sync_timestamp=1599670484036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-1.0.1.tgz",
-      "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
-      "dev": true,
-      "requires": {
-        "postcss": "^5.0.4"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-reduce-transforms": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-1.0.4.tgz?cache=0&sync_timestamp=1599670484213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-1.0.4.tgz",
-      "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.8",
-        "postcss-value-parser": "^3.0.1"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-selector-parser": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz?cache=0&sync_timestamp=1601045323543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-2.2.3.tgz",
-      "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
-      "dev": true,
-      "requires": {
-        "flatten": "^1.0.2",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      }
-    },
-    "postcss-svgo": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-2.1.6.tgz?cache=0&sync_timestamp=1599670484324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-2.1.6.tgz",
-      "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
-      "dev": true,
-      "requires": {
-        "is-svg": "^2.0.0",
-        "postcss": "^5.0.14",
-        "postcss-value-parser": "^3.2.3",
-        "svgo": "^0.7.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-unique-selectors": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-2.0.2.tgz?cache=0&sync_timestamp=1599670484407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-2.0.2.tgz",
-      "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
-      "dev": true,
-      "requires": {
-        "alphanum-sort": "^1.0.1",
-        "postcss": "^5.0.4",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-url": {
-      "version": "7.3.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-url/download/postcss-url-7.3.2.tgz",
-      "integrity": "sha1-X+onOAf7hLOMRhw8mp6KvSNfcSA=",
-      "dev": true,
-      "requires": {
-        "mime": "^1.4.1",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.0",
-        "postcss": "^6.0.1",
-        "xxhashjs": "^0.2.1"
-      }
-    },
-    "postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
-      "dev": true
-    },
-    "postcss-zindex": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-zindex/download/postcss-zindex-2.2.0.tgz?cache=0&sync_timestamp=1599670556187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-zindex%2Fdownload%2Fpostcss-zindex-2.2.0.tgz",
-      "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.1",
-        "postcss": "^5.0.4",
-        "uniqs": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-              "dev": true
-            }
-          }
-        },
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "postcss": {
-          "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz",
-          "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "js-base64": "^2.1.9",
-            "source-map": "^0.5.6",
-            "supports-color": "^3.2.3"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
-      }
-    },
-    "prepend-http": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
-      "dev": true
-    },
-    "prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1600217249280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
-      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
-      "dev": true
-    },
-    "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
-      "dev": true,
-      "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
-      }
-    },
-    "private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
-      "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
-      "dev": true
-    },
-    "process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
-      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-      "dev": true
-    },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
-      "dev": true
-    },
-    "promise-inflight": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
-      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
-      "dev": true
-    },
-    "proxy-addr": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
-      "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=",
-      "dev": true,
-      "requires": {
-        "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.1"
-      }
-    },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-      "dev": true
-    },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
-    "public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
-      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
-      "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "parse-asn1": "^5.0.0",
-        "randombytes": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
-          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
-          "dev": true
-        }
-      }
-    },
-    "pump": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
-      "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz",
-      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
-      "dev": true,
-      "requires": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      }
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
-      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
-      "dev": true
-    },
-    "q": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
-      "dev": true
-    },
-    "qs": {
-      "version": "6.7.0",
-      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
-      "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
-      "dev": true
-    },
-    "query-string": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz",
-      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.1.0",
-        "strict-uri-encode": "^1.0.0"
-      }
-    },
-    "querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-      "dev": true
-    },
-    "querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz",
-      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
-      "dev": true
-    },
-    "querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz",
-      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
-      "dev": true
-    },
-    "randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
-      "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "randomfill": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
-      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
-      "dev": true,
-      "requires": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz",
-      "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
-      "dev": true
-    },
-    "raw-body": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz",
-      "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
-      "dev": true,
-      "requires": {
-        "bytes": "3.1.0",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      }
-    },
-    "read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz",
-      "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
-      "dev": true,
-      "requires": {
-        "pify": "^2.3.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        }
-      }
-    },
-    "read-pkg": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz",
-      "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "^2.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^2.0.0"
-      },
-      "dependencies": {
-        "path-type": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz",
-          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
-          "dev": true,
-          "requires": {
-            "pify": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        }
-      }
-    },
-    "read-pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz",
-      "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
-      "dev": true,
-      "requires": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^2.0.0"
-      }
-    },
-    "readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
-      "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
-      "dev": true,
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "readdirp": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz",
-      "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "picomatch": "^2.2.1"
-      }
-    },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "requires": {
-        "resolve": "^1.1.6"
-      }
-    },
-    "redent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-      "dev": true,
-      "requires": {
-        "indent-string": "^2.1.0",
-        "strip-indent": "^1.0.1"
-      }
-    },
-    "reduce-css-calc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-1.3.0.tgz",
-      "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^0.4.2",
-        "math-expression-evaluator": "^1.2.14",
-        "reduce-function-call": "^1.0.1"
-      },
-      "dependencies": {
-        "balanced-match": {
-          "version": "0.4.2",
-          "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz",
-          "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
-          "dev": true
-        }
-      }
-    },
-    "reduce-function-call": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/reduce-function-call/download/reduce-function-call-1.0.3.tgz",
-      "integrity": "sha1-YDUPf7JSwKZ+sQ/UaU0WkJlxMA8=",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "regenerate": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz",
-      "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=",
-      "dev": true
-    },
-    "regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
-      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
-    },
-    "regenerator-transform": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.10.1.tgz",
-      "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.18.0",
-        "babel-types": "^6.19.0",
-        "private": "^0.1.6"
-      }
-    },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz",
-      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "regexp.prototype.flags": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz",
-      "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      }
-    },
-    "regexpu-core": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz?cache=0&sync_timestamp=1600413529161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-2.0.0.tgz",
-      "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
-      "dev": true,
-      "requires": {
-        "regenerate": "^1.2.1",
-        "regjsgen": "^0.2.0",
-        "regjsparser": "^0.1.4"
-      }
-    },
-    "regjsgen": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz?cache=0&sync_timestamp=1590335923060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsgen%2Fdownload%2Fregjsgen-0.2.0.tgz",
-      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
-      "dev": true
-    },
-    "regjsparser": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz",
-      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
-      "dev": true,
-      "requires": {
-        "jsesc": "~0.5.0"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-          "dev": true
-        }
-      }
-    },
-    "relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz",
-      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
-      "dev": true
-    },
-    "remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
-    },
-    "renderkid": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
-      "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
-      "dev": true,
-      "requires": {
-        "css-select": "^4.1.3",
-        "dom-converter": "^0.2.0",
-        "htmlparser2": "^6.1.0",
-        "lodash": "^4.17.21",
-        "strip-ansi": "^3.0.1"
-      },
-      "dependencies": {
-        "css-select": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
-          "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
-          "dev": true,
-          "requires": {
-            "boolbase": "^1.0.0",
-            "css-what": "^5.1.0",
-            "domhandler": "^4.3.0",
-            "domutils": "^2.8.0",
-            "nth-check": "^2.0.1"
-          }
-        },
-        "css-what": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
-          "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
-          "dev": true
-        },
-        "dom-serializer": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
-          "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.0.1",
-            "domhandler": "^4.2.0",
-            "entities": "^2.0.0"
-          }
-        },
-        "domelementtype": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
-          "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
-          "dev": true
-        },
-        "domhandler": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
-          "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.2.0"
-          }
-        },
-        "domutils": {
-          "version": "2.8.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-          "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "^1.0.1",
-            "domelementtype": "^2.2.0",
-            "domhandler": "^4.2.0"
-          }
-        },
-        "htmlparser2": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
-          "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.0.1",
-            "domhandler": "^4.0.0",
-            "domutils": "^2.5.2",
-            "entities": "^2.0.0"
-          }
-        },
-        "nth-check": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
-          "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
-          "dev": true,
-          "requires": {
-            "boolbase": "^1.0.0"
-          }
-        }
-      }
-    },
-    "repeat-element": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz",
-      "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=",
-      "dev": true
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-      "dev": true
-    },
-    "repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "dev": true,
-      "requires": {
-        "is-finite": "^1.0.0"
-      }
-    },
-    "require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
-    },
-    "require-from-string": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/require-from-string/download/require-from-string-1.2.1.tgz",
-      "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
-      "dev": true
-    },
-    "require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
-      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-      "dev": true
-    },
-    "requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
-      "dev": true
-    },
-    "resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
-    },
-    "resolve": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz",
-      "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=",
-      "dev": true,
-      "requires": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "resolve-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz",
-      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
-      "dev": true,
-      "requires": {
-        "resolve-from": "^3.0.0"
-      }
-    },
-    "resolve-from": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
-      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-      "dev": true
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-      "dev": true
-    },
-    "restore-cursor": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz",
-      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
-      "dev": true,
-      "requires": {
-        "onetime": "^2.0.0",
-        "signal-exit": "^3.0.2"
-      }
-    },
-    "ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz",
-      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
-      "dev": true
-    },
-    "rgb-regex": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
-      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
-      "dev": true
-    },
-    "rgba-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
-      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
-      "dev": true
-    },
-    "right-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "dev": true,
-      "requires": {
-        "align-text": "^0.1.1"
-      }
-    },
-    "rimraf": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz",
-      "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.3"
-      }
-    },
-    "ripemd160": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
-      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
-      "dev": true,
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1"
-      }
-    },
-    "run-queue": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz",
-      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
-      "dev": true,
-      "requires": {
-        "aproba": "^1.1.1"
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
-      "dev": true
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "dev": true,
-      "requires": {
-        "ret": "~0.1.10"
-      }
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
-      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
-      "dev": true
-    },
-    "sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz?cache=0&sync_timestamp=1589682064084&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsax%2Fdownload%2Fsax-1.2.4.tgz",
-      "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
-      "dev": true
-    },
-    "schema-utils": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.3.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.3.0.tgz",
-      "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
-      "dev": true,
-      "requires": {
-        "ajv": "^5.0.0"
-      }
-    },
-    "select": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/select/download/select-1.1.2.tgz",
-      "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
-    },
-    "select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
-      "dev": true
-    },
-    "selfsigned": {
-      "version": "1.10.8",
-      "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.8.tgz?cache=0&sync_timestamp=1600186082996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.8.tgz",
-      "integrity": "sha1-DRcgi30Swz+OrIXEGDXyf8PYGjA=",
-      "dev": true,
-      "requires": {
-        "node-forge": "^0.10.0"
-      }
-    },
-    "semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
-      "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
-      "dev": true
-    },
-    "send": {
-      "version": "0.17.1",
-      "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
-      "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "~1.7.2",
-        "mime": "1.6.0",
-        "ms": "2.1.1",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.1",
-        "statuses": "~1.5.0"
-      },
-      "dependencies": {
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
-          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
-          "dev": true
-        }
-      }
-    },
-    "serialize-javascript": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
-      "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
-      "dev": true
-    },
-    "serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
-      "dev": true,
-      "requires": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      },
-      "dependencies": {
-        "http-errors": {
-          "version": "1.6.3",
-          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz",
-          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-          "dev": true,
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.0",
-            "statuses": ">= 1.4.0 < 2"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        },
-        "setprototypeof": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
-          "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
-          "dev": true
-        }
-      }
-    },
-    "serve-static": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz",
-      "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=",
-      "dev": true,
-      "requires": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.17.1"
-      }
-    },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
-    },
-    "set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz",
-      "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "setimmediate": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-      "dev": true
-    },
-    "setprototypeof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
-      "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=",
-      "dev": true
-    },
-    "sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz",
-      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "dev": true,
-      "requires": {
-        "shebang-regex": "^1.0.0"
-      }
-    },
-    "shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1596697357985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-      "dev": true
-    },
-    "shelljs": {
-      "version": "0.7.8",
-      "resolved": "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz",
-      "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
-      "dev": true,
-      "requires": {
-        "glob": "^7.0.0",
-        "interpret": "^1.0.0",
-        "rechoir": "^0.6.2"
-      }
-    },
-    "shellwords": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz",
-      "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
-      "dev": true
-    },
-    "signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
-      "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
-      "dev": true
-    },
-    "simple-swizzle": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.3.1"
-      },
-      "dependencies": {
-        "is-arrayish": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-          "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-          "dev": true
-        }
-      }
-    },
-    "slash": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-      "dev": true
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz",
-      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
-      "dev": true,
-      "requires": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
-      "dev": true,
-      "requires": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-          "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-          "dev": true
-        }
-      }
-    },
-    "snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.2.0"
-      }
-    },
-    "sockjs": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz",
-      "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=",
-      "dev": true,
-      "requires": {
-        "faye-websocket": "^0.10.0",
-        "uuid": "^3.0.1"
-      }
-    },
-    "sockjs-client": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.5.tgz?cache=0&sync_timestamp=1596409908572&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.1.5.tgz",
-      "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
-      "dev": true,
-      "requires": {
-        "debug": "^2.6.6",
-        "eventsource": "0.1.6",
-        "faye-websocket": "~0.11.0",
-        "inherits": "^2.0.1",
-        "json3": "^3.3.2",
-        "url-parse": "^1.1.8"
-      },
-      "dependencies": {
-        "faye-websocket": {
-          "version": "0.11.3",
-          "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz",
-          "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=",
-          "dev": true,
-          "requires": {
-            "websocket-driver": ">=0.5.1"
-          }
-        }
-      }
-    },
-    "sort-keys": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
-      "dev": true,
-      "requires": {
-        "is-plain-obj": "^1.0.0"
-      }
-    },
-    "source-list-map": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
-      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=",
-      "dev": true
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
-    },
-    "source-map-resolve": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
-      "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
-      "dev": true,
-      "requires": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
-    "source-map-support": {
-      "version": "0.4.18",
-      "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz",
-      "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
-      "dev": true,
-      "requires": {
-        "source-map": "^0.5.6"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-      "dev": true
-    },
-    "spdx-correct": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz",
-      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz?cache=0&sync_timestamp=1589682217985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-expression-parse%2Fdownload%2Fspdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz?cache=0&sync_timestamp=1600286627478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.6.tgz",
-      "integrity": "sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4=",
-      "dev": true
-    },
-    "spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz",
-      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
-          "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
-      }
-    },
-    "spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz",
-      "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz",
-          "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
-          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
-      }
-    },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
-      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.0"
-      }
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "ssri": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
-      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "stable": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-      "dev": true
-    },
-    "stackframe": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854186823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz",
-      "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
-      "dev": true
-    },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "dev": true,
-      "requires": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz",
-      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
-      "dev": true
-    },
-    "stream-browserify": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
-      "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.1",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "stream-each": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz",
-      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "stream-http": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz",
-      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
-      "dev": true,
-      "requires": {
-        "builtin-status-codes": "^3.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.3.6",
-        "to-arraybuffer": "^1.0.0",
-        "xtend": "^4.0.0"
-      }
-    },
-    "stream-shift": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz",
-      "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=",
-      "dev": true
-    },
-    "strict-uri-encode": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz",
-      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
-      "dev": true
-    },
-    "string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
-      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
-      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
-      "dev": true,
-      "requires": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1596697387823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
-      }
-    },
-    "string.prototype.trimend": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
-      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      }
-    },
-    "string.prototype.trimstart": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
-      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      }
-    },
-    "strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1596697387823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^2.0.0"
-      }
-    },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
-    },
-    "strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
-      "dev": true
-    },
-    "strip-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz",
-      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-      "dev": true,
-      "requires": {
-        "get-stdin": "^4.0.1"
-      }
-    },
-    "stylehacks": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.0.tgz",
-      "integrity": "sha1-ZLMjlRxKJOX8ey7AbBN78y0VXoo=",
-      "dev": true,
-      "requires": {
-        "browserslist": "^4.0.0",
-        "postcss": "^6.0.0",
-        "postcss-selector-parser": "^3.0.0"
-      },
-      "dependencies": {
-        "browserslist": {
-          "version": "4.16.6",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
-          "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
-          "dev": true,
-          "requires": {
-            "caniuse-lite": "^1.0.30001219",
-            "colorette": "^1.2.2",
-            "electron-to-chromium": "^1.3.723",
-            "escalade": "^3.1.1",
-            "node-releases": "^1.1.71"
-          }
-        },
-        "postcss-selector-parser": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
-          "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
-          "dev": true,
-          "requires": {
-            "dot-prop": "^5.2.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
-          }
-        }
-      }
-    },
-    "supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
-      "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
-      "requires": {
-        "has-flag": "^3.0.0"
-      }
-    },
-    "svgo": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz",
-      "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
-      "dev": true,
-      "requires": {
-        "coa": "~1.0.1",
-        "colors": "~1.1.2",
-        "csso": "~2.3.1",
-        "js-yaml": "~3.7.0",
-        "mkdirp": "~0.5.1",
-        "sax": "~1.2.1",
-        "whet.extend": "~0.9.9"
-      },
-      "dependencies": {
-        "js-yaml": {
-          "version": "3.7.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
-          "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^2.6.0"
-          }
-        }
-      }
-    },
-    "tapable": {
-      "version": "0.2.9",
-      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-0.2.9.tgz?cache=0&sync_timestamp=1600381257656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-0.2.9.tgz",
-      "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=",
-      "dev": true
-    },
-    "throttle-debounce": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
-      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
-    },
-    "through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz",
-      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      }
-    },
-    "thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz",
-      "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
-      "dev": true
-    },
-    "time-stamp": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/time-stamp/download/time-stamp-2.2.0.tgz",
-      "integrity": "sha1-kX4KZpBWiHkOx7u94EBGJZr4P1c=",
-      "dev": true
-    },
-    "timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz",
-      "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=",
-      "dev": true,
-      "requires": {
-        "setimmediate": "^1.0.4"
-      }
-    },
-    "timsort": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
-      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
-      "dev": true
-    },
-    "tiny-emitter": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
-      "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
-    },
-    "to-arraybuffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
-      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-      "dev": true
-    },
-    "to-fast-properties": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz",
-      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-      "dev": true
-    },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz",
-      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
-      "dev": true,
-      "requires": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
-      "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-number": "^7.0.0"
-      }
-    },
-    "toidentifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
-      "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=",
-      "dev": true
-    },
-    "toposort": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
-      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
-      "dev": true
-    },
-    "trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-      "dev": true
-    },
-    "trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-      "dev": true
-    },
-    "tryer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz",
-      "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
-      "dev": true
-    },
-    "tty-browserify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz",
-      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
-      "dev": true
-    },
-    "type": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1598016600310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz",
-      "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=",
-      "dev": true
-    },
-    "type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
-      "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
-      "dev": true,
-      "requires": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
-      }
-    },
-    "typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz?cache=0&sync_timestamp=1596697411295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray%2Fdownload%2Ftypedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
-      "dev": true
-    },
-    "uc.micro": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
-      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
-    },
-    "uglify-js": {
-      "version": "3.4.10",
-      "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
-      "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
-      "dev": true,
-      "requires": {
-        "commander": "~2.19.0",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.19.0",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
-          "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
-          "dev": true
-        }
-      }
-    },
-    "uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "dev": true,
-      "optional": true
-    },
-    "uglifyjs-webpack-plugin": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.3.0.tgz",
-      "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=",
-      "dev": true,
-      "requires": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
-        "schema-utils": "^0.4.5",
-        "serialize-javascript": "^1.4.0",
-        "source-map": "^0.6.1",
-        "uglify-es": "^3.3.4",
-        "webpack-sources": "^1.1.0",
-        "worker-farm": "^1.5.2"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.5",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-          "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "commander": {
-          "version": "2.13.0",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.13.0.tgz",
-          "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=",
-          "dev": true
-        },
-        "fast-deep-equal": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-          "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-          "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-          "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "uglify-es": {
-          "version": "3.3.9",
-          "resolved": "https://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.9.tgz",
-          "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=",
-          "dev": true,
-          "requires": {
-            "commander": "~2.13.0",
-            "source-map": "~0.6.1"
-          }
-        }
-      }
-    },
-    "unbox-primitive": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
-      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "has-bigints": "^1.0.1",
-        "has-symbols": "^1.0.2",
-        "which-boxed-primitive": "^1.0.2"
-      }
-    },
-    "union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz",
-      "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=",
-      "dev": true,
-      "requires": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      }
-    },
-    "uniq": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
-      "dev": true
-    },
-    "uniqs": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz",
-      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
-      "dev": true
-    },
-    "unique-filename": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz",
-      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
-      "dev": true,
-      "requires": {
-        "unique-slug": "^2.0.0"
-      }
-    },
-    "unique-slug": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz",
-      "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
-      "dev": true,
-      "requires": {
-        "imurmurhash": "^0.1.4"
-      }
-    },
-    "unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
-      "dev": true
-    },
-    "unquote": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
-      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
-      "dev": true
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "dev": true,
-      "requires": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-          "dev": true,
-          "requires": {
-            "get-value": "^2.0.3",
-            "has-values": "^0.1.4",
-            "isobject": "^2.0.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-              "dev": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-          "dev": true
-        }
-      }
-    },
-    "upath": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz",
-      "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
-      "dev": true
-    },
-    "upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz",
-      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
-      "dev": true
-    },
-    "uri-js": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz",
-      "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-      "dev": true
-    },
-    "url": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz",
-      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-      "dev": true,
-      "requires": {
-        "punycode": "1.3.2",
-        "querystring": "0.2.0"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
-          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-          "dev": true
-        }
-      }
-    },
-    "url-loader": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
-      "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==",
-      "dev": true,
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "mime": "1.3.x"
-      },
-      "dependencies": {
-        "mime": {
-          "version": "1.3.6",
-          "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.3.6.tgz",
-          "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=",
-          "dev": true
-        }
-      }
-    },
-    "url-parse": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",
-      "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==",
-      "dev": true,
-      "requires": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz",
-      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
-      "dev": true
-    },
-    "util": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz",
-      "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
-      "dev": true,
-      "requires": {
-        "inherits": "2.0.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        }
-      }
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-      "dev": true
-    },
-    "util.promisify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
-      "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.2",
-        "has-symbols": "^1.0.1",
-        "object.getownpropertydescriptors": "^2.1.0"
-      }
-    },
-    "utila": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz",
-      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
-      "dev": true
-    },
-    "utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
-      "dev": true
-    },
-    "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1601826530476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
-      "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
-      "dev": true
-    },
-    "validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
-      "dev": true
-    },
-    "vendors": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz",
-      "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=",
-      "dev": true
-    },
-    "vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",
-      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
-      "dev": true
-    },
-    "vue": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1600441238751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz",
-      "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
-    },
-    "vue-baidu-map": {
-      "version": "0.21.22",
-      "resolved": "https://registry.npmjs.org/vue-baidu-map/-/vue-baidu-map-0.21.22.tgz",
-      "integrity": "sha512-WQMPCih4UTh0AZCKKH/OVOYnyAWjfRNeK6BIeoLmscyY5aF8zzlJhz/NOHLb3mdztIpB0Z6aohn4Jd9mfCSjQw==",
-      "requires": {
-        "bmaplib.curveline": "^1.0.0",
-        "bmaplib.heatmap": "^1.0.4",
-        "bmaplib.lushu": "^1.0.7",
-        "bmaplib.markerclusterer": "^1.0.13",
-        "markdown-it": "^8.4.0"
-      }
-    },
-    "vue-clipboard2": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
-      "integrity": "sha1-blUft704SImyiw2jsSKJ7WvKSJQ=",
-      "requires": {
-        "clipboard": "^2.0.0"
-      }
-    },
-    "vue-clipboards": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/vue-clipboards/-/vue-clipboards-1.3.0.tgz",
-      "integrity": "sha512-VMDYHpLQH0EUmqfk9b5XMrkvSu/HjNsLW2EBR4OS6JZHcv/PxmWYdoTBPVlp5eYrhWy07La8nWpRwAh09Mgufw==",
-      "requires": {
-        "clipboard": "^1.7.1"
-      },
-      "dependencies": {
-        "clipboard": {
-          "version": "1.7.1",
-          "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
-          "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
-          "requires": {
-            "good-listener": "^1.2.2",
-            "select": "^1.1.2",
-            "tiny-emitter": "^2.0.0"
-          }
-        }
-      }
-    },
-    "vue-contextmenujs": {
-      "version": "1.3.13",
-      "resolved": "https://registry.npmmirror.com/vue-contextmenujs/download/vue-contextmenujs-1.3.13.tgz",
-      "integrity": "sha1-O9rgI8e9QgleeNpCWAACUNUKuO8="
-    },
-    "vue-cookies": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/vue-cookies/download/vue-cookies-1.7.4.tgz?cache=0&sync_timestamp=1598941352058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-cookies%2Fdownload%2Fvue-cookies-1.7.4.tgz",
-      "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0="
-    },
-    "vue-hot-reload-api": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
-      "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
-      "dev": true
-    },
-    "vue-loader": {
-      "version": "13.7.3",
-      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-13.7.3.tgz?cache=0&sync_timestamp=1600850410121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-13.7.3.tgz",
-      "integrity": "sha1-4HRA94IwpjnQCtpNp7ltDp1iA38=",
-      "dev": true,
-      "requires": {
-        "consolidate": "^0.14.0",
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.1.0",
-        "lru-cache": "^4.1.1",
-        "postcss": "^6.0.8",
-        "postcss-load-config": "^1.1.0",
-        "postcss-selector-parser": "^2.0.0",
-        "prettier": "^1.7.0",
-        "resolve": "^1.4.0",
-        "source-map": "^0.6.1",
-        "vue-hot-reload-api": "^2.2.0",
-        "vue-style-loader": "^3.0.0",
-        "vue-template-es2015-compiler": "^1.6.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-2.2.2.tgz",
-          "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
-          "dev": true,
-          "requires": {
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.4.3",
-            "minimist": "^1.2.0",
-            "object-assign": "^4.1.0",
-            "os-homedir": "^1.0.1",
-            "parse-json": "^2.2.0",
-            "require-from-string": "^1.1.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "postcss-load-config": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-1.2.0.tgz?cache=0&sync_timestamp=1601607668112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-1.2.0.tgz",
-          "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
-          "dev": true,
-          "requires": {
-            "cosmiconfig": "^2.1.0",
-            "object-assign": "^4.1.0",
-            "postcss-load-options": "^1.2.0",
-            "postcss-load-plugins": "^2.3.0"
-          }
-        }
-      }
-    },
-    "vue-router": {
-      "version": "3.4.6",
-      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.6.tgz?cache=0&sync_timestamp=1602076636169&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.4.6.tgz",
-      "integrity": "sha1-972iyaQ9OYN2IcmgK6d4n12qJLI="
-    },
-    "vue-style-loader": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-3.1.2.tgz",
-      "integrity": "sha1-a2atNJmPyVIMLx5NX6QJFkHBWXo=",
-      "dev": true,
-      "requires": {
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.0.2"
-      }
-    },
-    "vue-template-compiler": {
-      "version": "2.6.12",
-      "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1597927391993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz",
-      "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
-      "dev": true,
-      "requires": {
-        "de-indent": "^1.0.2",
-        "he": "^1.1.0"
-      }
-    },
-    "vue-template-es2015-compiler": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
-      "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
-      "dev": true
-    },
-    "watchpack": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz?cache=0&sync_timestamp=1600385388649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.4.tgz",
-      "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=",
-      "dev": true,
-      "requires": {
-        "chokidar": "^3.4.1",
-        "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0",
-        "watchpack-chokidar2": "^2.0.0"
-      }
-    },
-    "watchpack-chokidar2": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz",
-      "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chokidar": "^2.1.8"
-      },
-      "dependencies": {
-        "anymatch": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "micromatch": "^3.1.4",
-            "normalize-path": "^2.1.1"
-          },
-          "dependencies": {
-            "normalize-path": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-              "dev": true,
-              "optional": true,
-              "requires": {
-                "remove-trailing-separator": "^1.0.1"
-              }
-            }
-          }
-        },
-        "binary-extensions": {
-          "version": "1.13.1",
-          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
-          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-          "dev": true,
-          "optional": true
-        },
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          }
-        },
-        "chokidar": {
-          "version": "2.1.8",
-          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
-          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "anymatch": "^2.0.0",
-            "async-each": "^1.0.1",
-            "braces": "^2.3.2",
-            "fsevents": "^1.2.7",
-            "glob-parent": "^3.1.0",
-            "inherits": "^2.0.3",
-            "is-binary-path": "^1.0.0",
-            "is-glob": "^4.0.0",
-            "normalize-path": "^3.0.0",
-            "path-is-absolute": "^1.0.0",
-            "readdirp": "^2.2.1",
-            "upath": "^1.1.1"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          }
-        },
-        "fsevents": {
-          "version": "1.2.13",
-          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
-        },
-        "glob-parent": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "is-glob": "^3.1.0",
-            "path-dirname": "^1.0.0"
-          },
-          "dependencies": {
-            "is-glob": {
-              "version": "3.1.0",
-              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-              "dev": true,
-              "optional": true,
-              "requires": {
-                "is-extglob": "^2.1.0"
-              }
-            }
-          }
-        },
-        "is-binary-path": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "binary-extensions": "^1.0.0"
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "readdirp": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "micromatch": "^3.1.10",
-            "readable-stream": "^2.0.2"
-          }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        }
-      }
-    },
-    "wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz",
-      "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
-      "dev": true,
-      "requires": {
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "webpack": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
-      "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==",
-      "dev": true,
-      "requires": {
-        "acorn": "^5.0.0",
-        "acorn-dynamic-import": "^2.0.0",
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0",
-        "async": "^2.1.2",
-        "enhanced-resolve": "^3.4.0",
-        "escope": "^3.6.0",
-        "interpret": "^1.0.0",
-        "json-loader": "^0.5.4",
-        "json5": "^0.5.1",
-        "loader-runner": "^2.3.0",
-        "loader-utils": "^1.1.0",
-        "memory-fs": "~0.4.1",
-        "mkdirp": "~0.5.0",
-        "node-libs-browser": "^2.0.0",
-        "source-map": "^0.5.3",
-        "supports-color": "^4.2.1",
-        "tapable": "^0.2.7",
-        "uglifyjs-webpack-plugin": "^0.4.6",
-        "watchpack": "^1.4.0",
-        "webpack-sources": "^1.0.1",
-        "yargs": "^8.0.2"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.5",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz?cache=0&sync_timestamp=1600886864349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.5.tgz",
-          "integrity": "sha1-GbDouuj0duW6ZmMAOHd1+xoApNo=",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
-          "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz",
-          "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599334207614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
-          "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz?cache=0&sync_timestamp=1598611719015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-4.5.0.tgz",
-          "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^2.0.0"
-          }
-        },
-        "uglify-js": {
-          "version": "2.8.29",
-          "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz",
-          "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
-          "dev": true,
-          "requires": {
-            "source-map": "~0.5.1",
-            "uglify-to-browserify": "~1.0.0",
-            "yargs": "~3.10.0"
-          },
-          "dependencies": {
-            "yargs": {
-              "version": "3.10.0",
-              "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz",
-              "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-              "dev": true,
-              "requires": {
-                "camelcase": "^1.0.2",
-                "cliui": "^2.1.0",
-                "decamelize": "^1.0.0",
-                "window-size": "0.1.0"
-              }
-            }
-          }
-        },
-        "uglifyjs-webpack-plugin": {
-          "version": "0.4.6",
-          "resolved": "https://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-0.4.6.tgz",
-          "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
-          "dev": true,
-          "requires": {
-            "source-map": "^0.5.6",
-            "uglify-js": "^2.8.29",
-            "webpack-sources": "^1.0.1"
-          }
-        }
-      }
-    },
-    "webpack-bundle-analyzer": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz",
-      "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==",
-      "dev": true,
-      "requires": {
-        "acorn": "^5.3.0",
-        "bfj-node4": "^5.2.0",
-        "chalk": "^2.3.0",
-        "commander": "^2.13.0",
-        "ejs": "^2.5.7",
-        "express": "^4.16.2",
-        "filesize": "^3.5.11",
-        "gzip-size": "^4.1.0",
-        "lodash": "^4.17.4",
-        "mkdirp": "^0.5.1",
-        "opener": "^1.4.3",
-        "ws": "^4.0.0"
-      }
-    },
-    "webpack-dev-middleware": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-1.12.2.tgz?cache=0&sync_timestamp=1594744509096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-1.12.2.tgz",
-      "integrity": "sha1-+PwRIM47T8VoDO7LQ9d3lmshEF4=",
-      "dev": true,
-      "requires": {
-        "memory-fs": "~0.4.1",
-        "mime": "^1.5.0",
-        "path-is-absolute": "^1.0.0",
-        "range-parser": "^1.0.3",
-        "time-stamp": "^2.0.0"
-      }
-    },
-    "webpack-dev-server": {
-      "version": "2.11.5",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz",
-      "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==",
-      "dev": true,
-      "requires": {
-        "ansi-html": "0.0.7",
-        "array-includes": "^3.0.3",
-        "bonjour": "^3.5.0",
-        "chokidar": "^2.1.2",
-        "compression": "^1.7.3",
-        "connect-history-api-fallback": "^1.3.0",
-        "debug": "^3.1.0",
-        "del": "^3.0.0",
-        "express": "^4.16.2",
-        "html-entities": "^1.2.0",
-        "http-proxy-middleware": "^0.19.1",
-        "import-local": "^1.0.0",
-        "internal-ip": "1.2.0",
-        "ip": "^1.1.5",
-        "killable": "^1.0.0",
-        "loglevel": "^1.4.1",
-        "opn": "^5.1.0",
-        "portfinder": "^1.0.9",
-        "selfsigned": "^1.9.1",
-        "serve-index": "^1.9.1",
-        "sockjs": "0.3.19",
-        "sockjs-client": "1.1.5",
-        "spdy": "^4.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^5.1.0",
-        "webpack-dev-middleware": "1.12.2",
-        "yargs": "6.6.0"
-      },
-      "dependencies": {
-        "anymatch": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-          "dev": true,
-          "requires": {
-            "micromatch": "^3.1.4",
-            "normalize-path": "^2.1.1"
-          },
-          "dependencies": {
-            "normalize-path": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-              "dev": true,
-              "requires": {
-                "remove-trailing-separator": "^1.0.1"
-              }
-            }
-          }
-        },
-        "binary-extensions": {
-          "version": "1.13.1",
-          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261283449&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz",
-          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-          "dev": true
-        },
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz",
-          "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          }
-        },
-        "camelcase": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz",
-          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-          "dev": true
-        },
-        "chokidar": {
-          "version": "2.1.8",
-          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1597763177396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
-          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
-          "dev": true,
-          "requires": {
-            "anymatch": "^2.0.0",
-            "async-each": "^1.0.1",
-            "braces": "^2.3.2",
-            "fsevents": "^1.2.7",
-            "glob-parent": "^3.1.0",
-            "inherits": "^2.0.3",
-            "is-binary-path": "^1.0.0",
-            "is-glob": "^4.0.0",
-            "normalize-path": "^3.0.0",
-            "path-is-absolute": "^1.0.0",
-            "readdirp": "^2.2.1",
-            "upath": "^1.1.1"
-          }
-        },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502873540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz",
-          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          }
-        },
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "fsevents": {
-          "version": "1.2.13",
-          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
-        },
-        "glob-parent": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-          "dev": true,
-          "requires": {
-            "is-glob": "^3.1.0",
-            "path-dirname": "^1.0.0"
-          },
-          "dependencies": {
-            "is-glob": {
-              "version": "3.1.0",
-              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-              "dev": true,
-              "requires": {
-                "is-extglob": "^2.1.0"
-              }
-            }
-          }
-        },
-        "is-binary-path": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-          "dev": true,
-          "requires": {
-            "binary-extensions": "^1.0.0"
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "os-locale": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz",
-          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-          "dev": true,
-          "requires": {
-            "lcid": "^1.0.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
-          }
-        },
-        "readdirp": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "micromatch": "^3.1.10",
-            "readable-stream": "^2.0.2"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "^0.2.0"
-          }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-          "dev": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        },
-        "which-module": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz",
-          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-          "dev": true
-        },
-        "y18n": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-          "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "6.6.0",
-          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-6.6.0.tgz",
-          "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0",
-            "cliui": "^3.2.0",
-            "decamelize": "^1.1.1",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^1.4.0",
-            "read-pkg-up": "^1.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^1.0.2",
-            "which-module": "^1.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^4.2.0"
-          }
-        },
-        "yargs-parser": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-4.2.1.tgz",
-          "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0"
-          }
-        }
-      }
-    },
-    "webpack-merge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1602063025787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz",
-      "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.15"
-      }
-    },
-    "webpack-sources": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz",
-      "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
-      "dev": true,
-      "requires": {
-        "source-list-map": "^2.0.0",
-        "source-map": "~0.6.1"
-      }
-    },
-    "websocket-driver": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.7.4.tgz",
-      "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
-      "dev": true,
-      "requires": {
-        "http-parser-js": ">=0.5.1",
-        "safe-buffer": ">=5.1.0",
-        "websocket-extensions": ">=0.1.1"
-      }
-    },
-    "websocket-extensions": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
-      "dev": true
-    },
-    "whet.extend": {
-      "version": "0.9.9",
-      "resolved": "https://registry.npm.taobao.org/whet.extend/download/whet.extend-0.9.9.tgz",
-      "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
-      "dev": true
-    },
-    "which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
-      "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
-      "dev": true,
-      "requires": {
-        "isexe": "^2.0.0"
-      }
-    },
-    "which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "requires": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      }
-    },
-    "which-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-      "dev": true
-    },
-    "window-size": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz",
-      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-      "dev": true
-    },
-    "wordwrap": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz",
-      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-      "dev": true
-    },
-    "worker-farm": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz",
-      "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=",
-      "dev": true,
-      "requires": {
-        "errno": "~0.1.7"
-      }
-    },
-    "wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
-      "requires": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1"
-      },
-      "dependencies": {
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        }
-      }
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "ws": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/ws/download/ws-4.1.0.tgz?cache=0&sync_timestamp=1593925601875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-4.1.0.tgz",
-      "integrity": "sha1-qXm119TaaL9U7+BAiWfDJIaacok=",
-      "dev": true,
-      "requires": {
-        "async-limiter": "~1.0.0",
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1596697437792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz",
-      "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
-      "dev": true
-    },
-    "xxhashjs": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/xxhashjs/download/xxhashjs-0.2.2.tgz",
-      "integrity": "sha1-imJRVnYhocRqWuIE2gJJx/jKqdg=",
-      "dev": true,
-      "requires": {
-        "cuint": "^0.2.2"
-      }
-    },
-    "y18n": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
-      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
-      "dev": true
-    },
-    "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-      "dev": true
-    },
-    "yargs": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1600660100032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz",
-      "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
-      "dev": true,
-      "requires": {
-        "camelcase": "^4.1.0",
-        "cliui": "^3.2.0",
-        "decamelize": "^1.1.1",
-        "get-caller-file": "^1.0.1",
-        "os-locale": "^2.0.0",
-        "read-pkg-up": "^2.0.0",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^1.0.1",
-        "set-blocking": "^2.0.0",
-        "string-width": "^2.0.0",
-        "which-module": "^2.0.0",
-        "y18n": "^3.2.1",
-        "yargs-parser": "^7.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
-          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597606145227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wrap-ansi": "^2.0.0"
-          },
-          "dependencies": {
-            "string-width": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-              "dev": true,
-              "requires": {
-                "code-point-at": "^1.0.0",
-                "is-fullwidth-code-point": "^1.0.0",
-                "strip-ansi": "^3.0.0"
-              }
-            }
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "y18n": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-          "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-          "dev": true
-        }
-      }
-    },
-    "yargs-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-7.0.0.tgz",
-      "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
-      "dev": true,
-      "requires": {
-        "camelcase": "^4.1.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
-          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-          "dev": true
-        }
-      }
-    },
-    "zrender": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz",
-      "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY="
-    }
-  }
-}
diff --git a/web_src/package.json b/web_src/package.json
deleted file mode 100644
index 20fc3a2..0000000
--- a/web_src/package.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "name": "gb_web",
-  "version": "1.0.0",
-  "description": "A Vue.js project",
-  "author": "648540858 <648540858@qq.com>",
-  "private": true,
-  "scripts": {
-    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
-    "start": "npm run dev",
-    "build": "node build/build.js"
-  },
-  "dependencies": {
-    "axios": "^0.24.0",
-    "core-js": "^2.6.5",
-    "echarts": "^4.9.0",
-    "element-ui": "^2.15.6",
-    "fingerprintjs2": "^2.1.2",
-    "moment": "^2.29.1",
-    "postcss-pxtorem": "^5.1.1",
-    "vue": "^2.6.11",
-    "vue-baidu-map": "^0.21.22",
-    "vue-clipboard2": "^0.3.1",
-    "vue-clipboards": "^1.3.0",
-    "vue-contextmenujs": "^1.3.13",
-    "vue-cookies": "^1.7.4",
-    "vue-router": "^3.1.6"
-  },
-  "devDependencies": {
-    "autoprefixer": "^7.1.2",
-    "babel-core": "^6.22.1",
-    "babel-helper-vue-jsx-merge-props": "^2.0.3",
-    "babel-loader": "^7.1.1",
-    "babel-plugin-syntax-jsx": "^6.18.0",
-    "babel-plugin-transform-runtime": "^6.22.0",
-    "babel-plugin-transform-vue-jsx": "^3.5.0",
-    "babel-preset-env": "^1.3.2",
-    "babel-preset-stage-2": "^6.22.0",
-    "chalk": "^2.0.1",
-    "copy-webpack-plugin": "^4.6.0",
-    "css-loader": "^0.28.11",
-    "extract-text-webpack-plugin": "^3.0.0",
-    "file-loader": "^1.1.4",
-    "friendly-errors-webpack-plugin": "^1.6.1",
-    "html-webpack-plugin": "^2.30.1",
-    "node-notifier": "^5.1.2",
-    "optimize-css-assets-webpack-plugin": "^3.2.0",
-    "ora": "^1.2.0",
-    "portfinder": "^1.0.13",
-    "postcss-import": "^11.0.0",
-    "postcss-loader": "^2.0.8",
-    "postcss-url": "^7.2.1",
-    "rimraf": "^2.6.0",
-    "semver": "^5.3.0",
-    "shelljs": "^0.7.6",
-    "uglifyjs-webpack-plugin": "^1.1.1",
-    "url-loader": "^0.5.8",
-    "vue-loader": "^13.3.0",
-    "vue-style-loader": "^3.0.1",
-    "vue-template-compiler": "^2.5.2",
-    "webpack": "^3.6.0",
-    "webpack-bundle-analyzer": "^2.9.0",
-    "webpack-dev-server": "^2.9.1",
-    "webpack-merge": "^4.1.0"
-  },
-  "engines": {
-    "node": ">= 6.0.0",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not ie <= 8"
-  ]
-}
diff --git a/web_src/src/App.vue b/web_src/src/App.vue
deleted file mode 100644
index e114545..0000000
--- a/web_src/src/App.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-  <div id="app">
-    <router-view></router-view>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'app',
-  data(){
-    return {
-      isLogin: false,
-      userInfo: { //保存用户信息
-        nick: null,
-        ulevel: null,
-        uid: null,
-        portrait: null
-      }
-    }
-  },
-  created() {
-    if(!this.$cookies.get("session")){
-      //如果没有登录状态则跳转到登录页
-      this.$router.push('/login');
-    }
-  },
-  //监听路由检查登录
-  watch:{
-    "$route" : 'checkLogin'
-  },
-  mounted(){
-    //组件开始挂载时获取用户信息
-    // this.getUserInfo();
-  },
-  methods: {
-    //请求用户的一些信息
-    getUserInfo(){
-      var userinfo = this.$cookies.get("session");
-    },
-    checkLogin(){
-      //检查是否存在session
-      //cookie操作方法在源码里有或者参考网上的即可
-      if(!this.$cookies.get("session")){
-        //如果没有登录状态则跳转到登录页
-        this.$router.push('/login');
-      }
-    },
-    getCookie: function (cname) {
-      var name = cname + "=";
-      var ca = document.cookie.split(';');
-      for (var i = 0; i < ca.length; i++) {
-        var c = ca[i];
-        while (c.charAt(0) == ' ') c = c.substring(1);
-        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
-      }
-      return "";
-    }
-  },
-  components: {}
-};
-</script>
-
-<style>
-html,
-body,
-#app {
-  margin: 0 0;
-  background-color: #e9eef3;
-  height: 100%;
-}
-.el-header,
-.el-footer {
-  /* background-color: #b3c0d1; */
-  color: #333;
-  text-align: center;
-  line-height: 60px;
-}
-.el-main {
-  background-color: #e9eef3;
-  color: #333;
-  text-align: center;
-  padding-top: 0px !important;
-}
-</style>
diff --git a/web_src/src/api/deviceApi.js b/web_src/src/api/deviceApi.js
deleted file mode 100644
index 830164f..0000000
--- a/web_src/src/api/deviceApi.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import axios from 'axios';
-
-export const tree = (deviceId) => {
-  return axios({
-    url: `/api/device/query/${deviceId}/tree`,
-    method: 'get'
-  })
-}
-
-export const deviceList = (page, count) => {
-  return axios({
-    method: 'get',
-    url:`/api/device/query/devices`,
-    params: {
-      page,
-      count
-    }
-  })
-}
\ No newline at end of file
diff --git a/web_src/src/assets/icons.png b/web_src/src/assets/icons.png
deleted file mode 100644
index 9ed8102..0000000
--- a/web_src/src/assets/icons.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/loading.png b/web_src/src/assets/loading.png
deleted file mode 100644
index fa490e6..0000000
--- a/web_src/src/assets/loading.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/login-bg.jpg b/web_src/src/assets/login-bg.jpg
deleted file mode 100644
index ee27d8e..0000000
--- a/web_src/src/assets/login-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/login-cloud.png b/web_src/src/assets/login-cloud.png
deleted file mode 100644
index 02b1958..0000000
--- a/web_src/src/assets/login-cloud.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/logo.png b/web_src/src/assets/logo.png
deleted file mode 100644
index c5da2d4..0000000
--- a/web_src/src/assets/logo.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/play.png b/web_src/src/assets/play.png
deleted file mode 100644
index e4b33f3..0000000
--- a/web_src/src/assets/play.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/assets/zlm-log.png b/web_src/src/assets/zlm-log.png
deleted file mode 100644
index 5f492dc..0000000
--- a/web_src/src/assets/zlm-log.png
+++ /dev/null
Binary files differ
diff --git a/web_src/src/components/CloudRecord.vue b/web_src/src/components/CloudRecord.vue
deleted file mode 100644
index 78f8a46..0000000
--- a/web_src/src/components/CloudRecord.vue
+++ /dev/null
@@ -1,203 +0,0 @@
-<template>
-	<div id="app">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main>
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-          <span v-if="!recordDetail" >云端录像</span>
-          <el-page-header v-if="recordDetail"  @back="backToList" content="云端录像">
-          </el-page-header>
-          <div style="position: absolute; right: 5rem; top: 0.3rem;">
-            节点选择:
-            <el-select size="mini" @change="chooseMediaChange" style="width: 16rem; margin-right: 1rem;" v-model="mediaServerId" placeholder="请选择" :disabled="recordDetail">
-            <el-option
-              v-for="item in mediaServerList"
-              :key="item.id"
-              :label="item.id"
-              :value="item.id">
-            </el-option>
-          </el-select>
-          </div>
-          <div style="position: absolute; right: 1rem; top: 0.3rem;">
-            <el-button v-if="!recordDetail" icon="el-icon-refresh-right" circle size="mini" :loading="loading" @click="getRecordList()"></el-button>
-          </div>
-        </div>
-        <div v-if="!recordDetail">
-
-          <!--设备列表-->
-          <el-table :data="recordList" border style="width: 100%" :height="winHeight">
-            <el-table-column prop="app" label="应用名" align="center">
-            </el-table-column>
-            <el-table-column prop="stream" label="流ID" align="center">
-            </el-table-column>
-            <el-table-column prop="time" label="时间" align="center">
-            </el-table-column>
-            <el-table-column label="操作" width="360" align="center" fixed="right">
-              <template slot-scope="scope">
-                <el-button-group>
-                  <el-button size="mini" icon="el-icon-video-camera-solid" type="primary" @click="showRecordDetail(scope.row)">查看</el-button>
-<!--                  <el-button size="mini" icon="el-icon-delete" type="danger"  @click="deleteRecord(scope.row)">删除</el-button>-->
-                </el-button-group>
-              </template>
-            </el-table-column>
-          </el-table>
-          <el-pagination
-            style="float: right"
-            @size-change="handleSizeChange"
-            @current-change="currentChange"
-            :current-page="currentPage"
-            :page-size="count"
-            :page-sizes="[15, 25, 35, 50]"
-            layout="total, sizes, prev, pager, next"
-            :total="total">
-          </el-pagination>
-        </div>
-        <cloud-record-detail ref="cloudRecordDetail" v-if="recordDetail" :recordFile="chooseRecord" :mediaServerId="mediaServerId" :mediaServerPath="mediaServerPath" ></cloud-record-detail>
-			</el-main>
-		</el-container>
-	</div>
-</template>
-
-<script>
-	import uiHeader from './UiHeader.vue'
-	import cloudRecordDetail from './CloudRecordDetail.vue'
-  import MediaServer from './service/MediaServer'
-	export default {
-		name: 'app',
-		components: {
-			uiHeader, cloudRecordDetail
-		},
-		data() {
-			return {
-        mediaServerList: [], // 滅体节点列表
-        mediaServerId: null, // 媒体服务
-        mediaServerPath: null, // 媒体服务地址
-        recordList: [], // 设备列表
-        chooseRecord: null, // 媒体服务
-
-        updateLooper: 0, //数据刷新轮训标志
-        winHeight: window.innerHeight - 250,
-        currentPage:1,
-        count:15,
-        total:0,
-        loading: false,
-        mediaServerObj : new MediaServer(),
-        recordDetail: false
-
-			};
-		},
-		computed: {
-
-		},
-		mounted() {
-			this.initData();
-		},
-		destroyed() {
-			// this.$destroy('videojs');
-		},
-		methods: {
-			initData: function() {
-			  // 获取媒体节点列表
-			  this.getMediaServerList();
-			  // this.getRecordList();
-			},
-      currentChange: function(val){
-        this.currentPage = val;
-        this.getRecordList();
-      },
-      handleSizeChange: function(val){
-        this.count = val;
-        this.getRecordList();
-      },
-      getMediaServerList: function (){
-        let that = this;
-        that.mediaServerObj.getOnlineMediaServerList((data)=>{
-          that.mediaServerList = data.data;
-          if (that.mediaServerList.length > 0) {
-            that.mediaServerId = that.mediaServerList[0].id
-            let port = that.mediaServerList[0].httpPort;
-            if (location.protocol === "https:" && that.mediaServerList[0].httpSSlPort) {
-              port = that.mediaServerList[0].httpSSlPort
-            }
-            that.mediaServerPath = location.protocol + "//" + that.mediaServerList[0].streamIp + ":" + port
-            that.getRecordList();
-          }
-        })
-      },
-      getRecordList: function (){
-        let that = this;
-        this.$axios({
-          method: 'get',
-          url:`/record_proxy/${that.mediaServerId}/api/record/list`,
-          params: {
-            page: that.currentPage,
-            count: that.count
-          }
-        }).then(function (res) {
-          console.log(res)
-          that.total = res.data.data.total;
-          that.recordList = res.data.data.list;
-          that.loading = false;
-        }).catch(function (error) {
-          console.log(error);
-          that.loading = false;
-        });
-      },
-      backToList(){
-			  this.recordDetail= false;
-      },
-      chooseMediaChange(val){
-          console.log(val)
-          this.total = 0;
-          this.recordList = [];
-          this.getRecordList();
-      },
-      showRecordDetail(row){
-        this.recordDetail = true;
-        this.chooseRecord = row;
-        // 查询是否存在录像
-        // this.$axios({
-        //   method: 'delete',
-        //   url:`/record_proxy/api/record/delete`,
-        //   params: {
-        //     page: this.currentPage,
-        //     count: this.count
-        //   }
-        // }).then((res) => {
-        //   console.log(res)
-        //   this.total = res.data.data.total;
-        //   this.recordList = res.data.data.list;
-        // }).catch(function (error) {
-        //   console.log(error);
-        // });
-
-      },
-      deleteRecord(){
-			  // TODO
-        let that = this;
-        this.$axios({
-          method: 'delete',
-          url:`/record_proxy/api/record/delete`,
-          params: {
-            page: that.currentPage,
-            count: that.count
-          }
-        }).then(function (res) {
-          console.log(res)
-          that.total = res.data.data.total;
-          that.recordList = res.data.data.list;
-        }).catch(function (error) {
-          console.log(error);
-        });
-      }
-
-
-		}
-	};
-</script>
-
-<style>
-
-</style>
diff --git a/web_src/src/components/CloudRecordDetail.vue b/web_src/src/components/CloudRecordDetail.vue
deleted file mode 100644
index bee3253..0000000
--- a/web_src/src/components/CloudRecordDetail.vue
+++ /dev/null
@@ -1,571 +0,0 @@
-<template>
-	<div id="recordDetail">
-		<el-container>
-      <el-aside width="300px">
-        <div class="record-list-box-box">
-          <el-date-picker size="mini" v-model="chooseDate" :picker-options="pickerOptions" type="date" value-format="yyyy-MM-dd" placeholder="日期" @change="dateChange()"></el-date-picker>
-          <div class="record-list-box" :style="recordListStyle">
-            <ul v-if="detailFiles.length >0" class="infinite-list record-list" v-infinite-scroll="infiniteScroll" >
-              <li v-for="item in detailFiles" class="infinite-list-item record-list-item" >
-                <el-tag v-if="choosedFile != item" @click="chooseFile(item)">
-                  <i class="el-icon-video-camera"  ></i>
-                  {{ item.substring(0,17)}}
-                </el-tag>
-                <el-tag type="danger" v-if="choosedFile == item">
-                  <i class="el-icon-video-camera"  ></i>
-                  {{ item.substring(0,17)}}
-                </el-tag>
-<!--                <a class="el-icon-download" style="color: #409EFF;font-weight: 600;margin-left: 10px;" :href="`${basePath}/${mediaServerId}/record/${recordFile.app}/${recordFile.stream}/${chooseDate}/${item}`" download />-->
-                <a class="el-icon-download" style="color: #409EFF;font-weight: 600;margin-left: 10px;" :href="`${basePath}/download.html?url=record/${recordFile.app}/${recordFile.stream}/${chooseDate}/${item}`" target="_blank" />
-              </li>
-            </ul>
-          </div>
-          <div v-if="detailFiles.length ==0" class="record-list-no-val" >暂无数据</div>
-        </div>
-
-        <div class="record-list-option">
-          <el-button size="mini" type="primary" icon="fa fa-cloud-download" style="margin: auto; " title="裁剪合并" @click="drawerOpen"></el-button>
-        </div>
-      </el-aside>
-			<el-main style="padding: 22px">
-        <div class="playBox" :style="playerStyle">
-          <player ref="recordVideoPlayer" :videoUrl="videoUrl"  fluent autoplay :height="true" ></player>
-        </div>
-        <div class="player-option-box" >
-          <el-slider
-            class="playtime-slider"
-            v-model="playTime"
-            id="playtimeSlider"
-            :disabled="detailFiles.length === 0"
-            :min="sliderMIn"
-            :max="sliderMax"
-            :format-tooltip="playTimeFormat"
-            @change="playTimeChange"
-            :marks="playTimeSliderMarks">
-          </el-slider>
-          <div class="slider-val-box">
-            <div class="slider-val" v-for="item of detailFiles" :style="'width:'  +  getDataWidth(item) + '%; left:' + getDataLeft(item) + '%'"></div>
-          </div>
-        </div>
-
-			</el-main>
-		</el-container>
-    <el-drawer
-      title="录像下载"
-      :visible.sync="drawer"
-      :direction="direction"
-      :before-close="drawerClose">
-      <div class="drawer-box">
-          <el-button icon="el-icon-plus" size="mini"  type="primary" @click="addTask"></el-button>
-        <el-tabs type="border-card" style="height: 100%" v-model="tabVal" @tab-click="tabClick">
-          <el-tab-pane name="running">
-            <span slot="label"><i class="el-icon-scissors"></i>进行中</span>
-            <ul class="task-list">
-              <li class="task-list-item" v-for="item in taskListForRuning">
-                <div class="task-list-item-box">
-                  <span>{{ item.startTime.substr(10) }}-{{item.endTime.substr(10)}}</span>
-                  <el-progress :percentage="(parseFloat(item.percentage)*100).toFixed(1)"></el-progress>
-                </div>
-              </li>
-
-            </ul>
-          </el-tab-pane>
-          <el-tab-pane name="ended">
-            <span slot="label"><i class="el-icon-finished"></i>已完成</span>
-            <ul class="task-list">
-              <li class="task-list-item" v-for="item in taskListEnded">
-                <div class="task-list-item-box" style="height: 2rem;line-height: 2rem;">
-                  <span>{{ item.startTime.substr(10) }}-{{item.endTime.substr(10)}}</span>
-                  <a class="el-icon-download download-btn" :href="basePath  + '/download.html?url=../' + item.recordFile" target="_blank">
-                  </a>
-                </div>
-              </li>
-
-            </ul>
-          </el-tab-pane>
-        </el-tabs>
-      </div>
-    </el-drawer>
-    <el-dialog title="选择时间段" :visible.sync="showTaskBox">
-      <el-date-picker
-        type="datetimerange"
-        v-model="taskTimeRange"
-        range-separator="至"
-        start-placeholder="开始时间"
-        end-placeholder="结束时间"
-        format="HH:mm:ss"
-        placeholder="选择时间范围">
-      </el-date-picker>
-      <el-button size="mini"  type="primary" @click="addTaskToServer">确认</el-button>
-    </el-dialog>
-	</div>
-</template>
-
-
-<script>
-  // TODO 根据查询的时间列表设置滑轨的最大值与最小值,
-	import uiHeader from './UiHeader.vue'
-	import player from './dialog/easyPlayer.vue'
-  import moment  from 'moment'
-	export default {
-		name: 'app',
-		components: {
-			uiHeader, player
-		},
-    props: ['recordFile', 'mediaServerId', 'dateFiles', 'mediaServerPath'],
-		data() {
-			return {
-        basePath: `${this.mediaServerPath}`,
-			  dateFilesObj: [],
-			  detailFiles: [],
-        chooseDate: null,
-        videoUrl: null,
-        choosedFile: null,
-        queryDate: new Date(),
-        currentPage: 1,
-        count: 1000000, // TODO 分页导致滑轨视频有效值无法获取完全
-        total: 0,
-        direction: "ltr",
-        drawer: false,
-        showTaskBox: false,
-        taskTimeRange: [],
-        taskListEnded: [],
-        taskListForRuning: [],
-        sliderMIn: 0,
-        sliderMax: 86400,
-        autoPlay: true,
-        taskUpdate: null,
-        tabVal: "running",
-        recordListStyle: {
-			    height: this.winHeight + "px",
-          overflow: "auto",
-          margin: "10px auto 10px auto"
-        },
-        playerStyle: {
-			    "margin": "auto",
-			    "margin-bottom": "20px",
-          "height": this.winHeight + "px",
-        },
-        winHeight: window.innerHeight - 240,
-        playTime: 0,
-        playTimeSliderMarks: {
-			    0: "00:00",
-			    3600: "01:00",
-			    7200: "02:00",
-			    10800: "03:00",
-			    14400: "04:00",
-			    18000: "05:00",
-			    21600: "06:00",
-			    25200: "07:00",
-			    28800: "08:00",
-			    32400: "09:00",
-			    36000: "10:00",
-          39600: "11:00",
-			    43200: "12:00",
-			    46800: "13:00",
-			    50400: "14:00",
-			    54000: "15:00",
-			    57600: "16:00",
-			    61200: "17:00",
-			    64800: "18:00",
-			    68400: "19:00",
-          72000: "20:00",
-			    75600: "21:00",
-			    79200: "22:00",
-			    82800: "23:00",
-          86400: "24:00",
-        },
-        pickerOptions:{
-          cellClassName:(date) =>{
-            // 通过显示一个点标识这一天有录像
-            let time = moment(date).format('YYYY-MM-DD')
-            if (this.dateFilesObj[time]){
-              return "data-picker-true"
-            }else {
-              return "data-picker-false"
-            }
-          }
-        }
-			};
-		},
-		computed: {
-
-		},
-		mounted() {
-      this.recordListStyle.height = this.winHeight + "px";
-      this.playerStyle["height"] = this.winHeight + "px";
-      // 查询当年有视频的日期
-      this.getDateInYear(()=>{
-        if (Object.values(this.dateFilesObj).length > 0){
-          this.chooseDate = Object.values(this.dateFilesObj)[Object.values(this.dateFilesObj).length -1];
-          this.dateChange();
-        }
-      })
-		},
-		destroyed() {
-			this.$destroy('recordVideoPlayer');
-		},
-		methods: {
-      dateChange(){
-        this.playTime = 0;
-        this.detailFiles = [];
-        this.currentPage = 1;
-        this.sliderMIn= 0;
-        this.sliderMax= 86400;
-        let chooseFullDate = new Date(this.chooseDate + " " + "00:00:00");
-        if (chooseFullDate.getFullYear() !== this.queryDate.getFullYear()
-          || chooseFullDate.getMonth() !== this.queryDate.getMonth()){
-          // this.getDateInYear()
-        }
-        this.queryRecordDetails(()=>{
-          if (this.detailFiles.length > 0){
-            let timeForFile = this.getTimeForFile(this.detailFiles[0]);
-            let lastTimeForFile = this.getTimeForFile(this.detailFiles[this.detailFiles.length - 1]);
-            let timeNum = timeForFile[0].getTime() - new Date(this.chooseDate + " " + "00:00:00").getTime()
-            let lastTimeNum = lastTimeForFile[1].getTime() - new Date(this.chooseDate + " " + "00:00:00").getTime()
-
-            this.playTime = parseInt(timeNum/1000)
-            this.sliderMIn = parseInt(timeNum/1000 - timeNum/1000%(60*60))
-            this.sliderMax = parseInt(lastTimeNum/1000 - lastTimeNum/1000%(60*60)) + 60*60
-          }
-        });
-      },
-      infiniteScroll(){
-			  if (this.total > this.detailFiles.length) {
-          this.currentPage ++;
-          this.queryRecordDetails();
-        }
-      },
-      queryRecordDetails: function (callback){
-        let that = this;
-        that.$axios({
-          method: 'get',
-          url:`/record_proxy/${that.mediaServerId}/api/record/file/list`,
-          params: {
-            app: that.recordFile.app,
-            stream: that.recordFile.stream,
-            startTime: that.chooseDate + " 00:00:00",
-            endTime: that.chooseDate + " 23:59:59",
-            page: that.currentPage,
-            count: that.count
-          }
-        }).then(function (res) {
-          that.total = res.data.data.total;
-          that.detailFiles = that.detailFiles.concat(res.data.data.list);
-          that.loading = false;
-          if (callback) callback();
-        }).catch(function (error) {
-          console.log(error);
-          that.loading = false;
-        });
-      },
-      chooseFile(file){
-        this.choosedFile = file;
-			  if (file == null) {
-          this.videoUrl = "";
-        }else {
-			    // TODO 控制列表滚动条
-          this.videoUrl = `${this.basePath}/record/${this.recordFile.app}/${this.recordFile.stream}/${this.chooseDate}/${this.choosedFile}`
-          console.log(this.videoUrl)
-        }
-
-      },
-
-      getDataWidth(item){
-        let timeForFile = this.getTimeForFile(item);
-        let result = (timeForFile[2])/((this.sliderMax - this.sliderMIn)*1000)
-        return result*100
-      },
-      getDataLeft(item){
-        let timeForFile = this.getTimeForFile(item);
-        let differenceTime = timeForFile[0].getTime() - new Date(this.chooseDate + " 00:00:00").getTime()
-        return parseFloat((differenceTime - this.sliderMIn * 1000)/((this.sliderMax - this.sliderMIn)*1000))*100   ;
-      },
-      playTimeChange(val){
-        let minTime = this.getTimeForFile(this.detailFiles[0])[0]
-        let maxTime = this.getTimeForFile(this.detailFiles[this.detailFiles.length - 1])[1];
-        this.chooseFile(null);
-        let timeMilli = new Date(this.chooseDate + " 00:00:00").getTime() + val*1000
-        if (timeMilli >= minTime.getTime() && timeMilli <= maxTime.getTime()){
-          for (let i = 0; i < this.detailFiles.length; i++) {
-            let timeForFile = this.getTimeForFile(this.detailFiles[i]);
-            if (timeMilli >= timeForFile[0].getTime() && timeMilli <= timeForFile[1].getTime()){
-              // TODO 当前未按照实际时间偏移,仅仅是找到对应的文静播放
-              this.chooseFile(this.detailFiles[i])
-              return;
-            }
-          }
-        }
-      },
-      getTimeForFile(file){
-        let timeStr = file.substring(0,17);
-        let starTime = new Date(this.chooseDate + " " + timeStr.split("-")[0]);
-        let endTime = new Date(this.chooseDate + " " + timeStr.split("-")[1]);
-        return [starTime, endTime, endTime.getTime() - starTime.getTime()];
-      },
-      playTimeFormat(val){
-        let h = parseInt(val/3600);
-        let m = parseInt((val - h*3600)/60);
-        let s = parseInt(val - h*3600 - m*60);
-        return h + ":" + m + ":" + s
-      },
-      deleteRecord(){
-			  // TODO
-        let that = this;
-        this.$axios({
-          method: 'delete',
-          url:`/record_proxy/${that.mediaServerId}/api/record/delete`,
-          params: {
-            page: that.currentPage,
-            count: that.count
-          }
-        }).then(function (res) {
-          if (res.data.code == 0) {
-            that.total = res.data.data.total;
-            that.recordList = res.data.data.list;
-          }
-        }).catch(function (error) {
-          console.log(error);
-        });
-      },
-      getDateInYear(callback){
-        let that = this;
-        that.dateFilesObj = {};
-        this.$axios({
-          method: 'get',
-          url:`/record_proxy/${that.mediaServerId}/api/record/date/list`,
-          params: {
-            app: that.recordFile.app,
-            stream: that.recordFile.stream
-          }
-        }).then(function (res) {
-          if (res.data.code === 0) {
-            if (res.data.data.length > 0) {
-              for (let i = 0; i < res.data.data.length; i++) {
-                that.dateFilesObj[res.data.data[i]] = res.data.data[i]
-              }
-
-              console.log(that.dateFilesObj)
-            }
-          }
-          if(callback)callback();
-        }).catch(function (error) {
-          console.log(error);
-        });
-      },
-      tabClick(){
-        this.getTaskList(this.tabVal === "ended")
-      },
-      drawerClose(){
-        this.drawer = false;
-        if (this.taskUpdate != null) {
-          window.clearInterval(this.taskUpdate)
-        }
-      },
-      drawerOpen(){
-        this.drawer = true;
-        if (this.taskUpdate != null) {
-          window.clearInterval(this.taskUpdate)
-        }
-        this.taskUpdate = setInterval(()=>{
-          this.getTaskList(this.tabVal === "ended")
-        }, 1000)
-      },
-      addTask(){
-        this.showTaskBox = true;
-        let startTimeStr = this.chooseDate + " " + this.detailFiles[0].substring(0,8);
-        let endTimeStr = this.chooseDate + " " + this.detailFiles[this.detailFiles.length - 1].substring(9,17);
-        this.taskTimeRange[0] = new Date(startTimeStr)
-        this.taskTimeRange[1] = new Date(endTimeStr)
-      },
-      addTaskToServer(){
-        let that = this;
-        this.$axios({
-          method: 'get',
-          url:`/record_proxy/${that.mediaServerId}/api/record/file/download/task/add`,
-          params: {
-            app: that.recordFile.app,
-            stream: that.recordFile.stream,
-            startTime: moment(this.taskTimeRange[0]).format('YYYY-MM-DD HH:mm:ss'),
-            endTime: moment(this.taskTimeRange[1]).format('YYYY-MM-DD HH:mm:ss'),
-          }
-        }).then(function (res) {
-          if (res.data.code === 0 && res.data.msg === "success") {
-            that.showTaskBox = false
-            that.getTaskList(false);
-          }else {
-            that.$message.error(res.data.msg);
-          }
-        }).catch(function (error) {
-          console.log(error);
-        });
-      },
-      handleTabClick() {
-        this.getTaskList(this.tabVal === "ended")
-      },
-      getTaskList(isEnd){
-        let that = this;
-        this.$axios({
-          method: 'get',
-          url:`/record_proxy/${that.mediaServerId}/api/record/file/download/task/list`,
-          params: {
-            isEnd: isEnd,
-          }
-        }).then(function (res) {
-          if (res.data.code == 0) {
-            if (isEnd){
-              that.taskListEnded = res.data.data;
-            }else {
-              that.taskListForRuning = res.data.data;
-            }
-          }
-        }).catch(function (error) {
-          console.log(error);
-        });
-      }
-		}
-	};
-</script>
-
-<style>
-  .el-slider__runway {
-    background-color:rgba(206, 206, 206, 0.47) !important;
-  }
-  .el-slider__bar {
-    background-color: rgba(153, 153, 153, 0) !important;
-  }
-  .playtime-slider {
-    position: relative;
-    z-index: 100;
-  }
-  .data-picker-true{
-
-  }
-  .data-picker-true:after{
-    content: "";
-    position: absolute;
-    width: 4px;
-    height: 4px;
-    background-color: #606060;
-    border-radius: 4px;
-    left: 45%;
-    top: 74%;
-
-  }
-  .data-picker-false{
-
-  }
-  .slider-val-box{
-    height: 6px;
-    position: relative;
-    top: -22px;
-  }
-  .slider-val{
-    height: 6px;
-    background-color: #007CFF;
-    position: absolute;
-  }
-  .record-list-box-box{
-    width: 250px;
-    float: left;
-  }
-  .record-list-box{
-    overflow: auto;
-    width: 220px;
-    list-style: none;
-    padding: 0;
-    margin: 0;
-    margin-top: 0px;
-    padding: 1rem 0;
-    background-color: #FFF;
-    margin-top: 10px;
-  }
-  .record-list{
-    list-style: none;
-    padding: 0;
-    margin: 0;
-    background-color: #FFF;
-
-  }
-  .record-list-no-val {
-    position: absolute;
-    color: #9f9f9f;
-    top: 50%;
-    left: 110px;
-  }
-  .record-list-item{
-    padding: 0;
-    margin: 0;
-    margin: 0.5rem 0;
-    cursor: pointer;
-  }
-  .record-list-option {
-    width: 10px;
-    float: left;
-    margin-top: 39px;
-
-  }
-  .drawer-box{
-    height: 100%;
-  }
-
-  .task-list{
-    list-style: none;
-    padding: 0;
-    margin: 0;
-    background-color: #FFF;
-  }
-
-  .task-list-item{
-    padding: 0;
-    margin: 0;
-    margin: 1.5rem 0;
-  }
-  .task-list-item-box{
-    text-align: left;
-    font-size: 13px;
-    color: #555;
-  }
-  .download-btn{
-    display: inline-block;
-    line-height: 1;
-    white-space: nowrap;
-    cursor: pointer;
-    background: #FFF;
-    background-color: rgb(255, 255, 255);
-    border: 1px solid #DCDFE6;
-    border-top-color: rgb(220, 223, 230);
-    border-right-color: rgb(220, 223, 230);
-    border-bottom-color: rgb(220, 223, 230);
-    border-left-color: rgb(220, 223, 230);
-    border-top-color: rgb(220, 223, 230);
-    border-right-color: rgb(220, 223, 230);
-    border-bottom-color: rgb(220, 223, 230);
-    border-left-color: rgb(220, 223, 230);
-    -webkit-appearance: none;
-    text-align: center;
-    -webkit-box-sizing: border-box;
-    box-sizing: border-box;
-    outline: 0;
-    margin: 0;
-    -webkit-transition: .1s;
-    transition: .1s;
-    font-weight: 500;
-    padding: 7px 14px;
-    font-size: 0.875rem;
-    border-radius: 4px;
-    font-size: 0.75rem;
-    border-radius: 3px;
-    color: #FFF;
-    background-color: #409EFF;
-    border-color: #409EFF;
-    float: right;
-  }
-  .download-btn:hover{
-    background: #66b1ff;
-    border-color: #66b1ff;
-    color: #FFF;
-  }
-  .time-box{
-  }
-</style>
diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue
deleted file mode 100644
index 7922a93..0000000
--- a/web_src/src/components/DeviceList.vue
+++ /dev/null
@@ -1,335 +0,0 @@
-<template>
-	<div id="app">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main>
-				<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-					<span style="font-size: 1rem; font-weight: bold;">设备列表</span>
-					<div style="position: absolute; right: 1rem; top: 0.3rem;">
-						<el-button icon="el-icon-refresh-right" circle size="mini" :loading="getDeviceListLoading" @click="getDeviceList()"></el-button>
-					</div>
-				</div>
-				<!-- <devicePlayer ref="devicePlayer"></devicePlayer> -->
-				<!--设备列表-->
-				<el-table :data="deviceList" border style="width: 100%;font-size: 12px;" :height="winHeight">
-					<el-table-column prop="name" label="名称"  align="center">
-					</el-table-column>
-					<el-table-column prop="deviceId" label="设备编号" width="180" align="center">
-					</el-table-column>
-          <el-table-column label="地址" width="180" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium">{{ scope.row.hostAddress }}</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-					<el-table-column prop="manufacturer" label="厂家" align="center">
-					</el-table-column>
-					<el-table-column label="流传输模式" align="center" width="120">
-            <template slot-scope="scope">
-              <el-select size="mini" @change="transportChange(scope.row)" v-model="scope.row.streamMode" placeholder="请选择">
-                <el-option key="UDP" label="UDP" value="UDP"></el-option>
-                <el-option key="TCP-ACTIVE" label="TCP主动模式" :disabled="true" value="TCP-ACTIVE"></el-option>
-                <el-option key="TCP-PASSIVE" label="TCP被动模式"  value="TCP-PASSIVE"></el-option>
-              </el-select>
-            </template>
-					</el-table-column>
-					<el-table-column prop="channelCount" label="通道数" align="center">
-					</el-table-column>
-					<el-table-column label="状态" width="120" align="center">
-						<template slot-scope="scope">
-							<div slot="reference" class="name-wrapper">
-								<el-tag size="medium" v-if="scope.row.online == 1">在线</el-tag>
-								<el-tag size="medium" type="info" v-if="scope.row.online == 0">离线</el-tag>
-							</div>
-						</template>
-					</el-table-column>
-          <el-table-column prop="keepaliveTime" label="最近心跳" align="center" width="140">
-          </el-table-column>
-          <el-table-column prop="registerTime" label="最近注册" align="center" width="140">
-          </el-table-column>
-          <el-table-column prop="updateTime" label="更新时间" align="center" width="140">
-          </el-table-column>
-          <el-table-column prop="createTime" label="创建时间" align="center" width="140">
-          </el-table-column>
-
-					<el-table-column label="操作" width="450" align="center" fixed="right">
-						<template slot-scope="scope">
-							<el-button size="mini" :ref="scope.row.deviceId + 'refbtn' "  v-if="scope.row.online!=0" icon="el-icon-refresh"  @click="refDevice(scope.row)">刷新</el-button>
-							<el-button-group>
-                <el-button size="mini" icon="el-icon-video-camera-solid" v-bind:disabled="scope.row.online==0"  type="primary" @click="showChannelList(scope.row)">通道</el-button>
-                <el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0"  type="primary" @click="showDevicePosition(scope.row)">定位</el-button>
-                <el-button size="mini" icon="el-icon-edit" type="primary" @click="edit(scope.row)">编辑</el-button>
-                <el-button size="mini" icon="el-icon-delete" type="danger" @click="deleteDevice(scope.row)">删除</el-button>
-							</el-button-group>
-							</template>
-					</el-table-column>
-				</el-table>
-				<el-pagination
-					style="float: right"
-					@size-change="handleSizeChange"
-					@current-change="currentChange"
-					:current-page="currentPage"
-					:page-size="count"
-					:page-sizes="[15, 25, 35, 50]"
-					layout="total, sizes, prev, pager, next"
-					:total="total">
-				</el-pagination>
-        <deviceEdit ref="deviceEdit" ></deviceEdit>
-			</el-main>
-		</el-container>
-	</div>
-</template>
-
-<script>
-	import uiHeader from './UiHeader.vue'
-	import deviceEdit from './dialog/deviceEdit.vue'
-	export default {
-		name: 'app',
-		components: {
-			uiHeader,
-      deviceEdit
-		},
-		data() {
-			return {
-				deviceList: [], //设备列表
-				currentDevice: {}, //当前操作设备对象
-
-				videoComponentList: [],
-				updateLooper: 0, //数据刷新轮训标志
-				currentDeviceChannelsLenth:0,
-				winHeight: window.innerHeight - 200,
-				currentPage:1,
-				count:15,
-				total:0,
-				getDeviceListLoading: false
-			};
-		},
-		computed: {
-			getcurrentDeviceChannels: function() {
-				let data = this.currentDevice['channelMap'];
-				let channels = null;
-				if (data) {
-					channels = Object.keys(data).map(key => {
-						return data[key];
-					});
-					this.currentDeviceChannelsLenth = channels.length;
-				}
-
-				console.log("数据:" + JSON.stringify(channels));
-				return channels;
-			}
-		},
-		mounted() {
-			this.initData();
-			this.updateLooper = setInterval(this.initData, 10000);
-		},
-		destroyed() {
-			this.$destroy('videojs');
-			clearTimeout(this.updateLooper);
-		},
-		methods: {
-			initData: function() {
-				this.getDeviceList();
-			},
-			currentChange: function(val){
-				this.currentPage = val;
-				this.getDeviceList();
-			},
-			handleSizeChange: function(val){
-				this.count = val;
-				this.getDeviceList();
-			},
-			getDeviceList: function() {
-				let that = this;
-				this.getDeviceListLoading = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/device/query/devices`,
-					params: {
-						page: that.currentPage,
-						count: that.count
-					}
-				}).then(function (res) {
-					console.log(res);
-					console.log(res.data.list);
-					that.total = res.data.total;
-					that.deviceList = res.data.list;
-					that.getDeviceListLoading = false;
-				}).catch(function (error) {
-					console.log(error);
-					that.getDeviceListLoading = false;
-				});
-
-			},
-      deleteDevice: function(row) {
-        let msg = "确定删除此设备?"
-        if (row.online !== 0) {
-          msg = "在线设备删除后仍可通过注册再次上线。<br/>如需彻底删除请先将设备离线。<br/><strong>确定删除此设备?</strong>"
-        }
-        this.$confirm(msg, '提示', {
-          dangerouslyUseHTMLString : true,
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          center: true,
-          type: 'warning'
-        }).then(() => {
-          this.$axios({
-            method: 'delete',
-            url:`/api/device/query/devices/${row.deviceId}/delete`
-          }).then((res)=>{
-            this.getDeviceList();
-          }).catch((error) =>{
-            console.log(error);
-          });
-        }).catch(() => {
-
-        });
-
-
-			},
-			showChannelList: function(row) {
-				console.log(JSON.stringify(row))
-				this.$router.push(`/channelList/${row.deviceId}/0/15/1`);
-			},
-			showDevicePosition: function(row) {
-				console.log(JSON.stringify(row))
-				this.$router.push(`/devicePosition/${row.deviceId}/0/15/1`);
-			},
-
-			//gb28181平台对接
-			//刷新设备信息
-			refDevice: function(itemData) {
-				console.log("刷新对应设备:" + itemData.deviceId);
-				var that = this;
-				that.$refs[itemData.deviceId + 'refbtn' ].loading = true;
-				this.$axios({
-					method: 'post',
-					url: '/api/device/query/devices/' + itemData.deviceId + '/sync'
-				}).then(function(res) {
-					console.log("刷新设备结果:"+JSON.stringify(res));
-					if (res.data.code !==0) {
-						that.$message({
-							showClose: true,
-							message: res.data.msg,
-							type: 'error'
-						});
-					}else{
-						that.$message({
-							showClose: true,
-							message: res.data.msg,
-							type: 'success'
-						});
-					}
-					that.initData()
-					that.$refs[itemData.deviceId + 'refbtn' ].loading = false;
-				}).catch(function(e) {
-					console.error(e)
-          that.$message({
-            showClose: true,
-            message: e,
-            type: 'error'
-          });
-					that.$refs[itemData.deviceId + 'refbtn' ].loading = false;
-				});
-			},
-			//通知设备上传媒体流
-			sendDevicePush: function(itemData) {
-				// let deviceId = this.currentDevice.deviceId;
-				// let channelId = itemData.channelId;
-				// console.log("通知设备推流1:" + deviceId + " : " + channelId);
-				// let that = this;
-				// this.$axios({
-				// 	method: 'get',
-				// 	url: '/api/play/' + deviceId + '/' + channelId
-				// }).then(function(res) {
-				// 	let ssrc = res.data.ssrc;
-				// 	that.$refs.devicePlayer.play(ssrc,deviceId,channelId);
-				// }).catch(function(e) {
-				// });
-			},
-      transportChange: function (row) {
-        console.log(row);
-        console.log(`修改传输方式为 ${row.streamMode}:${row.deviceId} `);
-        let that = this;
-        this.$axios({
-          method: 'post',
-          url: '/api/device/query/transport/' + row.deviceId + '/' + row.streamMode
-        }).then(function(res) {
-
-        }).catch(function(e) {
-        });
-      },
-      edit: function (row) {
-        console.log(row);
-        this.$refs.deviceEdit.openDialog(row, ()=>{
-          this.$refs.deviceEdit.close();
-          this.$message({
-            showClose: true,
-            message: "设备修改成功,通道字符集将在下次更新生效",
-            type: "success",
-          });
-          setTimeout(this.getDeviceList, 200)
-
-        })
-      }
-
-		}
-	};
-</script>
-
-<style>
-	.videoList {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.video-item {
-		position: relative;
-		width: 15rem;
-		height: 10rem;
-		margin-right: 1rem;
-		background-color: #000000;
-	}
-
-	.video-item-img {
-		position: absolute;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 100%;
-		height: 100%;
-	}
-
-	.video-item-img:after {
-		content: "";
-		display: inline-block;
-		position: absolute;
-		z-index: 2;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 3rem;
-		height: 3rem;
-		background-image: url("../assets/loading.png");
-		background-size: cover;
-		background-color: #000000;
-	}
-
-	.video-item-title {
-		position: absolute;
-		bottom: 0;
-		color: #000000;
-		background-color: #ffffff;
-		line-height: 1.5rem;
-		padding: 0.3rem;
-		width: 14.4rem;
-	}
-</style>
diff --git a/web_src/src/components/GeoConvertTools.js b/web_src/src/components/GeoConvertTools.js
deleted file mode 100644
index 6866249..0000000
--- a/web_src/src/components/GeoConvertTools.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * 经纬度转换
- */
-export default {
-  PI: 3.1415926535897932384626,  
-  //PI: 3.14159265358979324,
-  x_pi: (3.1415926535897932384626 * 3000.0) / 180.0,
-  delta: function (lat, lng) {
-    // Krasovsky 1940
-    //
-    // a = 6378245.0, 1/f = 298.3
-    // b = a * (1 - f)
-    // ee = (a^2 - b^2) / a^2;
-    var a = 6378245.0; //  a: 卫星椭球坐标投影到平面地图坐标系的投影因子。
-    var ee = 0.00669342162296594323; //  ee: 椭球的偏心率。
-    var dLat = this.transformLat(lng - 105.0, lat - 35.0);
-    var dLng = this.transformLng(lng - 105.0, lat - 35.0);
-    var radLat = (lat / 180.0) * this.PI;
-    var magic = Math.sin(radLat);
-    magic = 1 - ee * magic * magic;
-    var sqrtMagic = Math.sqrt(magic);
-    dLat = (dLat * 180.0) / (((a * (1 - ee)) / (magic * sqrtMagic)) * this.PI);
-    dLng = (dLng * 180.0) / ((a / sqrtMagic) * Math.cos(radLat) * this.PI);
-    return {
-      lat: dLat,
-      lng: dLng
-    };
-  },
-  /**
-   * WGS-84 to GCJ-02 GPS坐标转中国坐标
-   * @param  {number} wgsLat GPS纬度
-   * @param  {number} wgsLng GPS经度
-   * @return {object}        返回中国坐标经纬度对象
-   */
-  GPSToChina: function (wgsLat, wgsLng) {
-    if (this.outOfChina(wgsLat, wgsLng)) return {
-      lat: wgsLat,
-      lng: wgsLng
-    };
-    var d = this.delta(wgsLat, wgsLng);
-    return {
-      lat: Number(wgsLat) + Number(d.lat),
-      lng: Number(wgsLng) + Number(d.lng)
-    };
-  },
-  /**
-   * GCJ-02 to WGS-84 中国标准坐标转GPS坐标
-   * @param  {number} gcjLat 中国标准坐标纬度
-   * @param  {number} gcjLng 中国标准坐标经度
-   * @return {object}        返回GPS经纬度对象
-   */
-  chinaToGPS: function (gcjLat, gcjLng) {
-    if (this.outOfChina(gcjLat, gcjLng)) return {
-      lat: gcjLat,
-      lng: gcjLng
-    };
-    var d = this.delta(gcjLat, gcjLng);
-    return {
-      lat: Number(gcjLat) - Number(d.lat),
-      lng: Number(gcjLng) - Number(d.lng)
-    };
-  },
-  /**
-   * GCJ-02 to WGS-84 exactly 中国标准坐标转GPS坐标(精确)
-   * @param  {number} gcjLat  中国标准坐标纬度
-   * @param  {number} gcjLng  中国标准坐标经度
-   * @return {object}         返回GPS经纬度对象(精确)
-   */
-  chinaToGPSExact: function (gcjLat, gcjLng) {
-    var initDelta = 0.01;
-    var threshold = 0.000000001;
-    var dLat = initDelta,
-      dLng = initDelta;
-    var mLat = gcjLat - dLat,
-      mLng = gcjLng - dLng;
-    var pLat = gcjLat + dLat,
-      pLng = gcjLng + dLng;
-    var wgsLat,
-      wgsLng,
-      i = 0;
-    while (1) {
-      wgsLat = (mLat + pLat) / 2;
-      wgsLng = (mLng + pLng) / 2;
-      var tmp = this.gcj_encrypt(wgsLat, wgsLng);
-      dLat = tmp.lat - gcjLat;
-      dLng = tmp.lng - gcjLng;
-      if (Math.abs(dLat) < threshold && Math.abs(dLng) < threshold) break;
-
-      if (dLat > 0) pLat = wgsLat;
-      else mLat = wgsLat;
-      if (dLng > 0) pLng = wgsLng;
-      else mLng = wgsLng;
-
-      if (++i > 10000) break;
-    }
-    //console.log(i);
-    return {
-      lat: wgsLat,
-      lng: wgsLng
-    };
-  },
-  /**
-   * GCJ-02 to BD-09 中国标准坐标转百度坐标(精确)
-   * @param  {number} gcjLat  中国标准坐标纬度
-   * @param  {number} gcjLng  中国标准坐标经度
-   * @return {object}         返回百度经纬度对象
-   */
-  chinaToBaidu: function (gcjLat, gcjLng) {
-    var x = gcjLng,
-      y = gcjLat;
-    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);
-    var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);
-    var bdLng = z * Math.cos(theta) + 0.0065;
-    var bdLat = z * Math.sin(theta) + 0.006;
-    return {
-      lat: bdLat,
-      lng: bdLng
-    };
-  },
-  /**
-   * BD-09 to GCJ-02 百度坐标转中国标准坐标
-   * @param  {number} bdLat  百度坐标纬度
-   * @param  {number} bdLng  百度坐标经度
-   * @return {object}        返回中国标准经纬度对象
-   */
-  baiduToChina: function (bdLat, bdLng) {
-    var x = bdLng - 0.0065,
-      y = bdLat - 0.006;
-    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
-    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
-    var gcjLng = z * Math.cos(theta);
-    var gcjLat = z * Math.sin(theta);
-    return {
-      lat: gcjLat,
-      lng: gcjLng
-    };
-  },
-  /**
-   * BD-09 to GCJ-02 百度坐标转gps坐标
-   * @param  {number} bdLat  百度坐标纬度
-   * @param  {number} bdLng  百度坐标经度
-   * @return {object}        返回gps经纬度对象
-   */
-  baiduToGPS: function (bdLat, bdLng) {
-    let china = this.baiduToChina(bdLat, bdLng);
-    return this.chinaToGPS(china.lat, china.lng);
-  },
-  /**
-   * WGS-84 to to BD-09 GPS坐标转Baidu坐标
-   * @param  {number} gpsLat GPS纬度
-   * @param  {number} gpsLng GPS经度
-   * @return {object}        返回百度经纬度对象
-   */
-  GPSToBaidu: function (gpsLat, gpsLng) {
-    var china = this.GPSToChina(gpsLat, gpsLng);
-    return this.chinaToBaidu(china.lat, china.lng);
-  },
-  /**
-   * WGS-84 to Web mercator GPS坐标转墨卡托坐标
-   * @param  {number} wgsLat GPS纬度
-   * @param  {number} wgsLng GPS经度
-   * @return {object}        返回墨卡托经纬度对象
-   */
-  GPSToMercator: function (wgsLat, wgsLng) {
-    var x = (wgsLng * 20037508.34) / 180;
-    var y = Math.log(Math.tan(((90 + wgsLat) * this.PI) / 360)) / (this.PI / 180);
-    y = (y * 20037508.34) / 180;
-    return {
-      lat: y,
-      lng: x
-    };
-    /*
-    if ((Math.abs(wgsLng) > 180 || Math.abs(wgsLat) > 90))
-        return null;
-    var x = 6378137.0 * wgsLng * 0.017453292519943295;
-    var a = wgsLat * 0.017453292519943295;
-    var y = 3189068.5 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
-    return {'lat' : y, 'lng' : x};
-    //*/
-  },
-  /**
-   * Web mercator to WGS-84 墨卡托坐标转GPS坐标
-   * @param  {number} mercatorLat 墨卡托纬度
-   * @param  {number} mercatorLng 墨卡托经度
-   * @return {object}             返回GPS经纬度对象
-   */
-  mercatorToGPS: function (mercatorLat, mercatorLng) {
-    var x = (mercatorLng / 20037508.34) * 180;
-    var y = (mercatorLat / 20037508.34) * 180;
-    y = (180 / this.PI) * (2 * Math.atan(Math.exp((y * this.PI) / 180)) - this.PI / 2);
-    return {
-      lat: y,
-      lng: x
-    };
-    /*
-    if (Math.abs(mercatorLng) < 180 && Math.abs(mercatorLat) < 90)
-        return null;
-    if ((Math.abs(mercatorLng) > 20037508.3427892) || (Math.abs(mercatorLat) > 20037508.3427892))
-        return null;
-    var a = mercatorLng / 6378137.0 * 57.295779513082323;
-    var x = a - (Math.floor(((a + 180.0) / 360.0)) * 360.0);
-    var y = (1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * mercatorLat) / 6378137.0)))) * 57.295779513082323;
-    return {'lat' : y, 'lng' : x};
-    //*/
-  },
-  /**
-   * 两点之间的距离
-   * @param  {number} latA 起点纬度
-   * @param  {number} lngA 起点经度
-   * @param  {number} latB 终点纬度
-   * @param  {number} lngB 终点经度
-   * @return {number}      返回距离(米)
-   */
-  distance: function (latA, lngA, latB, lngB) {
-    var earthR = 6371000;
-    var x = Math.cos((latA * this.PI) / 180) * Math.cos((latB * this.PI) / 180) * Math.cos(((lngA - lngB) * this.PI) / 180);
-    var y = Math.sin((latA * this.PI) / 180) * Math.sin((latB * this.PI) / 180);
-    var s = x + y;
-    if (s > 1) s = 1;
-    if (s < -1) s = -1;
-    var alpha = Math.acos(s);
-    var distance = alpha * earthR;
-    return distance;
-  },
-  /**
-   * 是否在中国之外
-   * @param  {number} lat 纬度
-   * @param  {number} lng 经度
-   * @return {boolean]}     返回结果真或假
-   */
-  outOfChina: function (lat, lng) {
-    if (lat < 72.004 || lat > 137.8347) return true;
-    if (lng < 0.8293 || lng > 55.8271) return true;
-    return false;
-  },
-  transformLat: function (x, y) {
-    var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
-    ret += ((20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0) / 3.0;
-    ret += ((20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin((y / 3.0) * this.PI)) * 2.0) / 3.0;
-    ret += ((160.0 * Math.sin((y / 12.0) * this.PI) + 320 * Math.sin((y * this.PI) / 30.0)) * 2.0) / 3.0;
-    return ret;
-  },
-  transformLng: function (x, y) {
-    var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
-    ret += ((20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0) / 3.0;
-    ret += ((20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin((x / 3.0) * this.PI)) * 2.0) / 3.0;
-    ret += ((150.0 * Math.sin((x / 12.0) * this.PI) + 300.0 * Math.sin((x / 30.0) * this.PI)) * 2.0) / 3.0;
-    return ret;
-  }
-};
diff --git a/web_src/src/components/Login.vue b/web_src/src/components/Login.vue
deleted file mode 100644
index d823659..0000000
--- a/web_src/src/components/Login.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-<div class="login" id="login">
-  <div class="limiter">
-    <div class="container-login100">
-      <div class="wrap-login100">
-					<span class="login100-form-title p-b-26">WVP视频平台</span>
-          <span class="login100-form-title p-b-48">
-						<i class="fa fa-video-camera"></i>
-					</span>
-
-          <div class="wrap-input100 validate-input" data-validate = "Valid email is: a@b.c">
-            <input :class="'input100 ' + (username==''?'':'has-val')" type="text" v-model="username" name="username">
-            <span class="focus-input100" data-placeholder="用户名"></span>
-          </div>
-
-          <div class="wrap-input100 validate-input" data-validate="Enter password">
-						<span class="btn-show-pass">
-							<i :class="'fa ' + (!showPassword?'fa-eye':'fa-eye-slash')" @click="showPassword = !showPassword"></i>
-						</span>
-            <input :class="'input100 ' + (password==''?'':'has-val')" :type="(!showPassword?'password':'text')" v-model="password" name="password">
-            <span class="focus-input100" data-placeholder="密码"></span>
-          </div>
-
-          <div class="container-login100-form-btn">
-            <div class="wrap-login100-form-btn" :class="{'login-loading': isLoging}" v-loading="isLoging" element-loading-background="rgb(0 0 0 / 0%);" element-loading-custom-class="login-loading-class">
-              <div class="login100-form-bgbtn"></div>
-              <button class="login100-form-btn" @click="login">登录</button>
-            </div>
-          </div>
-      </div>
-    </div>
-  </div>
-</div>
-</template>
-
-<script>
-import crypto from 'crypto'
-export default {
-  name: 'Login',
-  data(){
-  	return {
-      isLoging: false,
-      showPassword: false,
-      loginLoading: false,
-  		username: '',
-  		password: ''
-  	}
-  },
-  created(){
-    var that = this;
-    document.onkeydown = function(e) {
-      var key = window.event.keyCode;
-      if (key == 13) {
-        that.login();
-      }
-    }
-  },
-  methods:{
-
-  	//登录逻辑
-  	login(){
-  		if(this.username!='' && this.password!=''){
-  			this.toLogin();
-  		}
-  	},
-
-  	//登录请求
-  	toLogin(){
-
-  		//一般要跟后端了解密码的加密规则
-  		//这里例子用的哈希算法来自./js/sha1.min.js
-
-  		//需要想后端发送的登录参数
-  		let loginParam = {
-  			username: this.username,
-  			password: crypto.createHash('md5').update(this.password, "utf8").digest('hex')
-  		}
-      var that = this;
-      //设置在登录状态
-      this.isLoging = true;
-
-      this.$axios({
-      	method: 'get',
-        url:"/api/user/login",
-        params: loginParam
-      }).then(function (res) {
-        console.log(JSON.stringify(res));
-          if (res.data.code == 0 && res.data.msg == "success") {
-            that.$cookies.set("session", {"username": that.username}) ;
-            //登录成功后
-            that.cancelEnterkeyDefaultAction();
-            that.$router.push('/');
-          }else{
-            that.isLoging = false;
-            that.$message({
-                  showClose: true,
-                  message: '登录失败,用户名或密码错误',
-                  type: 'error'
-              });
-          }
-      }).catch(function (error) {
-        that.$message.error(error.response.data.msg);
-        that.isLoging = false;
-      });
-    },
-    setCookie: function (cname, cvalue, exdays) {
-      var d = new Date();
-      d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
-      var expires = "expires=" + d.toUTCString();
-      console.info(cname + "=" + cvalue + "; " + expires);
-      document.cookie = cname + "=" + cvalue + "; " + expires;
-      console.info(document.cookie);
-    },
-    cancelEnterkeyDefaultAction: function() {
-        document.onkeydown = function(e) {
-        var key = window.event.keyCode;
-        if (key == 13) {
-          return false;
-        }
-      }
-    }
-  }
-}
-</script>
-
diff --git a/web_src/src/components/MediaServerManger.vue b/web_src/src/components/MediaServerManger.vue
deleted file mode 100644
index c412bcb..0000000
--- a/web_src/src/components/MediaServerManger.vue
+++ /dev/null
@@ -1,188 +0,0 @@
-<template>
-	<div id="mediaServerManger">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main id="msMain">
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-          <span style="font-size: 1rem; font-weight: bold;">节点列表</span>
-        </div>
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-          <el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="add">添加节点</el-button>
-        </div>
-
-        <el-row :gutter="12">
-          <el-col :span="num" v-for="item in mediaServerList" :key="item.id">
-            <el-card shadow="hover" :body-style="{ padding: '0px'}" class="server-card">
-              <div class="card-img-zlm"></div>
-              <div style="padding: 14px;text-align: left">
-                <span style="font-size: 16px">{{item.id}}</span>
-                <el-button v-if="!item.defaultServer" icon="el-icon-edit" style="padding: 0;float: right;" type="text" @click="edit(item)">编辑</el-button>
-                <el-button v-if="item.defaultServer" icon="el-icon-edit" style="padding: 0;float: right;" type="text" @click="edit(item)">查看</el-button>
-                <el-button icon="el-icon-delete" style="margin-right: 10px;padding: 0;float: right;" type="text" @click="del(item)">移除</el-button>
-                <div style="margin-top: 13px; line-height: 12px; ">
-                  <span style="font-size: 14px; color: #999; margin-top: 5px; ">{{item.ip}}</span>
-                  <span style="font-size: 14px; color: #999; margin-top: 5px; float: right;">{{item.createTime}}</span>
-                </div>
-              </div>
-              <i v-if="item.status" class="iconfont icon-online server-card-status-online" title="在线"></i>
-              <i v-if="!item.status" class="iconfont icon-online server-card-status-offline" title="离线"></i>
-              <i v-if="item.defaultServer" class="server-card-default" >默认</i>
-            </el-card>
-          </el-col>
-        </el-row>
-        <mediaServerEdit ref="mediaServerEdit" ></mediaServerEdit>
-			</el-main>
-		</el-container>
-	</div>
-</template>
-
-<script>
-	import uiHeader from './UiHeader.vue'
-  import MediaServer from './service/MediaServer'
-  import mediaServerEdit from './dialog/MediaServerEdit'
-	export default {
-		name: 'mediaServerManger',
-		components: {
-			uiHeader,mediaServerEdit
-		},
-		data() {
-			return {
-        mediaServerObj : new MediaServer(),
-        mediaServerList: [], //设备列表
-        winHeight: window.innerHeight - 200,
-        updateLooper: false,
-        currentPage:1,
-        count:15,
-        num: this.getNumberByWidth(),
-        total:0,
-			};
-		},
-		computed: {
-
-		},
-		mounted() {
-			this.initData();
-			this.updateLooper = setInterval(this.initData, 2000);
-		},
-		destroyed() {
-			clearTimeout(this.updateLooper);
-		},
-		methods: {
-			initData: function() {
-        this.getServerList()
-			},
-      currentChange: function(val){
-        this.currentPage = val;
-        this.getServerList();
-      },
-      handleSizeChange: function(val){
-        this.count = val;
-        this.getServerList();
-      },
-      getServerList: function(){
-        this.mediaServerObj.getMediaServerList((data)=>{
-          this.mediaServerList = data.data;
-        })
-      },
-      add: function (){
-        this.$refs.mediaServerEdit.openDialog(null, this.initData)
-      },
-      edit: function (row){
-        this.$refs.mediaServerEdit.openDialog(row, this.initData)
-      },
-      del: function (row){
-        this.$confirm('确认删除此节点?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          this.mediaServerObj.delete(row.id, (data)=>{
-            if (data.code === 0) {
-              this.$message({
-                type: 'success',
-                message: '删除成功!'
-              });
-            }
-          })
-
-        }).catch(() => {
-        });
-
-      },
-      getNumberByWidth(){
-        let candidateNums = [1, 2, 3, 4, 6, 8, 12, 24]
-        let clientWidth = window.innerWidth - 30;
-        let interval = 20;
-        let itemWidth = 360;
-        let num = (clientWidth + interval)/(itemWidth + interval)
-        let result = Math.ceil(24/num);
-        let resultVal = 24;
-        for (let i = 0; i < candidateNums.length; i++) {
-          let value = candidateNums[i]
-          if (i + 1 >= candidateNums.length) {
-            return  24;
-          }
-          if (value <= result && candidateNums[i + 1] > result ) {
-            return  value;
-          }
-        }
-
-        return resultVal;
-      },
-			dateFormat: function(/** timestamp=0 **/) {
-				var ts = arguments[0] || 0;
-				var t,y,m,d,h,i,s;
-				t = ts ? new Date(ts*1000) : new Date();
-				y = t.getFullYear();
-				m = t.getMonth()+1;
-				d = t.getDate();
-				h = t.getHours();
-				i = t.getMinutes();
-				s = t.getSeconds();
-				// 可根据需要在这里定义时间格式
-				return y+'-'+(m<10?'0'+m:m)+'-'+(d<10?'0'+d:d)+' '+(h<10?'0'+h:h)+':'+(i<10?'0'+i:i)+':'+(s<10?'0'+s:s);
-			}
-
-		}
-	};
-</script>
-
-<style>
-  .server-card{
-    position: relative;
-    margin-bottom: 20px;
-  }
-  .card-img-zlm{
-    width: 200px; height: 200px;
-    background: url('~@static/images/zlm-logo.png') no-repeat center;
-    background-position: center;
-    background-size: contain;
-    margin: 0 auto;
-  }
-  .server-card-status-online{
-    position: absolute;
-    right: 20px;
-    top: 20px;
-    color: #3caf36;
-    font-size: 18px;
-  }
-  .server-card-status-offline{
-    position: absolute;
-    right: 20px;
-    top: 20px;
-    color: #808080;
-    font-size: 18px;
-  }
-  .server-card-default{
-    position: absolute;
-    left: 20px;
-    top: 20px;
-    color: #808080;
-    font-size: 18px;
-  }
-	.server-card:hover {
-    border: 1px solid #adadad;
-  }
-</style>
diff --git a/web_src/src/components/ParentPlatformList.vue b/web_src/src/components/ParentPlatformList.vue
deleted file mode 100644
index c001071..0000000
--- a/web_src/src/components/ParentPlatformList.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-<template>
-  <div id="app">
-    <el-container>
-      <el-header>
-        <uiHeader></uiHeader>
-      </el-header>
-      <el-main>
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-          <span style="font-size: 1rem; font-weight: bold;">上级平台列表</span>
-        </div>
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-            <el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="addParentPlatform">添加</el-button>
-        </div>
-        <!--设备列表-->
-        <el-table :data="platformList" border style="width: 100%" :height="winHeight">
-          <el-table-column prop="name" label="名称" align="center"></el-table-column>
-          <el-table-column prop="serverGBId" label="平台编号" width="180" align="center"></el-table-column>
-          <el-table-column label="是否启用" width="120" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium" v-if="scope.row.enable">已启用</el-tag>
-                <el-tag size="medium" type="info" v-if="!scope.row.enable">未启用</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="状态" width="120" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium" v-if="scope.row.status">在线</el-tag>
-                <el-tag size="medium" type="info" v-if="!scope.row.status">离线</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="地址" width="180" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium">{{ scope.row.serverIP}}:{{scope.row.serverPort }}</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column prop="deviceGBId" label="设备国标编号" width="200" align="center"></el-table-column>
-          <el-table-column prop="transport" label="信令传输模式" width="120" align="center"></el-table-column>
-          <el-table-column prop="channelCount" label="通道数" width="120" align="center"></el-table-column>
-          <el-table-column label="订阅信息" width="240" align="center" fixed="right">
-            <template slot-scope="scope">
-              <i v-if="scope.row.alarmSubscribe" style="font-size: 20px" title="报警订阅" class="iconfont icon-gbaojings subscribe-on " ></i>
-              <i v-if="!scope.row.alarmSubscribe" style="font-size: 20px" title="报警订阅" class="iconfont icon-gbaojings subscribe-off " ></i>
-              <i v-if="scope.row.catalogSubscribe" title="目录订阅"  class="iconfont icon-gjichus subscribe-on" ></i>
-              <i v-if="!scope.row.catalogSubscribe" title="目录订阅" class="iconfont icon-gjichus subscribe-off" ></i>
-              <i v-if="scope.row.gpsSubscribe" title="位置订阅" class="iconfont icon-gxunjians subscribe-on" ></i>
-              <i v-if="!scope.row.gpsSubscribe" title="位置订阅" class="iconfont icon-gxunjians subscribe-off" ></i>
-            </template>
-          </el-table-column>
-
-          <el-table-column label="操作" width="300" align="center" fixed="right">
-            <template slot-scope="scope">
-              <el-button size="mini" icon="el-icon-edit" @click="editPlatform(scope.row)">编辑</el-button>
-              <el-button size="mini" icon="el-icon-share"  type="primary"  @click="chooseChannel(scope.row)">选择通道</el-button>
-              <el-button size="mini" icon="el-icon-delete"  type="danger" @click="deletePlatform(scope.row)">删除</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-pagination
-          style="float: right"
-          @size-change="handleSizeChange"
-          @current-change="currentChange"
-          :current-page="currentPage"
-          :page-size="count"
-          :page-sizes="[15, 25, 35, 50]"
-          layout="total, sizes, prev, pager, next"
-          :total="total">
-        </el-pagination>
-      <platformEdit ref="platformEdit" ></platformEdit>
-      <chooseChannelDialog ref="chooseChannelDialog" ></chooseChannelDialog>
-      </el-main>
-    </el-container>
-  </div>
-</template>
-
-<script>
-import platformEdit from './dialog/platformEdit.vue'
-import uiHeader from './UiHeader.vue'
-import chooseChannelDialog from './dialog/chooseChannel.vue'
-export default {
-  name: 'app',
-  components: {
-    platformEdit,
-    uiHeader,
-    chooseChannelDialog
-  },
-  data() {
-    return {
-      platformList: [], //设备列表
-
-      winHeight: window.innerHeight - 260,
-      currentPage:1,
-      count:15,
-      total:0
-    };
-  },
-  computed: {
-
-    getcurrentDeviceChannels: function() {
-
-    }
-  },
-  mounted() {
-    this.initData();
-    this.updateLooper = setInterval(this.initData, 10000);
-  },
-  destroyed() {
-    clearTimeout(this.updateLooper);
-  },
-  methods: {
-    addParentPlatform: function() {
-      this.$refs.platformEdit.openDialog(null, this.initData)
-    },
-    editPlatform: function(platform) {
-      console.log(platform)
-      this.$refs.platformEdit.openDialog(platform, this.initData)
-    },
-    deletePlatform: function(platform) {
-        var that = this;
-        that.$confirm('确认删除?', '提示', {
-              confirmButtonText: '确定',
-              cancelButtonText: '取消',
-              type: 'warning'
-            }).then(() => {
-                that.deletePlatformCommit(platform)
-            })
-    },
-    deletePlatformCommit: function(platform) {
-        var that = this;
-        that.$axios({
-		method: 'delete',
-		url:`/api/platform/delete/${platform.serverGBId}`
-        }).then(function (res) {
-            if (res.data == "success") {
-                that.$message({
-                    showClose: true,
-                    message: '删除成功',
-                    type: 'success'
-                });
-                that.initData()
-            }
-        }).catch(function (error) {
-            console.log(error);
-        });
-    },
-    chooseChannel: function(platform) {
-       this.$refs.chooseChannelDialog.openDialog(platform.serverGBId, platform.name, platform.catalogId, this.initData)
-    },
-    initData: function() {
-      this.getPlatformList();
-    },
-    currentChange: function(val){
-      this.currentPage = val;
-      this.getPlatformList();
-    },
-    handleSizeChange: function(val){
-      this.count = val;
-      this.getPlatformList();
-    },
-    getPlatformList: function() {
-      let that = this;
-
-      this.$axios({
-      	method: 'get',
-        url:`/api/platform/query/${that.count}/${that.currentPage}`
-      }).then(function (res) {
-        that.total = res.data.total;
-        that.platformList = res.data.list;
-      }).catch(function (error) {
-        console.log(error);
-      });
-
-    }
-
-  }
-};
-</script>
-<style>
-.subscribe-on{
-  color: #409EFF;
-  font-size: 18px;
-}
-.subscribe-off{
-  color: #afafb3;
-  font-size: 18px;
-}
-</style>
diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue
deleted file mode 100644
index 4c803da..0000000
--- a/web_src/src/components/PushVideoList.vue
+++ /dev/null
@@ -1,329 +0,0 @@
-<template>
-	<div id="pushVideoList">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main>
-				<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-					<span style="font-size: 1rem; font-weight: bold;">推流列表</span>
-				</div>
-        <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-
-          搜索: <el-input @input="getPushList" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input>
-
-          流媒体: <el-select size="mini" @change="getPushList" style="margin-right: 1rem;" v-model="mediaServerId" placeholder="请选择" default-first-option>
-          <el-option label="全部" value=""></el-option>
-          <el-option
-            v-for="item in mediaServerList"
-            :key="item.id"
-            :label="item.id"
-            :value="item.id">
-          </el-option>
-        </el-select>
-          推流状态: <el-select size="mini" style="margin-right: 1rem;" @change="getPushList" v-model="pushing" placeholder="请选择" default-first-option>
-          <el-option label="全部" value=""></el-option>
-          <el-option label="推流进行中" value="true"></el-option>
-          <el-option label="推流未进行" value="false"></el-option>
-        </el-select>
-          <el-button icon="el-icon-upload2" size="mini" style="margin-right: 1rem;" type="primary" @click="importChannel">通道导入</el-button>
-          <el-button icon="el-icon-download" size="mini" style="margin-right: 1rem;" type="primary" >
-            <a style="color: #FFFFFF; text-align: center; text-decoration: none" href="/static/file/推流通道导入.zip" download='推流通道导入.zip' >下载模板</a>
-          </el-button>
-          <el-button icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button>
-        </div>
-				<devicePlayer ref="devicePlayer"></devicePlayer>
-				<addStreamTOGB ref="addStreamTOGB"></addStreamTOGB>
-				<el-table ref="pushListTable" :data="pushList" border style="width: 100%" :height="winHeight" @selection-change="handleSelectionChange" :row-key="(row)=> row.app + row.stream">
-          <el-table-column align="center" type="selection" :reserve-selection="true" width="55">
-          </el-table-column>
-					<el-table-column prop="name" label="名称" align="center">
-					</el-table-column>
-					<el-table-column prop="app" label="APP" align="center">
-					</el-table-column>
-					<el-table-column prop="stream" label="流ID" align="center">
-					</el-table-column>
-					<el-table-column prop="gbId" label="国标编码" width="200" align="center">
-					</el-table-column>
-					<el-table-column prop="mediaServerId" label="流媒体" width="200" align="center">
-					</el-table-column>
-					<el-table-column label="开始时间" align="center" width="200">
-						<template slot-scope="scope">
-							<el-button-group>
-								{{dateFormat(parseInt(scope.row.createStamp))}}
-							</el-button-group>
-							</template>
-					</el-table-column>
-					<el-table-column label="正在推流" align="center" width="100">
-						<template slot-scope="scope">
-							{{(scope.row.status == false && scope.row.gbId == null) || scope.row.status ?'是':'否'}}
-						</template>
-					</el-table-column>
-
-					<el-table-column label="操作" width="360" align="center" fixed="right">
-						<template slot-scope="scope">
-							<el-button-group>
-								<el-button size="mini" icon="el-icon-video-play" v-if="(scope.row.status == false && scope.row.gbId == null) || scope.row.status" @click="playPush(scope.row)">播放</el-button>
-								<el-button size="mini" icon="el-icon-delete" type="danger" @click="stopPush(scope.row)">移除</el-button>
-								<el-button size="mini" icon="el-icon-position" type="primary" v-if="!!!scope.row.gbId" @click="addToGB(scope.row)">加入国标</el-button>
-								<el-button size="mini" icon="el-icon-position" type="primary" v-if="!!scope.row.gbId" @click="removeFromGB(scope.row)">移出国标</el-button>
-							</el-button-group>
-							</template>
-					</el-table-column>
-				</el-table>
-				<el-pagination
-					style="float: right"
-					@size-change="handleSizeChange"
-					@current-change="currentChange"
-					:current-page="currentPage"
-					:page-size="count"
-					:page-sizes="[15, 25, 35, 50]"
-					layout="total, sizes, prev, pager, next"
-					:total="total">
-				</el-pagination>
-			<streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
-			<importChannel ref="importChannel" ></importChannel>
-			</el-main>
-		</el-container>
-	</div>
-</template>
-
-<script>
-	import streamProxyEdit from './dialog/StreamProxyEdit.vue'
-	import devicePlayer from './dialog/devicePlayer.vue'
-	import addStreamTOGB from './dialog/addStreamTOGB.vue'
-	import uiHeader from './UiHeader.vue'
-	import importChannel from './dialog/importChannel.vue'
-	import MediaServer from './service/MediaServer'
-	export default {
-		name: 'pushVideoList',
-		components: {
-			devicePlayer,
-			addStreamTOGB,
-			streamProxyEdit,
-			uiHeader,
-      importChannel,
-		},
-		data() {
-			return {
-				pushList: [], //设备列表
-				currentPusher: {}, //当前操作设备对象
-				updateLooper: 0, //数据刷新轮训标志
-				currentDeviceChannelsLenth:0,
-				winHeight: window.innerHeight - 250,
-        mediaServerObj : new MediaServer(),
-				currentPage:1,
-				count:15,
-				total:0,
-        searchSrt: "",
-        pushing: "",
-        mediaServerId: "",
-        mediaServerList: [],
-        multipleSelection: [],
-				getDeviceListLoading: false
-			};
-		},
-		computed: {
-		},
-		mounted() {
-			this.initData();
-			this.updateLooper = setInterval(this.getPushList, 2000);
-		},
-		destroyed() {
-			clearTimeout(this.updateLooper);
-		},
-		methods: {
-			initData: function() {
-        this.mediaServerObj.getOnlineMediaServerList((data)=>{
-          this.mediaServerList = data.data;
-        })
-				this.getPushList();
-			},
-			currentChange: function(val){
-				this.currentPage = val;
-				this.getPushList();
-			},
-			handleSizeChange: function(val){
-				this.count = val;
-				this.getPushList();
-			},
-			getPushList: function() {
-				let that = this;
-				this.getDeviceListLoading = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/push/list`,
-					params: {
-						page: that.currentPage,
-						count: that.count,
-            query: that.searchSrt,
-            pushing: that.pushing,
-            mediaServerId: that.mediaServerId,
-					}
-				}).then(function (res) {
-					that.total = res.data.total;
-					that.pushList = res.data.list;
-					that.getDeviceListLoading = false;
-				}).catch(function (error) {
-					console.error(error);
-					that.getDeviceListLoading = false;
-				});
-			},
-
-			playPush: function(row){
-				let that = this;
-				this.getListLoading = true;
-				this.$axios({
-					method: 'get',
-					url: '/api/media/stream_info_by_app_and_stream',
-					params: {
-						app: row.app,
-						stream: row.stream,
-            mediaServerId: row.mediaServerId
-					}
-				}).then(function (res) {
-					that.getListLoading = false;
-					that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
-                        streamInfo: res.data.data,
-                        hasAudio: true
-                    });
-				}).catch(function (error) {
-					console.error(error);
-					that.getListLoading = false;
-				});
-			},
-			stopPush: function(row){
-        let that = this;
-        that.$axios({
-          method:"post",
-          url:"/api/push/stop",
-          params: {
-            app: row.app,
-            streamId: row.stream
-          }
-        }).then((res)=>{
-          if (res.data == "success") {
-            that.initData()
-          }
-        }).catch(function (error) {
-          console.error(error);
-        });
-			},
-			addToGB: function(row){
-				this.$refs.addStreamTOGB.openDialog({app: row.app, stream: row.stream, mediaServerId: row.mediaServerId}, this.initData);
-			},
-			removeFromGB: function(row){
-        let that = this;
-				that.$axios({
-            method:"delete",
-            url:"/api/push/remove_form_gb",
-            data:row
-        }).then((res)=>{
-            if (res.data == "success") {
-							that.initData()
-						}
-        }).catch(function (error) {
-            console.error(error);
-        });
-			},
-			dateFormat: function(/** timestamp=0 **/) {
-        let ts = arguments[0] || 0;
-        let t,y,m,d,h,i,s;
-				t = ts ? new Date(ts) : new Date();
-				y = t.getFullYear();
-				m = t.getMonth()+1;
-				d = t.getDate();
-				h = t.getHours();
-				i = t.getMinutes();
-				s = t.getSeconds();
-				// 可根据需要在这里定义时间格式
-				return y+'-'+(m<10?'0'+m:m)+'-'+(d<10?'0'+d:d)+' '+(h<10?'0'+h:h)+':'+(i<10?'0'+i:i)+':'+(s<10?'0'+s:s);
-			},
-      importChannel: function () {
-        this.$refs.importChannel.openDialog(()=>{
-
-        })
-      },
-      batchDel: function () {
-        this.$confirm(`确定删除选中的${this.multipleSelection.length}个通道?`, '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          let that = this;
-          that.$axios({
-            method:"delete",
-            url:"/api/push/batchStop",
-            data: {
-              gbStreams: this.multipleSelection
-            }
-          }).then((res)=>{
-            this.initData();
-            this.$refs.pushListTable.clearSelection();
-          }).catch(function (error) {
-            console.error(error);
-          });
-        }).catch(() => {
-
-        });
-      },
-      handleSelectionChange: function (val) {
-        this.multipleSelection = val;
-      },
-		}
-	};
-</script>
-
-<style>
-	.videoList {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.video-item {
-		position: relative;
-		width: 15rem;
-		height: 10rem;
-		margin-right: 1rem;
-		background-color: #000000;
-	}
-
-	.video-item-img {
-		position: absolute;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 100%;
-		height: 100%;
-	}
-
-	.video-item-img:after {
-		content: "";
-		display: inline-block;
-		position: absolute;
-		z-index: 2;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 3rem;
-		height: 3rem;
-		background-image: url("../assets/loading.png");
-		background-size: cover;
-		background-color: #000000;
-	}
-
-	.video-item-title {
-		position: absolute;
-		bottom: 0;
-		color: #000000;
-		background-color: #ffffff;
-		line-height: 1.5rem;
-		padding: 0.3rem;
-		width: 14.4rem;
-	}
-</style>
diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue
deleted file mode 100644
index 9ecb933..0000000
--- a/web_src/src/components/StreamProxyList.vue
+++ /dev/null
@@ -1,377 +0,0 @@
-<template>
-	<div id="streamProxyList">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main>
-				<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-					<span style="font-size: 1rem; font-weight: bold;">拉流代理列表</span>
-				</div>
-				<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-					<el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="addStreamProxy">添加代理</el-button>
-					<el-button v-if="false" icon="el-icon-search" size="mini" style="margin-right: 1rem;" type="primary" @click="addOnvif">搜索ONVIF</el-button>
-				</div>
-				<devicePlayer ref="devicePlayer"></devicePlayer>
-				<el-table :data="streamProxyList" border style="width: 100%" :height="winHeight">
-					<el-table-column prop="name" label="名称" align="center" show-overflow-tooltip/>
-					<el-table-column prop="app" label="流应用名" align="center" show-overflow-tooltip/>
-					<el-table-column prop="stream" label="流ID" align="center" show-overflow-tooltip/>
-					<el-table-column label="流地址" width="400" align="center" show-overflow-tooltip >
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-
-							<el-tag size="medium" v-if="scope.row.type == 'default'">
-								<i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
-								{{scope.row.url}}
-							</el-tag>
-							<el-tag size="medium" v-if="scope.row.type != 'default'">
-								<i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
-								{{scope.row.src_url}}
-							</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-          <el-table-column prop="mediaServerId" label="流媒体" width="150" align="center"></el-table-column>
-          <el-table-column label="类型" width="100" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium">{{scope.row.type}}</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-
-					<el-table-column prop="gbId" label="国标编码" width="180" align="center" show-overflow-tooltip/>
-          <el-table-column label="状态" width="120" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium" v-if="scope.row.status">在线</el-tag>
-                <el-tag size="medium" type="info" v-if="!scope.row.status">离线</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="启用" width="120" align="center">
-            <template slot-scope="scope">
-              <div slot="reference" class="name-wrapper">
-                <el-tag size="medium" v-if="scope.row.enable">已启用</el-tag>
-                <el-tag size="medium" type="info" v-if="!scope.row.enable">未启用</el-tag>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column prop="createTime" label="创建时间" align="center" width="150" show-overflow-tooltip/>
-					<el-table-column label="转HLS" width="120" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_hls">已启用</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_hls">未启用</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="MP4录制" width="120" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_mp4">已启用</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_mp4">未启用</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="无人观看自动删除" width="160" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_remove_none_reader">已启用</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader">未启用</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-
-
-					<el-table-column label="操作" width="360" align="center" fixed="right">
-						<template slot-scope="scope">
-							<el-button-group>
-								<el-button size="mini" icon="el-icon-video-play" v-if="scope.row.enable" @click="play(scope.row)">播放</el-button>
-								<el-button size="mini" icon="el-icon-close" type="success" v-if="scope.row.enable" @click="stop(scope.row)">停用</el-button>
-								<el-button size="mini" icon="el-icon-check" type="primary" :loading="startBtnLaoding" v-if="!scope.row.enable" @click="start(scope.row)">启用</el-button>
-								<el-button size="mini" icon="el-icon-delete" type="danger"  @click="deleteStreamProxy(scope.row)">删除</el-button>
-							</el-button-group>
-							</template>
-					</el-table-column>
-				</el-table>
-				<el-pagination
-					style="float: right"
-					@size-change="handleSizeChange"
-					@current-change="currentChange"
-					:current-page="currentPage"
-					:page-size="count"
-					:page-sizes="[15, 25, 35, 50]"
-					layout="total, sizes, prev, pager, next"
-					:total="total">
-				</el-pagination>
-			<streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
-			<onvifEdit ref="onvifEdit" ></onvifEdit>
-			</el-main>
-		</el-container>
-	</div>
-</template>
-
-<script>
-	import streamProxyEdit from './dialog/StreamProxyEdit.vue'
-	import onvifEdit from './dialog/onvifEdit.vue'
-	import devicePlayer from './dialog/devicePlayer.vue'
-	import uiHeader from './UiHeader.vue'
-	export default {
-		name: 'streamProxyList',
-		components: {
-			devicePlayer,
-			streamProxyEdit,
-      onvifEdit,
-			uiHeader
-		},
-		data() {
-			return {
-				streamProxyList: [],
-				currentPusher: {}, //当前操作设备对象
-				updateLooper: 0, //数据刷新轮训标志
-				currentDeviceChannelsLenth:0,
-				winHeight: window.innerHeight - 250,
-				currentPage:1,
-				count:15,
-				total:0,
-				getListLoading: false,
-				startBtnLaoding: false
-			};
-		},
-		computed: {
-		},
-		mounted() {
-			this.initData();
-			this.updateLooper = setInterval(this.initData, 1000);
-		},
-		destroyed() {
-			this.$destroy('videojs');
-			clearTimeout(this.updateLooper);
-		},
-		methods: {
-			initData: function() {
-				this.getStreamProxyList();
-			},
-			currentChange: function(val){
-				this.currentPage = val;
-				this.getStreamProxyList();
-			},
-			handleSizeChange: function(val){
-				this.count = val;
-				this.getStreamProxyList();
-			},
-			getStreamProxyList: function() {
-				let that = this;
-				this.getListLoading = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/proxy/list`,
-					params: {
-						page: that.currentPage,
-						count: that.count
-					}
-				}).then(function (res) {
-					that.total = res.data.total;
-					that.streamProxyList = res.data.list;
-					that.getListLoading = false;
-				}).catch(function (error) {
-					console.log(error);
-					that.getListLoading = false;
-				});
-			},
-			addStreamProxy: function(){
-				this.$refs.streamProxyEdit.openDialog(null, this.initData)
-			},
-      addOnvif: function(){
-        this.getListLoading = true;
-        this.getListLoading = true;
-        this.$axios({
-          method: 'get',
-          url:`/api/onvif/search?timeout=3000`,
-        }).then((res) =>{
-          this.getListLoading = false;
-          if (res.data.code == 0 ){
-            if (res.data.data.length > 0) {
-              this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{
-                  if (url != null) {
-                    this.$refs.onvifEdit.close();
-                    this.$refs.streamProxyEdit.openDialog({type: "default", url: url, src_url: url}, this.initData())
-                  }
-              })
-            }else {
-              this.$message.success("未找到可用设备");
-            }
-        }else {
-            this.$message.error(res.data.msg);
-          }
-
-        }).catch((error)=> {
-          this.getListLoading = false;
-          this.$message.error(error.response.data.msg);
-        });
-
-			},
-			saveStreamProxy: function(){
-			},
-			play: function(row){
-				let that = this;
-				this.getListLoading = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/media/stream_info_by_app_and_stream`,
-					params: {
-						app: row.app,
-						stream: row.stream,
-            mediaServerId: row.mediaServerId
-					}
-				}).then(function (res) {
-					that.getListLoading = false;
-					if (res.data.code === 0) {
-            that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
-              streamInfo: res.data.data,
-              hasAudio: true
-            });
-          }else {
-            that.$message({
-              showClose: true,
-              message: "获取地址失败:" + res.data.msg,
-              type: "error",
-            });
-          }
-
-				}).catch(function (error) {
-					console.log(error);
-					that.getListLoading = false;
-				});
-
-			},
-			deleteStreamProxy: function(row){
-				let that = this;
-				this.getListLoading = true;
-				that.$axios({
-                    method:"delete",
-                    url:"/api/proxy/del",
-                    params:{
-                      app: row.app,
-                      stream: row.stream
-                    }
-                }).then((res)=>{
-                    that.getListLoading = false;
-					          that.initData()
-                }).catch(function (error) {
-                    console.log(error);
-					          that.getListLoading = false;
-                });
-			},
-			start: function(row){
-				let that = this;
-				this.getListLoading = true;
-				this.startBtnLaoding = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/proxy/start`,
-					params: {
-						app: row.app,
-						stream: row.stream
-					}
-				}).then(function (res) {
-          that.getListLoading = false;
-          that.startBtnLaoding = false;
-				  if (res.data == "success"){
-            that.initData()
-          }else {
-            that.$message({
-              showClose: true,
-              message: "保存失败,请检查地址是否可用!",
-              type: "error",
-            });
-          }
-
-				}).catch(function (error) {
-					console.log(error);
-					that.getListLoading = false;
-					that.startBtnLaoding = false;
-				});
-			},
-			stop: function(row){
-				let that = this;
-				this.getListLoading = true;
-				this.$axios({
-					method: 'get',
-					url:`/api/proxy/stop`,
-					params: {
-						app: row.app,
-						stream: row.stream
-					}
-				}).then(function (res) {
-					that.getListLoading = false;
-					that.initData()
-				}).catch(function (error) {
-					console.log(error);
-					that.getListLoading = false;
-				});
-			}
-
-		}
-	};
-</script>
-
-<style>
-	.videoList {
-		display: flex;
-		flex-wrap: wrap;
-		align-content: flex-start;
-	}
-
-	.video-item {
-		position: relative;
-		width: 15rem;
-		height: 10rem;
-		margin-right: 1rem;
-		background-color: #000000;
-	}
-
-	.video-item-img {
-		position: absolute;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 100%;
-		height: 100%;
-	}
-
-	.video-item-img:after {
-		content: "";
-		display: inline-block;
-		position: absolute;
-		z-index: 2;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		margin: auto;
-		width: 3rem;
-		height: 3rem;
-		background-image: url("../assets/loading.png");
-		background-size: cover;
-		background-color: #000000;
-	}
-
-	.video-item-title {
-		position: absolute;
-		bottom: 0;
-		color: #000000;
-		background-color: #ffffff;
-		line-height: 1.5rem;
-		padding: 0.3rem;
-		width: 14.4rem;
-	}
-	.cpoy-btn {
-		cursor: pointer;
-		margin-right: 10px;
-	}
-</style>
diff --git a/web_src/src/components/UiHeader.vue b/web_src/src/components/UiHeader.vue
deleted file mode 100644
index 828dda9..0000000
--- a/web_src/src/components/UiHeader.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-<template>
-	<div id="UiHeader">
-		<el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b" mode="horizontal">
-            <el-menu-item index="/">控制台</el-menu-item>
-            <el-menu-item index="/live">实时监控</el-menu-item>
-            <el-menu-item index="/deviceList">国标设备</el-menu-item>
-            <el-menu-item index="/pushVideoList">推流列表</el-menu-item>
-            <el-menu-item index="/streamProxyList">拉流代理</el-menu-item>
-            <el-menu-item index="/cloudRecord">云端录像</el-menu-item>
-            <el-menu-item index="/mediaServerManger">节点管理</el-menu-item>
-            <el-menu-item index="/parentPlatformList/15/1">国标级联</el-menu-item>
-            <el-menu-item @click="openDoc">在线文档</el-menu-item>
-<!--            <el-submenu index="/setting">-->
-<!--              <template slot="title">系统设置</template>-->
-<!--              <el-menu-item index="/setting/web">WEB服务</el-menu-item>-->
-<!--              <el-menu-item index="/setting/sip">国标服务</el-menu-item>-->
-<!--              <el-menu-item index="/setting/media">媒体服务</el-menu-item>-->
-<!--            </el-submenu>-->
-            <el-switch v-model="alarmNotify"  active-text="报警信息推送" style="display: block float: right" @change="alarmNotifyChannge"></el-switch>
-<!--            <el-menu-item style="float: right;" @click="loginout">退出</el-menu-item>-->
-            <el-submenu index="" style="float: right;" >
-              <template slot="title">欢迎,{{this.$cookies.get("session").username}}</template>
-              <el-menu-item @click="changePassword">修改密码</el-menu-item>
-              <el-menu-item @click="loginout">注销</el-menu-item>
-            </el-submenu>
-        </el-menu>
-    <changePasswordDialog ref="changePasswordDialog"></changePasswordDialog>
-	</div>
-</template>
-
-<script>
-
-import changePasswordDialog from './dialog/changePassword.vue'
-export default {
-    name: "UiHeader",
-    components: { Notification, changePasswordDialog },
-    data() {
-        return {
-            alarmNotify: false,
-            sseSource: null,
-            activeIndex: this.$route.path,
-        };
-    },
-    created(){
-      if (this.$route.path.startsWith("/channelList")){
-        this.activeIndex = "/deviceList"
-      }
-
-    },
-    mounted() {
-      window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
-      // window.addEventListener('unload', e => this.unloadHandler(e))
-      this.alarmNotify = this.getAlarmSwitchStatus() === "true";
-      this.sseControl();
-    },
-    methods:{
-  	    loginout(){
-          this.$axios({
-            method: 'get',
-            url:"/api/user/logout"
-          }).then((res)=> {
-            // 删除cookie,回到登录页面
-            this.$cookies.remove("session");
-            this.$router.push('/login');
-            this.sseSource.close();
-          }).catch((error)=> {
-            console.error("登出失败")
-            console.error(error)
-          });
-        },
-        changePassword(){
-          this.$refs.changePasswordDialog.openDialog()
-        },
-        openDoc(){
-  	      console.log(process.env.BASE_API)
-          window.open( !!process.env.BASE_API? process.env.BASE_API + "/doc.html": "/doc.html")
-        },
-        beforeunloadHandler() {
-            this.sseSource.close();
-        },
-        alarmNotifyChannge(){
-          this.setAlarmSwitchStatus()
-          this.sseControl()
-        },
-        sseControl() {
-            let that = this;
-            if (this.alarmNotify) {
-              console.log("申请SSE推送API调用,浏览器ID: " + this.$browserId);
-              this.sseSource = new EventSource('/api/emit?browserId=' + this.$browserId);
-        	    this.sseSource.addEventListener('message', function(evt) {
-                    that.$notify({
-                        title: '收到报警信息',
-                        dangerouslyUseHTMLString: true,
-                        message: evt.data,
-                        type: 'warning'
-                    });
-	                console.log("收到信息:" + evt.data);
-        	    });
-	            this.sseSource.addEventListener('open', function(e) {
-        	        console.log("SSE连接打开.");
-	            }, false);
-        	    this.sseSource.addEventListener('error', function(e) {
-	                if (e.target.readyState == EventSource.CLOSED) {
-	                    console.log("SSE连接关闭");
-        	        } else {
-	                    console.log(e.target.readyState);
-        	        }
-	            }, false);
-            } else {
-                if (this.sseSource != null) {
-                  this.sseSource.removeEventListener('open', null);
-                  this.sseSource.removeEventListener('message', null);
-                  this.sseSource.removeEventListener('error', null);
-                  this.sseSource.close();
-                }
-
-            }
-        },
-        getAlarmSwitchStatus(){
-          if (localStorage.getItem("alarmSwitchStatus") == null) {
-            localStorage.setItem("alarmSwitchStatus", false);
-          }
-          return localStorage.getItem("alarmSwitchStatus");
-        },
-        setAlarmSwitchStatus(){
-          localStorage.setItem("alarmSwitchStatus", this.alarmNotify);
-        }
-    },
-    destroyed() {
-        window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
-        if (this.sseSource != null) {
-          this.sseSource.removeEventListener('open', null);
-          this.sseSource.removeEventListener('message', null);
-          this.sseSource.removeEventListener('error', null);
-          this.sseSource.close();
-        }
-    },
-
- }
-
-</script>
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
deleted file mode 100644
index 6eae383..0000000
--- a/web_src/src/components/channelList.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-<template>
-<div id="channelList">
-    <el-container>
-        <el-header>
-            <uiHeader></uiHeader>
-        </el-header>
-        <el-main>
-            <div style="background-color: #FFFFFF; position: relative; padding: 1rem 0.5rem 0.5rem 0.5rem; text-align: center;">
-                <span style="font-size: 1rem; font-weight: 500; ">通道列表({{parentChannelId ==0 ? deviceId:parentChannelId}})</span>
-
-            </div>
-            <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-                <el-button icon="el-icon-arrow-left" size="mini" style="margin-right: 1rem;" type="primary" @click="showDevice">返回</el-button>
-                搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input>
-
-                通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem;" v-model="channelType" placeholder="请选择" default-first-option>
-                    <el-option label="全部" value=""></el-option>
-                    <el-option label="设备" value="false"></el-option>
-                    <el-option label="子目录" value="true"></el-option>
-                </el-select>
-                在线状态: <el-select size="mini" style="margin-right: 1rem;" @change="search" v-model="online" placeholder="请选择" default-first-option>
-                    <el-option label="全部" value=""></el-option>
-                    <el-option label="在线" value="true"></el-option>
-                    <el-option label="离线" value="false"></el-option>
-                </el-select>
-                <el-checkbox size="mini" style="margin-right: 1rem; float: right;" v-model="autoList" @change="autoListChange">自动刷新</el-checkbox>
-            </div>
-            <devicePlayer ref="devicePlayer" v-loading="isLoging"></devicePlayer>
-            <!--设备列表-->
-            <el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" border style="width: 100%">
-                <el-table-column prop="channelId" label="通道编号" width="200">
-                </el-table-column>
-                <el-table-column prop="name" label="通道名称">
-                </el-table-column>
-                <el-table-column label="快照" width="80" align="center">
-                  <template slot-scope="scope">
-                    <img style="max-height: 3rem;max-width: 4rem;"
-                         :id="scope.row.deviceId + '_' + scope.row.channelId"
-                         :src="getSnap(scope.row)"
-                         @error="getSnapErrorEvent($event.target.id)"
-                         alt="">
-<!--                    <el-image-->
-<!--                      :id="'snapImg_' + scope.row.deviceId + '_' + scope.row.channelId"-->
-<!--                      :src="getSnap(scope.row)"-->
-<!--                      @error="getSnapErrorEvent($event, scope.row)"-->
-<!--                      :fit="'contain'">-->
-<!--                      <div slot="error" class="image-slot">-->
-<!--                        <i class="el-icon-picture-outline"></i>-->
-<!--                      </div>-->
-<!--                    </el-image>-->
-                  </template>
-                </el-table-column>
-                <el-table-column prop="subCount" label="子节点数">
-                </el-table-column>
-                <el-table-column prop="manufacture" label="厂家">
-                </el-table-column>
-                <el-table-column label="位置信息" align="center">
-                  <template slot-scope="scope">
-                    <span>{{scope.row.longitude}},{{scope.row.latitude}}</span>
-                  </template>
-                </el-table-column>
-              <el-table-column prop="ptztypeText" label="云台类型"/>
-                <el-table-column label="开启音频" align="center">
-                    <template slot-scope="scope">
-                        <el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF">
-                        </el-switch>
-                    </template>
-                </el-table-column>
-                <el-table-column label="状态" width="180" align="center">
-                    <template slot-scope="scope">
-                        <div slot="reference" class="name-wrapper">
-                            <el-tag size="medium" v-if="scope.row.status == 1">开启</el-tag>
-                            <el-tag size="medium" type="info" v-if="scope.row.status == 0">关闭</el-tag>
-                        </div>
-                    </template>
-                </el-table-column>
-
-
-                <el-table-column label="操作" width="280" align="center" fixed="right">
-                    <template slot-scope="scope">
-                        <el-button-group>
-                            <!-- <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">播放</el-button> -->
-                            <el-button size="mini" icon="el-icon-video-play" @click="sendDevicePush(scope.row)">播放</el-button>
-                            <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="!!scope.row.streamId" @click="stopDevicePush(scope.row)">停止</el-button>
-                            <el-button size="mini" icon="el-icon-s-open" type="primary" v-if="scope.row.subCount > 0" @click="changeSubchannel(scope.row)">查看</el-button>
-                            <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">设备录象</el-button>
-                            <!--                             <el-button size="mini" @click="sendDevicePush(scope.row)">录像查询</el-button> -->
-                        </el-button-group>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <el-pagination style="float: right" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[15, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total">
-            </el-pagination>
-
-        </el-main>
-    </el-container>
-</div>
-</template>
-
-<script>
-import devicePlayer from './dialog/devicePlayer.vue'
-import uiHeader from './UiHeader.vue'
-import moment from "moment";
-export default {
-    name: 'channelList',
-    components: {
-        devicePlayer,
-        uiHeader
-    },
-    data() {
-        return {
-            deviceId: this.$route.params.deviceId,
-            parentChannelId: this.$route.params.parentChannelId,
-            deviceChannelList: [],
-            videoComponentList: [],
-            currentPlayerInfo: {}, //当前播放对象
-            updateLooper: 0, //数据刷新轮训标志
-            searchSrt: "",
-            channelType: "",
-            online: "",
-            winHeight: window.innerHeight - 250,
-            currentPage: parseInt(this.$route.params.page),
-            count: parseInt(this.$route.params.count),
-            total: 0,
-            beforeUrl: "/deviceList",
-            isLoging: false,
-            autoList: true,
-            loadSnap:{}
-        };
-    },
-
-    mounted() {
-        this.initData();
-        if (this.autoList) {
-            this.updateLooper = setInterval(this.initData, 5000);
-        }
-
-    },
-    destroyed() {
-        this.$destroy('videojs');
-        clearTimeout(this.updateLooper);
-    },
-    methods: {
-        initData: function () {
-            if (typeof (this.parentChannelId) == "undefined" ||  this.parentChannelId == 0) {
-                this.getDeviceChannelList();
-            } else {
-                this.showSubchannels();
-            }
-        },
-        initParam: function () {
-            this.deviceId = this.$route.params.deviceId;
-            this.parentChannelId = this.$route.params.parentChannelId;
-            this.currentPage = parseInt(this.$route.params.page);
-            this.count = parseInt(this.$route.params.count);
-            if (this.parentChannelId == "" || this.parentChannelId == 0) {
-                this.beforeUrl = "/deviceList"
-            }
-
-        },
-        currentChange: function (val) {
-            var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}`
-            this.$router.push(url).then(() => {
-                this.initParam();
-                this.initData();
-            })
-        },
-        handleSizeChange: function (val) {
-            var url = `/${this.$router.currentRoute.name}/${this.$router.params.deviceId}/${this.$router.params.parentChannelId}/${val}/1`
-            this.$router.push(url).then(() => {
-                this.initParam();
-                this.initData();
-            })
-
-        },
-        getDeviceChannelList: function () {
-            let that = this;
-            if (typeof (this.$route.params.deviceId) == "undefined") return;
-            this.$axios({
-                method: 'get',
-                url: `/api/device/query/devices/${this.$route.params.deviceId}/channels`,
-                params:{
-						            page: that.currentPage,
-                        count: that.count,
-                        query: that.searchSrt,
-                        online: that.online,
-                        channelType: that.channelType
-					      }
-            }).then(function (res) {
-                    that.total = res.data.total;
-                    that.deviceChannelList = res.data.list;
-                    // 防止出现表格错位
-                    that.$nextTick(() => {
-                        that.$refs.channelListTable.doLayout();
-                    })
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-
-        //通知设备上传媒体流
-        sendDevicePush: function (itemData) {
-            let deviceId = this.deviceId;
-            this.isLoging = true;
-            let channelId = itemData.channelId;
-            console.log("通知设备推流1:" + deviceId + " : " + channelId );
-            let that = this;
-            this.$axios({
-                method: 'get',
-                url: '/api/play/start/' + deviceId + '/' + channelId
-            }).then(function (res) {
-                that.isLoging = false;
-                if (res.data.code === 0) {
-
-                  setTimeout(()=>{
-
-                    let snapId = deviceId + "_" + channelId;
-                    that.loadSnap[snapId] = 0;
-                    that.getSnapErrorEvent(snapId)
-                  },5000)
-                  that.$refs.devicePlayer.openDialog("media", deviceId, channelId, {
-                    streamInfo: res.data.data,
-                    hasAudio: itemData.hasAudio
-                  });
-                  setTimeout(()=>{
-                    that.initData();
-                  },1000)
-
-                }else {
-                  that.$message.error(res.data.msg);
-                }
-            }).catch(function (e) {});
-        },
-        queryRecords: function (itemData) {
-            var format = moment().format("YYYY-M-D");
-            let deviceId = this.deviceId;
-            let channelId = itemData.channelId;
-            this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format})
-        },
-        stopDevicePush: function (itemData) {
-            var that = this;
-            this.$axios({
-                method: 'get',
-                url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId
-            }).then(function (res) {
-                that.initData();
-            }).catch(function (error) {
-              if (error.response.status === 402) { // 已经停止过
-                that.initData();
-              }else {
-                console.log(error)
-              }
-            });
-        },
-        getSnap: function (row){
-          return '/static/snap/' + row.deviceId + '_' + row.channelId + '.jpg'
-        },
-        getSnapErrorEvent: function (id){
-
-          if (typeof (this.loadSnap[id]) != "undefined") {
-            console.log("下载截图" + this.loadSnap[id])
-            if (this.loadSnap[id] > 5) {
-              delete this.loadSnap[id];
-              return;
-            }
-            setTimeout(()=>{
-              this.loadSnap[id] ++
-              document.getElementById(id).setAttribute("src", '/static/snap/' + id + '.jpg?' + new Date().getTime())
-            },1000)
-
-          }
-        },
-        showDevice: function () {
-            this.$router.push(this.beforeUrl).then(() => {
-                this.initParam();
-                this.initData();
-            })
-        },
-        changeSubchannel(itemData) {
-            this.beforeUrl = this.$router.currentRoute.path;
-
-            var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}/${this.$router.currentRoute.params.count}/1`
-            this.$router.push(url).then(() => {
-                this.searchSrt = "";
-                this.channelType = "";
-                this.online = "";
-                this.initParam();
-                this.initData();
-            })
-        },
-        showSubchannels: function (channelId) {
-            let that = this;
-
-            this.$axios({
-                method: 'get',
-                url:`/api/device/query/sub_channels/${this.deviceId}/${this.parentChannelId}/channels`,
-                params: {
-                    page: that.currentPage,
-                    count: that.count,
-                    query: that.searchSrt,
-                    online: that.online,
-                    channelType: that.channelType
-                }
-            }).then(function (res) {
-                that.total = res.data.total;
-                that.deviceChannelList = res.data.list;
-                // 防止出现表格错位
-                that.$nextTick(() => {
-                    that.$refs.channelListTable.doLayout();
-                })
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-        search: function () {
-            this.currentPage = 1;
-            this.total = 0;
-            this.initData();
-        },
-        updateChannel: function (row) {
-            this.$axios({
-                method: 'post',
-                url: `/api/device/query/channel/update/${this.deviceId}`,
-                params: row
-            }).then(function (res) {
-                console.log(JSON.stringify(res));
-            });
-        },
-        autoListChange: function () {
-            if (this.autoList) {
-                this.updateLooper = setInterval(this.initData, 1500);
-            }else{
-                window.clearInterval(this.updateLooper);
-            }
-        }
-
-    }
-};
-</script>
-
-<style>
-.videoList {
-    display: flex;
-    flex-wrap: wrap;
-    align-content: flex-start;
-}
-
-.video-item {
-    position: relative;
-    width: 15rem;
-    height: 10rem;
-    margin-right: 1rem;
-    background-color: #000000;
-}
-
-.video-item-img {
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    margin: auto;
-    width: 100%;
-    height: 100%;
-}
-
-.video-item-img:after {
-    content: "";
-    display: inline-block;
-    position: absolute;
-    z-index: 2;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    margin: auto;
-    width: 3rem;
-    height: 3rem;
-    background-image: url("../assets/loading.png");
-    background-size: cover;
-    background-color: #000000;
-}
-
-.video-item-title {
-    position: absolute;
-    bottom: 0;
-    color: #000000;
-    background-color: #ffffff;
-    line-height: 1.5rem;
-    padding: 0.3rem;
-    width: 14.4rem;
-}
-</style>
diff --git a/web_src/src/components/channelTree.vue b/web_src/src/components/channelTree.vue
deleted file mode 100644
index ae9eac7..0000000
--- a/web_src/src/components/channelTree.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div>
-      <el-tree :data="channelList" :props="props" @node-click="sendDevicePush">
-        <span  slot-scope="{ node }">
-          <span v-if="node.isLeaf">
-            <i class="el-icon-video-camera" :style="{color:node.disabled==1?'#67C23A':'#F56C6C'}"></i>
-          </span>
-          <span v-else>
-            <i class="el-icon-folder"></i>
-          </span>
-          <span>
-            {{ node.label }}
-          </span>
-        </span>
-      </el-tree>
-  </div>
-</template>
-<script>
-import ChannelTreeItem from "@/components/channelTreeItem" 
-import {tree} from '@/api/deviceApi'
-
-export default {
-  components: {
-    ChannelTreeItem,
-  },
-  props:{
-    device: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-      return {
-        loading: false,
-        channelList: [],
-        props: {
-          label: 'title',
-          children: 'children',
-          isLeaf: 'hasChildren',
-          disabled: 'status'
-        },
-      }
-  },
-  computed: {
-     
-  },
-  mounted() {
-    this.leafs = []
-    this.getTree()
-  },
-  methods: {
-    getTree() {
-      this.loading = true
-      var that = this
-      tree(this.device.deviceId).then(function (res) {
-          console.log(res.data.data);
-          that.channelList = res.data.data;
-          that.loading = false;
-        }).catch(function (error) {
-          console.log(error);
-          that.loading = false;
-        });
-    },
-    sendDevicePush(c) {
-      if(c.hasChildren) return
-      this.$emit('sendDevicePush',c)
-    }
-  }
-}
-</script>
\ No newline at end of file
diff --git a/web_src/src/components/channelTreeItem.vue b/web_src/src/components/channelTreeItem.vue
deleted file mode 100644
index 7f2a2a5..0000000
--- a/web_src/src/components/channelTreeItem.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-<template>
-  <div>
-    <!-- <div :index="item.key" v-for="(item,i) in  list" :key="i+'-'">
-      <el-submenu v-if="item.hasChildren">
-          <template slot="title">
-            <i class="el-icon-video-camera"></i>
-            <span slot="title">{{item.title || item.deviceId}}</span>
-          </template>
-          <channel-list :list="item.children" @sendDevicePush="sendDevicePush"></channel-list>
-      </el-submenu>
-      <el-menu-item v-else :index="item.key" @click="sendDevicePush(item)">
-        <template slot="title" >
-          <i class="el-icon-switch-button" :style="{color:item.status==1?'#67C23A':'#F56C6C'}"></i>
-          <span slot="title">{{item.title}}</span>
-        </template>
-      </el-menu-item>
-    </div> -->
-    <div >
-      <template v-if="!item.hasChildren">
-          <el-menu-item :index="item.key" @click="sendDevicePush(item)">
-            <i class="el-icon-video-camera" :style="{color:item.status==1?'#67C23A':'#F56C6C'}"></i>
-            {{item.title}}
-          </el-menu-item>
-      </template>
-
-      <el-submenu v-else :index="item.key">
-        <template slot="title" >
-          <i class="el-icon-location-outline"></i>
-          {{item.title}}
-        </template>
-
-        <template v-for="child in item.children">
-          <channel-item
-            v-if="child.hasChildren"
-            :item="child"
-            :key="child.key"
-            @sendDevicePush="sendDevicePush"/>
-          <el-menu-item v-else :key="child.key" :index="child.key" @click="sendDevicePush(child)">
-            <i class="el-icon-video-camera" :style="{color:child.status==1?'#67C23A':'#F56C6C'}"></i>
-            {{child.title}}
-          </el-menu-item>
-        </template>
-      </el-submenu>
-    </div>
-  </div>
-</template>
-<script>
-export default {
-  name:'ChannelItem',
-  props:{
-    list:Array,
-    channelId: String,
-    item: {
-      type: Object,
-      required: true
-    }
-  },
-  data () {
-    return {
-
-    }
-  },
-  watch: {
-    channelId(val) {
-      console.log(val);
-    }
-  },
-  methods: {
-    sendDevicePush(c) {
-      this.$emit('sendDevicePush',c)
-    }
-  }
-}
-</script>
diff --git a/web_src/src/components/control.vue b/web_src/src/components/control.vue
deleted file mode 100644
index 3651593..0000000
--- a/web_src/src/components/control.vue
+++ /dev/null
@@ -1,584 +0,0 @@
-<template>
-<div id="app">
-    <el-container>
-        <el-header>
-            <uiHeader></uiHeader>
-        </el-header>
-        <el-main>
-            <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-                <span style="font-size: 1rem; font-weight: bold;">控制台</span>
-                <div style="position: absolute; right: 17rem; top: 0.3rem;">
-                  节点选择: <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;" v-model="mediaServerChoose" placeholder="请选择" default-first-option>
-                  <el-option
-                    v-for="item in mediaServerList"
-                    :key="item.id"
-                    :label="item.id + '( ' + item.streamIp + ' )'"
-                    :value="item.id">
-                  </el-option>
-                  </el-select>
-                  <span >{{loadCount}}</span>
-                </div>
-                <div style="position: absolute; right: 1rem; top: 0.3rem;">
-                    <el-popover placement="bottom" width="900" height="300" trigger="click">
-                        <div style="height: 600px; overflow:auto; padding: 20px">
-                          <el-descriptions v-for="(value, key, index) in serverConfig" :key="key" border column="1" style="margin-bottom: 1rem">
-                            <template slot="title">
-                              {{key}}
-                            </template>
-                            <el-descriptions-item v-for="(value1, key1, index1) in serverConfig[key]" :key="key1">
-                              <template slot="label" >
-                                {{ getMediaKeyNameFromKey(key1) }}
-                              </template>
-                              {{ value1 }}
-                            </el-descriptions-item>
-                          </el-descriptions>
-                        </div>
-                        <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">媒体服务器配置</el-button>
-                    </el-popover>
-                    <el-popover placement="bottom" width="900" height="300" trigger="click">
-                        <div style="height: 600px;overflow:auto; padding: 20px">
-                          <el-descriptions title="国标配置" border column="1">
-                            <template slot="extra">
-                              <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerConfig.sip)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>
-                            </template>
-                            <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip">
-                              <template slot="label">
-                                {{ getNameFromKey(key) }}
-                              </template>
-                              {{ value }}
-                            </el-descriptions-item>
-                          </el-descriptions>
-
-                          <div style="margin-top: 1rem">
-                            <el-descriptions title="基础配置" border column="1">
-                              <template slot="extra">
-                                <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerConfig.base)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>
-                              </template>
-                              <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.base" :key="key">
-                                <template slot="label" >
-                                  {{ getNameFromKey(key) }}
-                                </template>
-                                <div v-if="key === 'interfaceAuthenticationExcludes'">
-                                  <el-dropdown>
-                                      <span class="el-dropdown-link">
-                                        查看<i class="el-icon-arrow-down el-icon--right"></i>
-                                      </span>
-                                    <el-dropdown-menu slot="dropdown">
-                                      <el-dropdown-item v-for="(value, key, index) in wvpServerConfig.base.interfaceAuthenticationExcludes" :key="key">{{value}}</el-dropdown-item>
-                                    </el-dropdown-menu>
-                                  </el-dropdown>
-                                </div>
-                                <div v-if="key !== 'interfaceAuthenticationExcludes'">
-                                  <div v-if="value === true">
-                                    已启用
-                                  </div>
-                                  <div v-if="value === false">
-                                    未启用
-                                  </div>
-                                  <div v-if="value !== true && value !== false">
-                                    {{ value }}
-                                  </div>
-                                </div>
-
-                              </el-descriptions-item>
-                            </el-descriptions>
-                          </div>
-                          <div style="margin-top: 1rem">
-                            <el-descriptions title="版本信息" border column="1">
-                              <template slot="extra">
-                                <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="JSON.stringify(wvpServerVersion)" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></el-button>
-                              </template>
-                              <el-descriptions-item v-for="(value, key, index) in wvpServerVersion" :key="key">
-                                <template slot="label">
-                                 {{ getNameFromKey(key) }}
-                                </template>
-                                {{ value }}
-                              </el-descriptions-item>
-                            </el-descriptions>
-
-
-                          </div>
-                        </div>
-                      <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">信令服务器配置</el-button>
-                    </el-popover>
-                    <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">重启媒体服务器</el-button>
-                </div>
-            </div>
-            <el-row :gutter="30">
-                <el-col :span="12">
-                    <div class="control-table" id="ThreadsLoad">table1</div>
-                </el-col>
-                <el-col :span="12">
-                    <div class="control-table" id="WorkThreadsLoad">table2</div>
-                </el-col>
-            </el-row>
-            <el-table :data="allSessionData" style="margin-top: 1rem;">
-                <el-table-column prop="peer_ip" label="远端"></el-table-column>
-                <el-table-column prop="local_ip" label="本地"></el-table-column>
-                <el-table-column prop="typeid" label="类型"></el-table-column>
-                <el-table-column align="right">
-                    <template slot="header" slot-scope="scope">
-                        <el-button icon="el-icon-refresh-right" circle @click="getAllSession()"></el-button>
-                    </template>
-                    <template slot-scope="scope">
-                        <el-button @click.native.prevent="deleteRow(scope.$index, allSessionData)" type="text" size="small">移除</el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-
-        </el-main>
-        <!-- <el-footer style="position: absolute; bottom: 0; width: 100%;">ZLMediaKit-VUE_UI v1</el-footer> -->
-    </el-container>
-
-</div>
-</template>
-
-<script>
-import uiHeader from './UiHeader.vue'
-import MediaServer from './service/MediaServer'
-
-import echarts from 'echarts';
-export default {
-    name: 'app',
-    components: {
-        echarts,
-        uiHeader
-    },
-    data() {
-        return {
-            tableOption: {
-                // legend: {},
-                xAxis: {},
-                yAxis: {},
-                label: {},
-                tooltip: {},
-                dataZoom: [],
-                series: []
-            },
-            table1Option: {
-                // legend: {},
-                xAxis: {},
-                yAxis: {},
-                label: {},
-                tooltip: {},
-                series: []
-            },
-            mChart: null,
-            mChart1: null,
-            charZoomStart: 0,
-            charZoomEnd: 100,
-            chartInterval: 0, //更新图表统计图定时任务标识
-            allSessionData: [],
-            visible: false,
-            wvpVisible: false,
-            serverConfig: {},
-            wvpServerConfig: {},
-            wvpServerVersion: {},
-            mediaServer : new MediaServer(),
-            mediaServerChoose : null,
-            loadCount : 0,
-            mediaServerList : []
-        };
-    },
-    mounted() {
-
-        this.initTable();
-        this.chartInterval = setInterval(this.updateData, 3000);
-        this.mediaServer.getOnlineMediaServerList((data)=>{
-          this.mediaServerList = data.data;
-          if (this.mediaServerList && this.mediaServerList.length > 0) {
-            this.mediaServerChoose = this.mediaServerList[0].id
-            this.loadCount = this.mediaServerList[0].count;
-            this.updateData();
-          }
-        })
-    },
-    destroyed() {
-        clearInterval(this.chartInterval); //释放定时任务
-    },
-    methods: {
-        chooseMediaChange: function (val) {
-            this.loadCount = 0
-            this.initTable()
-            this.updateData();
-        },
-        updateData: function () {
-            this.getThreadsLoad();
-            this.getLoadCount();
-            this.getAllSession();
-        },
-        /**
-         * 获取线程状态
-         */
-        getThreadsLoad: function () {
-            let that = this;
-            if (that.mediaServerChoose != null) {
-              this.$axios({
-                method: 'get',
-                url: '/zlm/' + that.mediaServerChoose +'/index/api/getThreadsLoad'
-              }).then(function (res) {
-                if (res.data.code == 0) {
-                  that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', {
-                    hour12: false
-                  }));
-                  that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', {
-                    hour12: false
-                  }));
-
-                  for (var i = 0; i < res.data.data.length; i++) {
-                    if (that.tableOption.series[i] === undefined) {
-                      let data = {
-                        data: [],
-                        type: 'line'
-                      };
-                      let data1 = {
-                        data: [],
-                        type: 'line'
-                      };
-                      data.data.push(res.data.data[i].delay);
-                      data1.data.push(res.data.data[i].load);
-                      that.tableOption.series.push(data);
-                      that.table1Option.series.push(data1);
-                    } else {
-                      that.tableOption.series[i].data.push(res.data.data[i].delay);
-                      that.table1Option.series[i].data.push(res.data.data[i].load);
-                    }
-                  }
-                  that.tableOption.dataZoom[0].start = that.charZoomStart;
-                  that.tableOption.dataZoom[0].end = that.charZoomEnd;
-                  that.table1Option.dataZoom[0].start = that.charZoomStart;
-                  that.table1Option.dataZoom[0].end = that.charZoomEnd;
-                  //that.myChart = echarts.init(document.getElementById('ThreadsLoad'));
-                  that.myChart.setOption(that.tableOption, true);
-                  // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad'));
-                  that.myChart1.setOption(that.table1Option, true);
-                }
-              });
-            }
-
-        },
-        getLoadCount: function (){
-          let that = this;
-          if (that.mediaServerChoose != null) {
-            that.mediaServer.getMediaServer(that.mediaServerChoose, (data)=>{
-              if (data.code == 0) {
-                that.loadCount = data.data.count
-              }
-            })
-          }
-        },
-        initTable: function () {
-            let that = this;
-            this.tableOption.xAxis = {
-                type: 'category',
-                data: [], // x轴数据
-                name: '时间', // x轴名称
-                // x轴名称样式
-                nameTextStyle: {
-                    fontWeight: 300,
-                    fontSize: 15
-                }
-            };
-            this.tableOption.yAxis = {
-                type: 'value',
-                name: '延迟率', // y轴名称
-                boundaryGap: [0, '100%'],
-                max: 100,
-                axisLabel: {
-                    show: true,
-                    interval: 'auto',
-                    formatter: '{value} %'
-                },
-                // y轴名称样式
-                nameTextStyle: {
-                    fontWeight: 300,
-                    fontSize: 15
-                }
-            };
-            this.tableOption.dataZoom = [{
-                show: true,
-                start: this.charZoomStart,
-                end: this.charZoomEnd
-            }];
-            this.myChart = echarts.init(document.getElementById('ThreadsLoad'));
-            this.myChart.setOption(this.tableOption);
-            this.myChart.on('dataZoom', function (event) {
-                if (event.batch) {
-                    that.charZoomStart = event.batch[0].start;
-                    that.charZoomEnd = event.batch[0].end;
-                } else {
-                    that.charZoomStart = event.start;
-                    that.charZoomEnd = event.end;
-                }
-            });
-
-            this.table1Option.xAxis = {
-                type: 'category',
-                data: [], // x轴数据
-                name: '时间', // x轴名称
-                // x轴名称样式
-                nameTextStyle: {
-                    fontWeight: 300,
-                    fontSize: 15
-                }
-            };
-            this.table1Option.yAxis = {
-                type: 'value',
-                name: '负载率', // y轴名称
-                boundaryGap: [0, '100%'],
-                max: 100,
-                axisLabel: {
-                    show: true,
-                    interval: 'auto',
-                    formatter: '{value} %'
-                },
-                // y轴名称样式
-                nameTextStyle: {
-                    fontWeight: 300,
-                    fontSize: 15
-                }
-            };
-            this.table1Option.dataZoom = [{
-                show: true,
-                start: this.charZoomStart,
-                end: this.charZoomEnd
-            }];
-            this.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad'));
-            this.myChart1.setOption(this.table1Option);
-            this.myChart1.on('dataZoom', function (event) {
-                if (event.batch) {
-                    that.charZoomStart = event.batch[0].start;
-                    that.charZoomEnd = event.batch[0].end;
-                } else {
-                    that.charZoomStart = event.start;
-                    that.charZoomEnd = event.end;
-                }
-            });
-        },
-
-        getAllSession: function () {
-            let that = this;
-            that.allSessionData = [];
-            this.$axios({
-                method: 'get',
-                url: '/zlm/' + that.mediaServerChoose +'/index/api/getAllSession'
-            }).then(function (res) {
-                res.data.data.forEach(item => {
-                    let data = {
-                        peer_ip: item.peer_ip,
-                        local_ip: item.local_ip,
-                        typeid: item.typeid,
-                        id: item.id
-                    };
-                    that.allSessionData.push(data);
-                });
-            });
-        },
-        getServerConfig: function () {
-            let that = this;
-            this.$axios({
-                method: 'get',
-                url: '/zlm/' + that.mediaServerChoose +'/index/api/getServerConfig'
-            }).then(function (res) {
-                let info = res.data.data[0];
-                let serverInfo = {}
-                for (let i = 0; i < Object.keys(info).length; i++) {
-                  let key = Object.keys(info)[i];
-                  let group = key.substring(0, key.indexOf("."))
-                  let itemKey = key.substring(key.indexOf(".") + 1)
-                  if (!serverInfo[group]) serverInfo[group] = {}
-                  serverInfo[group][itemKey] = info[key]
-                }
-
-                that.serverConfig = serverInfo;
-                that.visible = true;
-            });
-        },
-        getWVPServerConfig: function () {
-            let that = this;
-            this.$axios({
-                method: 'get',
-                url: '/api/server/config'
-            }).then(function (res) {
-                console.log(res)
-                that.wvpServerConfig = res.data.data;
-                that.wvpVisible = true;
-            });
-            this.$axios({
-                method: 'get',
-                url: '/api/server/version'
-            }).then(function (res) {
-                console.log(res)
-                that.wvpServerVersion = res.data.data;
-                that.wvpVisible = true;
-            });
-        },
-        reStartServer: function () {
-            let that = this;
-            this.$confirm('此操作将重启媒体服务器, 是否继续?', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
-                type: 'warning'
-            }).then(() => {
-                let that = this;
-                this.$axios({
-                    method: 'get',
-                    url: '/zlm/' + that.mediaServerChoose +'/index/api/restartServer'
-                }).then(function (res) {
-                    that.getAllSession();
-                    if (res.data.code == 0) {
-                        that.$message({
-                            type: 'success',
-                            message: '操作完成'
-                        });
-                    }
-                });
-            });
-        },
-        deleteRow: function (index, tabledata) {
-            let that = this;
-            this.$confirm('此操作将断开该通信链路, 是否继续?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                })
-                .then(() => {
-                    that.deleteSession(tabledata[index].id);
-                })
-                .catch(() => {
-                    console.log('id:' + JSON.stringify(tabledata[index]));
-                    this.$message({
-                        type: 'info',
-                        message: '已取消删除'
-                    });
-                });
-            console.log(JSON.stringify(tabledata[index]));
-        },
-        deleteSession: function (id) {
-            let that = this;
-            this.$axios({
-                method: 'get',
-                url: '/zlm/' + that.mediaServerChoose +'/index/api/kick_session&id=' + id
-            }).then(function (res) {
-                that.getAllSession();
-                that.$message({
-                    type: 'success',
-                    message: '删除成功!'
-                });
-            });
-        },
-        getNameFromKey: function(key) {
-          let nameData = {
-            "waitTrack": "等待编码信息",
-            "interfaceAuthenticationExcludes": "不进行鉴权的接口",
-            "playTimeout": "点播超时时间",
-            "autoApplyPlay": "自动点播",
-            "recordPushLive": "推流录像",
-            "redisConfig": "自动配置redis",
-            "thirdPartyGBIdReg": "stream信息正则",
-            "savePositionHistory": "保存轨迹信息",
-            "interfaceAuthentication": "接口鉴权",
-            "serverId": "服务ID",
-            "logInDatebase": "日志存储进数据库",
-            "seniorSdp": "扩展SDP",
-            "password": "密码",
-            "port": "端口号",
-            "keepaliveTimeOut": "心跳超时",
-            "domain": "国标域",
-            "ip": "IP地址",
-            "monitorIp": "监听IP",
-            "alarm": "存储报警信息",
-            "ptzSpeed": "云台控制速度",
-            "id": "国标ID",
-            "registerTimeInterval": "注册间隔",
-            "artifactId": "模块名称",
-            "version": "版本",
-            "project": "工程",
-            "git_Revision": "GIT修订版本",
-            "git_BRANCH": "GIT分支",
-            "git_URL": "GIT地址",
-            "build_DATE": "构建时间",
-            "create_By": "作者",
-            "git_Revision_SHORT": "GIT修订版本(短)",
-            "build_Jdk": "构建用JDK",
-          };
-          console.log(key + ": " + nameData[key])
-
-          if (nameData[key]) {
-            return nameData[key]
-          }else {
-            return key;
-          }
-        },
-        getMediaKeyNameFromKey: function(key) {
-          let nameData = {
-            "waitTrack": "等待编码信息",
-            "interfaceAuthenticationExcludes": "不进行鉴权的接口",
-            "playTimeout": "点播超时时间",
-            "autoApplyPlay": "自动点播",
-            "recordPushLive": "推流录像",
-            "redisConfig": "自动配置redis",
-            "thirdPartyGBIdReg": "stream信息正则",
-            "savePositionHistory": "保存轨迹信息",
-            "interfaceAuthentication": "接口鉴权",
-            "serverId": "服务ID",
-            "logInDatebase": "日志存储进数据库",
-            "seniorSdp": "扩展SDP",
-            "password": "密码",
-            "port": "端口号",
-            "keepaliveTimeOut": "心跳超时",
-            "domain": "国标域",
-            "ip": "IP地址",
-            "monitorIp": "监听IP",
-            "alarm": "存储报警信息",
-            "ptzSpeed": "云台控制速度",
-            "id": "国标ID",
-            "registerTimeInterval": "注册间隔",
-            "artifactId": "模块名称",
-            "version": "版本",
-            "project": "工程",
-            "git_Revision": "GIT修订版本",
-            "git_BRANCH": "GIT分支",
-            "git_URL": "GIT地址",
-            "build_DATE": "构建时间",
-            "create_By": "作者",
-            "git_Revision_SHORT": "GIT修订版本(短)",
-            "build_Jdk": "构建用JDK",
-          };
-          console.log(key + ": " + nameData[key])
-
-          if (nameData[key]) {
-            return nameData[key]
-          }else {
-            return key;
-          }
-        }
-    }
-};
-</script>
-
-<style>
-#app {
-    height: 100%;
-}
-
-.control-table {
-    background-color: #ffffff;
-    height: 25rem;
-}
-
-.table-c {
-    border-right: 1px solid #dcdcdc;
-    border-bottom: 1px solid #dcdcdc;
-}
-
-.table-c td {
-    border-left: 1px solid #dcdcdc;
-    border-top: 1px solid #dcdcdc;
-    padding: 0.2rem;
-}
-
-.el-table {
-    width: 99.9% !important;
-}
-</style>
diff --git a/web_src/src/components/devicePosition.vue b/web_src/src/components/devicePosition.vue
deleted file mode 100644
index 777b11e..0000000
--- a/web_src/src/components/devicePosition.vue
+++ /dev/null
@@ -1,391 +0,0 @@
-<template>
-    <div id="devicePosition" style="height: 100%">
-        <el-container style="height: 100%">
-            <el-header>
-                <uiHeader></uiHeader>
-            </el-header>
-            <el-main>
-                <div style="background-color: #ffffff; position: relative; padding: 1rem 0.5rem 0.5rem 0.5rem; text-align: center;">
-                    <span style="font-size: 1rem; font-weight: 500">设备定位 ({{ parentChannelId == 0 ? deviceId : parentChannelId }})</span>
-                </div>
-                <div style="background-color: #ffffff; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left; font-size: 14px;">
-                    <el-button icon="el-icon-arrow-left" size="mini" style="margin-right: 1rem" type="primary" @click="showDevice">返回</el-button>
-                    <!-- <span class="demonstration">从</span> -->
-                    <el-date-picker v-model="searchFrom" type="datetime" placeholder="选择开始日期时间" default-time="00:00:00" size="mini" style="width: 11rem;" align="right" :picker-options="pickerOptions"></el-date-picker>
-                    <el-date-picker v-model="searchTo" type="datetime" placeholder="选择结束日期时间" default-time="00:00:00" size="mini" style="width: 11rem;" align="right" :picker-options="pickerOptions"></el-date-picker>
-                    <el-button-group>
-                        <el-button icon="el-icon-search" size="mini" type="primary" @click="showHistoryPath">历史轨迹</el-button>
-                        <el-button icon="el-icon-search" size="mini" style="margin-right: 1rem" type="primary" @click="showLatestPosition">最新位置</el-button>
-                    </el-button-group>
-                    <el-tag style="width: 5rem; text-align: center" size="medium">过期时间</el-tag>
-                    <el-input-number size="mini" v-model="expired" :min="300" :controls="false" style="width: 4rem;"></el-input-number>
-                    <el-tag style="width: 5rem; text-align: center" size="medium">上报周期</el-tag>
-                    <el-input-number size="mini" v-model="interval" :min="1" :controls="false" style="width: 4rem;"></el-input-number>
-                    <el-button-group>
-                        <el-button icon="el-icon-search" size="mini" type="primary" @click="subscribeMobilePosition">位置订阅</el-button>
-                        <el-button icon="el-icon-search" size="mini" type="primary" @click="unSubscribeMobilePosition">取消订阅</el-button>
-                    </el-button-group>
-                    <el-checkbox size="mini" style="margin-right: 1rem; float: right" v-model="autoList" @change="autoListChange" >自动刷新</el-checkbox>
-                </div>
-                <div class="mapContainer" style="background-color: #ffffff; position: relative; padding: 1rem 0.5rem 0.5rem 0.5rem; text-align: center; height: calc(100% - 10rem);">
-                    <div class="baidumap" id="allmap"></div>
-                </div>
-            </el-main>
-        </el-container>
-    </div>
-</template>
-
-<script>
-import uiHeader from "./UiHeader.vue";
-import moment from "moment";
-import geoTools from "./GeoConvertTools.js";
-export default {
-    name: "devicePosition",
-    components: {
-        uiHeader,
-    },
-    data() {
-        return {
-            pickerOptions: {
-                shortcuts: [{
-                    text: '今天',
-                    onClick(picker) {
-                        picker.$emit('pick', new Date());
-                    }
-                }, {
-                    text: '昨天',
-                    onClick(picker) {
-                        const date = new Date();
-                        date.setTime(date.getTime() - 3600 * 1000 * 24);
-                        picker.$emit('pick', date);
-                    }
-                }, {
-                    text: '一周前',
-                    onClick(picker) {
-                        const date = new Date();
-                        date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
-                        picker.$emit('pick', date);
-                    }
-                }]
-            },
-            deviceId: this.$route.params.deviceId,
-            showHistoryPosition: false, //显示历史轨迹
-            startTime: null,
-            endTime: null,
-            searchFrom: null,
-            searchTo: null,
-            expired: 600,
-            interval: 5,
-            mobilePositionList: [],
-            mapPointList: [],
-            parentChannelId: this.$route.params.parentChannelId,
-            updateLooper: 0, //数据刷新轮训标志
-            total: 0,
-            beforeUrl: "/deviceList",
-            isLoging: false,
-            autoList: false,
-        };
-    },
-    mounted() {
-        this.initData();
-        this.initBaiduMap();
-        if (this.autoList) {
-            this.updateLooper = setInterval(this.initData, 5000);
-        }
-    },
-    destroyed() {
-        // this.$destroy("videojs");
-        clearTimeout(this.updateLooper);
-    },
-    methods: {
-        initData: function () {
-            // if (this.parentChannelId == "" || this.parentChannelId == 0) {
-            //     this.getDeviceChannelList();
-            // } else {
-            //     this.showSubchannels();
-            // }
-        },
-        initParam: function () {
-            // this.deviceId = this.$route.params.deviceId;
-            // this.parentChannelId = this.$route.params.parentChannelId;
-            // this.currentPage = parseInt(this.$route.params.page);
-            // this.count = parseInt(this.$route.params.count);
-            // if (this.parentChannelId == "" || this.parentChannelId == 0) {
-            //     this.beforeUrl = "/deviceList";
-            // }
-        },
-        initBaiduMap() {
-            this.map = new BMap.Map("allmap"); // 创建地图实例
-            let points = [];
-            let point = new BMap.Point(116.231398, 39.567445); // 创建点坐标
-            this.map.centerAndZoom(point, 5); // 初始化地图,设置中心点坐标和地图级别
-            this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
-            this.map.addControl(new BMap.NavigationControl());
-            this.map.addControl(new BMap.ScaleControl());
-            this.map.addControl(new BMap.OverviewMapControl());
-            this.map.addControl(new BMap.MapTypeControl());
-            //map.setMapStyle({ style: 'midnight' }) //地图风格
-        },
-        currentChange: function (val) {
-            // var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}`;
-            // console.log(url);
-            // this.$router.push(url).then(() => {
-            //     this.initParam();
-            //     this.initData();
-            // });
-        },
-        handleSizeChange: function (val) {
-            // var url = `/${this.$router.currentRoute.name}/${this.$router.params.deviceId}/${this.$router.params.parentChannelId}/${val}/1`;
-            // this.$router.push(url).then(() => {
-            //     this.initParam();
-            //     this.initData();
-            // });
-        },
-        showDevice: function () {
-            this.$router.push(this.beforeUrl).then(() => {
-                this.initParam();
-                this.initData();
-            });
-        },
-        autoListChange: function () {
-            if (this.autoList) {
-                this.updateLooper = setInterval(this.initData, 1500);
-            } else {
-                window.clearInterval(this.updateLooper);
-            }
-        },
-        showHistoryPath: function () {
-            this.map.clearOverlays();
-            this.mapPointList = [];
-            this.mobilePositionList = [];
-            if (!!this.searchFrom) {
-                this.startTime = this.toGBString(this.searchFrom);
-                console.log(this.startTime);
-            } else{
-                this.startTime = null;
-            }
-            if (!!this.searchTo) {
-                this.endTime = this.toGBString(this.searchTo);
-                console.log(this.endTime);
-            } else {
-                this.endTime = null;
-            }
-            let self = this;
-            this.$axios({
-                method: 'get',
-                url:`/api/position/history/${this.deviceId}`, 
-                params: {
-                    start: self.startTime,
-                    end: self.endTime,
-                },
-            }).then(function (res) {
-                self.total = res.data.length;
-                self.mobilePositionList = res.data;
-                console.log(self.mobilePositionList);
-                if (self.total == 0) {
-                    self.$message({
-                        showClose: true,
-						message: '未找到符合条件的移动位置信息',
-						type: 'error'
-					});
-                } else {
-                    self.$nextTick(() => {
-                        self.showMarkPoints(self);
-                    });
-                }
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-        showLatestPosition: function() {
-            this.map.clearOverlays();
-            this.mapPointList = [];
-            this.mobilePositionList = [];
-            let self = this;
-            this.$axios({
-                method: 'get',
-                url:`/api/position/latest/${this.deviceId}`
-            }).then(function (res) {
-                console.log(res.data);
-                self.total = res.data.length;
-                self.mobilePositionList.push(res.data);
-                console.log(self.mobilePositionList);
-                if (self.total == 0) {
-                    self.$message({
-                        showClose: true,
-						message: '未找到符合条件的移动位置信息',
-						type: 'error'
-					});
-                } else {
-                    self.$nextTick(() => {
-                        self.showMarkPoints(self);
-                    });
-                }
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-        subscribeMobilePosition: function() {
-            let self = this;
-            this.$axios({
-					method: 'get',
-					url:`/api/position/subscribe/${this.deviceId}`,
-                    params: {
-                        expires: self.expired,
-                        interval: self.interval,
-                    },
-            }).then(function (res) {
-                console.log(res.data);
-            })
-            .catch(function (error) {
-                console.log(error);
-            });
-        },
-        unSubscribeMobilePosition: function() {
-            let self = this;
-            this.$axios({
-					method: 'get',
-					url:`/api/position/subscribe/${this.deviceId}`,
-                    params: {
-                        expires: 0,
-                        interval: self.interval,
-                    },
-            })
-            .then(function (res) {
-                console.log(res.data);
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-        toGBString: function (dateTime) {
-            return (
-                dateTime.getFullYear() + 
-                "-" + this.twoDigits(dateTime.getMonth() + 1) +
-                "-" + this.twoDigits(dateTime.getDate()) +
-                "T" + this.twoDigits(dateTime.getHours()) +
-                ":" + this.twoDigits(dateTime.getMinutes()) +
-                ":" + this.twoDigits(dateTime.getSeconds())
-            );
-        },
-        twoDigits: function (num) {
-            if (num < 10) {
-                return "0" + num;
-            } else {
-                return "" + num;
-            }
-        },
-        showMarkPoints: function(self) {
-            let that = self;
-            let npointJ = null;
-            let npointW = null;
-            let point = null;
-            for (let i = 0; i < self.mobilePositionList.length; i++) {
-                if (self.mobilePositionList[i].geodeticSystem == "BD-09") {
-                    npointJ = self.mobilePositionList[i].cnLng;
-                    npointW = self.mobilePositionList[i].cnLat;
-                    point = new BMap.Point(npointJ, npointW);
-                } else {
-                    npointJ = self.mobilePositionList[i].longitude;
-                    npointW = self.mobilePositionList[i].latitude;
-                    let bd2 = geoTools.GPSToBaidu(npointJ, npointW);
-                    point = new BMap.Point(bd2.lat, bd2.lng);
-                }
-                self.mapPointList.push(point);
-                let marker = new BMap.Marker(point); // 创建标注
-                self.map.addOverlay(marker); // 将标注添加到地图中
-                //提示信息  可以解析 HTML标签以及CSS
-                let infoWindow = new BMap.InfoWindow(`<p style='text-align:left;font-weight:800'>设备: ${self.mobilePositionList[i].deviceId}</p>
-                            <p style='text-align:left;font-weight:0'>时间: ${self.mobilePositionList[i].time}</p>`);
-                // 鼠标移上标注点要发生的事
-                marker.addEventListener("mouseover", function () {
-                    this.openInfoWindow(infoWindow);
-                });
-                // 鼠标移开标注点要发生的事
-                marker.addEventListener("mouseout", function () {
-                    this.closeInfoWindow(infoWindow);
-                });
-                // 鼠标点击标注点要发生的事情
-                marker.addEventListener("click", function () {
-                    alert("点击");
-                });
-            }
-            let view = that.map.getViewport(eval(self.mapPointList));
-            that.map.centerAndZoom(view.center, view.zoom);
-        },
-    },
-};
-</script>
-
-<style>
-.videoList {
-  display: flex;
-  flex-wrap: wrap;
-  align-content: flex-start;
-}
-
-.video-item {
-  position: relative;
-  width: 15rem;
-  height: 10rem;
-  margin-right: 1rem;
-  background-color: #000000;
-}
-
-.video-item-img {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  margin: auto;
-  width: 100%;
-  height: 100%;
-}
-
-.video-item-img:after {
-  content: "";
-  display: inline-block;
-  position: absolute;
-  z-index: 2;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  margin: auto;
-  width: 3rem;
-  height: 3rem;
-  background-image: url("../assets/loading.png");
-  background-size: cover;
-  background-color: #000000;
-}
-
-.video-item-title {
-  position: absolute;
-  bottom: 0;
-  color: #000000;
-  background-color: #ffffff;
-  line-height: 1.5rem;
-  padding: 0.3rem;
-  width: 14.4rem;
-}
-
-.baidumap {
-  width: 100%;
-  height: 100%;
-  border: none;
-  position: absolute;
-  left: 0;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  margin: auto;
-}
-
-/* 去除百度地图版权那行字 和 百度logo */
-.baidumap > .BMap_cpyCtrl {
-  display: none !important;
-}
-.baidumap > .anchorBL {
-  display: none !important;
-}
-</style>
diff --git a/web_src/src/components/dialog/MediaServerEdit.vue b/web_src/src/components/dialog/MediaServerEdit.vue
deleted file mode 100644
index 7206bac..0000000
--- a/web_src/src/components/dialog/MediaServerEdit.vue
+++ /dev/null
@@ -1,382 +0,0 @@
-<template>
-  <div id="mediaServerEdit" v-loading="isLoging">
-    <el-dialog
-      title="媒体节点"
-      :width="dialogWidth"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="formStep" style="margin-top: 1rem; margin-right: 20px;">
-        <el-form v-if="currentStep == 1" ref="mediaServerForm" :rules="rules" :model="mediaServerForm" label-width="140px" >
-          <el-form-item label="IP" prop="ip">
-            <el-input v-model="mediaServerForm.ip"  placeholder="媒体服务IP" clearable  :disabled="mediaServerForm.defaultServer"></el-input>
-          </el-form-item>
-          <el-form-item label="HTTP端口" prop="httpPort">
-            <el-input v-model="mediaServerForm.httpPort" placeholder="媒体服务HTTP端口"  clearable :disabled="mediaServerForm.defaultServer"></el-input>
-          </el-form-item>
-          <el-form-item label="SECRET" prop="secret">
-            <el-input v-model="mediaServerForm.secret" placeholder="媒体服务SECRET"  clearable :disabled="mediaServerForm.defaultServer"></el-input>
-          </el-form-item>
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" v-if="currentStep === 1 && serverCheck === 1" @click="next" >下一步</el-button>
-              <el-button @click="close">取消</el-button>
-              <el-button type="primary" @click="checkServer" >测试</el-button>
-              <i v-if="serverCheck === 1" class="el-icon-success" style="color: #3caf36"></i>
-              <i v-if="serverCheck === -1" class="el-icon-error" style="color: #c80000"></i>
-            </div>
-          </el-form-item>
-        </el-form>
-        <el-row :gutter="24">
-          <el-col :span="12">
-            <el-form v-if="currentStep === 2 || currentStep === 3" ref="mediaServerForm1" :rules="rules" :model="mediaServerForm" label-width="140px" >
-              <el-form-item label="IP" prop="ip">
-                <el-input  v-if="currentStep === 2" v-model="mediaServerForm.ip" disabled :disabled="mediaServerForm.defaultServer"></el-input>
-                <el-input  v-if="currentStep === 3"  v-model="mediaServerForm.ip" :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="HTTP端口" prop="httpPort">
-                <el-input  v-if="currentStep === 2"  v-model="mediaServerForm.httpPort" disabled :disabled="mediaServerForm.defaultServer"></el-input>
-                <el-input  v-if="currentStep === 3"  v-model="mediaServerForm.httpPort" :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="SECRET" prop="secret">
-                <el-input v-if="currentStep === 2"  v-model="mediaServerForm.secret" disabled :disabled="mediaServerForm.defaultServer"></el-input>
-                <el-input v-if="currentStep === 3"  v-model="mediaServerForm.secret" :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="HOOK IP" prop="ip">
-                <el-input v-model="mediaServerForm.hookIp" placeholder="媒体服务HOOK_IP" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="SDP IP" prop="ip">
-                <el-input v-model="mediaServerForm.sdpIp" placeholder="媒体服务SDP_IP" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="流IP" prop="ip">
-                <el-input v-model="mediaServerForm.streamIp" placeholder="媒体服务流IP" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="HTTPS PORT" prop="httpSSlPort">
-                <el-input v-model="mediaServerForm.httpSSlPort" placeholder="媒体服务HTTPS_PORT" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="RTSP PORT" prop="rtspPort">
-                <el-input v-model="mediaServerForm.rtspPort" placeholder="媒体服务RTSP_PORT" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="RTSPS PORT" prop="rtspSSLPort">
-                <el-input v-model="mediaServerForm.rtspSSLPort" placeholder="媒体服务RTSPS_PORT" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-
-            </el-form>
-          </el-col>
-          <el-col :span="12">
-            <el-form v-if="currentStep === 2 || currentStep === 3"  ref="mediaServerForm2" :rules="rules" :model="mediaServerForm" label-width="180px" >
-              <el-form-item label="RTMP PORT" prop="rtmpPort">
-                <el-input v-model="mediaServerForm.rtmpPort" placeholder="媒体服务RTMP_PORT" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="RTMPS PORT" prop="rtmpSSlPort">
-                <el-input v-model="mediaServerForm.rtmpSSlPort" placeholder="媒体服务RTMPS_PORT" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="自动配置媒体服务" >
-                <el-switch v-model="mediaServerForm.autoConfig" :disabled="mediaServerForm.defaultServer"></el-switch>
-              </el-form-item>
-              <el-form-item label="收流端口模式" >
-                <el-switch  active-text="多端口" inactive-text="单端口" v-model="mediaServerForm.rtpEnable" :disabled="mediaServerForm.defaultServer"></el-switch>
-              </el-form-item>
-
-              <el-form-item v-if="!mediaServerForm.rtpEnable" label="收流端口" prop="rtpProxyPort">
-                <el-input v-model.number="mediaServerForm.rtpProxyPort" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item v-if="mediaServerForm.rtpEnable" label="收流端口" >
-                <el-input v-model="rtpPortRange1" placeholder="起始" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange1" :disabled="mediaServerForm.defaultServer"></el-input>
-                -
-                <el-input v-model="rtpPortRange2" placeholder="终止" @change="portRangeChange" clearable style="width: 100px" prop="rtpPortRange2" :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="推流端口" prop="sendRtpPortRange1">
-                <el-input v-model="sendRtpPortRange1" placeholder="起始" @change="portRangeChange" clearable style="width: 100px" prop="sendRtpPortRange1" :disabled="mediaServerForm.defaultServer"></el-input>
-                -
-                <el-input v-model="sendRtpPortRange2" placeholder="终止" @change="portRangeChange" clearable style="width: 100px" prop="sendRtpPortRange2" :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="无人观看多久后停止拉流" >
-                <el-input v-model.number="mediaServerForm.streamNoneReaderDelayMS" clearable :disabled="mediaServerForm.defaultServer"></el-input>
-              </el-form-item>
-              <el-form-item label="录像管理服务端口" prop="recordAssistPort">
-                <el-input v-model.number="mediaServerForm.recordAssistPort" :disabled="mediaServerForm.defaultServer">
-<!--                  <el-button v-if="mediaServerForm.recordAssistPort > 0" slot="append" type="primary" @click="checkRecordServer">测试</el-button>-->
-                  <el-button v-if="mediaServerForm.recordAssistPort > 0" class="el-icon-check" slot="append" type="primary" @click="checkRecordServer"></el-button>
-                </el-input>
-                <i v-if="recordServerCheck == 1" class="el-icon-success" style="color: #3caf36; position: absolute;top: 14px;"></i>
-                <i v-if="recordServerCheck == 2" class="el-icon-loading" style="color: #3caf36; position: absolute;top: 14px;"></i>
-                <i v-if="recordServerCheck === -1" class="el-icon-error" style="color: #c80000; position: absolute;top: 14px;"></i>
-              </el-form-item>
-              <el-form-item>
-                <div style="float: right;">
-                  <el-button v-if="!mediaServerForm.defaultServer" type="primary"  @click="onSubmit" >提交</el-button>
-                  <el-button v-if="!mediaServerForm.defaultServer" @click="close">取消</el-button>
-                  <el-button v-if="mediaServerForm.defaultServer" @click="close">关闭</el-button>
-                </div>
-              </el-form-item>
-            </el-form>
-          </el-col>
-        </el-row>
-
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import MediaServer from './../service/MediaServer'
-
-export default {
-  name: "streamProxyEdit",
-  props: {},
-  computed: {},
-  created() {
-    this.setDialogWidth()
-  },
-  data() {
-    const isValidIp = (rule, value, callback) => { // 校验IP是否符合规则
-      var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
-      console.log(this.mediaServerForm.ip)
-      if (!reg.test(this.mediaServerForm.ip)) {
-        return callback(new Error('请输入有效的IP地址'))
-      } else {
-        callback()
-      }
-      return true
-    }
-    const isValidPort = (rule, value, callback) => { // 校验IP是否符合规则
-      var reg = /^(([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5]))$/
-      if (!reg.test(this.mediaServerForm.httpPort)) {
-        return callback(new Error('请输入有效的端口号'))
-      } else {
-        callback()
-      }
-      return true
-    }
-    return {
-      dialogWidth: 0,
-      defaultWidth: 1000,
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      dialogLoading: false,
-
-      currentStep: 1,
-      platformList: [],
-      mediaServer: new MediaServer(),
-      serverCheck: 0,
-      recordServerCheck: 0,
-      mediaServerForm: {
-        id: "",
-        ip: "",
-        autoConfig: true,
-        hookIp: "",
-        sdpIp: "",
-        streamIp: "",
-        streamNoneReaderDelayMS: "",
-        secret: "035c73f7-bb6b-4889-a715-d9eb2d1925cc",
-        httpPort: "",
-        httpSSlPort: "",
-        recordAssistPort: "",
-        rtmpPort: "",
-        rtmpSSlPort: "",
-        rtpEnable: false,
-        rtpPortRange: "",
-        sendRtpPortRange: "",
-        rtpProxyPort: "",
-        rtspPort: "",
-        rtspSSLPort: "",
-      },
-      rtpPortRange1:30000,
-      rtpPortRange2:30500,
-      sendRtpPortRange1:30000,
-      sendRtpPortRange2:30500,
-
-      rules: {
-        ip:  [{ required: true, validator: isValidIp, message: '请输入有效的IP地址', trigger: 'blur' }],
-        httpPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        httpSSlPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        recordAssistPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtmpPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtmpSSlPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtpPortRange1:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtpPortRange2:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        sendRtpPortRange1:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        sendRtpPortRange2:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtpProxyPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtspPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        rtspSSLPort:  [{ required: true, validator: isValidPort, message: '请输入有效的端口号', trigger: 'blur' }],
-        secret: [{ required: true, message: "请输入secret", trigger: "blur" }],
-        timeout_ms: [{ required: true, message: "请输入FFmpeg推流成功超时时间", trigger: "blur" }],
-        ffmpeg_cmd_key: [{ required: false, message: "请输入FFmpeg命令参数模板(可选)", trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    setDialogWidth() {
-      let val = document.body.clientWidth
-      if (val < this.defaultWidth) {
-        this.dialogWidth = '100%'
-      } else {
-        this.dialogWidth = this.defaultWidth + 'px'
-      }
-    },
-    openDialog: function (param, callback) {
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-      if (param != null) {
-        this.mediaServerForm = param;
-        this.currentStep = 3;
-        if (param.rtpPortRange) {
-          let rtpPortRange = this.mediaServerForm.rtpPortRange.split(",");
-          if (rtpPortRange.length > 0) {
-            this.rtpPortRange1 =  rtpPortRange[0]
-            this.rtpPortRange2 =  rtpPortRange[1]
-          }
-        }
-        let sendRtpPortRange = this.mediaServerForm.sendRtpPortRange.split(",");
-        this.sendRtpPortRange1 = sendRtpPortRange[0]
-        this.sendRtpPortRange2 = sendRtpPortRange[1]
-      }
-    },
-    checkServer: function() {
-      let that = this;
-      that.serverCheck = 0;
-      that.mediaServer.checkServer(that.mediaServerForm, data =>{
-        if (data.code === 0) {
-          if (parseInt(that.mediaServerForm.httpPort) !== parseInt(data.data.httpPort)) {
-            that.$message({
-              showClose: true,
-              message: '如果你正在使用docker部署你的媒体服务,请注意的端口映射。',
-              type: 'warning',
-              duration: 0
-            });
-          }
-          let httpPort = that.mediaServerForm.httpPort;
-          that.mediaServerForm = data.data;
-          that.mediaServerForm.httpPort = httpPort;
-          that.mediaServerForm.autoConfig = true;
-          that.sendRtpPortRange1 = 30000
-          that.sendRtpPortRange2 = 30500
-          that.rtpPortRange1 = 30000
-          that.rtpPortRange2 = 30500
-          that.serverCheck = 1;
-        }else {
-          that.serverCheck = -1;
-          that.$message({
-            showClose: true,
-            message: data.msg,
-            type: "error",
-          });
-        }
-
-      })
-    },
-    next: function (){
-      this.currentStep = 2;
-      this.defaultWidth = 900;
-      this.setDialogWidth();
-    },
-    checkRecordServer: function (){
-      let that = this;
-      that.recordServerCheck = 2;
-      if (that.mediaServerForm.recordAssistPort <= 0 || that.mediaServerForm.recordAssistPort > 65535 ) {
-        that.recordServerCheck = -1;
-        that.$message({
-          showClose: true,
-          message: "端口号应该在-65535之间",
-          type: "error",
-        });
-        return;
-      }
-      that.mediaServer.checkRecordServer(that.mediaServerForm, data =>{
-        if (data.code === 0) {
-          that.recordServerCheck = 1;
-        }else {
-          that.recordServerCheck = -1;
-          that.$message({
-            showClose: true,
-            message: data.msg,
-            type: "error",
-          });
-        }
-      })
-    },
-    onSubmit: function () {
-      this.dialogLoading = true;
-      let that = this;
-      that.mediaServer.addServer(this.mediaServerForm, data => {
-        if (data.code === 0) {
-          that.$message({
-            showClose: true,
-            message: "保存成功",
-            type: "success",
-          });
-          if (this.listChangeCallback) this.listChangeCallback();
-          that.close()
-        }else {
-          that.$message({
-            showClose: true,
-            message: data.msg,
-            type: "error",
-          });
-        }
-      })
-    },
-    close: function () {
-      this.showDialog = false;
-      this.dialogLoading = false;
-      this.mediaServerForm = {
-        id: "",
-        ip: "",
-        autoConfig: true,
-        hookIp: "",
-        sdpIp: "",
-        streamIp: "",
-        streamNoneReaderDelayMS: "",
-        secret: "035c73f7-bb6b-4889-a715-d9eb2d1925cc",
-        httpPort: "",
-        httpSSlPort: "",
-        recordAssistPort: "",
-        rtmpPort: "",
-        rtmpSSlPort: "",
-        rtpEnable: false,
-        rtpPortRange: "",
-        sendRtpPortRange: "",
-        rtpProxyPort: "",
-        rtspPort: "",
-        rtspSSLPort: "",
-      };
-      this.sendRtpPortRange1 = 30000;
-      this.sendRtpPortRange2 = 30500;
-      this.rtpPortRange1 = 30500;
-      this.rtpPortRange2 = 30500;
-      this.listChangeCallback = null
-      this.currentStep = 1;
-    },
-    deviceGBIdExit: async function (deviceGbId) {
-      var result = false;
-      var that = this;
-      await that.$axios({
-        method: 'post',
-        url:`/api/platform/exit/${deviceGbId}`
-      }).then(function (res) {
-        result = res.data;
-      }).catch(function (error) {
-        console.log(error);
-      });
-      return result;
-    },
-    checkExpires: function() {
-      if (this.platform.enable && this.platform.expires == "0") {
-        this.platform.expires = "300";
-      }
-    },
-    portRangeChange: function() {
-      this.mediaServerForm.sendRtpPortRange = this.sendRtpPortRange1 + "," + this.sendRtpPortRange2
-      this.mediaServerForm.rtpPortRange = this.rtpPortRange1 + "," + this.rtpPortRange2
-      console.log(this.mediaServerForm.sendRtpPortRange)
-      console.log(this.mediaServerForm.rtpPortRange)
-    }
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue
deleted file mode 100644
index 77ee1d8..0000000
--- a/web_src/src/components/dialog/StreamProxyEdit.vue
+++ /dev/null
@@ -1,282 +0,0 @@
-<template>
-  <div id="addStreamProxy" v-loading="isLoging">
-    <el-dialog
-      title="添加代理"
-      width="40%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="streamProxy" :rules="rules" :model="proxyParam" label-width="140px" >
-              <el-form-item label="类型" prop="type">
-                <el-select
-                  v-model="proxyParam.type"
-                  style="width: 100%"
-                  placeholder="请选择代理类型"
-                >
-                  <el-option label="默认" value="default"></el-option>
-                  <el-option label="FFmpeg" value="ffmpeg"></el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="名称" prop="name">
-                <el-input v-model="proxyParam.name" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="流应用名" prop="app">
-                <el-input v-model="proxyParam.app" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="流ID" prop="stream">
-                <el-input v-model="proxyParam.stream" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="拉流地址" prop="url" v-if="proxyParam.type=='default'">
-                <el-input v-model="proxyParam.url" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="拉流地址" prop="src_url" v-if="proxyParam.type=='ffmpeg'">
-                <el-input v-model="proxyParam.src_url" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="超时时间:毫秒" prop="timeout_ms" v-if="proxyParam.type=='ffmpeg'">
-                <el-input v-model="proxyParam.timeout_ms" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="节点选择" prop="rtp_type">
-                <el-select
-                  v-model="proxyParam.mediaServerId"
-                  @change="mediaServerIdChange"
-                  style="width: 100%"
-                  placeholder="请选择拉流节点"
-                >
-                  <el-option
-                    v-for="item in mediaServerList"
-                    :key="item.id"
-                    :label="item.id"
-                    :value="item.id">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="FFmpeg命令模板" prop="ffmpeg_cmd_key" v-if="proxyParam.type=='ffmpeg'">
-<!--                <el-input v-model="proxyParam.ffmpeg_cmd_key" clearable></el-input>-->
-                <el-select
-                  v-model="proxyParam.ffmpeg_cmd_key"
-                  style="width: 100%"
-                  placeholder="请选择FFmpeg命令模板"
-                >
-                  <el-option
-                    v-for="item in Object.keys(ffmpegCmdList)"
-                    :key="item"
-                    :label="ffmpegCmdList[item]"
-                    :value="item">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="国标编码" prop="gbId">
-                <el-input v-model="proxyParam.gbId" placeholder="设置国标编码可推送到国标" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="拉流方式" prop="rtp_type" v-if="proxyParam.type=='default'">
-                <el-select
-                  v-model="proxyParam.rtp_type"
-                  style="width: 100%"
-                  placeholder="请选择拉流方式"
-                >
-                  <el-option label="TCP" value="0"></el-option>
-                  <el-option label="UDP" value="1"></el-option>
-                  <el-option label="组播" value="2"></el-option>
-                </el-select>
-              </el-form-item>
-
-              <el-form-item label="国标平台">
-                <el-select
-                  v-model="proxyParam.platformGbId"
-                  style="width: 100%"
-                  placeholder="请选择国标平台"
-                >
-                  <el-option
-                    v-for="item in platformList"
-                    :key="item.name"
-                    :label="item.name"
-                    :value="item.serverGBId">
-                    <span style="float: left">{{ item.name }}</span>
-                    <span style="float: right; color: #8492a6; font-size: 13px">{{ item.serverGBId }}</span>
-                  </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="其他选项">
-                <div style="float: left;">
-                  <el-checkbox label="启用" v-model="proxyParam.enable" ></el-checkbox>
-                  <el-checkbox label="转HLS" v-model="proxyParam.enable_hls" ></el-checkbox>
-                  <el-checkbox label="MP4录制" v-model="proxyParam.enable_mp4" ></el-checkbox>
-                  <el-checkbox label="无人观看自动删除" v-model="proxyParam.enable_remove_none_reader" ></el-checkbox>
-                </div>
-
-              </el-form-item>
-              <el-form-item>
-                <div style="float: right;">
-                  <el-button type="primary" @click="onSubmit" :loading="dialogLoading" >{{onSubmit_text}}</el-button>
-                  <el-button @click="close">取消</el-button>
-                </div>
-
-              </el-form-item>
-            </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import MediaServer from './../service/MediaServer'
-
-export default {
-  name: "streamProxyEdit",
-  props: {},
-  computed: {},
-  created() {},
-  data() {
-    // var deviceGBIdRules = async (rule, value, callback) => {
-    //   console.log(value);
-    //   if (value === "") {
-    //     callback(new Error("请输入设备国标编号"));
-    //   } else {
-    //     var exit = await this.deviceGBIdExit(value);
-    //     console.log(exit);
-    //     console.log(exit == "true");
-    //     console.log(exit === "true");
-    //     if (exit) {
-    //       callback(new Error("设备国标编号已存在"));
-    //     } else {
-    //       callback();
-    //     }
-    //   }
-    // };
-    return {
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      dialogLoading: false,
-      onSubmit_text: "立即创建",
-      platformList: [],
-      mediaServer: new MediaServer(),
-      proxyParam: {
-          name: null,
-          type: "default",
-          app: null,
-          stream: null,
-          url: "",
-          src_url: null,
-          timeout_ms: null,
-          ffmpeg_cmd_key: null,
-          gbId: null,
-          rtp_type: null,
-          enable: true,
-          enable_hls: true,
-          enable_mp4: false,
-          enable_remove_none_reader: false,
-          platformGbId: null,
-          mediaServerId: null,
-      },
-      mediaServerList:{},
-      ffmpegCmdList:{},
-
-      rules: {
-        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        app: [{ required: true, message: "请输入应用名", trigger: "blur" }],
-        stream: [{ required: true, message: "请输入流ID", trigger: "blur" }],
-        url: [{ required: true, message: "请输入要代理的流", trigger: "blur" }],
-        src_url: [{ required: true, message: "请输入要代理的流", trigger: "blur" }],
-        timeout_ms: [{ required: true, message: "请输入FFmpeg推流成功超时时间", trigger: "blur" }],
-        ffmpeg_cmd_key: [{ required: false, message: "请输入FFmpeg命令参数模板(可选)", trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    openDialog: function (proxyParam, callback) {
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-      if (proxyParam != null) {
-        this.proxyParam = proxyParam;
-      }
-
-      let that = this;
-      this.$axios({
-        method: 'get',
-        url:`/api/platform/query/10000/1`
-      }).then(function (res) {
-        that.platformList = res.data.list;
-      }).catch(function (error) {
-        console.log(error);
-      });
-      this.mediaServer.getOnlineMediaServerList((data)=>{
-        this.mediaServerList = data.data;
-        this.proxyParam.mediaServerId = this.mediaServerList[0].id
-        this.mediaServerIdChange()
-      })
-    },
-    mediaServerIdChange:function (){
-      let that = this;
-      if (that.proxyParam.mediaServerId !== "auto"){
-        that.$axios({
-          method: 'get',
-          url:`/api/proxy/ffmpeg_cmd/list`,
-          params: {
-            mediaServerId: that.proxyParam.mediaServerId
-          }
-        }).then(function (res) {
-          that.ffmpegCmdList = res.data.data;
-          that.proxyParam.ffmpeg_cmd_key = Object.keys(res.data.data)[0];
-        }).catch(function (error) {
-          console.log(error);
-        });
-      }
-
-    },
-    onSubmit: function () {
-      this.dialogLoading = true;
-      var that = this;
-      that.$axios({
-        method: 'post',
-        url:`/api/proxy/save`,
-        data: that.proxyParam
-      }).then(function (res) {
-        that.dialogLoading = false;
-        if (typeof (res.data.code) != "undefined" && res.data.code === 0) {
-          that.$message({
-            showClose: true,
-            message: res.data.msg,
-            type: "success",
-          });
-          that.showDialog = false;
-          if (that.listChangeCallback != null) {
-            that.listChangeCallback();
-            that.dialogLoading = false;
-          }
-        }
-      }).catch(function (error) {
-        console.log(error);
-        this.dialogLoading = false;
-      });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.dialogLoading = false;
-      this.$refs.streamProxy.resetFields();
-    },
-    deviceGBIdExit: async function (deviceGbId) {
-      var result = false;
-      var that = this;
-      await that.$axios({
-        method: 'post',
-        url:`/api/platform/exit/${deviceGbId}`
-      }).then(function (res) {
-        result = res.data;
-      }).catch(function (error) {
-        console.log(error);
-      });
-      return result;
-    },
-    checkExpires: function() {
-      if (this.platform.enable && this.platform.expires == "0") {
-        this.platform.expires = "300";
-      }
-    }
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/addStreamTOGB.vue b/web_src/src/components/dialog/addStreamTOGB.vue
deleted file mode 100644
index 9baf1bc..0000000
--- a/web_src/src/components/dialog/addStreamTOGB.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-<template>
-  <div id="addStreamProxy" v-loading="isLoging">
-    <el-dialog
-      title=" 加入"
-      width="40%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="streamProxy" :rules="rules" :model="proxyParam" label-width="140px">
-              <el-form-item label="名称" prop="name">
-                <el-input v-model="proxyParam.name" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="流应用名" prop="app">
-                <el-input v-model="proxyParam.app" clearable :disabled="true"></el-input>
-              </el-form-item>
-              <el-form-item label="流ID" prop="stream">
-                <el-input v-model="proxyParam.stream" clearable :disabled="true"></el-input>
-              </el-form-item>
-              <el-form-item label="国标编码" prop="gbId">
-                <el-input v-model="proxyParam.gbId" placeholder="设置国标编码可推送到国标" clearable></el-input>
-              </el-form-item>
-              <el-form-item>
-                <div style="float: right;">
-                  <el-button type="primary" @click="onSubmit">保存</el-button>
-                  <el-button @click="close">取消</el-button>
-                </div>
-                
-              </el-form-item>
-            </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "streamProxyEdit",
-  props: {},
-  computed: {},
-  created() {},
-  data() {
-    // var deviceGBIdRules = async (rule, value, callback) => {
-    //   console.log(value);
-    //   if (value === "") {
-    //     callback(new Error("请输入设备国标编号"));
-    //   } else {
-    //     var exit = await this.deviceGBIdExit(value);
-    //     console.log(exit);
-    //     console.log(exit == "true");
-    //     console.log(exit === "true");
-    //     if (exit) {
-    //       callback(new Error("设备国标编号已存在"));
-    //     } else {
-    //       callback();
-    //     }
-    //   }
-    // };
-    return {
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      proxyParam: {
-          name: null,
-          app: null,
-          stream: null,
-          gbId: null,
-      },
-      
-      rules: {
-        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        app: [{ required: true, message: "请输入应用名", trigger: "blur" }],
-        stream: [{ required: true, message: "请输入流ID", trigger: "blur" }],
-        gbId: [{ required: true, message: "请输入国标编码", trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    openDialog: function (proxyParam, callback) {
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-      if (proxyParam != null) {
-        this.proxyParam = proxyParam;
-      } 
-    },
-    onSubmit: function () {
-      console.log("onSubmit");
-      var that = this;
-      that.$axios({
-        method:"post",
-        url:`/api/push/save_to_gb`, 
-        data: that.proxyParam
-      }).then(function (res) {
-          if (res.data == "success") {
-            that.$message({
-              showClose: true,
-              message: "保存成功",
-              type: "success",
-            });
-            that.showDialog = false;
-            if (that.listChangeCallback != null) {
-              that.listChangeCallback();
-            }
-          }
-      }).catch(function (error) {
-          console.log(error);
-      });
-    },
-    close: function () {
-      console.log("关闭加入GB");
-      this.showDialog = false;
-      this.$refs.streamProxy.resetFields();
-    },
-    deviceGBIdExit: async function (deviceGbId) {
-      var result = false;
-      var that = this;
-      await that.$axios({
-        method:"post",
-        url:`/api/platform/exit/${deviceGbId}`
-      }).then(function (res) {
-        result = res.data;
-      }).catch(function (error) {
-        console.log(error);
-      });
-      return result;
-    },
-    checkExpires: function() {
-      if (this.platform.enable && this.platform.expires == "0") {
-        this.platform.expires = "300";
-      }
-    }
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/catalogEdit.vue b/web_src/src/components/dialog/catalogEdit.vue
deleted file mode 100644
index 20b2168..0000000
--- a/web_src/src/components/dialog/catalogEdit.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <div id="catalogEdit" v-loading="isLoging">
-    <el-dialog
-      title="节点编辑"
-      width="40%"
-      top="2rem"
-      :append-to-body="true"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="form" :rules="rules" :model="form" label-width="140px" >
-          <el-form-item label="节点编号" prop="id" >
-            <el-input v-model="form.id" :disabled="isEdit"></el-input>
-          </el-form-item>
-          <el-form-item label="节点名称" prop="name">
-            <el-input v-model="form.name" clearable></el-input>
-          </el-form-item>
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit" >确认</el-button>
-              <el-button @click="close">取消</el-button>
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-
-export default {
-  name: "catalogEdit",
-  computed: {},
-  props: ['platformId'],
-  created() {},
-  data() {
-    return {
-      submitCallback: null,
-      showDialog: false,
-      isLoging: false,
-      isEdit: false,
-      form: {
-        id: null,
-        name: null,
-        platformId: null,
-        parentId: null,
-      },
-      rules: {
-        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        id: [{ required: true, message: "请输入id", trigger: "blur" }]
-      },
-    };
-  },
-  methods: {
-    openDialog: function (isEdit, id, name, parentId, callback) {
-      console.log("parentId: " + parentId)
-      this.isEdit = isEdit;
-      this.form.id = id;
-      this.form.name = name;
-      this.form.platformId = this.platformId;
-      this.form.parentId = parentId;
-      this.showDialog = true;
-      this.submitCallback = callback;
-    },
-    onSubmit: function () {
-      console.log("onSubmit");
-      console.log(this.form);
-      this.$axios({
-        method:"post",
-        url:`/api/platform/catalog/${!this.isEdit? "add":"edit"}`,
-        data: this.form
-      })
-        .then((res)=> {
-          if (res.data.code === 0) {
-            if (this.submitCallback)this.submitCallback(this.form)
-          }else {
-            this.$message({
-              showClose: true,
-              message: res.data.msg,
-              type: "error",
-            });
-          }
-          this.close();
-        })
-        .catch((error)=> {
-          console.log(error);
-        });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.$refs.form.resetFields();
-    },
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/changePassword.vue b/web_src/src/components/dialog/changePassword.vue
deleted file mode 100644
index 23d761e..0000000
--- a/web_src/src/components/dialog/changePassword.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <div id="changePassword" v-loading="isLoging">
-    <el-dialog
-      title="修改密码"
-      width="40%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-right: 20px;">
-        <el-form ref="passwordForm" :rules="rules" status-icon label-width="80px">
-              <el-form-item label="旧密码" prop="oldPassword" >
-                <el-input v-model="oldPassword" autocomplete="off"></el-input>
-              </el-form-item>
-              <el-form-item label="新密码" prop="newPassword" >
-                <el-input v-model="newPassword" autocomplete="off"></el-input>
-              </el-form-item>
-              <el-form-item label="确认密码" prop="confirmPassword">
-                <el-input v-model="confirmPassword" autocomplete="off"></el-input>
-              </el-form-item>
-
-              <el-form-item>
-                <div style="float: right;">
-                  <el-button type="primary" @click="onSubmit">保存</el-button>
-                  <el-button @click="close">取消</el-button>
-                </div>
-              </el-form-item>
-            </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import crypto from 'crypto'
-export default {
-  name: "changePassword",
-  props: {},
-  computed: {},
-  created() {},
-  data() {
-    let validatePass0 = (rule, value, callback) => {
-      if (value === '') {
-        callback(new Error('请输入旧密码'));
-      } else {
-        callback();
-      }
-    };
-    let validatePass1 = (rule, value, callback) => {
-      if (value === '') {
-        callback(new Error('请输入新密码'));
-      } else {
-        if (this.confirmPassword !== '') {
-          this.$refs.passwordForm.validateField('confirmPassword');
-        }
-        callback();
-      }
-    };
-    let validatePass2 = (rule, value, callback) => {
-      if (this.confirmPassword === '') {
-        callback(new Error('请再次输入密码'));
-      } else if (this.confirmPassword !== this.newPassword) {
-        callback(new Error('两次输入密码不一致!'));
-      } else {
-        callback();
-      }
-    };
-    return {
-      oldPassword: null,
-      newPassword: null,
-      confirmPassword: null,
-      showDialog: false,
-      isLoging: false,
-      rules: {
-        oldPassword: [{ required: true, validator: validatePass0, trigger: "blur" }],
-        newPassword: [{ required: true, validator: validatePass1, trigger: "blur" }, {
-            pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,20}$/,
-            message: "密码长度在8-20位之间,由字母+数字+特殊字符组成",
-          },],
-        confirmPassword: [{ required: true, validator: validatePass2, trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    openDialog: function () {
-      this.showDialog = true;
-    },
-    onSubmit: function () {
-      this.$axios({
-        method: 'post',
-        url:"/api/user/changePassword",
-        params: {
-          oldPassword: crypto.createHash('md5').update(this.oldPassword, "utf8").digest('hex'),
-          password: this.newPassword
-        }
-      }).then((res)=> {
-        if (res.data === "success"){
-          this.$message({
-            showClose: true,
-            message: '修改成功,请重新登录',
-            type: 'success'
-          });
-          this.showDialog = false;
-          setTimeout(()=>{
-            // 删除cookie,回到登录页面
-            this.$cookies.remove("session");
-            this.$router.push('/login');
-            this.sseSource.close();
-          },800)
-        }else {
-          this.$message({
-            showClose: true,
-            message: '修改密码失败,是否已登录(接口鉴权关闭无法修改密码)',
-            type: 'error'
-          });
-        }
-      }).catch((error)=> {
-        console.error(error)
-      });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.oldPassword = null;
-      this.newPassword = null;
-      this.confirmPassword = null;
-    },
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/chooseChannel.vue b/web_src/src/components/dialog/chooseChannel.vue
deleted file mode 100644
index 599921e..0000000
--- a/web_src/src/components/dialog/chooseChannel.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-<template>
-<div id="chooseChannel" v-loading="isLoging">
-
-    <el-dialog title="选择通道" v-if="showDialog" top="2rem" width="90%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
-      <el-row>
-        <el-col :span="10">
-          <el-tabs v-model="catalogTabActiveName" >
-            <el-tab-pane label="目录结构" name="catalog">
-              <el-container>
-                <el-main v-bind:style="{backgroundColor: '#FFF', maxHeight:  winHeight + 'px'}">
-                  <chooseChannelForCatalog ref="chooseChannelForCatalog" :platformId=platformId :platformName=platformName :defaultCatalogId=defaultCatalogId :catalogIdChange="catalogIdChange" ></chooseChannelForCatalog>
-                </el-main>
-              </el-container>
-            </el-tab-pane>
-          </el-tabs>
-
-        </el-col>
-        <el-col :span="14">
-          <el-tabs v-model="tabActiveName" @tab-click="tabClick">
-            <el-tab-pane label="国标通道" name="gbChannel">
-              <el-container>
-                <el-main style="background-color: #FFF;">
-                  <chooseChannelForGb ref="chooseChannelForGb" :catalogId="catalogId" :catalogName="catalogName" :platformId=platformId ></chooseChannelForGb>
-                </el-main>
-              </el-container>
-            </el-tab-pane>
-            <el-tab-pane label="直播流通道" name="streamchannel">
-              <el-container>
-                <el-main style="background-color: #FFF;">
-                  <chooseChannelFoStream ref="chooseChannelFoStream" :catalogId="catalogId" :catalogName="catalogName" :currentCatalogId="currentCatalogId" :platformId=platformId ></chooseChannelFoStream>
-                </el-main>
-              </el-container>
-            </el-tab-pane>
-          </el-tabs>
-        </el-col>
-      </el-row>
-
-    </el-dialog>
-</div>
-</template>
-
-<script>
-import chooseChannelForGb from '../dialog/chooseChannelForGb.vue'
-import chooseChannelFoStream from '../dialog/chooseChannelForStream.vue'
-import chooseChannelForCatalog from '../dialog/chooseChannelForCatalog.vue'
-export default {
-    name: 'chooseChannel',
-    props: {},
-    components: {
-        chooseChannelForGb,
-        chooseChannelFoStream,
-        chooseChannelForCatalog,
-    },
-    computed: {
-
-    },
-    data() {
-        return {
-            isLoging: false,
-            tabActiveName: "gbChannel",
-            catalogTabActiveName: "catalog",
-            platformId: "",
-            catalogId: "",
-            catalogName: "",
-            currentCatalogId: "",
-            platformName: "",
-            defaultCatalogId: "",
-            showDialog: false,
-            chooseData: {},
-            winHeight: window.innerHeight - 250,
-
-        };
-    },
-    methods: {
-        openDialog(platformId, platformName, defaultCatalogId, closeCallback) {
-            this.platformId = platformId
-            this.platformName = platformName
-            this.defaultCatalogId = defaultCatalogId
-            this.showDialog = true
-            this.closeCallback = closeCallback
-        },
-        tabClick (tab, event){
-
-        },
-        close: function() {
-          this.closeCallback()
-        },
-        search: function() {
-
-        },
-        save: function() {
-            var that = this;
-
-            this.$axios({
-                method:"post",
-                url:"/api/platform/update_channel_for_gb",
-                data:{
-                    platformId:  that.platformId,
-                    channelReduces:  that.chooseData
-                }
-            }).then((res)=>{
-                if (res.data == true) {
-                    that.$message({
-                        showClose: true,
-                        message: '保存成功,',
-                        type: 'success'
-                    });
-                }
-            }).catch(function (error) {
-                console.log(error);
-            });
-        },
-        catalogIdChange: function (id, name) {
-            this.catalogId = id;
-            this.catalogName = name;
-        },
-    }
-};
-</script>
-
-<style>
-
-</style>
diff --git a/web_src/src/components/dialog/chooseChannelForCatalog.vue b/web_src/src/components/dialog/chooseChannelForCatalog.vue
deleted file mode 100644
index a0cb98c..0000000
--- a/web_src/src/components/dialog/chooseChannelForCatalog.vue
+++ /dev/null
@@ -1,315 +0,0 @@
-<template>
-<div id="chooseChannelForCatalog" >
-   <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-     <el-tree class="el-scrollbar"
-       ref="tree"
-       id="catalogTree"
-       empty-text="未知节点"
-       node-key="id"
-       default-expand-all
-       :highlight-current="false"
-       :expand-on-click-node="false"
-       :props="props"
-       :load="loadNode"
-       @node-contextmenu="contextmenuEventHandler"
-       @node-click="nodeClickHandler"
-       lazy>
-       <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%">
-         <el-radio v-if="node.data.type === 0 || node.data.type === -1" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio>
-         <span v-if="node.data.type === -1 && node.level === 1" style="font-size: 12px" class="iconfont icon-ziyuan"></span>
-         <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span>
-         <span v-if="node.data.type === 0 && node.level > 1"  class="el-icon-folder-opened"></span>
-         <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span>
-         <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span>
-        <span style=" padding-left: 1px">{{ node.label }}</span>
-        <span>
-          <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i>
-        </span>
-      </span>
-     </el-tree>
-   </div>
-    <catalogEdit ref="catalogEdit" :platformId="platformId"></catalogEdit>
-</div>
-</template>
-
-
-<script>
-
-import catalogEdit from './catalogEdit.vue'
-export default {
-    name: 'chooseChannelForCatalog',
-    props: ['platformId', 'platformName', 'defaultCatalogId', 'catalogIdChange'],
-    created() {
-        this.chooseId = this.defaultCatalogId;
-        this.defaultCatalogIdSign = this.defaultCatalogId;
-        this.initData();
-        setTimeout(()=>{
-          if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId, this.platformName);
-        }, 100)
-
-    },
-    components: {
-      catalogEdit,
-    },
-    data() {
-        return {
-          props: {
-            label: 'name',
-            children: 'children',
-            isLeaf: 'leaf'
-          },
-          defaultCatalogIdSign: null,
-          chooseNode: null,
-          chooseId: "",
-          chooseName: "",
-          catalogTree: null,
-          contextmenuShow: false
-
-        };
-    },
-    watch:{
-        platformId(newData, oldData){
-            console.log(newData)
-            this.initData()
-        },
-    },
-    methods: {
-        initData: function () {
-            this.getCatalog();
-        },
-
-        getCatalog: function(parentId, callback) {
-            let that = this;
-            this.$axios({
-                    method:"get",
-                    url:`/api/platform/catalog`,
-                    params: {
-                        platformId: that.platformId,
-                        parentId: parentId
-                    }
-                })
-                .then((res)=> {
-                  if (res.data.code === 0) {
-                    if (typeof(callback) === 'function') {
-                      callback(res.data.data)
-                    }
-                  }
-                })
-                .catch(function (error) {
-                    console.log(error);
-                });
-
-        },
-        addCatalog: function (parentId, node){
-          let that = this;
-          // 打开添加弹窗
-          that.$refs.catalogEdit.openDialog(false, null, null, parentId, ()=>{
-            node.loaded = false
-            node.expand();
-          });
-
-        },
-        refreshCatalog: function (node){
-          node.loaded = false
-          node.expand();
-        },
-        refreshCatalogById: function (id) {
-          if (id) {
-            let node = this.$refs.tree.getNode(id);
-            this.refreshCatalog(node);
-          }
-        },
-        editCatalog: function (data, node){
-          let that = this;
-          // 打开添加弹窗
-          that.$refs.catalogEdit.openDialog(true, data.id, data.name, data.parentId, (newData)=>{
-            node.parent.loaded = false
-            node.parent.expand();
-            if (data.id === this.chooseId && newData.name !== data.name) {
-              if (this.catalogIdChange)this.catalogIdChange(this.chooseId, newData.name);
-            }
-          });
-
-        },
-        removeCatalog: function (id, node){
-          this.$axios({
-            method:"delete",
-            url:`/api/platform/catalog/del`,
-            params: {
-              id: id,
-              platformId: this.platformId,
-            }
-          })
-            .then((res) => {
-              if (res.data.code === 0) {
-                console.log("移除成功")
-                node.parent.loaded = false
-                node.parent.expand();
-                if (res.data.data) {
-                  this.defaultCatalogIdSign = res.data.data;
-                }
-              }
-            })
-            .catch(function (error) {
-              console.log(error);
-            });
-        },
-        setDefaultCatalog: function (id){
-          this.$axios({
-            method:"post",
-            url:`/api/platform/catalog/default/update`,
-            params: {
-              platformId: this.platformId,
-              catalogId: id,
-            }
-          })
-            .then((res)=> {
-              if (res.data.code === 0) {
-                this.defaultCatalogIdSign = id;
-              }
-            })
-            .catch(function (error) {
-              console.log(error);
-            });
-        },
-        loadNode: function(node, resolve){
-          if (node.level === 0) {
-            resolve([
-              {
-              name: "未分配",
-              id:  null,
-              type:  -1
-              },{
-                name: this.platformName,
-                id:  this.platformId,
-                type:  0
-              }
-            ]);
-          }
-          if (node.level >= 1){
-            this.getCatalog(node.data.id, resolve)
-          }
-        },
-      contextmenuEventHandler: function (event,data,node,element){
-          if (node.data.type !== 0) {
-            data.parentId = node.parent.data.id;
-            this.$contextmenu({
-              items: [
-                {
-                  label: "移除通道",
-                  icon: "el-icon-delete",
-                  disabled: false,
-                  onClick: () => {
-                    this.$axios({
-                      method:"delete",
-                      url:"/api/platform/catalog/relation/del",
-                      data: data
-                    }).then((res)=>{
-                      console.log("移除成功")
-                      node.parent.loaded = false
-                      node.parent.expand();
-                    }).catch(function (error) {
-                      console.log(error);
-                    });
-                  }
-                }
-              ],
-              event, // 鼠标事件信息
-              customClass: "custom-class", // 自定义菜单 class
-              zIndex: 3000, // 菜单样式 z-index
-            });
-          }else {
-            this.$contextmenu({
-              items: [
-                {
-                  label: "刷新节点",
-                  icon: "el-icon-refresh",
-                  disabled: false,
-                  onClick: () => {
-                    this.refreshCatalog(node);
-                  }
-                },
-                {
-                  label: "新建节点",
-                  icon: "el-icon-plus",
-                  disabled: false,
-                  onClick: () => {
-                    this.addCatalog(data.id, node);
-                  }
-                },
-                {
-                  label: "修改节点",
-                  icon: "el-icon-edit",
-                  disabled: node.level === 1,
-                  onClick: () => {
-                    this.editCatalog(data, node);
-                  }
-                },
-                {
-                  label: "删除节点",
-                  icon: "el-icon-delete",
-                  disabled: node.level === 1,
-                  divided: true,
-                  onClick: () => {
-                    this.$confirm('确定删除?', '提示', {
-                      confirmButtonText: '确定',
-                      cancelButtonText: '取消',
-                      type: 'warning'
-                    }).then(() => {
-                      this.removeCatalog(data.id, node)
-                    }).catch(() => {
-
-                    });
-                  }
-                },
-                {
-                  label: "设为默认",
-                  icon: "el-icon-folder-checked",
-                  disabled: node.data.id === this.defaultCatalogIdSign,
-                  onClick: () => {
-                    this.setDefaultCatalog(data.id)
-                  },
-                },
-                // {
-                //   label: "导出",
-                //   icon: "el-icon-download",
-                //   disabled: false,
-                //   children: [
-                //     {
-                //       label: "导出到文件",
-                //       onClick: () => {
-                //
-                //       },
-                //     },
-                //     {
-                //       label: "导出到其他平台",
-                //       onClick: () => {
-                //
-                //       },
-                //     }
-                //   ]
-                // },
-
-              ],
-              event, // 鼠标事件信息
-              customClass: "custom-class", // 自定义菜单 class
-              zIndex: 3000, // 菜单样式 z-index
-            });
-          }
-
-        return false;
-      },
-      nodeClickHandler: function (data, node, tree){
-       this.chooseId = data.id;
-       this.chooseName = data.name;
-       if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName);
-      }
-    }
-};
-</script>
-
-<style>
-#catalogTree{
-  display: inline-block;
-}
-</style>
diff --git a/web_src/src/components/dialog/chooseChannelForGb.vue b/web_src/src/components/dialog/chooseChannelForGb.vue
deleted file mode 100644
index 78bfddf..0000000
--- a/web_src/src/components/dialog/chooseChannelForGb.vue
+++ /dev/null
@@ -1,322 +0,0 @@
-<template>
-<div id="chooseChannelForGb" >
-  <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;">
-    <span v-if="catalogId == null">{{catalogName}}的国标通道</span>
-    <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的国标通道</span>
-  </div>
-   <div style="background-color: #FFFFFF; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-        搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input>
-
-        通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem; width:6rem" v-model="channelType" placeholder="请选择" default-first-option>
-            <el-option label="全部" value=""></el-option>
-            <el-option label="设备" value="false"></el-option>
-            <el-option label="子目录" value="true"></el-option>
-        </el-select>
-
-        在线状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" @change="search" v-model="online" placeholder="请选择" default-first-option>
-            <el-option label="全部" value=""></el-option>
-            <el-option label="在线" value="true"></el-option>
-            <el-option label="离线" value="false"></el-option>
-        </el-select>
-     <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button>
-     <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" @click="batchAdd">批量添加</el-button>
-    </div>
-
-    <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.deviceId + row.channelId" @selection-change="handleSelectionChange">
-        <el-table-column align="center" type="selection" :reserve-selection="true" width="55">
-        </el-table-column>
-        <el-table-column prop="channelId" label="通道编号" width="180" align="center">
-        </el-table-column>
-        <el-table-column prop="name" label="通道名称" show-overflow-tooltip align="center">
-        </el-table-column>
-        <el-table-column prop="deviceId" label="设备编号" width="180" align="center">
-        </el-table-column>
-        <el-table-column label="设备地址" width="180" align="center">
-            <template slot-scope="scope">
-                <div slot="reference" class="name-wrapper">
-                    <el-tag size="medium">{{ scope.row.hostAddress }}</el-tag>
-                </div>
-            </template>
-        </el-table-column>
-        <el-table-column prop="manufacturer" label="厂家" align="center">
-        </el-table-column>
-        <el-table-column label="操作" width="100" align="center" fixed="right">
-          <template slot-scope="scope">
-            <el-button-group>
-              <el-button size="mini" icon="el-icon-plus" v-if="catalogId === null" @click="add(scope.row)">添加</el-button>
-              <el-button size="mini" icon="el-icon-delete" v-if="catalogId !== null" type="danger" @click="remove(scope.row)">移除</el-button>
-            </el-button-group>
-          </template>
-        </el-table-column>
-    </el-table>
-    <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total">
-    </el-pagination>
-    <getCatalog ref="getCatalog" :platformId="platformId" ></getCatalog>
-</div>
-</template>
-
-<script>
-import getCatalog from './getCatalog'
-export default {
-    name: 'chooseChannelForGb',
-    computed: {
-        // getPlayerShared: function () {
-        //     return {
-        //         sharedUrl: window.location.host + '/' + this.videoUrl,
-        //         sharedIframe: '<iframe src="' + window.location.host + '/' + this.videoUrl + '"></iframe>',
-        //         sharedRtmp: this.videoUrl
-        //     };
-        // }
-    },
-    props: ['platformId','catalogId',  'catalogName'],
-    created() {
-        this.initData();
-    },
-    components: {
-      getCatalog,
-    },
-    data() {
-        return {
-            gbChannels: [],
-            gbChoosechannel:{},
-            searchSrt: "",
-            channelType: "",
-            online: "",
-            choosed: "",
-            currentPage: 1,
-            count: 10,
-            total: 0,
-            eventEnable: false,
-            multipleSelection: [],
-            winHeight: window.innerHeight - 400,
-
-        };
-    },
-    watch:{
-        platformId(newData, oldData){
-            console.log(newData)
-            this.getChannelList()
-        },
-        catalogId(newData, oldData){
-          this.getChannelList()
-        },
-    },
-    methods: {
-        initData: function() {
-            this.getChannelList();
-        },
-        currentChange: function (val) {
-            this.currentPage = val;
-            this.initData();
-        },
-        handleSizeChange: function (val) {
-            this.count = val;
-            console.log(val)
-            this.initData();
-        },
-        add: function (row) {
-          this.getCatalogFromUser((catalogId)=> {
-            this.$axios({
-              method:"post",
-              url:"/api/platform/update_channel_for_gb",
-              data:{
-                platformId:  this.platformId,
-                channelReduces: [row],
-                catalogId: catalogId
-              }
-            }).then((res)=>{
-              console.log("保存成功")
-              this.getChannelList();
-            }).catch(function (error) {
-              console.log(error);
-            });
-          })
-
-        },
-        remove: function (row) {
-          console.log(row)
-
-          this.$axios({
-            method:"delete",
-            url:"/api/platform/del_channel_for_gb",
-            data:{
-              platformId:  this.platformId,
-              channelReduces: [row]
-            }
-          }).then((res)=>{
-            console.log("移除成功")
-            this.getChannelList();
-          }).catch(function (error) {
-            console.log(error);
-          });
-        },
-        // checkedChange: function (val) {
-        //     let that = this;
-        //     if (!that.eventEnable) {
-        //         return;
-        //     }
-        //     let newData = {};
-        //     let addData = [];
-        //     let delData = [];
-        //     if (val.length > 0) {
-        //         for (let i = 0; i < val.length; i++) {
-        //             const element = val[i];
-        //             let key = element.deviceId + "_" + element.channelId;
-        //             newData[key] = element;
-        //             if (!!!that.gbChoosechannel[key]){
-        //                 addData.push(element)
-        //             }else{
-        //                 delete that.gbChoosechannel[key]
-        //             }
-        //         }
-        //
-        //         let oldKeys = Object.keys(that.gbChoosechannel);
-        //         if (oldKeys.length > 0) {
-        //             for (let i = 0; i < oldKeys.length; i++) {
-        //                 const key = oldKeys[i];
-        //                 delData.push(that.gbChoosechannel[key])
-        //             }
-        //         }
-        //
-        //     }else{
-        //         let oldKeys = Object.keys(that.gbChoosechannel);
-        //         if (oldKeys.length > 0) {
-        //             for (let i = 0; i < oldKeys.length; i++) {
-        //                 const key = oldKeys[i];
-        //                 delData.push(that.gbChoosechannel[key])
-        //             }
-        //         }
-        //     }
-        //
-        //     that.gbChoosechannel = newData;
-        //     if (Object.keys(addData).length >0) {
-        //         that.$axios({
-        //             method:"post",
-        //             url:"/api/platform/update_channel_for_gb",
-        //             data:{
-        //                 platformId:  that.platformId,
-        //                 channelReduces: addData,
-        //                 catalogId: that.catalogId
-        //             }
-        //         }).then((res)=>{
-        //             console.log("保存成功")
-        //         }).catch(function (error) {
-        //             console.log(error);
-        //         });
-        //     }
-        //     if (delData.length >0) {
-        //          that.$axios({
-        //             method:"delete",
-        //             url:"/api/platform/del_channel_for_gb",
-        //             data:{
-        //                 platformId:  that.platformId,
-        //                 channelReduces: delData
-        //             }
-        //         }).then((res)=>{
-        //             console.log("移除成功")
-        //            let nodeIds = new Array();
-        //            for (let i = 0; i < delData.length; i++) {
-        //              nodeIds.push(delData[i].channelId)
-        //            }
-        //         }).catch(function (error) {
-        //             console.log(error);
-        //         });
-        //     }
-        // },
-        // shareAllCheckedChange: function (val) {
-        //
-        // },
-        getChannelList: function () {
-            let that = this;
-
-            this.$axios({
-                    method:"get",
-                    url:`/api/platform/channel_list`,
-                    params: {
-                        page: that.currentPage,
-                        count: that.count,
-                        query: that.searchSrt,
-                        online: that.online,
-                        catalogId: that.catalogId,
-                        platformId: that.platformId,
-                        channelType: that.channelType
-                    }
-                })
-                .then(function (res) {
-                    that.total = res.data.total;
-                    that.gbChannels = res.data.list;
-                    that.gbChoosechannel = {};
-                    // 防止出现表格错位
-                    that.$nextTick(() => {
-                        that.$refs.gbChannelsTable.doLayout();
-                        that.eventEnable = true;
-                    })
-                    console.log(that.gbChoosechannel)
-                })
-                .catch(function (error) {
-                    console.log(error);
-                });
-
-        },
-        search: function() {
-            this.initData();
-        },
-        handleGBSelectionChange: function() {
-            this.initData();
-        },
-      batchDel: function() {
-        this.$confirm(`确认这${this.multipleSelection.length}个通道吗?`, '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          this.$axios({
-            method:"delete",
-            url:"/api/platform/del_channel_for_gb",
-            data:{
-              platformId:  this.platformId,
-              channelReduces: this.multipleSelection
-            }
-          }).then((res)=>{
-            console.log("移除成功")
-            this.$refs.gbChannelsTable.clearSelection()
-            this.getChannelList();
-          }).catch(function (error) {
-            console.log(error);
-          });
-        }).catch(() => {
-        });
-      },
-      batchAdd: function() {
-        this.getCatalogFromUser((catalogId)=> {
-
-          this.$axios({
-            method: "post",
-            url: "/api/platform/update_channel_for_gb",
-            data: {
-              platformId: this.platformId,
-              channelReduces: this.multipleSelection,
-              catalogId: catalogId,
-            }
-          }).then((res) => {
-            console.log("保存成功")
-            this.$refs.gbChannelsTable.clearSelection()
-            this.getChannelList();
-          }).catch(function (error) {
-            console.log(error);
-          });
-        });
-      },
-      handleSelectionChange: function (val) {
-        this.multipleSelection = val;
-      },
-      getCatalogFromUser(callback){
-        this.$refs.getCatalog.openDialog(callback)
-      },
-    }
-};
-</script>
-
-<style>
-
-</style>
diff --git a/web_src/src/components/dialog/chooseChannelForStream.vue b/web_src/src/components/dialog/chooseChannelForStream.vue
deleted file mode 100644
index d5e5ac3..0000000
--- a/web_src/src/components/dialog/chooseChannelForStream.vue
+++ /dev/null
@@ -1,254 +0,0 @@
-<template>
-<div id="chooseChannelFoStream" >
-    <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;">
-      <span v-if="catalogId == null">{{catalogName}}的直播通道</span>
-      <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的直播通道</span>
-    </div>
-    <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-
-      搜索: <el-input @input="getChannelList" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input>
-
-<!--      流媒体: <el-select size="mini" @change="getChannelList" style="margin-right: 1rem;" v-model="mediaServerId" placeholder="请选择" default-first-option>-->
-<!--      <el-option label="全部" value=""></el-option>-->
-<!--      <el-option-->
-<!--        v-for="item in mediaServerList"-->
-<!--        :key="item.id"-->
-<!--        :label="item.id"-->
-<!--        :value="item.id">-->
-<!--      </el-option>-->
-<!--      </el-select>-->
-        推流状态: <el-select size="mini" style="margin-right: 1rem;" @change="getChannelList" v-model="pushing" placeholder="请选择" default-first-option>
-        <el-option label="全部" value=""></el-option>
-        <el-option label="推流进行中" value="true"></el-option>
-        <el-option label="推流未进行" value="false"></el-option>
-      </el-select>
-      <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button>
-      <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" @click="batchAdd">批量添加</el-button>
-    </div>
-    <el-table ref="gbStreamsTable" :data="gbStreams" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.app + row.stream" @selection-change="handleSelectionChange">
-        <el-table-column align="center" type="selection" :reserve-selection="true" width="55">
-        </el-table-column>
-        <el-table-column prop="name" label="名称" show-overflow-tooltip align="center">
-        </el-table-column>
-        <el-table-column prop="app" label="应用名" show-overflow-tooltip align="center">
-        </el-table-column>
-        <el-table-column prop="stream" label="流ID"  show-overflow-tooltip align="center">
-        </el-table-column>
-        <el-table-column prop="gbId" label="国标编码" show-overflow-tooltip align="center">
-        </el-table-column>
-        <el-table-column label="流来源" width="100" align="center">
-            <template slot-scope="scope">
-            <div slot="reference" class="name-wrapper">
-                <el-tag size="medium" v-if="scope.row.streamType == 'proxy'">拉流代理</el-tag>
-                <el-tag size="medium" v-if="scope.row.streamType == 'push'">推流</el-tag>
-            </div>
-            </template>
-        </el-table-column>
-      <el-table-column label="操作" width="100" align="center" fixed="right" >
-        <template slot-scope="scope">
-          <el-button-group>
-            <el-button size="mini" icon="el-icon-plus" v-if="catalogId === null" @click="add(scope.row, scope)">添加</el-button>
-            <el-button size="mini" icon="el-icon-delete" v-if="catalogId !== null" type="danger" @click="remove(scope.row, scope)">移除</el-button>
-          </el-button-group>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total">
-    </el-pagination>
-    <getCatalog ref="getCatalog" :platformId="platformId" ></getCatalog>
-</div>
-</template>
-
-<script>
-import MediaServer from './../service/MediaServer'
-import getCatalog from './getCatalog'
-export default {
-    name: 'chooseChannelFoStream',
-    computed: {
-        // getPlayerShared: function () {
-        //     return {
-        //         sharedUrl: window.location.host + '/' + this.videoUrl,
-        //         sharedIframe: '<iframe src="' + window.location.host + '/' + this.videoUrl + '"></iframe>',
-        //         sharedRtmp: this.videoUrl
-        //     };
-        // }
-    },
-    props: ['platformId', 'catalogId',  'catalogName'],
-    created() {
-        this.initData();
-        console.log(this.catalogId)
-    },
-    components: {
-      getCatalog,
-    },
-    data() {
-        return {
-            gbStreams: [],
-            gbChoosechannel:{},
-            channelType: "",
-            online: "",
-            choosed: "",
-            currentPage: 1,
-            count: 10,
-            total: 0,
-            searchSrt: "",
-            pushing: "",
-            mediaServerId: "",
-            mediaServerList: [],
-            mediaServerObj : new MediaServer(),
-            eventEnable: false,
-            multipleSelection: [],
-            winHeight: window.innerHeight - 350,
-
-        };
-    },
-    watch:{
-        platformId(newData, oldData){
-            this.getChannelList()
-        },
-        catalogId(newData, oldData){
-            this.getChannelList()
-        },
-    },
-    methods: {
-        initData: function() {
-            this.mediaServerObj.getOnlineMediaServerList((data)=>{
-              this.mediaServerList = data.data;
-            })
-            this.getChannelList();
-        },
-        currentChange: function (val) {
-            this.currentPage = val;
-            this.getChannelList();
-        },
-        handleSizeChange: function (val) {
-            this.count = val;
-            console.log(val)
-            this.getChannelList();
-
-        },
-        add: function (row, scope) {
-          this.getCatalogFromUser((catalogId)=>{
-            this.$axios({
-              method:"post",
-              url:"/api/gbStream/add",
-              data:{
-                platformId: this.platformId,
-                catalogId: catalogId,
-                gbStreams:  [row],
-              }
-            }).then((res)=>{
-              console.log("保存成功")
-              // this.gbStreams.splice(scope.$index,1)
-              this.getChannelList();
-            }).catch(function (error) {
-              console.log(error);
-            });
-          })
-
-
-        },
-        remove: function (row, scope) {
-          this.$axios({
-            method:"delete",
-            url:"/api/gbStream/del",
-            data:{
-              platformId: this.platformId,
-              gbStreams:  [row],
-            }
-          }).then((res)=>{
-            console.log("移除成功")
-            // this.gbStreams.splice(scope.$index,1)
-            this.getChannelList();
-          }).catch(function (error) {
-            console.log(error);
-          });
-        },
-        getChannelList: function () {
-            let that = this;
-
-            this.$axios({
-                method: 'get',
-                url:`/api/gbStream/list`,
-                params: {
-                    page: that.currentPage,
-                    count: that.count,
-                    query: that.searchSrt,
-                    pushing: that.pushing,
-                    platformId: that.platformId,
-                    catalogId: that.catalogId,
-                    mediaServerId: that.mediaServerId
-                }
-                })
-                .then(function (res) {
-                    that.total = res.data.total;
-                    that.gbStreams = res.data.list;
-                    that.gbChoosechannel = {};
-                    // 防止出现表格错位
-                    that.$nextTick(() => {
-                        that.$refs.gbStreamsTable.doLayout();
-                        // 默认选中
-                         that.eventEnable = true;
-                    })
-                })
-                .catch(function (error) {
-                    console.log(error);
-                });
-
-        },
-        batchDel: function() {
-          this.$confirm(`确认这${this.multipleSelection.length}个通道吗?`, '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }).then(() => {
-            this.$axios({
-              method:"delete",
-              url:"/api/gbStream/del",
-              data:{
-                platformId: this.platformId,
-                gbStreams:  this.multipleSelection,
-              }
-            }).then((res)=>{
-              console.log("移除成功")
-              this.$refs.gbStreamsTable.clearSelection()
-              this.getChannelList();
-            }).catch(function (error) {
-              console.log(error);
-            });
-          }).catch(() => {
-          });
-
-        },
-        batchAdd: function() {
-          this.getCatalogFromUser((catalogId)=>{
-            this.$axios({
-              method:"post",
-              url:"/api/gbStream/add",
-              data:{
-                platformId: this.platformId,
-                catalogId: catalogId,
-                gbStreams:  this.multipleSelection,
-              }
-            }).then((res)=>{
-              console.log("保存成功")
-              this.$refs.gbStreamsTable.clearSelection()
-              this.getChannelList();
-            }).catch(function (error) {
-              console.log(error);
-            });
-          })
-        },
-        getCatalogFromUser(callback){
-            this.$refs.getCatalog.openDialog(callback)
-        },
-        handleSelectionChange: function (val) {
-          this.multipleSelection = val;
-        },
-    }
-};
-</script>
-
-<style>
-
-</style>
diff --git a/web_src/src/components/dialog/deviceEdit.vue b/web_src/src/components/dialog/deviceEdit.vue
deleted file mode 100644
index 4f86851..0000000
--- a/web_src/src/components/dialog/deviceEdit.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
-  <div id="deviceEdit" v-loading="isLoging">
-    <el-dialog
-      title="设备编辑"
-      width="40%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="form" :rules="rules" :model="form" label-width="240px" >
-          <el-form-item label="设备编号" >
-            <el-input v-model="form.deviceId" disabled></el-input>
-          </el-form-item>
-
-          <el-form-item label="设备名称" prop="name">
-            <el-input v-model="form.name" clearable></el-input>
-          </el-form-item>
-<!--          <el-form-item label="流媒体ID" prop="mediaServerId">-->
-<!--            <el-select v-model="form.mediaServerId" style="float: left; width: 100%" >-->
-<!--              <el-option key="auto" label="自动负载最小" value="null"></el-option>-->
-<!--              <el-option-->
-<!--                v-for="item in mediaServerList"-->
-<!--                :key="item.id"-->
-<!--                :label="item.id"-->
-<!--                :value="item.id">-->
-<!--              </el-option>-->
-<!--            </el-select>-->
-<!--          </el-form-item>-->
-
-          <el-form-item label="字符集" prop="charset" >
-            <el-select v-model="form.charset" style="float: left; width: 100%" >
-                <el-option key="GB2312" label="GB2312" value="gb2312"></el-option>
-              <el-option key="UTF-8" label="UTF-8" value="utf-8"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="目录订阅周期(0为停用订阅)" prop="subscribeCycleForCatalog" >
-            <el-input v-model="form.subscribeCycleForCatalog" clearable ></el-input>
-          </el-form-item>
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit" >确认</el-button>
-              <el-button @click="close">取消</el-button>
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import MediaServer from '../service/MediaServer'
-export default {
-  name: "deviceEdit",
-  props: {},
-  computed: {},
-  created() {},
-  data() {
-    return {
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      hostNames:[],
-      mediaServerList: [], // 滅体节点列表
-      mediaServerObj : new MediaServer(),
-      form: {},
-      rules: {
-        name: [{ required: true, message: "请输入名称", trigger: "blur" }]
-      },
-    };
-  },
-  methods: {
-    openDialog: function (row, callback) {
-      console.log(row)
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-      if (row != null) {
-        this.form = row;
-      }
-      this.getMediaServerList();
-    },
-    getMediaServerList: function (){
-      let that = this;
-      that.mediaServerObj.getOnlineMediaServerList((data)=>{
-        that.mediaServerList = data.data;
-      })
-    },
-    onSubmit: function () {
-      console.log("onSubmit");
-      console.log(this.form);
-      this.$axios({
-        method: 'post',
-        url:`/api/device/query/device/update/`,
-        params: this.form
-      }).then((res) => {
-        console.log(res.data)
-        if (res.data.code == 0) {
-          this.listChangeCallback()
-        }else {
-          this.$message({
-            showClose: true,
-            message: res.data.msg,
-            type: "error",
-          });
-        }
-      }).catch(function (error) {
-        console.log(error);
-      });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.$refs.form.resetFields();
-    },
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue
deleted file mode 100644
index 5a08006..0000000
--- a/web_src/src/components/dialog/devicePlayer.vue
+++ /dev/null
@@ -1,850 +0,0 @@
-<template>
-<div id="devicePlayer" v-loading="isLoging">
-
-    <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()">
-        <!-- <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :message="videoError" :hasaudio="hasaudio" fluent autoplay live></LivePlayer> -->
-        <player ref="videoPlayer" :visible.sync="showVideoDialog" :videoUrl="videoUrl" :error="videoError" :message="videoError" :height="false" :hasAudio="hasAudio" fluent autoplay live ></player>
-        <div id="shared" style="text-align: right; margin-top: 1rem;">
-            <el-tabs v-model="tabActiveName" @tab-click="tabHandleClick">
-                <el-tab-pane label="实时视频" name="media">
-                    <div style="margin-bottom: 0.5rem;">
-                        <!--		<el-button type="primary" size="small" @click="playRecord(true, '')">播放</el-button>-->
-                        <!--		 <el-button type="primary" size="small" @click="startRecord()">录制</el-button>-->
-                        <!--		 <el-button type="primary" size="small" @click="stopRecord()">停止录制</el-button>-->
-                    </div>
-                    <div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-                        <span style="width: 5rem; line-height: 2.5rem; text-align: right;">播放地址:</span>
-                        <el-input v-model="getPlayerShared.sharedUrl" :disabled="true" >
-                          <template slot="append">
-                            <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="getPlayerShared.sharedUrl" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
-                          </template>
-                        </el-input>
-                    </div>
-                    <div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-                        <span style="width: 5rem; line-height: 2.5rem; text-align: right;">iframe:</span>
-                        <el-input v-model="getPlayerShared.sharedIframe" :disabled="true" >
-                          <template slot="append">
-                            <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="getPlayerShared.sharedIframe" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
-                          </template>
-                        </el-input>
-                    </div>
-                    <div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-                        <span style="width: 5rem; line-height: 2.5rem; text-align: right;">资源地址:</span>
-                        <el-input v-model="getPlayerShared.sharedRtmp" :disabled="true" >
-                          <template slot="append">
-                            <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="getPlayerShared.sharedRtmp" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
-                          </template>
-                        </el-input>
-                    </div>
-                </el-tab-pane>
-                <!--{"code":0,"data":{"paths":["22-29-30.mp4"],"rootPath":"/home/kkkkk/Documents/ZLMediaKit/release/linux/Debug/www/record/hls/kkkkk/2020-05-11/"}}-->
-                <el-tab-pane label="录像查询" name="record" v-if="showRrecord">
-                    <div style="width: 100%;">
-                      <div style="width: 100%; text-align: left">
-                        <span>录像控制</span>
-                        <el-button-group style="margin-left: 1rem;">
-                          <el-button size="mini" class="iconfont icon-zanting" title="开始" @click="gbPause()"></el-button>
-                          <el-button size="mini" class="iconfont icon-kaishi" title="暂停" @click="gbPlay()"></el-button>
-                          <el-dropdown size="mini" title="播放倍速" style="margin-left: 1px;" @command="gbScale">
-                            <el-button size="mini">
-                              倍速 <i class="el-icon-arrow-down el-icon--right"></i>
-                            </el-button>
-                            <el-dropdown-menu  slot="dropdown">
-                              <el-dropdown-item command="0.25">0.25倍速</el-dropdown-item>
-                              <el-dropdown-item command="0.5">0.5倍速</el-dropdown-item>
-                              <el-dropdown-item command="1.0">1倍速</el-dropdown-item>
-                              <el-dropdown-item command="2.0">2倍速</el-dropdown-item>
-                              <el-dropdown-item command="4.0">4倍速</el-dropdown-item>
-                            </el-dropdown-menu>
-                          </el-dropdown>
-                        </el-button-group>
-                        <el-date-picker style="float: right;" size="mini" v-model="videoHistory.date" type="date" value-format="yyyy-MM-dd" placeholder="日期" @change="queryRecords()"></el-date-picker>
-                      </div>
-                      <div style="width: 100%; text-align: left">
-                        <span class="demonstration" style="padding: 12px 36px 12px 0;float: left;">{{showTimeText}}</span>
-                        <el-slider style="width: 80%; float:left;" v-model="sliderTime" @change="gbSeek" :show-tooltip="false"></el-slider>
-                      </div>
-                    </div>
-
-
-                    <el-table :data="videoHistory.searchHistoryResult" height="150" v-loading="recordsLoading">
-                        <el-table-column label="名称" prop="name"></el-table-column>
-                        <el-table-column label="文件" prop="filePath"></el-table-column>
-                        <el-table-column label="开始时间" prop="startTime" :formatter="timeFormatter"></el-table-column>
-                        <el-table-column label="结束时间" prop="endTime" :formatter="timeFormatter"></el-table-column>
-
-                        <el-table-column label="操作">
-                            <template slot-scope="scope">
-                                <el-button-group>
-                                    <el-button icon="el-icon-video-play" size="mini" @click="playRecord(scope.row)">播放</el-button>
-                                    <el-button icon="el-icon-download" size="mini" @click="downloadRecord(scope.row)">下载</el-button>
-                                </el-button-group>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                </el-tab-pane>
-                <!--遥控界面-->
-                <el-tab-pane label="云台控制" name="control" v-if="showPtz">
-                    <div style="display: flex; justify-content: left;">
-                        <div class="control-wrapper">
-                            <div class="control-btn control-top" @mousedown="ptzCamera('up')" @mouseup="ptzCamera('stop')">
-                                <i class="el-icon-caret-top"></i>
-                                <div class="control-inner-btn control-inner"></div>
-                            </div>
-                            <div class="control-btn control-left" @mousedown="ptzCamera('left')" @mouseup="ptzCamera('stop')">
-                                <i class="el-icon-caret-left"></i>
-                                <div class="control-inner-btn control-inner"></div>
-                            </div>
-                            <div class="control-btn control-bottom" @mousedown="ptzCamera('down')" @mouseup="ptzCamera('stop')">
-                                <i class="el-icon-caret-bottom"></i>
-                                <div class="control-inner-btn control-inner"></div>
-                            </div>
-                            <div class="control-btn control-right" @mousedown="ptzCamera('right')" @mouseup="ptzCamera('stop')">
-                                <i class="el-icon-caret-right"></i>
-                                <div class="control-inner-btn control-inner"></div>
-                            </div>
-                            <div class="control-round">
-                                <div class="control-round-inner"><i class="fa fa-pause-circle"></i></div>
-                            </div>
-                            <div style="position: absolute; left: 7.25rem; top: 1.25rem" @mousedown="ptzCamera('zoomin')" @mouseup="ptzCamera('stop')"><i class="el-icon-zoom-in control-zoom-btn" style="font-size: 1.875rem;"></i></div>
-                            <div style="position: absolute; left: 7.25rem; top: 3.25rem; font-size: 1.875rem;" @mousedown="ptzCamera('zoomout')" @mouseup="ptzCamera('stop')"><i class="el-icon-zoom-out control-zoom-btn"></i></div>
-                             <div class="contro-speed" style="position: absolute; left: 4px; top: 7rem; width: 9rem;">
-                                 <el-slider v-model="controSpeed" :max="255"></el-slider>
-                             </div>
-                        </div>
-
-                        <div class="control-panel">
-                            <el-button-group>
-                                <el-tag style="position :absolute; left: 0rem; top: 0rem; width: 5rem; text-align: center" size="medium" type="info">预置位编号</el-tag>
-                                <el-input-number style="position: absolute; left: 5rem; top: 0rem; width: 6rem" size="mini" v-model="presetPos" controls-position="right" :precision="0" :step="1" :min="1" :max="255"></el-input-number>
-                                <el-button style="position: absolute; left: 11rem; top: 0rem; width: 5rem" size="mini" icon="el-icon-add-location" @click="presetPosition(129, presetPos)">设置</el-button>
-                                <el-button style="position: absolute; left: 27rem; top: 0rem; width: 5rem" size="mini" type="primary" icon="el-icon-place" @click="presetPosition(130, presetPos)">调用</el-button>
-                                <el-button style="position: absolute; left: 16rem; top: 0rem; width: 5rem" size="mini" icon="el-icon-delete-location" @click="presetPosition(131, presetPos)">删除</el-button>
-                                <el-tag style="position :absolute; left: 0rem; top: 2.5rem; width: 5rem; text-align: center" size="medium" type="info">巡航速度</el-tag>
-                                <el-input-number style="position: absolute; left: 5rem; top: 2.5rem; width: 6rem" size="mini" v-model="cruisingSpeed" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>
-                                <el-button style="position: absolute; left: 11rem; top: 2.5rem; width: 5rem" size="mini" icon="el-icon-loading" @click="setSpeedOrTime(134, cruisingGroup, cruisingSpeed)">设置</el-button>
-                                <el-tag style="position :absolute; left: 16rem; top: 2.5rem; width: 5rem; text-align: center" size="medium" type="info">停留时间</el-tag>
-                                <el-input-number style="position: absolute; left: 21rem; top: 2.5rem; width: 6rem" size="mini" v-model="cruisingTime" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>
-                                <el-button style="position: absolute; left: 27rem; top: 2.5rem; width: 5rem" size="mini" icon="el-icon-timer" @click="setSpeedOrTime(135, cruisingGroup, cruisingTime)">设置</el-button>
-                                <el-tag style="position :absolute; left: 0rem; top: 4.5rem; width: 5rem; text-align: center" size="medium" type="info">巡航组编号</el-tag>
-                                <el-input-number style="position: absolute; left: 5rem; top: 4.5rem; width: 6rem" size="mini" v-model="cruisingGroup" controls-position="right" :precision="0" :min="0" :max="255"></el-input-number>
-                                <el-button style="position: absolute; left: 11rem; top: 4.5rem; width: 5rem" size="mini" icon="el-icon-add-location" @click="setCommand(132, cruisingGroup, presetPos)">添加点</el-button>
-                                <el-button style="position: absolute; left: 16rem; top: 4.5rem; width: 5rem" size="mini" icon="el-icon-delete-location" @click="setCommand(133, cruisingGroup, presetPos)">删除点</el-button>
-                                <el-button style="position: absolute; left: 21rem; top: 4.5rem; width: 5rem" size="mini" icon="el-icon-delete" @click="setCommand(133, cruisingGroup, 0)">删除组</el-button>
-                                <el-button style="position: absolute; left: 27rem; top: 5rem; width: 5rem" size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(136, cruisingGroup, 0)">巡航</el-button>
-                                <el-tag style="position :absolute; left: 0rem; top: 7rem; width: 5rem; text-align: center" size="medium" type="info">扫描速度</el-tag>
-                                <el-input-number style="position: absolute; left: 5rem; top: 7rem; width: 6rem" size="mini" v-model="scanSpeed" controls-position="right" :precision="0" :min="1" :max="4095"></el-input-number>
-                                <el-button style="position: absolute; left: 11rem; top: 7rem; width: 5rem" size="mini" icon="el-icon-loading" @click="setSpeedOrTime(138, scanGroup, scanSpeed)">设置</el-button>
-                                <el-tag style="position :absolute; left: 0rem; top: 9rem; width: 5rem; text-align: center" size="medium" type="info">扫描组编号</el-tag>
-                                <el-input-number style="position: absolute; left: 5rem; top: 9rem; width: 6rem" size="mini" v-model="scanGroup" controls-position="right" :precision="0" :step="1" :min="0" :max="255"></el-input-number>
-                                <el-button style="position: absolute; left: 11rem; top: 9rem; width: 5rem" size="mini" icon="el-icon-d-arrow-left" @click="setCommand(137, scanGroup, 1)">左边界</el-button>
-                                <el-button style="position: absolute; left: 16rem; top: 9rem; width: 5rem" size="mini" icon="el-icon-d-arrow-right" @click="setCommand(137, scanGroup, 2)">右边界</el-button>
-                                <el-button style="position: absolute; left: 27rem; top: 7rem; width: 5rem" size="mini" type="primary" icon="el-icon-video-camera-solid" @click="setCommand(137, scanGroup, 0)">扫描</el-button>
-                                <el-button style="position: absolute; left: 27rem; top: 9rem; width: 5rem" size="mini" type="danger" icon="el-icon-switch-button" @click="ptzCamera('stop')">停止</el-button>
-                            </el-button-group>
-                        </div>
-                    </div>
-                </el-tab-pane>
-                <el-tab-pane label="编码信息" name="codec" v-loading="tracksLoading">
-                    <p>
-                        无法播放或者没有声音?&nbsp&nbsp&nbsp试一试&nbsp
-                        <el-button size="mini" type="primary" v-if="!coverPlaying" @click="coverPlay">转码播放</el-button>
-                        <el-button size="mini" type="danger" v-if="coverPlaying" @click="convertStopClick">停止转码</el-button>
-                    </p>
-                    <div class="trank" >
-                      <p v-if="tracksNotLoaded" style="text-align: center;padding-top: 3rem;">暂无数据</p>
-                        <div v-for="(item, index) in tracks" style="width: 50%; float: left" loading>
-                            <span >流 {{index}}</span>
-                            <div class="trankInfo" v-if="item.codec_type == 0">
-                                <p>格式: {{item.codec_id_name}}</p>
-                                <p>类型: 视频</p>
-                                <p>分辨率: {{item.width}} x {{item.height}}</p>
-                                <p>帧率: {{item.fps}}</p>
-                            </div>
-                            <div class="trankInfo" v-if="item.codec_type == 1">
-                                <p>格式: {{item.codec_id_name}}</p>
-                                <p>类型: 音频</p>
-                                <p>采样位数: {{item.sample_bit}}</p>
-                                <p>采样率: {{item.sample_rate}}</p>
-                            </div>
-                        </div>
-
-                    </div>
-
-                </el-tab-pane>
-            </el-tabs>
-        </div>
-    </el-dialog>
-</div>
-</template>
-
-<script>
-// import player from '../dialog/rtcPlayer.vue'
-// import LivePlayer from '@liveqing/liveplayer'
-// import player from '../dialog/easyPlayer.vue'
-import player from '../dialog/jessibuca.vue'
-export default {
-    name: 'devicePlayer',
-    props: {},
-    components: {
-        player,
-    },
-    computed: {
-        getPlayerShared: function () {
-
-            return {
-                sharedUrl: window.location.origin + '/#/play/wasm/' + encodeURIComponent(this.videoUrl),
-                sharedIframe: '<iframe src="' + window.location.origin + '/#/play/wasm/' + encodeURIComponent(this.videoUrl) + '"></iframe>',
-                sharedRtmp: this.videoUrl
-            };
-        }
-    },
-    created() {},
-    data() {
-        return {
-            video: 'http://lndxyj.iqilu.com/public/upload/2019/10/14/8c001ea0c09cdc59a57829dabc8010fa.mp4',
-            videoUrl: '',
-            videoHistory: {
-                date: '',
-                searchHistoryResult: [] //媒体流历史记录搜索结果
-            },
-            showVideoDialog: false,
-            streamId: '',
-            app : '',
-            mediaServerId : '',
-            convertKey: '',
-            deviceId: '',
-            channelId: '',
-            tabActiveName: 'media',
-            hasAudio: false,
-            loadingRecords: false,
-            recordsLoading: false,
-            isLoging: false,
-            controSpeed: 30,
-            timeVal: 0,
-            timeMin: 0,
-            timeMax: 1440,
-            presetPos: 1,
-            cruisingSpeed: 100,
-            cruisingTime: 5,
-            cruisingGroup: 0,
-            scanSpeed: 100,
-            scanGroup: 0,
-            tracks: [],
-            coverPlaying:false,
-            tracksLoading: false,
-            recordPlay: "",
-            showPtz: true,
-            showRrecord: true,
-            tracksNotLoaded: false,
-            sliderTime: 0,
-            seekTime: 0,
-            recordStartTime: 0,
-            showTimeText: "00:00:00",
-        };
-    },
-    methods: {
-        tabHandleClick: function(tab, event) {
-            console.log(tab)
-            var that = this;
-            that.tracks = [];
-            that.tracksLoading = true;
-            that.tracksNotLoaded = false;
-            if (tab.name == "codec") {
-                this.$axios({
-                    method: 'get',
-                    url: '/zlm/' +this.mediaServerId+ '/index/api/getMediaInfo?vhost=__defaultVhost__&schema=rtmp&app='+ this.app +'&stream='+ this.streamId
-                }).then(function (res) {
-                    that.tracksLoading = false;
-                    if (res.data.code == 0 && res.data.online) {
-                        that.tracks = res.data.tracks;
-                    }else{
-                        that.tracksNotLoaded = true;
-                        that.$message({
-                            showClose: true,
-                            message: '获取编码信息失败,',
-                            type: 'warning'
-                        });
-                    }
-                }).catch(function (e) {});
-            }
-        },
-        openDialog: function (tab, deviceId, channelId, param) {
-            this.tabActiveName = tab;
-            this.channelId = channelId;
-            this.deviceId = deviceId;
-            this.streamId = "";
-            this.mediaServerId = "";
-            this.app = "";
-            this.videoUrl = ""
-            if (!!this.$refs.videoPlayer) {
-                this.$refs.videoPlayer.pause();
-            }
-            switch (tab) {
-                case "media":
-                    this.play(param.streamInfo, param.hasAudio)
-                    break;
-                case "record":
-                    this.showVideoDialog = true;
-                    this.videoHistory.date = param.date;
-                    this.queryRecords()
-                    break;
-                case "streamPlay":
-                    this.tabActiveName = "media";
-                    this.showRrecord = false;
-                    this.showPtz = false;
-                    this.play(param.streamInfo, param.hasAudio)
-                    break;
-                case "control":
-                    break;
-            }
-        },
-        timeAxisSelTime: function (val) {
-            console.log(val)
-        },
-        play: function (streamInfo, hasAudio) {
-            this.hasAudio = hasAudio;
-            this.isLoging = false;
-            // this.videoUrl = streamInfo.rtc;
-            this.videoUrl = this.getUrlByStreamInfo(streamInfo);
-            this.streamId = streamInfo.stream;
-            this.app = streamInfo.app;
-            this.mediaServerId = streamInfo.mediaServerId;
-            this.playFromStreamInfo(false, streamInfo)
-        },
-        getUrlByStreamInfo(streamInfo){
-            let baseZlmApi = process.env.NODE_ENV === 'development'?`${location.host}/debug/zlm`:`${location.host}/zlm`
-            // return `${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`;
-            // return `http://${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`;
-            if (location.protocol === "https:") {
-              if (streamInfo.wss_flv === null) {
-                console.error("媒体服务器未配置ssl端口, 使用http端口")
-                // this.$message({
-                //   showClose: true,
-                //   message: '媒体服务器未配置ssl端口, ',
-                //   type: 'error'
-                // });
-                return streamInfo.ws_flv
-              }else {
-                return streamInfo.wss_flv;
-              }
-
-            }else {
-              return streamInfo.ws_flv;
-            }
-
-        },
-        coverPlay: function () {
-            var that = this;
-            this.coverPlaying = true;
-            this.$refs.videoPlayer.pause()
-            that.$axios({
-                method: 'post',
-                url: '/api/play/convert/' + that.streamId
-                }).then(function (res) {
-                    if (res.data.code == 0) {
-                        that.convertKey = res.data.key;
-                        setTimeout(()=>{
-                            that.isLoging = false;
-                            that.playFromStreamInfo(false, res.data.data);
-                        }, 2000)
-                    } else {
-                        that.isLoging = false;
-                        that.coverPlaying = false;
-                        that.$message({
-                            showClose: true,
-                            message: '转码失败',
-                            type: 'error'
-                        });
-                    }
-                }).catch(function (e) {
-                    console.log(e)
-                    that.coverPlaying = false;
-                    that.$message({
-                        showClose: true,
-                        message: '播放错误',
-                        type: 'error'
-                    });
-                });
-        },
-        convertStopClick: function() {
-            this.convertStop(()=>{
-                this.$refs.videoPlayer.play(this.videoUrl)
-            });
-        },
-        convertStop: function(callback) {
-            var that = this;
-            that.$refs.videoPlayer.pause()
-            this.$axios({
-                method: 'post',
-                url: '/api/play/convertStop/' + this.convertKey
-              }).then(function (res) {
-                if (res.data.code == 0) {
-                  console.log(res.data.msg)
-                }else {
-                  console.error(res.data.msg)
-                }
-                 if (callback )callback();
-              }).catch(function (e) {});
-            that.coverPlaying = false;
-            that.convertKey = "";
-            // if (callback )callback();
-        },
-
-        playFromStreamInfo: function (realHasAudio, streamInfo) {
-          this.showVideoDialog = true;
-          this.hasaudio = realHasAudio && this.hasaudio;
-          this.$refs.videoPlayer.play(this.getUrlByStreamInfo(streamInfo))
-        },
-        close: function () {
-            console.log('关闭视频');
-            if (!!this.$refs.videoPlayer){
-              this.$refs.videoPlayer.pause();
-            }
-            this.videoUrl = '';
-            this.coverPlaying = false;
-            this.showVideoDialog = false;
-            if (this.convertKey != '') {
-              this.convertStop();
-            }
-            this.convertKey = ''
-            if (this.recordPlay != '') {
-              this.stopPlayRecord();
-            }
-            this.recordPlay = ''
-        },
-
-        copySharedInfo: function (data) {
-            console.log('复制内容:' + data);
-            this.coverPlaying = false;
-            this.tracks = []
-            let _this = this;
-            this.$copyText(data).then(
-                function (e) {
-                    _this.$message({
-                        showClose: true,
-                        message: '复制成功',
-                        type: 'success'
-                    });
-                },
-                function (e) {
-                    _this.$message({
-                        showClose: true,
-                        message: '复制失败,请手动复制',
-                        type: 'error'
-                    });
-                }
-            );
-        },
-
-        queryRecords: function () {
-            if (!this.videoHistory.date) {
-                return;
-            }
-            this.recordsLoading = true;
-            this.videoHistory.searchHistoryResult = [];
-            let that = this;
-            var startTime = this.videoHistory.date + " 00:00:00";
-            var endTime = this.videoHistory.date + " 23:59:59";
-            this.$axios({
-                method: 'get',
-                url: '/api/gb_record/query/' + this.deviceId + '/' + this.channelId + '?startTime=' + startTime + '&endTime=' + endTime
-            }).then(function (res) {
-                // 处理时间信息
-                that.videoHistory.searchHistoryResult = res.data.recordList;
-                that.recordsLoading = false;
-            }).catch(function (e) {
-                console.log(e.message);
-                // that.videoHistory.searchHistoryResult = falsificationData.recordData;
-            });
-
-        },
-        onTimeChange: function (video) {
-            // this.queryRecords()
-        },
-        playRecord: function (row) {
-            let that = this;
-
-            let startTime = row.startTime
-            this.recordStartTime = row.startTime
-            this.showTimeText =  row.startTime.split(" ")[1]
-            let endtime = row.endTime
-            this.sliderTime = 0;
-            this.seekTime = new Date(endtime).getTime() - new Date(startTime).getTime();
-            console.log(this.seekTime)
-            if (that.streamId != "") {
-                that.stopPlayRecord(function () {
-                    that.streamId = "",
-                        that.playRecord(row);
-                })
-            } else {
-                this.$axios({
-                    method: 'get',
-                    url: '/api/playback/start/' + this.deviceId + '/' + this.channelId + '?startTime=' + row.startTime + '&endTime=' +
-                        row.endTime
-                }).then(function (res) {
-                    var streamInfo = res.data;
-                    that.app = streamInfo.app;
-                    that.streamId = streamInfo.stream;
-                    that.mediaServerId = streamInfo.mediaServerId;
-                    that.ssrc = streamInfo.ssrc;
-                    that.videoUrl = that.getUrlByStreamInfo(streamInfo);
-                    that.recordPlay = true;
-                });
-            }
-        },
-        stopPlayRecord: function (callback) {
-            this.$refs.videoPlayer.pause();
-            this.videoUrl = '';
-            this.$axios({
-                method: 'get',
-                url: '/api/playback/stop/' + this.deviceId + "/" + this.channelId + "/" + this.streamId
-            }).then(function (res) {
-                if (callback) callback()
-            });
-        },
-        downloadRecord: function (row) {
-            let that = this;
-            if (that.streamId != "") {
-                that.stopDownloadRecord(function () {
-                    that.streamId = "",
-                        that.downloadRecord(row);
-                })
-            } else {
-                this.$axios({
-                    method: 'get',
-                    url: '/api/download/start/' + this.deviceId + '/' + this.channelId + '?startTime=' + row.startTime + '&endTime=' +
-                        row.endTime + '&downloadSpeed=4'
-                }).then(function (res) {
-                    var streamInfo = res.data;
-                    that.app = streamInfo.app;
-                    that.streamId = streamInfo.stream;
-                    that.mediaServerId = streamInfo.mediaServerId;
-                    that.videoUrl = that.getUrlByStreamInfo(streamInfo);
-                    that.recordPlay = true;
-                });
-            }
-        },
-        stopDownloadRecord: function (callback) {
-            this.$refs.videoPlayer.pause();
-            this.videoUrl = '';
-            this.$axios({
-                method: 'get',
-                url: '/api/download/stop/' + this.deviceId + "/" + this.channelId+ "/" + this.streamId
-            }).then(function (res) {
-                if (callback) callback()
-            });
-        },
-        ptzCamera: function (command) {
-            console.log('云台控制:' + command);
-            let that = this;
-            this.$axios({
-                method: 'post',
-                url: '/api/ptz/control/' + this.deviceId + '/' + this.channelId + '?command=' + command + '&horizonSpeed=' + this.controSpeed + '&verticalSpeed=' + this.controSpeed + '&zoomSpeed=' + this.controSpeed
-            }).then(function (res) {});
-        },
-        //////////////////////播放器事件处理//////////////////////////
-        videoError: function (e) {
-            console.log("播放器错误:" + JSON.stringify(e));
-        },
-        presetPosition: function (cmdCode, presetPos) {
-            console.log('预置位控制:' + this.presetPos + ' : 0x' + cmdCode.toString(16));
-            let that = this;
-            this.$axios({
-                method: 'post',
-                url: '/api/ptz/front_end_command/' + this.deviceId + '/' + this.channelId + '?cmdCode=' + cmdCode + '&parameter1=0&parameter2=' + presetPos + '&combindCode2=0'
-            }).then(function (res) {});
-        },
-        setSpeedOrTime: function (cmdCode, groupNum, parameter) {
-            let that = this;
-            let parameter2 = parameter % 256;
-            let combindCode2 = Math.floor(parameter / 256) * 16;
-            console.log('前端控制:0x' + cmdCode.toString(16) + ' 0x' + groupNum.toString(16) + ' 0x' + parameter2.toString(16) + ' 0x' + combindCode2.toString(16));
-            this.$axios({
-                method: 'post',
-                url: '/api/ptz/front_end_command/' + this.deviceId + '/' + this.channelId + '?cmdCode=' + cmdCode + '&parameter1=' + groupNum + '&parameter2=' + parameter2 + '&combindCode2=' + combindCode2
-            }).then(function (res) {});
-        },
-        setCommand: function (cmdCode, groupNum, parameter) {
-            let that = this;
-            console.log('前端控制:0x' + cmdCode.toString(16) + ' 0x' + groupNum.toString(16) + ' 0x' + parameter.toString(16) + ' 0x0');
-            this.$axios({
-                method: 'post',
-                url: '/api/ptz/front_end_command/' + this.deviceId + '/' + this.channelId + '?cmdCode=' + cmdCode + '&parameter1=' + groupNum + '&parameter2=' + parameter + '&combindCode2=0'
-            }).then(function (res) {});
-        },
-        formatTooltip: function (val) {
-            var h = parseInt(val / 60);
-            var hStr = h < 10 ? ("0" + h) : h;
-            var s = val % 60;
-            var sStr = s < 10 ? ("0" + s) : s;
-            return h + ":" + sStr;
-        },
-        timeFormatter: function (row, column, cellValue, index) {
-            return cellValue.split(" ")[1];
-        },
-        mergeTime: function (timeArray) {
-            var resultArray = [];
-            for (let i = 0; i < timeArray.length; i++) {
-                var startTime = new Date(timeArray[i].startTime);
-                var endTime = new Date(timeArray[i].endTime);
-                if (i == 0) {
-                    resultArray[0] = {
-                        startTime: startTime,
-                        endTime: endTime
-                    }
-                }
-                for (let j = 0; j < resultArray.length; j++) {
-                    if (startTime > resultArray[j].endTime) { // 合并
-                        if (startTime - resultArray[j].endTime <= 1000) {
-                            resultArray[j].endTime = endTime;
-                        } else {
-                            resultArray[resultArray.length] = {
-                                startTime: startTime,
-                                endTime: endTime
-                            }
-                        }
-                    } else if (resultArray[j].startTime > endTime) { // 合并
-                        if (resultArray[j].startTime - endTime <= 1000) {
-                            resultArray[j].startTime = startTime;
-                        } else {
-                            resultArray[resultArray.length] = {
-                                startTime: startTime,
-                                endTime: endTime
-                            }
-                        }
-                    }
-                }
-            }
-            console.log(resultArray)
-            return resultArray;
-        },
-        gbPlay(){
-          console.log('前端控制:播放');
-          this.$axios({
-            method: 'get',
-            url: '/api/playback/resume/' + this.streamId
-          }).then((res)=> {
-            this.$refs.videoPlayer.play(this.videoUrl)
-          });
-        },
-        gbPause(){
-          console.log('前端控制:暂停');
-          this.$axios({
-            method: 'get',
-            url: '/api/playback/pause/' + this.streamId
-          }).then(function (res) {});
-        },
-        gbScale(command){
-          console.log('前端控制:倍速 ' + command);
-          this.$axios({
-            method: 'get',
-            url: `/api/playback/speed/${this.streamId }/${command}`
-          }).then(function (res) {});
-        },
-        gbSeek(val){
-          console.log('前端控制:seek ');
-          console.log(this.seekTime);
-          console.log(this.sliderTime);
-          let showTime = new Date(new Date(this.recordStartTime).getTime() + this.seekTime * val / 100)
-          let hour = showTime.getHours();
-          let minutes = showTime.getMinutes();
-          let seconds = showTime.getSeconds();
-          this.showTimeText = (hour < 10?("0" + hour):hour) + ":" + (minutes<10?("0" + minutes):minutes) + ":" + (seconds<10?("0" + seconds):seconds)
-          this.$axios({
-            method: 'get',
-            url: `/api/playback/seek/${this.streamId }/` + Math.floor(this.seekTime * val / 100000)
-          }).then(function (res) {});
-        }
-
-    }
-};
-</script>
-
-<style>
-.control-wrapper {
-    position: relative;
-    width: 6.25rem;
-    height: 6.25rem;
-    max-width: 6.25rem;
-    max-height: 6.25rem;
-    border-radius: 100%;
-    margin-top: 1.5rem;
-    margin-left: 0.5rem;
-    float: left;
-}
-
-.control-panel {
-    position: relative;
-    top: 0;
-    left: 5rem;
-    height: 11rem;
-    max-height: 11rem;
-}
-
-.control-btn {
-    display: flex;
-    justify-content: center;
-    position: absolute;
-    width: 44%;
-    height: 44%;
-    border-radius: 5px;
-    border: 1px solid #78aee4;
-    box-sizing: border-box;
-    transition: all 0.3s linear;
-}
-.control-btn:hover {
-    cursor:pointer
-}
-
-.control-btn i {
-    font-size: 20px;
-    color: #78aee4;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-}
-.control-btn i:hover {
-    cursor:pointer
-}
-.control-zoom-btn:hover {
-    cursor:pointer
-}
-
-.control-round {
-    position: absolute;
-    top: 21%;
-    left: 21%;
-    width: 58%;
-    height: 58%;
-    background: #fff;
-    border-radius: 100%;
-}
-
-.control-round-inner {
-    position: absolute;
-    left: 13%;
-    top: 13%;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    width: 70%;
-    height: 70%;
-    font-size: 40px;
-    color: #78aee4;
-    border: 1px solid #78aee4;
-    border-radius: 100%;
-    transition: all 0.3s linear;
-}
-
-.control-inner-btn {
-    position: absolute;
-    width: 60%;
-    height: 60%;
-    background: #fafafa;
-}
-
-.control-top {
-    top: -8%;
-    left: 27%;
-    transform: rotate(-45deg);
-    border-radius: 5px 100% 5px 0;
-}
-
-.control-top i {
-    transform: rotate(45deg);
-    border-radius: 5px 100% 5px 0;
-}
-
-.control-top .control-inner {
-    left: -1px;
-    bottom: 0;
-    border-top: 1px solid #78aee4;
-    border-right: 1px solid #78aee4;
-    border-radius: 0 100% 0 0;
-}
-
-.control-top .fa {
-    transform: rotate(45deg) translateY(-7px);
-}
-
-.control-left {
-    top: 27%;
-    left: -8%;
-    transform: rotate(45deg);
-    border-radius: 5px 0 5px 100%;
-}
-
-.control-left i {
-    transform: rotate(-45deg);
-}
-
-.control-left .control-inner {
-    right: -1px;
-    top: -1px;
-    border-bottom: 1px solid #78aee4;
-    border-left: 1px solid #78aee4;
-    border-radius: 0 0 0 100%;
-}
-
-.control-left .fa {
-    transform: rotate(-45deg) translateX(-7px);
-}
-
-.control-right {
-    top: 27%;
-    right: -8%;
-    transform: rotate(45deg);
-    border-radius: 5px 100% 5px 0;
-}
-
-.control-right i {
-    transform: rotate(-45deg);
-}
-
-.control-right .control-inner {
-    left: -1px;
-    bottom: -1px;
-    border-top: 1px solid #78aee4;
-    border-right: 1px solid #78aee4;
-    border-radius: 0 100% 0 0;
-}
-
-.control-right .fa {
-    transform: rotate(-45deg) translateX(7px);
-}
-
-.control-bottom {
-    left: 27%;
-    bottom: -8%;
-    transform: rotate(45deg);
-    border-radius: 0 5px 100% 5px;
-}
-
-.control-bottom i {
-    transform: rotate(-45deg);
-}
-
-.control-bottom .control-inner {
-    top: -1px;
-    left: -1px;
-    border-bottom: 1px solid #78aee4;
-    border-right: 1px solid #78aee4;
-    border-radius: 0 0 100% 0;
-}
-
-.control-bottom .fa {
-    transform: rotate(-45deg) translateY(7px);
-}
-.trank {
-    width: 80%;
-    height: 180px;
-    text-align: left;
-    padding: 0 10%;
-    overflow: auto;
-}
-.trankInfo {
-    width: 80%;
-    padding: 0 10%;
-}
-</style>
diff --git a/web_src/src/components/dialog/easyPlayer.vue b/web_src/src/components/dialog/easyPlayer.vue
deleted file mode 100644
index daf7207..0000000
--- a/web_src/src/components/dialog/easyPlayer.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div id="easyplayer"></div>
-</template>
-
-<script>
-export default {
-    name: 'player',
-    data() {
-        return {
-            easyPlayer: null
-        };
-    },
-    props: ['videoUrl', 'error', 'hasaudio', 'height'],
-    mounted () {
-      let paramUrl = decodeURIComponent(this.$route.params.url)
-       this.$nextTick(() =>{
-          if (typeof (this.videoUrl) == "undefined") {
-            this.videoUrl = paramUrl;
-          }
-          console.log("初始化时的地址为: " + this.videoUrl)
-          this.play(this.videoUrl)
-        })
-    },
-    watch:{
-        videoUrl(newData, oldData){
-            this.play(newData)
-        },
-        immediate:true
-    },
-    methods: {
-        play: function (url) {
-          console.log(this.height)
-            if (this.easyPlayer != null) {
-              this.easyPlayer.destroy();
-            }
-            if (typeof (this.height) == "undefined") {
-              this.height = false
-            }
-            this.easyPlayer = new WasmPlayer(null, 'easyplayer', this.eventcallbacK, {Height: this.height})
-            this.easyPlayer.play(url, 1)
-        },
-        pause: function () {
-          this.easyPlayer.destroy();
-          this.easyPlayer = null
-        },
-        eventcallbacK: function(type, message) {
-            // console.log("player 事件回调")
-            // console.log(type)
-            // console.log(message)
-        }
-    },
-    destroyed() {
-      this.easyPlayer.destroy();
-    },
-}
-</script>
-
-<style>
-    .LodingTitle {
-        min-width: 70px;
-    }
-    /* 隐藏logo */
-    .iconqingxiLOGO {
-        display: none !important;
-    }
-
-</style>
diff --git a/web_src/src/components/dialog/getCatalog.vue b/web_src/src/components/dialog/getCatalog.vue
deleted file mode 100644
index 62bacdb..0000000
--- a/web_src/src/components/dialog/getCatalog.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-<template>
-<div id="getCatalog" >
-
-  <el-dialog title="选择要添加到的节点" v-if="showDialog"  width="50%" :append-to-body="true" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()" center>
-    <div>
-      <el-tree class="el-scrollbar"
-               ref="tree"
-               id="catalogTree"
-               empty-text="未知节点"
-               node-key="id"
-               default-expand-all
-               :highlight-current="false"
-               :expand-on-click-node="false"
-               :props="props"
-               :load="loadNode"
-               @node-click="nodeClickHandler"
-               lazy>
-       <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%">
-         <el-radio v-if="node.data.type === 0 || node.data.type === -1" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio>
-         <span v-if="node.data.type === -1 && node.level === 1" style="font-size: 12px" class="iconfont icon-ziyuan"></span>
-         <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span>
-         <span v-if="node.data.type === 0 && node.level > 1"  class="el-icon-folder-opened"></span>
-         <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span>
-         <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span>
-        <span style=" padding-left: 1px">{{ node.label }}</span>
-        <span>
-          <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i>
-        </span>
-      </span>
-      </el-tree>
-    </div>
-    <div style="float: right; height: 13rem">
-      <el-button type="primary" size="mini" @click="submit()" >确认</el-button>
-      <el-button @click="close()" size="mini">取消</el-button>
-    </div>
-  </el-dialog>
-
-</div>
-</template>
-
-
-<script>
-
-export default {
-    name: 'getCatalog',
-    beforeCreate(){
-
-    },
-    created() {
-        this.chooseId = this.defaultCatalogId;
-        this.defaultCatalogIdSign = this.defaultCatalogId;
-        this.initData();
-        setTimeout(()=>{
-          if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId);
-        }, 100)
-
-    },
-    props: ['platformId'],
-    data() {
-        return {
-          props: {
-            label: 'name',
-            children: 'children',
-            isLeaf: 'leaf'
-          },
-          platformName: null,
-          defaultCatalogId: null,
-          catalogIdResult: null,
-          showDialog: false,
-          defaultCatalogIdSign: null,
-          chooseNode: null,
-          chooseId: "",
-          catalogTree: null,
-          contextmenuShow: false,
-
-        };
-    },
-    methods: {
-        openDialog(catalogIdResult) {
-          this.showDialog = true
-          this.catalogIdResult = catalogIdResult
-        },
-        initData: function () {
-            this.getCatalog();
-        },
-
-        getCatalog: function(parentId, callback) {
-            let that = this;
-            this.$axios({
-                    method:"get",
-                    url:`/api/platform/catalog`,
-                    params: {
-                        platformId: that.platformId,
-                        parentId: parentId
-                    }
-                })
-                .then((res)=> {
-                  if (res.data.code === 0) {
-                    if (typeof(callback) === 'function') {
-                      callback(res.data.data)
-                    }
-                  }
-                })
-                .catch(function (error) {
-                    console.log(error);
-                });
-
-        },
-        loadNode: function(node, resolve){
-
-
-
-          if (node.level === 0) {
-            this.$axios({
-              method:"get",
-              url:`/api/platform/info/` + this.platformId,
-            })
-              .then((res)=> {
-                if (res.data.code === 0) {
-                  this.platformName = res.data.data.name;
-                  this.defaultCatalogId = res.data.data.catalogId;
-                  this.defaultCatalogIdSign = res.data.data.catalogId;
-                  this.chooseId = res.data.data.catalogId;
-                  resolve([
-                   {
-                      name: this.platformName,
-                      id:  this.platformId,
-                      type:  0
-                    }
-                  ]);
-                }
-              })
-              .catch(function (error) {
-                console.log(error);
-              });
-          }
-          if (node.level >= 1){
-            this.getCatalog(node.data.id, resolve)
-          }
-        },
-        nodeClickHandler: function (data, node, tree){
-         this.chooseId = data.id;
-        },
-        close: function() {
-          this.showDialog = false;
-        },
-        submit: function() {
-          if (this.catalogIdResult)this.catalogIdResult(this.chooseId)
-          this.showDialog = false;
-        },
-    }
-};
-</script>
-
-<style>
-#catalogTree{
-  display: inline-block;
-}
-</style>
diff --git a/web_src/src/components/dialog/importChannel.vue b/web_src/src/components/dialog/importChannel.vue
deleted file mode 100644
index 91611e8..0000000
--- a/web_src/src/components/dialog/importChannel.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-  <div id="importChannel" v-loading="isLoging">
-    <el-dialog
-      title="导入通道数据"
-      width="30rem"
-      top="2rem"
-      :append-to-body="true"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div>
-        <el-upload
-          class="upload-box"
-          drag
-          :action="uploadUrl"
-          name="file"
-          :on-success="successHook"
-          :on-error="errorHook"
-          >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-          <div class="el-upload__tip" slot="tip">只能上传 csv / xls / xlsx 文件</div>
-        </el-upload>
-      </div>
-    </el-dialog>
-    <ShowErrorData ref="showErrorData" :gbIds="errorGBIds" :streams="errorStreams" ></ShowErrorData>
-  </div>
-</template>
-
-<script>
-
-import ShowErrorData from './importChannelShowErrorData.vue'
-
-export default {
-  name: "importChannel",
-  components: {
-    ShowErrorData,
-  },
-  created() {},
-  data() {
-    return {
-      submitCallback: null,
-      showDialog: false,
-      isLoging: false,
-      isEdit: false,
-      errorStreams: [],
-      errorGBIds: [],
-      uploadUrl: process.env.NODE_ENV === 'development'?`debug/api/push/upload`:`api/push/upload`,
-    };
-  },
-  methods: {
-    openDialog: function (callback) {
-      this.showDialog = true;
-      this.submitCallback = callback;
-    },
-    onSubmit: function () {
-      console.log("onSubmit");
-      console.log(this.form);
-      this.$axios({
-        method:"post",
-        url:`/api/platform/catalog/${!this.isEdit? "add":"edit"}`,
-        data: this.form
-      })
-        .then((res)=> {
-          if (res.data.code === 0) {
-            console.log("添加/修改成功")
-            if (this.submitCallback)this.submitCallback()
-          }else {
-            this.$message({
-              showClose: true,
-              message: res.data.msg,
-              type: "error",
-            });
-          }
-          this.close();
-        })
-        .catch((error)=> {
-          console.log(error);
-        });
-    },
-    close: function () {
-      this.showDialog = false;
-    },
-    successHook: function(response, file, fileList){
-      if (response.code === 0) {
-        this.$message({
-          showClose: true,
-          message: response.msg,
-          type: "success",
-        });
-      }else if (response.code === 1) {
-        this.errorGBIds = response.data.gbId
-        this.errorStreams = response.data.stream
-        console.log(this.$refs)
-        console.log(this.$refs.showErrorData)
-        this.$refs.showErrorData.openDialog()
-      }else {
-        this.$message({
-          showClose: true,
-          message: response.msg,
-          type: "error",
-        });
-      }
-    },
-    errorHook: function (err, file, fileList) {
-      this.$message({
-        showClose: true,
-        message: err,
-        type: "error",
-      });
-    }
-  },
-};
-</script>
-<style>
-.upload-box{
-  text-align: center;
-}
-.errDataBox{
-  max-height: 15rem;
-  overflow: auto;
-}
-</style>
diff --git a/web_src/src/components/dialog/importChannelShowErrorData.vue b/web_src/src/components/dialog/importChannelShowErrorData.vue
deleted file mode 100644
index 5194b7e..0000000
--- a/web_src/src/components/dialog/importChannelShowErrorData.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-<template>
-  <div id="importChannelShowErrorData" v-loading="isLoging">
-    <el-dialog
-      title="导入通道数据成功,但数据存在重复"
-      width="30rem"
-      top="2rem"
-      :append-to-body="true"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div >
-        重复国标ID:
-        <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="gbIds.join(',')" @success="$message({type:'success', message:'成功拷贝到粘贴板'})">复制</el-button>
-        <ul class="errDataBox">
-          <li v-for="id in gbIds" >
-            {{ id }}
-          </li>
-        </ul>
-      </div>
-
-      <div >
-        重复App/stream:
-        <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy"  title="点击拷贝" v-clipboard="streams.join(',')" @success="$message({type:'success', message:'成功拷贝到粘贴板'})">复制</el-button>
-        <ul class="errDataBox">
-          <li v-for="id in streams" >
-            {{ id }}
-          </li>
-        </ul>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-
-export default {
-  name: "importChannelShowErrorData",
-  computed: {},
-  created() {},
-  props: ['gbIds', 'streams'],
-  data() {
-    return {
-      isLoging: false,
-      showDialog: false,
-    };
-  },
-  methods: {
-    openDialog: function () {
-      this.showDialog = true;
-    },
-    close: function () {
-      this.showDialog = false;
-    },
-  },
-};
-</script>
-<style>
-.errDataBox{
-  max-height: 15rem;
-  overflow: auto;
-}
-</style>
diff --git a/web_src/src/components/dialog/jessibuca.vue b/web_src/src/components/dialog/jessibuca.vue
deleted file mode 100644
index c073719..0000000
--- a/web_src/src/components/dialog/jessibuca.vue
+++ /dev/null
@@ -1,298 +0,0 @@
-<template>
-  <div id="jessibuca" style="width: auto; height: auto">
-    <div id="container" ref="container" style="width: 100%; height: 10rem; background-color: #000" @dblclick="fullscreenSwich">
-      <div class="buttons-box" id="buttonsBox">
-        <div class="buttons-box-left">
-          <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>
-          <i v-if="playing" class="iconfont icon-pause jessibuca-btn" @click="pause"></i>
-          <i class="iconfont icon-stop jessibuca-btn" @click="destroy"></i>
-          <i v-if="isNotMute" class="iconfont icon-audio-high jessibuca-btn" @click="jessibuca.mute()"></i>
-          <i v-if="!isNotMute" class="iconfont icon-audio-mute jessibuca-btn" @click="jessibuca.cancelMute()"></i>
-        </div>
-        <div class="buttons-box-right">
-          <span class="jessibuca-btn">{{kBps}} kb/s</span>
-<!--          <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->
-<!--          <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->
-          <i class="iconfont icon-camera1196054easyiconnet jessibuca-btn" @click="jessibuca.screenshot('截图','png',0.5)" style="font-size: 1rem !important"></i>
-          <i class="iconfont icon-shuaxin11 jessibuca-btn" @click="playBtnClick"></i>
-          <i v-if="!fullscreen" class="iconfont icon-weibiaoti10 jessibuca-btn" @click="fullscreenSwich"></i>
-          <i v-if="fullscreen" class="iconfont icon-weibiaoti11 jessibuca-btn" @click="fullscreenSwich"></i>
-        </div>
-    </div>
-
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-    name: 'jessibuca',
-    data() {
-        return {
-          jessibuca: null,
-          playing: false,
-          isNotMute: false,
-          quieting: false,
-          fullscreen: false,
-          loaded: false, // mute
-          speed: 0,
-          performance: "", // 工作情况
-          kBps: 0,
-          btnDom: null,
-          videoInfo: null,
-          volume: 1,
-          rotate: 0,
-          vod: true, // 点播
-          forceNoOffscreen: false,
-        };
-    },
-    props: ['videoUrl', 'error', 'hasAudio', 'height'],
-    mounted () {
-      window.onerror = (msg) => {
-        // console.error(msg)
-      };
-      let paramUrl = decodeURIComponent(this.$route.params.url)
-       this.$nextTick(() =>{
-         let dom = document.getElementById("container");
-         dom.style.height = (9/16 ) * dom.clientWidth + "px"
-          if (typeof (this.videoUrl) == "undefined") {
-            this.videoUrl = paramUrl;
-          }
-         this.btnDom = document.getElementById("buttonsBox");
-          console.log("初始化时的地址为: " + this.videoUrl)
-         this.play(this.videoUrl)
-        })
-    },
-    watch:{
-        videoUrl(newData, oldData){
-            this.play(newData)
-        },
-        immediate:true
-    },
-    methods: {
-        create(){
-          let options =  {};
-          console.log(this.$refs.container)
-          console.log("hasAudio  " + this.hasAudio)
-
-          this.jessibuca = new window.Jessibuca(Object.assign(
-            {
-              container: this.$refs.container,
-              videoBuffer: 0.2, // 最大缓冲时长,单位秒
-              isResize: true,
-              isFlv: true,
-              decoder: "./static/js/jessibuca/index.js",
-              // text: "WVP-PRO",
-              // background: "bg.jpg",
-              loadingText: "加载中",
-              hasAudio: typeof (this.hasAudio) =="undefined"? true: this.hasAudio,
-              debug: false,
-              supportDblclickFullscreen: false, // 是否支持屏幕的双击事件,触发全屏,取消全屏事件。
-              operateBtns: {
-                fullscreen: false,
-                screenshot: false,
-                play: false,
-                audio: false,
-              },
-              record: "record",
-              vod: this.vod,
-              forceNoOffscreen: this.forceNoOffscreen,
-              isNotMute: this.isNotMute,
-            },
-            options
-          ));
-
-          let _this = this;
-          this.jessibuca.on("load", function () {
-            console.log("on load init");
-          });
-
-          this.jessibuca.on("log", function (msg) {
-            console.log("on log", msg);
-          });
-          this.jessibuca.on("record", function (msg) {
-            console.log("on record:", msg);
-          });
-          this.jessibuca.on("pause", function () {
-            _this.playing = false;
-          });
-          this.jessibuca.on("play", function () {
-            _this.playing = true;
-          });
-          this.jessibuca.on("fullscreen", function (msg) {
-            console.log("on fullscreen", msg);
-            _this.fullscreen = msg
-          });
-
-          this.jessibuca.on("mute", function (msg) {
-            console.log("on mute", msg);
-            _this.isNotMute = !msg;
-          });
-          this.jessibuca.on("audioInfo", function (msg) {
-            // console.log("audioInfo", msg);
-          });
-
-          this.jessibuca.on("videoInfo", function (msg) {
-            this.videoInfo = msg;
-            // console.log("videoInfo", msg);
-
-          });
-
-          this.jessibuca.on("bps", function (bps) {
-            // console.log('bps', bps);
-
-          });
-          let _ts = 0;
-          this.jessibuca.on("timeUpdate", function (ts) {
-            // console.log('timeUpdate,old,new,timestamp', _ts, ts, ts - _ts);
-            _ts = ts;
-          });
-
-          this.jessibuca.on("videoInfo", function (info) {
-            console.log("videoInfo", info);
-          });
-
-          this.jessibuca.on("error", function (error) {
-            console.log("error", error);
-          });
-
-          this.jessibuca.on("timeout", function () {
-            console.log("timeout");
-          });
-
-          this.jessibuca.on('start', function () {
-            console.log('start');
-          })
-
-          this.jessibuca.on("performance", function (performance) {
-            let show = "卡顿";
-            if (performance === 2) {
-              show = "非常流畅";
-            } else if (performance === 1) {
-              show = "流畅";
-            }
-            _this.performance = show;
-          });
-          this.jessibuca.on('buffer', function (buffer) {
-            // console.log('buffer', buffer);
-          })
-
-          this.jessibuca.on('stats', function (stats) {
-            // console.log('stats', stats);
-          })
-
-          this.jessibuca.on('kBps', function (kBps) {
-            _this.kBps = Math.round(kBps);
-          });
-
-          // 显示时间戳 PTS
-          this.jessibuca.on('videoFrame', function () {
-
-          })
-
-          //
-          this.jessibuca.on('metadata', function () {
-
-          });
-        },
-        playBtnClick: function (event){
-          this.play(this.videoUrl)
-        },
-        play: function (url) {
-          console.log(url)
-            if (this.jessibuca) {
-              this.destroy();
-            }
-            this.create();
-            this.jessibuca.on("play", () => {
-              this.playing = true;
-              this.loaded = true;
-              this.quieting = this.jessibuca.quieting;
-            });
-            if (this.jessibuca.hasLoaded()) {
-              this.jessibuca.play(url);
-            } else {
-              this.jessibuca.on("load", () => {
-                console.log("load 播放")
-                this.jessibuca.play(url);
-              });
-            }
-        },
-        pause: function () {
-          if (this.jessibuca) {
-            this.jessibuca.pause();
-          }
-          this.playing = false;
-          this.err = "";
-          this.performance = "";
-        },
-        destroy: function () {
-          if (this.jessibuca) {
-            this.jessibuca.destroy();
-          }
-          if (document.getElementById("buttonsBox") == null) {
-            document.getElementById("container").appendChild(this.btnDom)
-          }
-          this.jessibuca = null;
-          this.playing = false;
-          this.err = "";
-          this.performance = "";
-
-        },
-        eventcallbacK: function(type, message) {
-            // console.log("player 事件回调")
-            // console.log(type)
-            // console.log(message)
-        },
-        fullscreenSwich: function (){
-            let isFull = this.isFullscreen()
-            this.jessibuca.setFullscreen(!isFull)
-            this.fullscreen = !isFull;
-        },
-        isFullscreen: function (){
-          return document.fullscreenElement ||
-            document.msFullscreenElement  ||
-            document.mozFullScreenElement ||
-            document.webkitFullscreenElement || false;
-        }
-    },
-    destroyed() {
-      if (this.jessibuca) {
-        this.jessibuca.destroy();
-      }
-      this.playing = false;
-      this.loaded = false;
-      this.performance = "";
-    },
-}
-</script>
-
-<style>
-  .buttons-box{
-    width: 100%;
-    height: 28px;
-    background-color: rgba(43, 51, 63, 0.7);
-    position: absolute;
-    display: -webkit-box;
-    display: -ms-flexbox;
-    display: flex;
-    left: 0;
-    bottom: 0;
-    user-select: none;
-    z-index: 10;
-  }
-  .jessibuca-btn{
-    width: 20px;
-    color: rgb(255, 255, 255);
-    line-height: 27px;
-    margin: 0px 10px;
-    padding: 0px 2px;
-    cursor: pointer;
-    text-align: center;
-    font-size: 0.8rem !important;
-  }
-  .buttons-box-right {
-    position: absolute;
-    right: 0;
-  }
-</style>
diff --git a/web_src/src/components/dialog/onvifEdit.vue b/web_src/src/components/dialog/onvifEdit.vue
deleted file mode 100644
index c853294..0000000
--- a/web_src/src/components/dialog/onvifEdit.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div id="onvif搜索" v-loading="isLoging">
-    <el-dialog
-      title="onvif搜索"
-      width="40%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
-        <el-form ref="form" :rules="rules" :model="form" label-width="140px" >
-          <el-form-item label="地址" prop="hostName" >
-            <el-select v-model="form.hostName" style="float: left; width: 100%" >
-              <el-option
-                v-for="item in hostNames"
-                :key="item"
-                :label="item.replace('http://', '')"
-                :value="item">
-              </el-option>
-            </el-select>
-
-          </el-form-item>
-          <el-form-item label="用户名" prop="username">
-            <el-input v-model="form.username" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="密码" prop="password">
-            <el-input v-model="form.password" clearable></el-input>
-          </el-form-item>
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit" >确认</el-button>
-              <el-button @click="close">取消</el-button>
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "onvifEdit",
-  props: {},
-  computed: {},
-  created() {},
-  data() {
-    return {
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      hostNames:[],
-      form: {
-        hostName: null,
-        username: "admin",
-        password: "admin123",
-      },
-
-      rules: {
-        hostName: [{ required: true, message: "请选择", trigger: "blur" }],
-        username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
-        password: [{ required: true, message: "请输入密码", trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    openDialog: function (hostNamesParam, callback) {
-      console.log(hostNamesParam)
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-      if (hostNamesParam != null) {
-        this.hostNames = hostNamesParam;
-      }
-
-    },
-    onSubmit: function () {
-      console.log("onSubmit");
-      console.log(this.form);
-      this.$axios({
-        method: 'get',
-        url:`api/onvif/rtsp`,
-        params: {
-          hostname: this.form.hostName,
-          timeout: 3000,
-          username: this.form.username,
-          password: this.form.password,
-        }
-      }).then((res) => {
-        console.log(res.data)
-        if (res.data.code == 0) {
-          if (res.data.data != null) {
-            this.listChangeCallback(res.data.data)
-          }else {
-            this.$message({
-              showClose: true,
-              message: res.data.msg,
-              type: "error",
-            });
-          }
-
-        }else {
-          this.$message({
-            showClose: true,
-            message: res.data.msg,
-            type: "error",
-          });
-        }
-      }).catch(function (error) {
-        console.log(error);
-      });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.$refs.form.resetFields();
-    },
-  },
-};
-</script>
diff --git a/web_src/src/components/dialog/platformEdit.vue b/web_src/src/components/dialog/platformEdit.vue
deleted file mode 100644
index 38a2aef..0000000
--- a/web_src/src/components/dialog/platformEdit.vue
+++ /dev/null
@@ -1,471 +0,0 @@
-<template>
-  <div id="addlatform" v-loading="isLoging">
-    <el-dialog
-      title="添加平台"
-      width="70%"
-      top="2rem"
-      :close-on-click-modal="false"
-      :visible.sync="showDialog"
-      :destroy-on-close="true"
-      @close="close()"
-    >
-      <div id="shared" style="text-align: right; margin-top: 1rem">
-        <el-row :gutter="24">
-          <el-col :span="11">
-            <el-form ref="platform1" :rules="rules" :model="platform" label-width="160px">
-              <el-form-item label="名称" prop="name">
-                <el-input v-model="platform.name"></el-input>
-              </el-form-item>
-              <el-form-item label="SIP服务国标编码" prop="serverGBId">
-                <el-input v-model="platform.serverGBId" clearable @input="serverGBIdChange"></el-input>
-              </el-form-item>
-              <el-form-item label="SIP服务国标域" prop="serverGBDomain">
-                <el-input v-model="platform.serverGBDomain" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="SIP服务IP" prop="serverIP">
-                <el-input v-model="platform.serverIP" clearable></el-input>
-              </el-form-item>
-              <el-form-item label="SIP服务端口" prop="serverPort">
-                <el-input v-model="platform.serverPort" clearable type="number"></el-input>
-              </el-form-item>
-              <el-form-item label="设备国标编号" prop="deviceGBId">
-                <el-input v-model="platform.deviceGBId" clearable @input="deviceGBIdChange"></el-input>
-              </el-form-item>
-              <el-form-item label="本地IP" prop="deviceIp">
-                <el-input v-model="platform.deviceIp" :disabled="true"></el-input>
-              </el-form-item>
-              <el-form-item label="本地端口" prop="devicePort">
-                <el-input v-model="platform.devicePort" :disabled="true" type="number"></el-input>
-              </el-form-item>
-            </el-form>
-          </el-col>
-          <el-col :span="12">
-            <el-form ref="platform2" :rules="rules" :model="platform" label-width="160px">
-              <el-form-item label="SIP认证用户名" prop="username">
-                <el-input v-model="platform.username"></el-input>
-              </el-form-item>
-              <el-form-item label="SIP认证密码" prop="password">
-                <el-input v-model="platform.password" ></el-input>
-              </el-form-item>
-              <el-form-item label="注册周期(秒)" prop="expires">
-                <el-input v-model="platform.expires"></el-input>
-              </el-form-item>
-              <el-form-item label="心跳周期(秒)" prop="keepTimeout">
-                <el-input v-model="platform.keepTimeout"></el-input>
-              </el-form-item>
-              <el-form-item label="信令传输" prop="transport">
-                <el-select
-                  v-model="platform.transport"
-                  style="width: 100%"
-                  placeholder="请选择信令传输方式"
-                >
-                  <el-option label="UDP" value="UDP"></el-option>
-                  <el-option label="TCP" value="TCP"></el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="字符集" prop="characterSet">
-                <el-select
-                  v-model="platform.characterSet"
-                  style="width: 100%"
-                  placeholder="请选择字符集"
-                >
-                  <el-option label="GB2312" value="GB2312"></el-option>
-                  <el-option label="UTF-8" value="UTF-8"></el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="其他选项">
-                <el-checkbox label="启用" v-model="platform.enable" @change="checkExpires"></el-checkbox>
-                <el-checkbox label="云台控制" v-model="platform.ptz"></el-checkbox>
-                <el-checkbox label="共享所有直播流" v-model="platform.shareAllLiveStream"></el-checkbox>
-              </el-form-item>
-              <el-form-item>
-                <el-button type="primary" @click="onSubmit">{{
-                  onSubmit_text
-                }}</el-button>
-                <el-button @click="close">取消</el-button>
-              </el-form-item>
-            </el-form>
-          </el-col>
-        </el-row>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "platformEdit",
-  props: {},
-  computed: {},
-  data() {
-    var deviceGBIdRules = async (rule, value, callback) => {
-      console.log(value);
-      if (value === "") {
-        callback(new Error("请输入设备国标编号"));
-      } else {
-        var exit = await this.deviceGBIdExit(value);
-        if (exit) {
-          callback(new Error("设备国标编号已存在"));
-        } else {
-          callback();
-        }
-      }
-    };
-    return {
-      listChangeCallback: null,
-      showDialog: false,
-      isLoging: false,
-      onSubmit_text: "立即创建",
-      saveUrl: "/api/platform/save",
-
-      platform: {
-        id: null,
-        enable: true,
-        ptz: true,
-        rtcp: false,
-        name: null,
-        serverGBId: null,
-        serverGBDomain: null,
-        serverIP: null,
-        serverPort: null,
-        deviceGBId: null,
-        deviceIp: null,
-        devicePort: null,
-        username: null,
-        password: null,
-        expires: 300,
-        keepTimeout: 60,
-        transport: "UDP",
-        characterSet: "GB2312",
-        shareAllLiveStream: false,
-      },
-      rules: {
-        name: [{ required: true, message: "请输入平台名称", trigger: "blur" }],
-        serverGBId: [
-          { required: true, message: "请输入SIP服务国标编码", trigger: "blur" },
-        ],
-        serverGBDomain: [
-          { required: true, message: "请输入SIP服务国标域", trigger: "blur" },
-        ],
-        serverIP: [{ required: true, message: "请输入SIP服务IP", trigger: "blur" }],
-        serverPort: [{ required: true, message: "请输入SIP服务端口", trigger: "blur" }],
-        deviceGBId: [{ validator: deviceGBIdRules, trigger: "blur" }],
-        username: [{ required: false, message: "请输入SIP认证用户名", trigger: "blur" }],
-        password: [{ required: false, message: "请输入SIP认证密码", trigger: "blur" }],
-        expires: [{ required: true, message: "请输入注册周期", trigger: "blur" }],
-        keepTimeout: [{ required: true, message: "请输入心跳周期", trigger: "blur" }],
-        transport: [{ required: true, message: "请选择信令传输", trigger: "blur" }],
-        characterSet: [{ required: true, message: "请选择编码字符集", trigger: "blur" }],
-      },
-    };
-  },
-  methods: {
-    openDialog: function (platform, callback) {
-      var that = this;
-      if (platform == null) {
-        this.onSubmit_text = "立即创建";
-        this.saveUrl = "/api/platform/add";
-        this.$axios({
-          method: 'get',
-          url:`/api/platform/server_config`
-        }).then(function (res) {
-          console.log(res);
-          that.platform.deviceGBId = res.data.username;
-          that.platform.deviceIp = res.data.deviceIp;
-          that.platform.devicePort = res.data.devicePort;
-          that.platform.username = res.data.username;
-          that.platform.password = res.data.password;
-        }).catch(function (error) {
-          console.log(error);
-        });
-      }else {
-        this.platform.id = platform.id;
-        this.platform.enable = platform.enable;
-        this.platform.ptz = platform.ptz;
-        this.platform.rtcp = platform.rtcp;
-        this.platform.name = platform.name;
-        this.platform.serverGBId = platform.serverGBId;
-        this.platform.serverGBDomain = platform.serverGBDomain;
-        this.platform.serverIP = platform.serverIP;
-        this.platform.serverPort = platform.serverPort;
-        this.platform.deviceGBId = platform.deviceGBId;
-        this.platform.deviceIp = platform.deviceIp;
-        this.platform.devicePort = platform.devicePort;
-        this.platform.username = platform.username;
-        this.platform.password = platform.password;
-        this.platform.expires = platform.expires;
-        this.platform.keepTimeout = platform.keepTimeout;
-        this.platform.transport = platform.transport;
-        this.platform.characterSet = platform.characterSet;
-        this.platform.shareAllLiveStream = platform.shareAllLiveStream;
-        this.platform.catalogId = platform.catalogId;
-        this.onSubmit_text = "保存";
-        this.saveUrl = "/api/platform/save";
-      }
-      this.showDialog = true;
-      this.listChangeCallback = callback;
-    },
-    serverGBIdChange: function () {
-      if (this.platform.serverGBId.length > 10) {
-        this.platform.serverGBDomain = this.platform.serverGBId.substr(0, 10);
-      }
-    },
-    deviceGBIdChange: function () {
-
-      this.platform.username = this.platform.deviceGBId ;
-    },
-    onSubmit: function () {
-      var that = this;
-      that.$axios({
-        method: 'post',
-        url: this.saveUrl,
-        data: that.platform
-      }).then(function (res) {
-          if (res.data.code === 0) {
-            that.$message({
-              showClose: true,
-              message: "保存成功",
-              type: "success",
-            });
-            that.showDialog = false;
-            if (that.listChangeCallback != null) {
-              that.listChangeCallback();
-            }
-          }else {
-            that.$message({
-              showClose: true,
-              message: res.data.msg,
-              type: "error",
-            });
-          }
-        }).catch(function (error) {
-          console.log(error);
-        });
-    },
-    close: function () {
-      this.showDialog = false;
-      this.$refs.platform1.resetFields();
-      this.$refs.platform2.resetFields();
-      this.platform = {
-        id: null,
-        enable: true,
-        ptz: true,
-        rtcp: false,
-        name: null,
-        serverGBId: null,
-        serverGBDomain: null,
-        serverIP: null,
-        serverPort: null,
-        deviceGBId: null,
-        deviceIp: null,
-        devicePort: null,
-        username: null,
-        password: null,
-        expires: 300,
-        keepTimeout: 60,
-        transport: "UDP",
-        characterSet: "GB2312",
-        shareAllLiveStream: false,
-      }
-    },
-    deviceGBIdExit: async function (deviceGbId) {
-      var result = false;
-      var that = this;
-      await that.$axios({
-                method: 'post',
-                url:`/api/platform/exit/${deviceGbId}`})
-        .then(function (res) {
-          result = res.data;
-        })
-        .catch(function (error) {
-          console.log(error);
-        });
-      return result;
-    },
-    checkExpires: function() {
-      if (this.platform.enable && this.platform.expires == "0") {
-        this.platform.expires = "300";
-      }
-    }
-  },
-};
-</script>
-
-<style>
-/* 谷歌 */
-input::-webkit-outer-spin-button,
-input::-webkit-inner-spin-button {
-  -webkit-appearance: none;
-  appearance: none;
-  margin: 0;
-}
-/* 火狐 */
-input{
-  -moz-appearance:textfield;
-}
-.control-wrapper-not-used {
-  position: relative;
-  width: 6.25rem;
-  height: 6.25rem;
-  max-width: 6.25rem;
-  max-height: 6.25rem;
-  border-radius: 100%;
-  margin-top: 2.5rem;
-  margin-left: 0.5rem;
-  float: left;
-}
-
-.control-panel {
-  position: relative;
-  top: 0;
-  left: 5rem;
-  height: 11rem;
-  max-height: 11rem;
-}
-
-.control-btn {
-  display: flex;
-  justify-content: center;
-  position: absolute;
-  width: 44%;
-  height: 44%;
-  border-radius: 5px;
-  border: 1px solid #78aee4;
-  box-sizing: border-box;
-  transition: all 0.3s linear;
-}
-
-.control-btn i {
-  font-size: 20px;
-  color: #78aee4;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.control-round {
-  position: absolute;
-  top: 21%;
-  left: 21%;
-  width: 58%;
-  height: 58%;
-  background: #fff;
-  border-radius: 100%;
-}
-
-.control-round-inner {
-  position: absolute;
-  left: 13%;
-  top: 13%;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 70%;
-  height: 70%;
-  font-size: 40px;
-  color: #78aee4;
-  border: 1px solid #78aee4;
-  border-radius: 100%;
-  transition: all 0.3s linear;
-}
-
-.control-inner-btn {
-  position: absolute;
-  width: 60%;
-  height: 60%;
-  background: #fafafa;
-}
-
-.control-top {
-  top: -8%;
-  left: 27%;
-  transform: rotate(-45deg);
-  border-radius: 5px 100% 5px 0;
-}
-
-.control-top i {
-  transform: rotate(45deg);
-  border-radius: 5px 100% 5px 0;
-}
-
-.control-top .control-inner {
-  left: -1px;
-  bottom: 0;
-  border-top: 1px solid #78aee4;
-  border-right: 1px solid #78aee4;
-  border-radius: 0 100% 0 0;
-}
-
-.control-top .fa {
-  transform: rotate(45deg) translateY(-7px);
-}
-
-.control-left {
-  top: 27%;
-  left: -8%;
-  transform: rotate(45deg);
-  border-radius: 5px 0 5px 100%;
-}
-
-.control-left i {
-  transform: rotate(-45deg);
-}
-
-.control-left .control-inner {
-  right: -1px;
-  top: -1px;
-  border-bottom: 1px solid #78aee4;
-  border-left: 1px solid #78aee4;
-  border-radius: 0 0 0 100%;
-}
-
-.control-left .fa {
-  transform: rotate(-45deg) translateX(-7px);
-}
-
-.control-right {
-  top: 27%;
-  right: -8%;
-  transform: rotate(45deg);
-  border-radius: 5px 100% 5px 0;
-}
-
-.control-right i {
-  transform: rotate(-45deg);
-}
-
-.control-right .control-inner {
-  left: -1px;
-  bottom: -1px;
-  border-top: 1px solid #78aee4;
-  border-right: 1px solid #78aee4;
-  border-radius: 0 100% 0 0;
-}
-
-.control-right .fa {
-  transform: rotate(-45deg) translateX(7px);
-}
-
-.control-bottom {
-  left: 27%;
-  bottom: -8%;
-  transform: rotate(45deg);
-  border-radius: 0 5px 100% 5px;
-}
-
-.control-bottom i {
-  transform: rotate(-45deg);
-}
-
-.control-bottom .control-inner {
-  top: -1px;
-  left: -1px;
-  border-bottom: 1px solid #78aee4;
-  border-right: 1px solid #78aee4;
-  border-radius: 0 0 100% 0;
-}
-
-.control-bottom .fa {
-  transform: rotate(-45deg) translateY(7px);
-}
-</style>
diff --git a/web_src/src/components/dialog/rtcPlayer.vue b/web_src/src/components/dialog/rtcPlayer.vue
deleted file mode 100644
index 75c18f3..0000000
--- a/web_src/src/components/dialog/rtcPlayer.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-<template>
-    <div id="rtcPlayer">
-        <video id='webRtcPlayerBox' controls autoplay style="text-align:left;">
-            Your browser is too old which doesn't support HTML5 video.
-          </video>
-    </div>
-</template>
-
-<script>
-export default {
-    name: 'rtcPlayer',
-    data() {
-        return {
-            webrtcPlayer: null,
-            timer: null
-        };
-    },
-    props: ['videoUrl', 'error', 'hasaudio'],
-    mounted () {
-      let paramUrl = decodeURIComponent(this.$route.params.url)
-       this.$nextTick(() =>{
-         if (typeof (this.videoUrl) == "undefined") {
-           this.videoUrl = paramUrl;
-         }
-         console.log("初始化时的地址为: " + this.videoUrl)
-         this.play(this.videoUrl)
-        })
-    },
-    watch:{
-        videoUrl(newData, oldData){
-            this.pause();
-            this.play(newData);
-        },
-        immediate:true
-    },
-    methods: {
-        play: function (url) {
-            this.webrtcPlayer = new ZLMRTCClient.Endpoint({
-                element: document.getElementById('webRtcPlayerBox'),// video 标签
-                debug: true,// 是否打印日志
-                zlmsdpUrl: url,//流地址
-                simulecast: false,
-                useCamera: false,
-                audioEnable: false,
-                videoEnable: false,
-                recvOnly: true,
-            })
-            this.webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_ICE_CANDIDATE_ERROR,(e)=>{// ICE 协商出错
-                console.error('ICE 协商出错')
-                this.eventcallbacK("ICE ERROR", "ICE 协商出错")
-            });
-
-            this.webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_ON_REMOTE_STREAMS,(e)=>{//获取到了远端流,可以播放
-                console.error('播放成功',e.streams)
-                this.eventcallbacK("playing", "播放成功")
-            });
-
-            this.webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED,(e)=>{// offer anwser 交换失败
-                console.error('offer anwser 交换失败',e)
-                this.eventcallbacK("OFFER ANSWER ERROR ", "offer anwser 交换失败")
-                if (e.code ==-400 && e.msg=="流不存在"){
-                    console.log("111111")
-                    this.timer = setTimeout(()=>{
-                        this.webrtcPlayer.close();
-                        this.play(url)
-                    }, 100)
-
-                }
-            });
-
-            this.webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_ON_LOCAL_STREAM,(s)=>{// 获取到了本地流
-
-                // document.getElementById('selfVideo').srcObject=s;
-                this.eventcallbacK("LOCAL STREAM", "获取到了本地流")
-            });
-
-        },
-        pause: function () {
-            if (this.webrtcPlayer != null) {
-                this.webrtcPlayer.close();
-                this.webrtcPlayer = null;
-            }
-
-        },
-        eventcallbacK: function(type, message) {
-            console.log("player 事件回调")
-            console.log(type)
-            console.log(message)
-        }
-    },
-    destroyed() {
-        clearTimeout(this.timer);
-    },
-}
-</script>
-
-<style>
-    .LodingTitle {
-        min-width: 70px;
-    }
-    #rtcPlayer{
-        width: 100%;
-    }
-    #webRtcPlayerBox{
-        width: 100%;
-        max-height: 56vh;
-        background-color: #000;
-    }
-    /* 隐藏logo */
-    /* .iconqingxiLOGO {
-        display: none !important;
-    } */
-
-</style>
diff --git a/web_src/src/components/jessibuca.vue b/web_src/src/components/jessibuca.vue
deleted file mode 100644
index b66a9c6..0000000
--- a/web_src/src/components/jessibuca.vue
+++ /dev/null
@@ -1,317 +0,0 @@
-<template>
-  <div :id="'jessibuca'+idx" style="width: 100%; height: 100%">
-    <div :id="'container'+idx" ref="container" style="width: 100%; height: 100%; background-color: #000" @dblclick="fullscreenSwich">
-      <div class="buttons-box" :id="'buttonsBox'+idx">
-        <div class="buttons-box-left">
-          <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>
-          <i v-if="playing" class="iconfont icon-pause jessibuca-btn" @click="pause"></i>
-          <i class="iconfont icon-stop jessibuca-btn" @click="destroyButton"></i>
-          <i v-if="isNotMute" class="iconfont icon-audio-high jessibuca-btn" @click="jessibuca.mute()"></i>
-          <i v-if="!isNotMute" class="iconfont icon-audio-mute jessibuca-btn" @click="jessibuca.cancelMute()"></i>
-        </div>
-        <div class="buttons-box-right">
-          <span class="jessibuca-btn">{{kBps}} kb/s</span>
-<!--          <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->
-<!--          <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->
-          <i class="iconfont icon-camera1196054easyiconnet jessibuca-btn" @click="screenshot" style="font-size: 1rem !important"></i>
-          <i class="iconfont icon-shuaxin11 jessibuca-btn" @click="playBtnClick"></i>
-          <i v-if="!fullscreen" class="iconfont icon-weibiaoti10 jessibuca-btn" @click="fullscreenSwich"></i>
-          <i v-if="fullscreen" class="iconfont icon-weibiaoti11 jessibuca-btn" @click="fullscreenSwich"></i>
-        </div>
-    </div>
-
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-    name: 'jessibuca',
-    data() {
-        return {
-          jessibuca: null,
-          playing: false,
-          isNotMute: false,
-          quieting: false,
-          fullscreen: false,
-          loaded: false, // mute
-          speed: 0,
-          performance: "", // 工作情况
-          kBps: 0,
-          btnDom: null,
-          videoInfo: null,
-          volume: 1,
-          rotate: 0,
-          vod: true, // 点播
-          forceNoOffscreen: false,
-        };
-    },
-    props: ['videoUrl', 'error', 'hasAudio', 'height','idx'],
-    mounted () {
-      window.onerror = (msg) => {
-        // console.error(msg)
-      };
-      let paramUrl = decodeURIComponent(this.$route.params.url)
-       this.$nextTick(() =>{
-         let dom = document.getElementById("container"+this.idx);
-         // dom.style.height = (9/16 ) * dom.clientWidth + "px"
-          if (typeof (this.videoUrl) == "undefined") {
-            this.videoUrl = paramUrl;
-          }
-         this.btnDom = document.getElementById("buttonsBox"+this.idx);
-          console.log("初始化时的地址为: " + this.videoUrl)
-         this.play(this.videoUrl)
-        })
-    },
-    watch:{
-        videoUrl(newData, oldData){
-            this.play(newData)
-        },
-        immediate:true
-    },
-    methods: {
-        create(){
-          let options =  {};
-          console.log(this.$refs.container)
-          console.log("hasAudio  " + !!this.hasAudio)
-
-          this.jessibuca = new window.Jessibuca(Object.assign(
-            {
-              container: this.$refs.container,
-              videoBuffer: 0.2, // 最大缓冲时长,单位秒
-              isResize: true,
-              decoder: "./static/js/jessibuca/index.js",
-              // text: "WVP-PRO",
-              // background: "bg.jpg",
-              loadingText: "加载中",
-              hasAudio: !!this.hasAudio,
-              debug: false,
-              timeout:5,
-              supportDblclickFullscreen: false, // 是否支持屏幕的双击事件,触发全屏,取消全屏事件。
-              operateBtns: {
-                fullscreen: false,
-                screenshot: false,
-                play: false,
-                audio: false,
-              },
-              record: "record",
-              vod: this.vod,
-              forceNoOffscreen: this.forceNoOffscreen,
-              isNotMute: this.isNotMute,
-            },
-            options
-          ));
-
-          let _this = this;
-          this.jessibuca.on("load", function () {
-            console.log("on load init");
-          });
-
-          this.jessibuca.on("log", function (msg) {
-            console.log("on log", msg);
-          });
-          this.jessibuca.on("record", function (msg) {
-            console.log("on record:", msg);
-          });
-          this.jessibuca.on("pause", function () {
-            _this.playing = false;
-          });
-          this.jessibuca.on("play", function () {
-            _this.playing = true;
-          });
-          this.jessibuca.on("fullscreen", function (msg) {
-            console.log("on fullscreen", msg);
-            _this.fullscreen = msg
-          });
-
-          this.jessibuca.on("mute", function (msg) {
-            console.log("on mute", msg);
-            _this.isNotMute = !msg;
-          });
-          this.jessibuca.on("audioInfo", function (msg) {
-            // console.log("audioInfo", msg);
-          });
-
-          this.jessibuca.on("videoInfo", function (msg) {
-            this.videoInfo = msg;
-            // console.log("videoInfo", msg);
-
-          });
-
-          this.jessibuca.on("bps", function (bps) {
-            // console.log('bps', bps);
-
-          });
-          let _ts = 0;
-          this.jessibuca.on("timeUpdate", function (ts) {
-            // console.log('timeUpdate,old,new,timestamp', _ts, ts, ts - _ts);
-            _ts = ts;
-          });
-
-          this.jessibuca.on("videoInfo", function (info) {
-            console.log("videoInfo", info);
-          });
-
-          this.jessibuca.on("error",  (error) =>{
-            console.log("error", error);
-            this.pause()
-          });
-
-          this.jessibuca.on("timeout",  ()=> {
-            console.log("timeout");
-            // this.pause()
-            this.play(this.videoUrl)
-          });
-
-          this.jessibuca.on('start', function () {
-            console.log('start');
-          })
-
-          this.jessibuca.on("performance", function (performance) {
-            let show = "卡顿";
-            if (performance === 2) {
-              show = "非常流畅";
-            } else if (performance === 1) {
-              show = "流畅";
-            }
-            _this.performance = show;
-          });
-          this.jessibuca.on('buffer', function (buffer) {
-            // console.log('buffer', buffer);
-          })
-
-          this.jessibuca.on('stats', function (stats) {
-            // console.log('stats', stats);
-          })
-
-          this.jessibuca.on('kBps', function (kBps) {
-            _this.kBps = Math.round(kBps);
-          });
-
-          // 显示时间戳 PTS
-          this.jessibuca.on('videoFrame', function () {
-
-          })
-
-          //
-          this.jessibuca.on('metadata', function () {
-
-          });
-        },
-        playBtnClick: function (event){
-          this.play(this.videoUrl)
-        },
-        play: function (url) {
-          console.log(url)
-
-            if (this.jessibuca) {
-              this.destroy();
-            }
-          if(!url){
-            return
-          }
-            this.create();
-            this.jessibuca.on("play", () => {
-              this.playing = true;
-              this.loaded = true;
-              this.quieting = this.jessibuca.quieting;
-            });
-            if (this.jessibuca.hasLoaded()) {
-              this.jessibuca.play(url);
-            } else {
-              this.jessibuca.on("load", () => {
-                console.log("load 播放")
-                this.jessibuca.play(url);
-              });
-            }
-        },
-        pause: function () {
-          if (this.jessibuca) {
-            this.jessibuca.pause();
-          }
-          this.playing = false;
-          this.err = "";
-          this.performance = "";
-        },
-        destroy: function () {
-          if (this.jessibuca) {
-            this.jessibuca.destroy();
-          }
-          if (document.getElementById("buttonsBox"+this.idx) == null) {
-            document.getElementById("container"+this.idx).appendChild(this.btnDom)
-          }
-          this.jessibuca = null;
-          this.playing = false;
-          this.err = "";
-          this.performance = "";
-
-        },
-        eventcallbacK: function(type, message) {
-            // console.log("player 事件回调")
-            // console.log(type)
-            // console.log(message)
-        },
-        fullscreenSwich: function (){
-            let isFull = this.isFullscreen()
-            this.jessibuca.setFullscreen(!isFull)
-            this.fullscreen = !isFull;
-        },
-        isFullscreen: function (){
-          return document.fullscreenElement ||
-            document.msFullscreenElement  ||
-            document.mozFullScreenElement ||
-            document.webkitFullscreenElement || false;
-        },
-      resize(){
-          this.jessibuca.resize()
-      },
-      screenshot(){
-        this.jessibuca.screenshot('截图','png',0.5)
-        // let base64 = this.jessibuca.screenshot("shot","jpeg",0.5,'base64')
-        // this.$emit('screenshot',base64)
-      },
-      destroyButton() {
-        this.$emit('destroy', this.idx)
-        this.destroy()
-      }
-    },
-    destroyed() {
-      if (this.jessibuca) {
-        this.jessibuca.destroy();
-      }
-      this.playing = false;
-      this.loaded = false;
-      this.performance = "";
-    },
-}
-</script>
-
-<style>
-  .buttons-box{
-    width: 100%;
-    height: 28px;
-    background-color: rgba(43, 51, 63, 0.7);
-    position: absolute;
-    display: -webkit-box;
-    display: -ms-flexbox;
-    display: flex;
-    left: 0;
-    bottom: 0;
-    user-select: none;
-    z-index: 10;
-  }
-  .jessibuca-btn{
-    width: 20px;
-    color: rgb(255, 255, 255);
-    line-height: 27px;
-    margin: 0px 10px;
-    padding: 0px 2px;
-    cursor: pointer;
-    text-align: center;
-    font-size: 0.8rem !important;
-  }
-  .buttons-box-right {
-    position: absolute;
-    right: 0;
-  }
-</style>
diff --git a/web_src/src/components/live.vue b/web_src/src/components/live.vue
deleted file mode 100644
index beab9e4..0000000
--- a/web_src/src/components/live.vue
+++ /dev/null
@@ -1,357 +0,0 @@
-<template>
-  <div id="devicePosition" style="height: 100%">
-    <el-container style="height: 100%">
-      <el-header>
-        <uiHeader></uiHeader>
-      </el-header>
-      <el-container v-loading="loading" element-loading-text="拼命加载中">
-        <el-aside width="300px" style="background-color: #ffffff">
-          <div style="text-align: center;padding-top: 20px;">设备列表</div>
-          <el-menu  v-loading="loading">
-            <el-submenu v-for="device in deviceList" :key="device.deviceId" :index="device.deviceId" @click="sendDevicePush(item)">
-              <template slot="title" >
-                <i class="el-icon-location-outline"></i>
-                {{device.name}}
-              </template>
-              <ChannelTree :device="device" @sendDevicePush="sendDevicePush"></ChannelTree>
-            </el-submenu>
-          </el-menu>
-        </el-aside>
-          <el-container>
-            <!-- <LivePlay></LivePlay> -->
-            <el-header height="40px" style="text-align: left;font-size: 17px;line-height: 40px;">
-              分屏:
-              <i class="el-icon-full-screen btn" :class="{active:spilt==1}" @click="spilt=1"/>
-              <i class="el-icon-menu btn" :class="{active:spilt==4}" @click="spilt=4"/>
-              <i class="el-icon-s-grid btn" :class="{active:spilt==9}" @click="spilt=9"/>
-            </el-header>
-            <el-main>
-              <div style="width: 100%;height: calc( 100vh - 110px );display: flex;flex-wrap: wrap;background-color: #000;">
-                <div v-for="i in spilt" :key="i" class="play-box"
-                    :style="liveStyle" :class="{redborder:playerIdx == (i-1)}"
-                    @click="playerIdx = (i-1)"
-                >
-                  <div v-if="!videoUrl[i-1]" style="color: #ffffff;font-size: 30px;font-weight: bold;">{{i}}</div>
-                  <player v-else :ref="'player'+i" :videoUrl="videoUrl[i-1]"  fluent autoplay :height="true"
-                          :idx="'player'+i" @screenshot="shot" @destroy="destroy"></player>
-                  <!-- <player v-else ref="'player'+i" :idx="'player'+i" :visible.sync="showVideoDialog" :videoUrl="videoUrl[i-1]"  :height="true" :hasAudio="hasAudio" fluent autoplay live ></player> -->
-                </div>
-              </div>
-            </el-main>
-          </el-container>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-
-<script>
-  import uiHeader from "./UiHeader.vue";
-  import player from './jessibuca.vue'
-  import ChannelTree from './channelTree.vue'
-
-  export default {
-    name: "live",
-    components: {
-      uiHeader, player, ChannelTree
-    },
-    data() {
-      return {
-        showVideoDialog: true,
-        hasAudio: false,
-        videoUrl:[''],
-        spilt:1,//分屏
-        playerIdx:0,//激活播放器
-
-        deviceList: [], //设备列表
-        currentDevice: {}, //当前操作设备对象
-
-        videoComponentList: [],
-        updateLooper: 0, //数据刷新轮训标志
-        currentDeviceChannelsLenth:0,
-        winHeight: window.innerHeight - 200,
-        currentPage:1,
-        count:15,
-        total:0,
-        getDeviceListLoading: false,
-
-        //channel
-        searchSrt: "",
-        channelType: "",
-        online: "",
-        channelTotal:0,
-        deviceChannelList:[],
-        loading:false
-      };
-    },
-    mounted() {
-      this.initData();
-
-    },
-    created(){
-      this.checkPlayByParam()
-    },
-
-    computed:{
-      liveStyle(){
-        if(this.spilt==1){
-          return {width:'100%',height:'100%'}
-        }else if(this.spilt==4){
-          return {width:'49%',height:'49%'}
-        }else if(this.spilt==9){
-          return {width:'32%',height:'32%'}
-        }
-      }
-    },
-    watch:{
-      spilt(newValue){
-        console.log("切换画幅;"+newValue)
-        let that = this
-        for (let i = 1; i <= newValue; i++) {
-          if(!that.$refs['player'+i]){
-            continue
-          }
-          this.$nextTick(()=>{
-            if(that.$refs['player'+i] instanceof Array){
-              that.$refs['player'+i][0].resize()
-            }else {
-              that.$refs['player'+i].resize()
-            }
-          })
-
-        }
-        window.localStorage.setItem('split',newValue)
-      },
-      '$route.fullPath':'checkPlayByParam'
-    },
-    destroyed() {
-      clearTimeout(this.updateLooper);
-    },
-    methods: {
-      initData: function () {
-        this.getDeviceList();
-
-      },
-      destroy(idx) {
-        console.log(idx);
-        this.clear(idx.substring(idx.length-1))
-      },
-      getDeviceList: function() {
-        let that = this;
-        this.$axios({
-          method: 'get',
-          url:`/api/device/query/devices`,
-          params: {
-            page: that.currentPage,
-            count: that.count
-          }
-        }).then(function (res) {
-          console.log(res.data.list);
-          that.total = res.data.total;
-
-          that.deviceList = res.data.list.map(item=>{return {deviceChannelList:[],...item}});
-          that.getDeviceListLoading = false;
-        }).catch(function (error) {
-          console.log(error);
-          that.getDeviceListLoading = false;
-        });
-      },
-      //通知设备上传媒体流
-      sendDevicePush: function (itemData) {
-        if(itemData.status===0){
-          this.$message.error('设备离线!');
-          return
-        }
-        this.save(itemData)
-        let deviceId = itemData.deviceId;
-        // this.isLoging = true;
-        let channelId = itemData.channelId;
-        console.log("通知设备推流1:" + deviceId + " : " + channelId );
-        let idxTmp = this.playerIdx
-        let that = this;
-        this.loading = true
-        this.$axios({
-          method: 'get',
-          url: '/api/play/start/' + deviceId + '/' + channelId
-        }).then(function (res) {
-          // that.isLoging = false;
-          console.log('=====----=====')
-          console.log(res)
-          if (res.data.code == 0 && res.data.data) {
-            itemData.playUrl = res.data.data.httpsFlv
-            that.setPlayUrl(res.data.data.ws_flv,idxTmp)
-          }else {
-            that.$message.error(res.data.msg);
-          }
-        }).catch(function (e) {
-        }).finally(()=>{
-          that.loading = false
-        });
-      },
-      setPlayUrl(url,idx){
-        this.$set(this.videoUrl,idx,url)
-        let _this = this
-        setTimeout(()=>{
-          window.localStorage.setItem('videoUrl',JSON.stringify(_this.videoUrl))
-        },100)
-
-      },
-      checkPlayByParam(){
-        let {deviceId,channelId} = this.$route.query
-        if(deviceId && channelId){
-          this.sendDevicePush({deviceId,channelId})
-        }
-      },
-      convertImageToCanvas(image) {
-        var canvas = document.createElement("canvas");
-        canvas.width = image.width;
-        canvas.height = image.height;
-        canvas.getContext("2d").drawImage(image, 0, 0);
-        return canvas;
-      },
-      shot(e){
-        // console.log(e)
-        // send({code:'image',data:e})
-        var base64ToBlob = function(code) {
-          let parts = code.split(';base64,');
-          let contentType = parts[0].split(':')[1];
-          let raw = window.atob(parts[1]);
-          let rawLength = raw.length;
-          let uInt8Array = new Uint8Array(rawLength);
-          for(let i = 0; i < rawLength; ++i) {
-              uInt8Array[i] = raw.charCodeAt(i);
-          }
-          return new Blob([uInt8Array], {
-              type: contentType
-          });
-        };
-        let aLink = document.createElement('a');
-        let blob = base64ToBlob(e); //new Blob([content]);
-        let evt = document.createEvent("HTMLEvents");
-        evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
-        aLink.download = '截图';
-        aLink.href = URL.createObjectURL(blob);
-        aLink.click();
-      },
-      save(item){
-        let dataStr = window.localStorage.getItem('playData') || '[]'
-        let data = JSON.parse(dataStr);
-        data[this.playerIdx] = item
-        window.localStorage.setItem('playData',JSON.stringify(data))
-      },
-      clear(idx) {
-        let dataStr = window.localStorage.getItem('playData') || '[]'
-        let data = JSON.parse(dataStr);
-        data[idx-1] = null;
-        console.log(data);
-        window.localStorage.setItem('playData',JSON.stringify(data))
-      },
-      loadAndPlay(){
-        let dataStr = window.localStorage.getItem('playData') || '[]'
-        let data = JSON.parse(dataStr);
-
-        data.forEach((item,i)=>{
-          if(item){
-            this.playerIdx = i
-            this.sendDevicePush(item)
-          }
-        })
-      }
-    }
-  };
-</script>
-<style>
-  .btn{
-    margin: 0 10px;
-
-  }
-  .btn:hover{
-      color: #409EFF;
-  }
-  .btn.active{
-    color: #409EFF;
-
-  }
-  .redborder{
-    border: 2px solid red !important;
-  }
-  .play-box{
-    background-color: #000000;
-    border: 2px solid #505050;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-  }
-</style>
-<style>
-  .videoList {
-    display: flex;
-    flex-wrap: wrap;
-    align-content: flex-start;
-  }
-
-  .video-item {
-    position: relative;
-    width: 15rem;
-    height: 10rem;
-    margin-right: 1rem;
-    background-color: #000000;
-  }
-
-  .video-item-img {
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    margin: auto;
-    width: 100%;
-    height: 100%;
-  }
-
-  .video-item-img:after {
-    content: "";
-    display: inline-block;
-    position: absolute;
-    z-index: 2;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    margin: auto;
-    width: 3rem;
-    height: 3rem;
-    background-image: url("../assets/loading.png");
-    background-size: cover;
-    background-color: #000000;
-  }
-
-  .video-item-title {
-    position: absolute;
-    bottom: 0;
-    color: #000000;
-    background-color: #ffffff;
-    line-height: 1.5rem;
-    padding: 0.3rem;
-    width: 14.4rem;
-  }
-
-  .baidumap {
-    width: 100%;
-    height: 100%;
-    border: none;
-    position: absolute;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    margin: auto;
-  }
-
-  /* 去除百度地图版权那行字 和 百度logo */
-  .baidumap > .BMap_cpyCtrl {
-    display: none !important;
-  }
-  .baidumap > .anchorBL {
-    display: none !important;
-  }
-</style>
diff --git a/web_src/src/components/service/MediaServer.js b/web_src/src/components/service/MediaServer.js
deleted file mode 100644
index 36474ea..0000000
--- a/web_src/src/components/service/MediaServer.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import axios from 'axios';
-
-class MediaServer{
-
-  constructor() {
-    this.$axios = axios;
-  }
-
-  getOnlineMediaServerList(callback){
-    this.$axios({
-      method: 'get',
-      url:`/api/server/media_server/online/list`,
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-  getMediaServerList(callback){
-    this.$axios({
-      method: 'get',
-      url:`/api/server/media_server/list`,
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-
-  getMediaServer(id, callback){
-    this.$axios({
-      method: 'get',
-      url:`/api/server/media_server/one/` + id,
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-
-  checkServer(param, callback){
-    this.$axios({
-      method: 'get',
-      url:`/api/server/media_server/check`,
-      params: {
-        ip: param.ip,
-        port: param.httpPort,
-        secret: param.secret
-      }
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-
-  checkRecordServer(param, callback){
-    this.$axios({
-      method: 'get',
-      url:`/api/server/media_server/record/check`,
-      params: {
-        ip: param.ip,
-        port: param.recordAssistPort
-      }
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-
-  addServer(param, callback){
-    this.$axios({
-      method: 'post',
-      url:`/api/server/media_server/save`,
-      data: param
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-
-  delete(id, callback) {
-    this.$axios({
-      method: 'delete',
-      url:`/api/server/media_server/delete`,
-      params: {
-        id: id
-      }
-    }).then(function (res) {
-      if (typeof (callback) == "function") callback(res.data)
-    }).catch(function (error) {
-      console.log(error);
-    });
-  }
-}
-
-export default MediaServer;
diff --git a/web_src/src/components/setting/Media.vue b/web_src/src/components/setting/Media.vue
deleted file mode 100644
index cfc4e12..0000000
--- a/web_src/src/components/setting/Media.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-<template>
-  <div id="SettingForMedia">
-  <el-container>
-    <el-header>
-      <uiHeader></uiHeader>
-    </el-header>
-    <el-main>
-      <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-        <span style="font-size: 1rem; font-weight: bold;">媒体服务</span>
-      </div>
-      <div style="width: 60%; margin:0 auto; background-color: #FFFFFF; position: relative; padding: 5rem 6.5rem; text-align: left;font-size: 14px; max-width: 400px">
-        <el-form ref="form" :rules="rules" :model="form" label-width="140px">
-          <el-form-item label="IP" prop="IP">
-            <el-input v-model="form.IP" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="公网IP" prop="wanIp">
-            <el-input v-model="form.wanIp" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="HOOK IP" prop="hookIp">
-            <el-input v-model="form.hookIp" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="HTTP端口" >
-            <el-input v-model.number="form.httpPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="HTTP SSL端口" >
-            <el-input v-model.number="form.httpSSlPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="RTMP端口" >
-            <el-input v-model.number="form.rtmpPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="RTMP SSL端口" >
-            <el-input v-model.number="form.rtmpSSlPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="RTSP端口" >
-            <el-input v-model.number="form.rtspPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="RTSP SSL端口" >
-            <el-input v-model.number="form.rtspSSLPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="RTP端口" >
-            <el-input v-model.number="form.rtpProxyPort" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="自动点播" >
-            <el-switch v-model="form.autoApplyPlay"></el-switch>
-          </el-form-item>
-          <el-form-item label="接口密钥" prop="secret">
-            <el-input v-model="form.secret" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="无人观看触发时长" >
-            <el-input v-model.number="form.streamNoneReaderDelayMS" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="自动配置" >
-            <el-switch v-model="form.autoConfig"></el-switch>
-          </el-form-item>
-          <el-form-item label="使用多端口" >
-            <el-switch v-model="form.rtp.enable"></el-switch>
-          </el-form-item>
-          <el-form-item label="端口范围" >
-            <el-input v-model.number="form.rtp.portRange" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="DOCKER智能识别">
-            <el-input type="textarea" v-model="dockerStr"></el-input>
-          </el-form-item>
-
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit">保存</el-button>
-<!--              <el-button @click="close">取消</el-button>-->
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-
-
-    </el-main>
-  </el-container>
-  </div>
-</template>
-
-<script>
-import uiHeader from '../UiHeader.vue'
-export default {
-  name: "SettingForMedia",
-  components: {
-    uiHeader
-  },
-  data() {
-    return {
-      dockerStr: null,
-      form: {
-        ip: null,
-        wanIp: null,
-        hookIp: null,
-        httpPort: null,
-        httpSSlPort: null,
-        rtmpPort: null,
-        rtpProxyPort: null,
-        rtspPort: null,
-        rtspSSLPort: null,
-        autoConfig: true,
-        secret: "035c73f7-bb6b-4889-a715-d9eb2d1925cc",
-        rtp: {
-          enable: false,
-          portRange: null
-        },
-      },
-
-      rules: {
-        IP: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        wanIp: [{ required: false, message: "请输入应用名", trigger: "blur" }],
-        hookIp: [{ required: false, message: "请输入流ID", trigger: "blur" }],
-      },
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/web_src/src/components/setting/Sip.vue b/web_src/src/components/setting/Sip.vue
deleted file mode 100644
index 3d5d8d5..0000000
--- a/web_src/src/components/setting/Sip.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <div id="SettingForSip">
-  <el-container>
-    <el-header>
-      <uiHeader></uiHeader>
-    </el-header>
-    <el-main>
-      <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-        <span style="font-size: 1rem; font-weight: bold;">国标服务</span>
-      </div>
-      <div style="width: 60%; margin:0 auto; background-color: #FFFFFF; position: relative; padding: 5rem 6.5rem; text-align: left;font-size: 14px; max-width: 400px">
-        <el-form ref="form" :rules="rules" :model="form" label-width="140px">
-          <el-form-item label="ip" prop="ip">
-            <el-input v-model="form.ip" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="端口" prop="port">
-            <el-input v-model.number="form.port" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="域" prop="domain">
-            <el-input v-model="form.domain" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="id" prop="id">
-            <el-input v-model="form.id" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="密码" prop="password">
-            <el-input v-model="form.password" clearable></el-input>
-          </el-form-item>
-
-
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit">保存</el-button>
-<!--              <el-button @click="close">取消</el-button>-->
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-
-
-    </el-main>
-  </el-container>
-  </div>
-</template>
-
-<script>
-import uiHeader from '../UiHeader.vue'
-export default {
-  name: "SettingForSip",
-  components: {
-    uiHeader
-  },
-  data() {
-    return {
-      form: {
-        ip: null,
-        port: null,
-        domain: null,
-        id: null,
-        password: null,
-      },
-
-      rules: {
-        ip: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        port: [{ required: true, message: "请输入应用名", trigger: "blur" }],
-        domain: [{ required: true, message: "请输入流ID", trigger: "blur" }],
-        id: [{ required: true, message: "请输入国标编码", trigger: "blur" }],
-        password: [{ required: true, message: "请输入国标编码", trigger: "blur" }],
-      },
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/web_src/src/components/setting/Web.vue b/web_src/src/components/setting/Web.vue
deleted file mode 100644
index 5eb853a..0000000
--- a/web_src/src/components/setting/Web.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div id="SettingForWeb">
-  <el-container>
-    <el-header>
-      <uiHeader></uiHeader>
-    </el-header>
-    <el-main>
-      <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-        <span style="font-size: 1rem; font-weight: bold;">WEB服务</span>
-      </div>
-      <div style="width: 60%; margin:0 auto; background-color: #FFFFFF; position: relative; padding: 5rem 6.5rem; text-align: left;font-size: 14px; max-width: 400px">
-        <el-form ref="form" :rules="rules" :model="form" label-width="140px">
-          <el-form-item label="HTTP端口" prop="port">
-            <el-input v-model.number="form.port" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="点播超时" >
-            <el-input v-model.number="form.playTimeout" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="自动点播" >
-            <el-switch v-model="form.autoApplyPlay"></el-switch>
-          </el-form-item>
-          <el-form-item label="扩展SDP" >
-            <el-switch v-model="form.seniorSdp"></el-switch>
-          </el-form-item>
-          <el-form-item label="保存轨迹" >
-            <el-switch v-model="form.savePositionHistory"></el-switch>
-          </el-form-item>
-          <el-form-item label="等待音视频编码信息">
-            <el-switch v-model="form.waitTrack"></el-switch>
-          </el-form-item>
-          <el-form-item label="开启接口鉴权">
-            <el-switch v-model="form.interfaceAuthentication"></el-switch>
-          </el-form-item>
-
-          <el-form-item>
-            <div style="float: right;">
-              <el-button type="primary" @click="onSubmit">保存</el-button>
-<!--              <el-button @click="close">取消</el-button>-->
-            </div>
-
-          </el-form-item>
-        </el-form>
-      </div>
-
-
-    </el-main>
-  </el-container>
-  </div>
-</template>
-
-<script>
-import uiHeader from '../UiHeader.vue'
-export default {
-  name: "SettingForWeb",
-  components: {
-    uiHeader
-  },
-  data() {
-    return {
-      form: {
-        port: null,
-        autoApplyPlay: null,
-        seniorSdp: null,
-        savePositionHistory: null,
-        playTimeout: null,
-        waitTrack: null,
-        interfaceAuthentication: null,
-      },
-
-      rules: {
-        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
-        app: [{ required: true, message: "请输入应用名", trigger: "blur" }],
-        stream: [{ required: true, message: "请输入流ID", trigger: "blur" }],
-        gbId: [{ required: true, message: "请输入国标编码", trigger: "blur" }],
-      },
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/web_src/src/components/test.vue b/web_src/src/components/test.vue
deleted file mode 100644
index d780125..0000000
--- a/web_src/src/components/test.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-<template>
-<div id="test">
-  <div class="timeQuery" id="timeQuery">
-      <div class="timeQuery-background"  ></div>
-      <div class="timeQuery-pointer">
-        <div class="timeQuery-pointer-content" id="timeQueryPointer">
-          <div class="timeQuery-pointer-handle"  @mousedown.left="mousedownHandler" ></div>
-        </div>
-      </div>
-
-      <div class="timeQuery-data" >
-
-        <div class="timeQuery-data-cell" v-for="item of recordData" :style="'width:'  +  getDataWidth(item) + '%; left:' + getDataLeft(item) + '%'"  ></div>
-        <!--          <div class="timeQuery-data-cell" style="width: 30%; left: 20%" @click="timeChoose"></div>-->
-        <!--          <div class="timeQuery-data-cell" style="width: 60%; left: 20%" @click="timeChoose"></div>-->
-      </div>
-
-      <div class="timeQuery-label" >
-        <div class="timeQuery-label-cell" style="left: 0%">
-          <div class="timeQuery-label-cell-label">0</div>
-        </div>
-        <div v-for="index of timeNode" class="timeQuery-label-cell" :style="'left:' + (100.0/timeNode*index).toFixed(4) + '%'">
-          <div class="timeQuery-label-cell-label">{{24/timeNode * index}}</div>
-        </div>
-      </div>
-  </div>
-
-</div>
-</template>
-
-<script>
-export default {
-  name: "test",
-  data() {
-    return {
-      mouseDown: false,
-      timeNode: 24,
-      recordData:[
-        {
-          startTime: "2021-04-18 00:00:00",
-          endTime: "2021-04-18 00:00:09",
-        },
-        {
-          startTime: "2021-04-18 00:00:09",
-          endTime: "2021-04-18 01:00:05",
-        },
-        {
-          startTime: "2021-04-18 02:00:01",
-          endTime: "2021-04-18 04:25:05",
-        },
-        {
-          startTime: "2021-04-18 05:00:01",
-          endTime: "2021-04-18 20:00:05",
-        },
-      ]
-    };
-  },
-  mounted() {
-    document.body.addEventListener("mouseup", this.mouseupHandler, false)
-    document.body.addEventListener("mousemove", this.mousemoveHandler, false)
-  },
-  methods:{
-    getTimeNode(){
-      let mine = 20
-      let width = document.getElementById("timeQuery").offsetWidth
-      if (width/20 > 24){
-        return 24
-      }else if (width/20 > 12) {
-        return 12
-      }else if (width/20 > 6) {
-        return 6
-      }
-    },
-    timeChoose(event){
-      console.log(event)
-    },
-    getDataWidth(item){
-      let startTime = new Date(item.startTime);
-      let endTime = new Date(item.endTime);
-      let result = parseFloat((endTime.getTime() - startTime.getTime())/(24*60*60*10))
-      // console.log(result)
-      return parseFloat((endTime.getTime() - startTime.getTime())/(24*60*60*10))
-    },
-    getDataLeft(item){
-      let startTime = new Date(item.startTime);
-      let differenceTime = startTime.getTime() - new Date(item.startTime.substr(0,10) + " 00:00:00").getTime()
-      let result = differenceTime/(24*60*60*10)
-      console.log(differenceTime)
-      console.log(result)
-      return parseFloat(differenceTime/(24*60*60*10));
-    },
-    mousedownHandler(event){
-      this.mouseDown = true
-    },
-    mousemoveHandler(event){
-      if (this.mouseDown){
-        document.getElementById("timeQueryPointer").style.left = (event.clientX - 20)+ "px"
-      }
-    },
-    mouseupHandler(event){
-      this.mouseDown = false
-    }
-  }
-}
-</script>
-
-<style scoped>
-  .timeQuery{
-    width: 96%;
-    margin-left: 2%;
-    margin-right: 2%;
-    margin-top: 20%;
-    position: absolute;
-  }
-  .timeQuery-background{
-    height: 16px;
-    width: 100%;
-    background-color: #ececec;
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 10;
-    box-shadow: #9d9d9d 0px 0px 10px inset;
-  }
-  .timeQuery-data{
-    height: 16px;
-    width: 100%;
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 11;
-  }
-  .timeQuery-data-cell{
-    height: 10px;
-    background-color: #888787;
-    position: absolute;
-    z-index: 11;
-    -webkit-box-shadow: #9d9d9d 0px 0px 10px inset;
-    margin-top: 3px;
-    top: 100%;
-  }
-  .timeQuery-label{
-    height: 16px;
-    width: 100%;
-    position: absolute;
-    pointer-events: none;
-    left: 0;
-    top: 0;
-    z-index: 11;
-  }
-  .timeQuery-label-cell{
-    height: 16px;
-    position: absolute;
-    z-index: 12;
-    width: 0px;
-    border-right: 1px solid #b7b7b7;
-  }
-  .timeQuery-label-cell-label {
-    width: 23px;
-    text-align: center;
-    height: 18px;
-    margin-left: -10px;
-    margin-top: -30px;
-    color: #444;
-  }
-  .timeQuery-pointer{
-    width: 0px;
-    height: 18px;
-    position: absolute;
-    left: 0;
-  }
-  .timeQuery-pointer-content{
-    width: 0px;
-    height: 70px;
-    position: absolute;
-    border-right: 2px solid #f60303;
-    z-index: 14;
-    top: -30px;
-  }
-  .timeQuery-pointer-handle {
-    width: 0;
-    height: 0;
-    border-top: 12px solid transparent;
-    border-right: 12px solid transparent;
-    border-bottom: 20px solid #ff0909;
-    border-left: 12px solid transparent;
-    cursor: no-drop;
-    position: absolute;
-    left: -11px;
-    top: 50px;
-  }
-  /*.timeQuery-cell:after{*/
-  /*  content: "";*/
-  /*  height: 14px;*/
-  /*  border: 1px solid #e70303;*/
-  /*  position: absolute;*/
-  /*}*/
-</style>
diff --git a/web_src/src/components/test2.vue b/web_src/src/components/test2.vue
deleted file mode 100644
index 75f182e..0000000
--- a/web_src/src/components/test2.vue
+++ /dev/null
@@ -1,190 +0,0 @@
-<template>
-<div id="test2">
-  <div class="timeQuery" style="width: 100%; height: 300px" id="timeQuery">
-  </div>
-</div>
-</template>
-
-<script>
-
-import * as echarts from 'echarts';
-
-export default {
-  name: "test2",
-  data() {
-    return {
-    };
-  },
-  mounted() {
-    var base = +new Date("2021-02-02 00:00:00");
-    var oneDay = 24 * 3600 * 1000;
-
-    var data = [[base, 10]];
-
-    for (var i = 1; i < 24; i++) {
-      var now = new Date(base += oneDay);
-      data.push([
-        new Date("2021-02-02 " + i+":00:00"), 10
-      ]);
-    }
-    // 基于准备好的dom,初始化echarts实例
-    var myChart = echarts.init(document.getElementById('timeQuery'));
-    let option = {
-
-      toolbox: {
-        feature: {
-          dataZoom: {
-            yAxisIndex: 'none'
-          },
-          restore: {},
-          saveAsImage: {}
-        }
-      },
-      xAxis: {
-        type: 'time',
-        boundaryGap: false
-      },
-      yAxis: {
-        type: 'value',
-        show: false,
-        splitLine:{show: false},   //去除网格线
-        boundaryGap: [0, '100%']
-      },
-      dataZoom: [{
-        type: 'inside',
-        start: 0,
-        end: 20
-      }, {
-        start: 0,
-        end: 20
-      }],
-      series: [
-        {
-          name: '模拟数据',
-          type: 'line',
-          smooth: false,
-          symbol: 'none',
-          areaStyle: {},
-          data: data
-        }
-      ]
-    };
-    // 绘制图表
-      myChart.setOption(option);
-  },
-  methods:{
-    getTimeNode(){
-      let mine = 20
-      let width = document.getElementById("timeQuery").offsetWidth
-      if (width/20 > 24){
-        return 24
-      }else if (width/20 > 12) {
-        return 12
-      }else if (width/20 > 6) {
-        return 6
-      }
-    },
-    hoveEvent(event){
-      console.log(2222222)
-      console.log(event)
-    },
-    timeChoose(event){
-      console.log(event)
-    },
-    getDataWidth(item){
-      let startTime = new Date(item.startTime);
-      let endTime = new Date(item.endTime);
-      let result = parseFloat((endTime.getTime() - startTime.getTime())/(24*60*60*10))
-      // console.log(result)
-      return parseFloat((endTime.getTime() - startTime.getTime())/(24*60*60*10))
-    },
-    getDataLeft(item){
-      let startTime = new Date(item.startTime);
-      let differenceTime = startTime.getTime() - new Date(item.startTime.substr(0,10) + " 00:00:00").getTime()
-      let result = differenceTime/(24*60*60*10)
-      console.log(differenceTime)
-      console.log(result)
-      return parseFloat(differenceTime/(24*60*60*10));
-    }
-  }
-}
-</script>
-
-<style scoped>
-  .timeQuery{
-    width: 96%;
-    margin-left: 2%;
-    margin-right: 2%;
-    margin-top: 20%;
-    position: absolute;
-  }
-  .timeQuery-background{
-    height: 16px;
-    width: 100%;
-    background-color: #ececec;
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 10;
-    box-shadow: #9d9d9d 0px 0px 10px inset;
-  }
-  .timeQuery-data{
-    height: 16px;
-    width: 100%;
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 11;
-  }
-  .timeQuery-data-cell{
-    height: 10px;
-    background-color: #888787;
-    position: absolute;
-    z-index: 11;
-    -webkit-box-shadow: #9d9d9d 0px 0px 10px inset;
-    margin-top: 3px;
-  }
-  .timeQuery-label{
-    height: 16px;
-    width: 100%;
-    position: absolute;
-    pointer-events: none;
-    left: 0;
-    top: 0;
-    z-index: 11;
-  }
-  .timeQuery-label-cell{
-    height: 16px;
-    position: absolute;
-    z-index: 12;
-    width: 0px;
-    border-right: 1px solid #b7b7b7;
-  }
-  .timeQuery-label-cell-label {
-    width: 23px;
-    text-align: center;
-    height: 18px;
-    margin-left: -10px;
-    margin-top: -30px;
-    color: #444;
-  }
-  .timeQuery-pointer{
-    width: 0px;
-    height: 18px;
-    position: absolute;
-    left: 0;
-  }
-  .timeQuery-pointer-content{
-    width: 0px;
-    height: 16px;
-    position: absolute;
-    border-right: 3px solid #f60303;
-    z-index: 14;
-  }
-  /*.timeQuery-cell:after{*/
-  /*  content: "";*/
-  /*  height: 14px;*/
-  /*  border: 1px solid #e70303;*/
-  /*  position: absolute;*/
-  /*}*/
-</style>
diff --git a/web_src/src/main.js b/web_src/src/main.js
deleted file mode 100644
index d534d5f..0000000
--- a/web_src/src/main.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import Vue from 'vue';
-import App from './App.vue';
-Vue.config.productionTip = false;
-import ElementUI from 'element-ui';
-import 'element-ui/lib/theme-chalk/index.css';
-import router from './router/index.js';
-import axios from 'axios';
-import VueCookies from 'vue-cookies';
-import echarts from 'echarts';
-
-import VueClipboard from 'vue-clipboard2';
-import { Notification } from 'element-ui';
-import Fingerprint2 from 'fingerprintjs2';
-import VueClipboards from 'vue-clipboards';
-import Contextmenu from "vue-contextmenujs"
-
-
-// 生成唯一ID
-Fingerprint2.get(function(components) {
-  const values = components.map(function(component,index) {
-    if (index === 0) { //把微信浏览器里UA的wifi或4G等网络替换成空,不然切换网络会ID不一样
-      return component.value.replace(/\bNetType\/\w+\b/, '');
-    }
-    return component.value;
-  })
-  //console.log(values)  //使用的浏览器信息npm
-  // 生成最终id
-  let port = window.location.port;
-  console.log(port);
-  const fingerPrint = Fingerprint2.x64hash128(values.join(port), 31)
-  Vue.prototype.$browserId = fingerPrint;
-  console.log("唯一标识码:" + fingerPrint);
-});
-
-Vue.use(VueClipboard);
-Vue.use(ElementUI);
-Vue.use(VueCookies);
-Vue.use(VueClipboards);
-Vue.prototype.$axios = axios;
-Vue.prototype.$notify = Notification;
-Vue.use(Contextmenu);
-
-axios.defaults.baseURL = (process.env.NODE_ENV === 'development') ? process.env.BASE_API : "";
-
-// api 返回401自动回登陆页面
-axios.interceptors.response.use(function (response) {
-  // 对响应数据做点什么
-  return response;
-}, function (error) {
-  // 对响应错误做点什么
-  if (error.response.status === 401) {
-    console.log("Received 401 Response")
-    router.push('/login');
-  }
-  return Promise.reject(error);
-});
-
-Vue.prototype.$cookies.config(60*30);
-
-new Vue({
-	router: router,
-	render: h => h(App),
-}).$mount('#app')
diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js
deleted file mode 100644
index ad573cf..0000000
--- a/web_src/src/router/index.js
+++ /dev/null
@@ -1,115 +0,0 @@
-import Vue from 'vue'
-import VueRouter from 'vue-router'
-
-import control from '../components/control.vue'
-import deviceList from '../components/DeviceList.vue'
-import channelList from '../components/channelList.vue'
-import pushVideoList from '../components/PushVideoList.vue'
-import streamProxyList from '../components/StreamProxyList.vue'
-import devicePosition from  '../components/devicePosition.vue'
-import login from '../components/Login.vue'
-import parentPlatformList from '../components/ParentPlatformList.vue'
-import cloudRecord from '../components/CloudRecord.vue'
-import mediaServerManger from '../components/MediaServerManger.vue'
-import test from '../components/test.vue'
-import web from '../components/setting/Web.vue'
-import sip from '../components/setting/Sip.vue'
-import media from '../components/setting/Media.vue'
-import live from '../components/live.vue'
-
-import wasmPlayer from '../components/dialog/jessibuca.vue'
-import rtcPlayer from '../components/dialog/rtcPlayer.vue'
-
-const originalPush = VueRouter.prototype.push
-VueRouter.prototype.push = function push(location) {
-  return originalPush.call(this, location).catch(err => err)
-}
-
-Vue.use(VueRouter)
-
-
-export default new VueRouter({
-  mode:'hash',
-  routes: [
-    {
-      path: '/',
-      component: control,
-    },
-    {
-      path: '/live',
-      component: live,
-    },
-    {
-      path: '/deviceList',
-      component: deviceList,
-    },
-    {
-      path: '/pushVideoList',
-      component: pushVideoList,
-    },
-    {
-      path: '/streamProxyList',
-      component: streamProxyList,
-    },
-    {
-      path: '/login',
-      name: '登录',
-      component: login,
-    },
-    {
-      path: '/channelList/:deviceId/:parentChannelId/:count/:page',
-      name: 'channelList',
-      component: channelList,
-    },
-    {
-      path: '/parentPlatformList/:count/:page',
-      name: 'parentPlatformList',
-      component: parentPlatformList,
-    },
-    {
-      path: '/devicePosition/:deviceId/:parentChannelId/:count/:page',
-      name: 'devicePosition',
-      component: devicePosition,
-    },
-    {
-      path: '/cloudRecord',
-      name: 'cloudRecord',
-      component: cloudRecord,
-    },
-    {
-      path: '/mediaServerManger',
-      name: 'mediaServerManger',
-      component: mediaServerManger,
-    },
-    {
-      path: '/setting/web',
-      name: 'web',
-      component: web,
-    },
-    {
-      path: '/setting/sip',
-      name: 'sip',
-      component: sip,
-    },
-    {
-      path: '/setting/media',
-      name: 'media',
-      component: media,
-    },
-    {
-      path: '/test',
-      name: 'test',
-      component: test,
-    },
-    {
-      path: '/play/wasm/:url',
-      name: 'wasmPlayer',
-      component: wasmPlayer,
-    },
-    {
-      path: '/play/rtc/:url',
-      name: 'rtcPlayer',
-      component: rtcPlayer,
-    },
-  ]
-})
diff --git a/web_src/static/.gitkeep b/web_src/static/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/web_src/static/.gitkeep
+++ /dev/null
diff --git a/web_src/static/EasyPlayer.swf b/web_src/static/EasyPlayer.swf
deleted file mode 100644
index eaa53fb..0000000
--- a/web_src/static/EasyPlayer.swf
+++ /dev/null
Binary files differ
diff --git a/web_src/static/css/iconfont.css b/web_src/static/css/iconfont.css
deleted file mode 100644
index 0698271..0000000
--- a/web_src/static/css/iconfont.css
+++ /dev/null
@@ -1,1919 +0,0 @@
-@font-face {
-  font-family: "iconfont"; /* Project id 1291092 */
-  src: url('iconfont.woff2?t=1647245982270') format('woff2'),
-       url('iconfont.woff?t=1647245982270') format('woff'),
-       url('iconfont.ttf?t=1647245982270') format('truetype');
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-xitongxinxi:before {
-  content: "\e7d6";
-}
-
-.icon-gbaojings:before {
-  content: "\e7d7";
-}
-
-.icon-gjichus:before {
-  content: "\e7d8";
-}
-
-.icon-gxunjians:before {
-  content: "\e7d9";
-}
-
-.icon-ziyuan:before {
-  content: "\e7d5";
-}
-
-.icon-shexiangtou1:before {
-  content: "\e7d4";
-}
-
-.icon-wxbzhuye:before {
-  content: "\e7d1";
-}
-
-.icon-mulu:before {
-  content: "\e7d2";
-}
-
-.icon-zhibo:before {
-  content: "\e8c1";
-}
-
-.icon-shexiangtou:before {
-  content: "\e7d3";
-}
-
-.icon-suoxiao:before {
-  content: "\e79a";
-}
-
-.icon-shanchu3:before {
-  content: "\e79b";
-}
-
-.icon-chehui:before {
-  content: "\e79c";
-}
-
-.icon-wenben:before {
-  content: "\e79d";
-}
-
-.icon-zhongzuo:before {
-  content: "\e79e";
-}
-
-.icon-jianqie:before {
-  content: "\e79f";
-}
-
-.icon-fangda:before {
-  content: "\e7a0";
-}
-
-.icon-fangdazhanshi:before {
-  content: "\e7a1";
-}
-
-.icon-qianjin:before {
-  content: "\e7a2";
-}
-
-.icon-houtui:before {
-  content: "\e7a3";
-}
-
-.icon-diyigeshipin:before {
-  content: "\e7a4";
-}
-
-.icon-kuaijin:before {
-  content: "\e7a5";
-}
-
-.icon-kaishi:before {
-  content: "\e7a7";
-}
-
-.icon-zuihouyigeshipin:before {
-  content: "\e7a8";
-}
-
-.icon-zanting:before {
-  content: "\e7a9";
-}
-
-.icon-zhankai:before {
-  content: "\e7aa";
-}
-
-.icon-bendisucai:before {
-  content: "\e7ab";
-}
-
-.icon-luzhi:before {
-  content: "\e7ac";
-}
-
-.icon-ossziyuan:before {
-  content: "\e7ad";
-}
-
-.icon-chuangjianzhinengfenxirenwu:before {
-  content: "\e7ae";
-}
-
-.icon-sousuo3:before {
-  content: "\e7af";
-}
-
-.icon-gengduo:before {
-  content: "\e7b0";
-}
-
-.icon-tianjia:before {
-  content: "\e7b1";
-}
-
-.icon-xiazai:before {
-  content: "\e7b2";
-}
-
-.icon-biaojibeifen:before {
-  content: "\e7b3";
-}
-
-.icon-bendisucaibeifen:before {
-  content: "\e7b4";
-}
-
-.icon-luzhibeifen:before {
-  content: "\e7b5";
-}
-
-.icon-ossziyuanbeifen:before {
-  content: "\e7b6";
-}
-
-.icon-bianji3:before {
-  content: "\e7b7";
-}
-
-.icon-cuti:before {
-  content: "\e7b8";
-}
-
-.icon-xieti:before {
-  content: "\e7b9";
-}
-
-.icon-xiahuaxian:before {
-  content: "\e7ba";
-}
-
-.icon-wuxiaoguo:before {
-  content: "\e7bb";
-}
-
-.icon-sousuo4:before {
-  content: "\e7bc";
-}
-
-.icon-gouwuche:before {
-  content: "\e7bd";
-}
-
-.icon-shuaxin2:before {
-  content: "\e7be";
-}
-
-.icon-xiaoxi:before {
-  content: "\e7bf";
-}
-
-.icon-wushouquan:before {
-  content: "\e7c0";
-}
-
-.icon-tishi2:before {
-  content: "\e7c1";
-}
-
-.icon-tishi1:before {
-  content: "\e7c2";
-}
-
-.icon-shouquanchenggong:before {
-  content: "\e7c3";
-}
-
-.icon-sousuo5:before {
-  content: "\e7c4";
-}
-
-.icon-shuaxin3:before {
-  content: "\e7c5";
-}
-
-.icon-xiazai1:before {
-  content: "\e7c6";
-}
-
-.icon-shangchuan:before {
-  content: "\e7c7";
-}
-
-.icon-guanbi:before {
-  content: "\e7c8";
-}
-
-.icon-wangye-loading:before {
-  content: "\e7c9";
-}
-
-.icon-bianzubeifen3:before {
-  content: "\e7ca";
-}
-
-.icon-xingzhuangbeifen:before {
-  content: "\e7cb";
-}
-
-.icon-bianzubeifen:before {
-  content: "\e7cc";
-}
-
-.icon-zhuanchang:before {
-  content: "\e7cd";
-}
-
-.icon-meizi:before {
-  content: "\e7ce";
-}
-
-.icon-daimabeifen:before {
-  content: "\e7cf";
-}
-
-.icon-suoxiao1:before {
-  content: "\e7d0";
-}
-
-.icon-ai19:before {
-  content: "\e799";
-}
-
-.icon-online:before {
-  content: "\e600";
-}
-
-.icon-xiangqing2:before {
-  content: "\e798";
-}
-
-.icon-record:before {
-  content: "\e7a6";
-}
-
-.icon-audio-mute:before {
-  content: "\e792";
-}
-
-.icon-audio-high:before {
-  content: "\e793";
-}
-
-.icon-record1:before {
-  content: "\e7f8";
-}
-
-.icon-audio-line:before {
-  content: "\e794";
-}
-
-.icon-record2:before {
-  content: "\e795";
-}
-
-.icon-audio-fill:before {
-  content: "\e796";
-}
-
-.icon-PTZ:before {
-  content: "\e797";
-}
-
-.icon-camera1196054easyiconnet:before {
-  content: "\e791";
-}
-
-.icon-weibiaoti10:before {
-  content: "\e78f";
-}
-
-.icon-weibiaoti11:before {
-  content: "\e790";
-}
-
-.icon-page-next1:before {
-  content: "\e69c";
-}
-
-.icon-page-last1:before {
-  content: "\e69d";
-}
-
-.icon-ptz-down1:before {
-  content: "\e69e";
-}
-
-.icon-file-search1:before {
-  content: "\e69f";
-}
-
-.icon-page-first1:before {
-  content: "\e6a0";
-}
-
-.icon-fork1:before {
-  content: "\e6a1";
-}
-
-.icon-ptz-middle1:before {
-  content: "\e6a2";
-}
-
-.icon-ptz-upright1:before {
-  content: "\e6a3";
-}
-
-.icon-ptz-downleft1:before {
-  content: "\e6a4";
-}
-
-.icon-window-restore1:before {
-  content: "\e6a5";
-}
-
-.icon-plus1:before {
-  content: "\e6a6";
-}
-
-.icon-ptz-right1:before {
-  content: "\e6a7";
-}
-
-.icon-stop:before {
-  content: "\e6a8";
-}
-
-.icon-refresh1:before {
-  content: "\e6a9";
-}
-
-.icon-tool-polyline1:before {
-  content: "\e6aa";
-}
-
-.icon-tool-point1:before {
-  content: "\e6ab";
-}
-
-.icon-minus1:before {
-  content: "\e6ac";
-}
-
-.icon-ptz-wiper1:before {
-  content: "\e6ad";
-}
-
-.icon-tool-select1:before {
-  content: "\e6ae";
-}
-
-.icon-tool-polygon1:before {
-  content: "\e6af";
-}
-
-.icon-settings1:before {
-  content: "\e6b0";
-}
-
-.icon-search1:before {
-  content: "\e6b1";
-}
-
-.icon-ir-vis1:before {
-  content: "\e6b2";
-}
-
-.icon-ptz-light1:before {
-  content: "\e6b3";
-}
-
-.icon-ptz-up1:before {
-  content: "\e6b4";
-}
-
-.icon-ptz-upleft1:before {
-  content: "\e6b5";
-}
-
-.icon-temp-stream1:before {
-  content: "\e6b6";
-}
-
-.icon-tool-mouse1:before {
-  content: "\e6b7";
-}
-
-.icon-zhongyingwenyingwen-01:before {
-  content: "\e6b8";
-}
-
-.icon-zhongyingwenyingwen02-01:before {
-  content: "\e6b9";
-}
-
-.icon-crop2:before {
-  content: "\e6ba";
-}
-
-.icon-expander-down2:before {
-  content: "\e6bb";
-}
-
-.icon-window-restore2:before {
-  content: "\e6bc";
-}
-
-.icon-file-jpg2:before {
-  content: "\e6bd";
-}
-
-.icon-asterisk3:before {
-  content: "\e6be";
-}
-
-.icon-ffc2:before {
-  content: "\e6bf";
-}
-
-.icon-file-record2:before {
-  content: "\e6c0";
-}
-
-.icon-file-stream2:before {
-  content: "\e6c1";
-}
-
-.icon-fork2:before {
-  content: "\e6c2";
-}
-
-.icon-file-mp42:before {
-  content: "\e6c3";
-}
-
-.icon-ir-vis2:before {
-  content: "\e6c4";
-}
-
-.icon-file-search2:before {
-  content: "\e6c5";
-}
-
-.icon-pause:before {
-  content: "\e6c6";
-}
-
-.icon-play1:before {
-  content: "\e6c7";
-}
-
-.icon-page-previous2:before {
-  content: "\e6c8";
-}
-
-.icon-page-next2:before {
-  content: "\e6c9";
-}
-
-.icon-minus2:before {
-  content: "\e6ca";
-}
-
-.icon-page-last2:before {
-  content: "\e6cb";
-}
-
-.icon-page-first2:before {
-  content: "\e6cc";
-}
-
-.icon-ptz-downleft2:before {
-  content: "\e6cd";
-}
-
-.icon-ptz-downright2:before {
-  content: "\e6ce";
-}
-
-.icon-ptz-middle2:before {
-  content: "\e6cf";
-}
-
-.icon-ptz-down2:before {
-  content: "\e6d0";
-}
-
-.icon-plus2:before {
-  content: "\e6d1";
-}
-
-.icon-ptz-left2:before {
-  content: "\e6d2";
-}
-
-.icon-ptz-up2:before {
-  content: "\e6d3";
-}
-
-.icon-ptz-right2:before {
-  content: "\e6d4";
-}
-
-.icon-ptz-light2:before {
-  content: "\e6d5";
-}
-
-.icon-ptz-wiper2:before {
-  content: "\e6d6";
-}
-
-.icon-ptz-upright2:before {
-  content: "\e6d7";
-}
-
-.icon-search2:before {
-  content: "\e6d8";
-}
-
-.icon-refresh2:before {
-  content: "\e6d9";
-}
-
-.icon-ptz-upleft2:before {
-  content: "\e6da";
-}
-
-.icon-stop1:before {
-  content: "\e6db";
-}
-
-.icon-tool-mouse2:before {
-  content: "\e6dc";
-}
-
-.icon-settings2:before {
-  content: "\e6dd";
-}
-
-.icon-tool-polygon2:before {
-  content: "\e6de";
-}
-
-.icon-tool-point2:before {
-  content: "\e6df";
-}
-
-.icon-temp-stream2:before {
-  content: "\e6e0";
-}
-
-.icon-tool-polyline2:before {
-  content: "\e6e1";
-}
-
-.icon-window-maximize2:before {
-  content: "\e6e2";
-}
-
-.icon-window-minimize2:before {
-  content: "\e6e3";
-}
-
-.icon-tool-select2:before {
-  content: "\e6e4";
-}
-
-.icon-video-stream2:before {
-  content: "\e6e5";
-}
-
-.icon-bianji1:before {
-  content: "\e6e6";
-}
-
-.icon-caidanzhankai1:before {
-  content: "\e6e7";
-}
-
-.icon-cha11:before {
-  content: "\e6e8";
-}
-
-.icon-caidanshouqi1:before {
-  content: "\e6e9";
-}
-
-.icon-zhongyingwen2zhongwen1:before {
-  content: "\e6ea";
-}
-
-.icon-bofang011:before {
-  content: "\e6eb";
-}
-
-.icon-zuo:before {
-  content: "\e6ec";
-}
-
-.icon-baojing1:before {
-  content: "\e6ed";
-}
-
-.icon-fuxuankuang-true1:before {
-  content: "\e6ee";
-}
-
-.icon-bofang2:before {
-  content: "\e6ef";
-}
-
-.icon-baojingshezhi1:before {
-  content: "\e6f0";
-}
-
-.icon-jiahao2:before {
-  content: "\e6f1";
-}
-
-.icon-huifangxuanzhong1:before {
-  content: "\e6f2";
-}
-
-.icon-cewen1:before {
-  content: "\e6f3";
-}
-
-.icon-baojingjilu2:before {
-  content: "\e6f4";
-}
-
-.icon-danxuan1:before {
-  content: "\e6f5";
-}
-
-.icon-pingmufenge1:before {
-  content: "\e6f6";
-}
-
-.icon-luxiangguanli1:before {
-  content: "\e6f7";
-}
-
-.icon-goukuang:before {
-  content: "\e6f8";
-}
-
-.icon-shanchu11:before {
-  content: "\e6f9";
-}
-
-.icon-cha02:before {
-  content: "\e6fa";
-}
-
-.icon-huifang1:before {
-  content: "\e6fb";
-}
-
-.icon-rili1:before {
-  content: "\e6fc";
-}
-
-.icon-quanping1:before {
-  content: "\e6fd";
-}
-
-.icon-jianhao1:before {
-  content: "\e6fe";
-}
-
-.icon-shijian1:before {
-  content: "\e6ff";
-}
-
-.icon-shishiyulanxuanzhong1:before {
-  content: "\e700";
-}
-
-.icon-shouji1:before {
-  content: "\e701";
-}
-
-.icon-shouyexuanzhong1:before {
-  content: "\e702";
-}
-
-.icon-luxiang01:before {
-  content: "\e703";
-}
-
-.icon-shishiyulan:before {
-  content: "\e704";
-}
-
-.icon-quxiao:before {
-  content: "\e601";
-}
-
-.icon-sousuo1:before {
-  content: "\e705";
-}
-
-.icon-file-record:before {
-  content: "\e602";
-}
-
-.icon-shebeiguanli1:before {
-  content: "\e706";
-}
-
-.icon-play:before {
-  content: "\e603";
-}
-
-.icon-suo1:before {
-  content: "\e707";
-}
-
-.icon-file-stream:before {
-  content: "\e604";
-}
-
-.icon-tuichudenglu1:before {
-  content: "\e708";
-}
-
-.icon-ptz-middle:before {
-  content: "\e606";
-}
-
-.icon-wenhao1:before {
-  content: "\e709";
-}
-
-.icon-minus:before {
-  content: "\e607";
-}
-
-.icon-shezhixuanzhong:before {
-  content: "\e70a";
-}
-
-.icon-fork:before {
-  content: "\e608";
-}
-
-.icon-shezhiweixuanzhong1:before {
-  content: "\e70b";
-}
-
-.icon-ptz-up:before {
-  content: "\e609";
-}
-
-.icon-shuju2:before {
-  content: "\e70c";
-}
-
-.icon-file-jpg:before {
-  content: "\e60a";
-}
-
-.icon-xiazai011:before {
-  content: "\e70d";
-}
-
-.icon-ptz-left:before {
-  content: "\e60b";
-}
-
-.icon-xiala11:before {
-  content: "\e70e";
-}
-
-.icon-ptz-down:before {
-  content: "\e60c";
-}
-
-.icon-shuaxin:before {
-  content: "\e70f";
-}
-
-.icon-file-search:before {
-  content: "\e60d";
-}
-
-.icon-pingmufenge01:before {
-  content: "\e710";
-}
-
-.icon-crop:before {
-  content: "\e60e";
-}
-
-.icon-yonghu1:before {
-  content: "\e711";
-}
-
-.icon-asterisk:before {
-  content: "\e60f";
-}
-
-.icon-wenhao01:before {
-  content: "\e712";
-}
-
-.icon-expander-down:before {
-  content: "\e610";
-}
-
-.icon-you:before {
-  content: "\e713";
-}
-
-.icon-ptz-right:before {
-  content: "\e611";
-}
-
-.icon-shujuxuanzhong1:before {
-  content: "\e714";
-}
-
-.icon-ptz-wiper:before {
-  content: "\e612";
-}
-
-.icon-kuangxuan1:before {
-  content: "\e715";
-}
-
-.icon-ir-vis:before {
-  content: "\e613";
-}
-
-.icon-yonghuguanli1:before {
-  content: "\e716";
-}
-
-.icon-ptz-upleft:before {
-  content: "\e614";
-}
-
-.icon-zhongyingwenyingwen:before {
-  content: "\e717";
-}
-
-.icon-ptz-downright:before {
-  content: "\e615";
-}
-
-.icon-xiala2:before {
-  content: "\e718";
-}
-
-.icon-search:before {
-  content: "\e616";
-}
-
-.icon-luxiang:before {
-  content: "\e719";
-}
-
-.icon-ptz-upright:before {
-  content: "\e617";
-}
-
-.icon-zanting2:before {
-  content: "\e71a";
-}
-
-.icon-ptz-downleft:before {
-  content: "\e618";
-}
-
-.icon-kefu:before {
-  content: "\e71b";
-}
-
-.icon-tool-point:before {
-  content: "\e619";
-}
-
-.icon-jiqiren:before {
-  content: "\e71c";
-}
-
-.icon-ptz-light:before {
-  content: "\e61a";
-}
-
-.icon-huanliuzhan:before {
-  content: "\e71d";
-}
-
-.icon-tool-polyline:before {
-  content: "\e61b";
-}
-
-.icon-shouji2:before {
-  content: "\e71e";
-}
-
-.icon-file-mp4:before {
-  content: "\e61c";
-}
-
-.icon-cangku:before {
-  content: "\e71f";
-}
-
-.icon-window-maximize:before {
-  content: "\e61d";
-}
-
-.icon-shuaxin11:before {
-  content: "\e720";
-}
-
-.icon-page-next:before {
-  content: "\e61e";
-}
-
-.icon-weixiu:before {
-  content: "\e721";
-}
-
-.icon-ffc:before {
-  content: "\e61f";
-}
-
-.icon-biandianzhan:before {
-  content: "\e722";
-}
-
-.icon-tool-mouse:before {
-  content: "\e620";
-}
-
-.icon-youxiang:before {
-  content: "\e723";
-}
-
-.icon-settings:before {
-  content: "\e621";
-}
-
-.icon-qq:before {
-  content: "\e724";
-}
-
-.icon-page-last:before {
-  content: "\e622";
-}
-
-.icon-dianhua01:before {
-  content: "\e725";
-}
-
-.icon-window-restore:before {
-  content: "\e624";
-}
-
-.icon-fasongyoujian:before {
-  content: "\e726";
-}
-
-.icon-tool-select:before {
-  content: "\e625";
-}
-
-.icon-gaotieyunhangcopy:before {
-  content: "\e727";
-}
-
-.icon-video-stream:before {
-  content: "\e627";
-}
-
-.icon-dizhi:before {
-  content: "\e728";
-}
-
-.icon-page-first:before {
-  content: "\e628";
-}
-
-.icon-anfangbaojingmian:before {
-  content: "\e729";
-}
-
-.icon-page-previous:before {
-  content: "\e629";
-}
-
-.icon-piliangcaozuo1:before {
-  content: "\e72a";
-}
-
-.icon-refresh:before {
-  content: "\e62a";
-}
-
-.icon-qiyeguanli1:before {
-  content: "\e72b";
-}
-
-.icon-temp-stream:before {
-  content: "\e62b";
-}
-
-.icon-luxiangguanli2:before {
-  content: "\e72c";
-}
-
-.icon-tool-polygon:before {
-  content: "\e62c";
-}
-
-.icon-quanxianguanli1:before {
-  content: "\e72d";
-}
-
-.icon-window-minimize:before {
-  content: "\e62d";
-}
-
-.icon-shezhi1:before {
-  content: "\e72e";
-}
-
-.icon-plus:before {
-  content: "\e62e";
-}
-
-.icon-shishi1:before {
-  content: "\e72f";
-}
-
-.icon-qiyeguanli:before {
-  content: "\e62f";
-}
-
-.icon-shujuquanxian1:before {
-  content: "\e730";
-}
-
-.icon-quanxianguanli:before {
-  content: "\e630";
-}
-
-.icon-shishiyulanxuanzhong2:before {
-  content: "\e731";
-}
-
-.icon-shujuquanxian:before {
-  content: "\e631";
-}
-
-.icon-renzheng:before {
-  content: "\e732";
-}
-
-.icon--_baojinglianxiren:before {
-  content: "\e632";
-}
-
-.icon-shuju3:before {
-  content: "\e733";
-}
-
-.icon-yuechi:before {
-  content: "\e633";
-}
-
-.icon-shouye1:before {
-  content: "\e734";
-}
-
-.icon-xitongguanli:before {
-  content: "\e634";
-}
-
-.icon-zuzhi1:before {
-  content: "\e735";
-}
-
-.icon-zuzhi:before {
-  content: "\e635";
-}
-
-.icon-zuzhiguanli1:before {
-  content: "\e736";
-}
-
-.icon-renzheng6:before {
-  content: "\e636";
-}
-
-.icon-xitongguanli1:before {
-  content: "\e737";
-}
-
-.icon-yonghuguanli01:before {
-  content: "\e637";
-}
-
-.icon-yuechi1:before {
-  content: "\e738";
-}
-
-.icon-baojingmoban:before {
-  content: "\e638";
-}
-
-.icon-baojinglianxiren:before {
-  content: "\e739";
-}
-
-.icon-zuzhiguanli:before {
-  content: "\e639";
-}
-
-.icon-baojingjilu3:before {
-  content: "\e73a";
-}
-
-.icon-yonghuguanli:before {
-  content: "\e63a";
-}
-
-.icon-huifangxuanzhong2:before {
-  content: "\e73b";
-}
-
-.icon-bumenguanli:before {
-  content: "\e63b";
-}
-
-.icon-caiwu1:before {
-  content: "\e73c";
-}
-
-.icon-shishi:before {
-  content: "\e63c";
-}
-
-.icon-baojingguize1:before {
-  content: "\e73d";
-}
-
-.icon-baojing:before {
-  content: "\e63d";
-}
-
-.icon-bumenguanli1:before {
-  content: "\e73e";
-}
-
-.icon-shezhi:before {
-  content: "\e63e";
-}
-
-.icon-baojing2:before {
-  content: "\e73f";
-}
-
-.icon-huifangxuanzhong:before {
-  content: "\e63f";
-}
-
-.icon-yonghuguanli2:before {
-  content: "\e740";
-}
-
-.icon-luxiangguanli:before {
-  content: "\e640";
-}
-
-.icon-huifang2:before {
-  content: "\e741";
-}
-
-.icon-huifang:before {
-  content: "\e642";
-}
-
-.icon-baojingmoban1:before {
-  content: "\e742";
-}
-
-.icon-shouye:before {
-  content: "\e643";
-}
-
-.icon-dingdanxiangqing1:before {
-  content: "\e743";
-}
-
-.icon-shishiyulanxuanzhong:before {
-  content: "\e644";
-}
-
-.icon-fapiaoguanli1:before {
-  content: "\e744";
-}
-
-.icon-caiwu:before {
-  content: "\e645";
-}
-
-.icon-shiyonggaikuang1:before {
-  content: "\e745";
-}
-
-.icon-baojingjilu:before {
-  content: "\e646";
-}
-
-.icon-zengzhifuwu1:before {
-  content: "\e746";
-}
-
-.icon-baojingguize:before {
-  content: "\e647";
-}
-
-.icon-yiguanzhu:before {
-  content: "\e747";
-}
-
-.icon-shuju:before {
-  content: "\e648";
-}
-
-.icon-baojingtuisongshezhi1:before {
-  content: "\e748";
-}
-
-.icon-piliangcaozuo:before {
-  content: "\e649";
-}
-
-.icon-quxiao1:before {
-  content: "\e749";
-}
-
-.icon-suo:before {
-  content: "\e64a";
-}
-
-.icon-xiangqing1:before {
-  content: "\e74a";
-}
-
-.icon-yonghu:before {
-  content: "\e64b";
-}
-
-.icon-xufei1:before {
-  content: "\e74b";
-}
-
-.icon-shouji:before {
-  content: "\e64c";
-}
-
-.icon-zhifu1:before {
-  content: "\e74c";
-}
-
-.icon-tianjiadian:before {
-  content: "\e64d";
-}
-
-.icon-kuang:before {
-  content: "\e74d";
-}
-
-.icon-tianjiaxian:before {
-  content: "\e64e";
-}
-
-.icon-shouzhimingxi:before {
-  content: "\e74e";
-}
-
-.icon-tianjiaxuanqu:before {
-  content: "\e64f";
-}
-
-.icon-shouzhimingxi1:before {
-  content: "\e74f";
-}
-
-.icon-xuanzeduixiang:before {
-  content: "\e650";
-}
-
-.icon-daochu:before {
-  content: "\e750";
-}
-
-.icon-baojing01:before {
-  content: "\e651";
-}
-
-.icon-daochu1:before {
-  content: "\e751";
-}
-
-.icon-baojingjilu1:before {
-  content: "\e652";
-}
-
-.icon-daping:before {
-  content: "\e752";
-}
-
-.icon-baojingshezhi:before {
-  content: "\e653";
-}
-
-.icon-shaixuan:before {
-  content: "\e753";
-}
-
-.icon-cewen:before {
-  content: "\e654";
-}
-
-.icon-zhifu2:before {
-  content: "\e754";
-}
-
-.icon-tuichudenglu:before {
-  content: "\e655";
-}
-
-.icon-shaixuan1:before {
-  content: "\e755";
-}
-
-.icon-shezhiweixuanzhong:before {
-  content: "\e656";
-}
-
-.icon-zhifu3:before {
-  content: "\e756";
-}
-
-.icon-shezhixuanzhong1:before {
-  content: "\e657";
-}
-
-.icon-xia:before {
-  content: "\e757";
-}
-
-.icon-shouyexuanzhong:before {
-  content: "\e658";
-}
-
-.icon-xia1:before {
-  content: "\e758";
-}
-
-.icon-shujuxuanzhong:before {
-  content: "\e659";
-}
-
-.icon-yanzhengma:before {
-  content: "\e759";
-}
-
-.icon-shuju1:before {
-  content: "\e65a";
-}
-
-.icon-tongxunlu:before {
-  content: "\e75a";
-}
-
-.icon-bianji:before {
-  content: "\e65b";
-}
-
-.icon-yanzhengma1:before {
-  content: "\e75b";
-}
-
-.icon-rili:before {
-  content: "\e65c";
-}
-
-.icon-tongxunlu1:before {
-  content: "\e75c";
-}
-
-.icon-shanchu:before {
-  content: "\e65d";
-}
-
-.icon-yingyongbangding:before {
-  content: "\e75d";
-}
-
-.icon-jiahao:before {
-  content: "\e65e";
-}
-
-.icon-yingyongbangding1:before {
-  content: "\e75e";
-}
-
-.icon-wenhao:before {
-  content: "\e65f";
-}
-
-.icon-yingyongbangding2:before {
-  content: "\e75f";
-}
-
-.icon-zhongyingwen:before {
-  content: "\e660";
-}
-
-.icon-dapingzhanshi:before {
-  content: "\e760";
-}
-
-.icon-kuangxuan:before {
-  content: "\e661";
-}
-
-.icon-jiankong:before {
-  content: "\e761";
-}
-
-.icon-cha1:before {
-  content: "\e662";
-}
-
-.icon-touxiang:before {
-  content: "\e762";
-}
-
-.icon-bofang01:before {
-  content: "\e663";
-}
-
-.icon-lou:before {
-  content: "\e763";
-}
-
-.icon-caidanzhankai:before {
-  content: "\e664";
-}
-
-.icon-jiankong1:before {
-  content: "\e764";
-}
-
-.icon-caidanshouqi:before {
-  content: "\e665";
-}
-
-.icon-lou1:before {
-  content: "\e765";
-}
-
-.icon-danxuan:before {
-  content: "\e666";
-}
-
-.icon-dapingzhanshi1:before {
-  content: "\e766";
-}
-
-.icon-fuxuankuangxuanzhong:before {
-  content: "\e667";
-}
-
-.icon-touxiang1:before {
-  content: "\e767";
-}
-
-.icon-fuxuankuang-true:before {
-  content: "\e668";
-}
-
-.icon-shebei:before {
-  content: "\e768";
-}
-
-.icon-jianhao:before {
-  content: "\e669";
-}
-
-.icon-shebeii:before {
-  content: "\e769";
-}
-
-.icon-shanchu1:before {
-  content: "\e66a";
-}
-
-.icon-bianji11:before {
-  content: "\e76a";
-}
-
-.icon-shijian:before {
-  content: "\e66b";
-}
-
-.icon-jilu:before {
-  content: "\e76b";
-}
-
-.icon-jiahao1:before {
-  content: "\e66c";
-}
-
-.icon-yun:before {
-  content: "\e76c";
-}
-
-.icon-sousuo:before {
-  content: "\e66d";
-}
-
-.icon-baojing3:before {
-  content: "\e76d";
-}
-
-.icon-zhongyingwen2zhongwen:before {
-  content: "\e66e";
-}
-
-.icon-zhinengyangan:before {
-  content: "\e76e";
-}
-
-.icon-xiala:before {
-  content: "\e66f";
-}
-
-.icon-yongdiananquan:before {
-  content: "\e76f";
-}
-
-.icon-xiala1:before {
-  content: "\e670";
-}
-
-.icon-zhinengmensuo:before {
-  content: "\e770";
-}
-
-.icon-xiazai01:before {
-  content: "\e671";
-}
-
-.icon-xiaokongyujing:before {
-  content: "\e771";
-}
-
-.icon-pingmufenge02:before {
-  content: "\e672";
-}
-
-.icon-zhinengdianbiao:before {
-  content: "\e772";
-}
-
-.icon-shezhi01:before {
-  content: "\e673";
-}
-
-.icon-zhinengshuibiao:before {
-  content: "\e773";
-}
-
-.icon-zuixiaohuaxi:before {
-  content: "\e674";
-}
-
-.icon-shuiyajiance01:before {
-  content: "\e774";
-}
-
-.icon-zuidahuaxi:before {
-  content: "\e675";
-}
-
-.icon-zhinengzhaoming:before {
-  content: "\e775";
-}
-
-.icon-huifuxi:before {
-  content: "\e676";
-}
-
-.icon-zhinengmenjin:before {
-  content: "\e776";
-}
-
-.icon-guanbixi:before {
-  content: "\e677";
-}
-
-.icon-tingchechang:before {
-  content: "\e777";
-}
-
-.icon-baocunJPG:before {
-  content: "\e678";
-}
-
-.icon-xiala3:before {
-  content: "\e778";
-}
-
-.icon-quxian:before {
-  content: "\e679";
-}
-
-.icon-zhinengkongtiao:before {
-  content: "\e779";
-}
-
-.icon-tingzhiyulan:before {
-  content: "\e67a";
-}
-
-.icon-sousuo2:before {
-  content: "\e77a";
-}
-
-.icon-wenduliuluzhi:before {
-  content: "\e67b";
-}
-
-.icon-shang1:before {
-  content: "\e77b";
-}
-
-.icon-shuaxin1:before {
-  content: "\e67c";
-}
-
-.icon-1_jingdianchuwuweixuanzhong:before {
-  content: "\e77c";
-}
-
-.icon-shangjiantou:before {
-  content: "\e67d";
-}
-
-.icon-dianti:before {
-  content: "\e77d";
-}
-
-.icon-shang:before {
-  content: "\e67e";
-}
-
-.icon-zhuangtai:before {
-  content: "\e77e";
-}
-
-.icon-zixun:before {
-  content: "\e67f";
-}
-
-.icon-keshi:before {
-  content: "\e77f";
-}
-
-.icon-youxiang01:before {
-  content: "\e680";
-}
-
-.icon-chongzhijilu:before {
-  content: "\e780";
-}
-
-.icon-QQ:before {
-  content: "\e681";
-}
-
-.icon-jingshi:before {
-  content: "\e781";
-}
-
-.icon-dianhua:before {
-  content: "\e682";
-}
-
-.icon-bianji2:before {
-  content: "\e782";
-}
-
-.icon-pingmufenge:before {
-  content: "\e683";
-}
-
-.icon-fuzhi:before {
-  content: "\e783";
-}
-
-.icon-gou:before {
-  content: "\e684";
-}
-
-.icon-guanyu:before {
-  content: "\e784";
-}
-
-.icon-dingdanxiangqing:before {
-  content: "\e685";
-}
-
-.icon-shishiyulan-01:before {
-  content: "\e785";
-}
-
-.icon-shiyonggaikuang:before {
-  content: "\e686";
-}
-
-.icon-shujuchakan:before {
-  content: "\e786";
-}
-
-.icon-fapiaoguanli:before {
-  content: "\e687";
-}
-
-.icon-shanchu2:before {
-  content: "\e787";
-}
-
-.icon-xiangqing:before {
-  content: "\e688";
-}
-
-.icon-xitongpeizhi:before {
-  content: "\e788";
-}
-
-.icon-baojingtuisongshezhi:before {
-  content: "\e689";
-}
-
-.icon-tezhengwendu:before {
-  content: "\e789";
-}
-
-.icon-zhifu:before {
-  content: "\e68a";
-}
-
-.icon-quanzhenwendu:before {
-  content: "\e78a";
-}
-
-.icon-zengzhifuwu:before {
-  content: "\e68b";
-}
-
-.icon-fenxiang:before {
-  content: "\e78b";
-}
-
-.icon-xufei:before {
-  content: "\e68c";
-}
-
-.icon-fenxiang01:before {
-  content: "\e78c";
-}
-
-.icon-asterisk1:before {
-  content: "\e68d";
-}
-
-.icon-wenhao2:before {
-  content: "\e78d";
-}
-
-.icon-window-maximize1:before {
-  content: "\e68e";
-}
-
-.icon-dian:before {
-  content: "\e78e";
-}
-
-.icon-crop1:before {
-  content: "\e68f";
-}
-
-.icon-asterisk2:before {
-  content: "\e690";
-}
-
-.icon-file-record1:before {
-  content: "\e691";
-}
-
-.icon-ffc1:before {
-  content: "\e692";
-}
-
-.icon-file-mp41:before {
-  content: "\e693";
-}
-
-.icon-window-minimize1:before {
-  content: "\e694";
-}
-
-.icon-ptz-downright1:before {
-  content: "\e695";
-}
-
-.icon-video-stream1:before {
-  content: "\e696";
-}
-
-.icon-file-jpg1:before {
-  content: "\e697";
-}
-
-.icon-file-stream1:before {
-  content: "\e698";
-}
-
-.icon-page-previous1:before {
-  content: "\e699";
-}
-
-.icon-expander-down1:before {
-  content: "\e69a";
-}
-
-.icon-ptz-left1:before {
-  content: "\e69b";
-}
-
-.icon-yinpinwenjian1:before {
-  content: "\e623";
-}
-
-.icon-yinpinwenjian2:before {
-  content: "\e626";
-}
-
-.icon-xiazaiyinpinwenjian:before {
-  content: "\e605";
-}
-
-.icon-yinpinwenjian:before {
-  content: "\e641";
-}
-
diff --git a/web_src/static/css/iconfont.woff2 b/web_src/static/css/iconfont.woff2
deleted file mode 100644
index 4833708..0000000
--- a/web_src/static/css/iconfont.woff2
+++ /dev/null
Binary files differ
diff --git a/web_src/static/css/login.css b/web_src/static/css/login.css
deleted file mode 100644
index e0f0494..0000000
--- a/web_src/static/css/login.css
+++ /dev/null
@@ -1,420 +0,0 @@
-
-
-
-
-/*//////////////////////////////////////////////////////////////////
-[ FONT ]*/
-
-@font-face {
-  font-family: Poppins-Regular;
-  src: url('../fonts/poppins/Poppins-Regular.ttf');
-}
-
-@font-face {
-  font-family: Poppins-Medium;
-  src: url('../fonts/poppins/Poppins-Medium.ttf');
-}
-
-@font-face {
-  font-family: Poppins-Bold;
-  src: url('../fonts/poppins/Poppins-Bold.ttf');
-}
-
-@font-face {
-  font-family: Poppins-SemiBold;
-  src: url('../fonts/poppins/Poppins-SemiBold.ttf');
-}
-
-.limiter {
-  width: 100%;
-  margin: 0 auto;
-  font-family: Poppins-Regular, sans-serif;
-}
-
-.container-login100 {
-  width: 100%;
-  min-height: 100vh;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: center;
-  align-items: center;
-  background: #f2f2f2;
-}
-
-.wrap-login100 {
-  background: #fff;
-  border-radius: 10px;
-  overflow: hidden;
-  padding: 77px 55px 33px 55px;
-
-  box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
-  -webkit-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
-  -o-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
-  -ms-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1);
-}
-
-
-/*------------------------------------------------------------------
-[ Form ]*/
-
-.login100-form {
-  width: 100%;
-}
-
-.login100-form-title {
-  display: block;
-  font-family: Poppins-Bold;
-  font-size: 30px;
-  color: #333333;
-  line-height: 1.2;
-  text-align: center;
-
-}
-.login100-form-title i {
-  font-size: 60px;
-}
-
-/*------------------------------------------------------------------
-[ Input ]*/
-
-.wrap-input100 {
-  width: 100%;
-  position: relative;
-  border-bottom: 2px solid #adadad;
-  margin-bottom: 37px;
-}
-
-.input100 {
-  font-family: Poppins-Regular;
-  font-size: 15px;
-  color: #555555;
-  line-height: 1.2;
-
-  display: block;
-  width: 100%;
-  height: 45px;
-  background: transparent;
-  padding: 0 5px;
-  outline: none;
-  border: none;
-}
-.input100::-webkit-input-placeholder { color: #adadad;}
-.input100:-moz-placeholder { color: #adadad;}
-.input100::-moz-placeholder { color: #adadad;}
-.input100:-ms-input-placeholder { color: #adadad;}
-
-/*---------------------------------------------*/
-.focus-input100 {
-  position: absolute;
-  display: block;
-  width: 100%;
-  height: 100%;
-  top: 0;
-  left: 0;
-  pointer-events: none;
-  color:transparent;
-}
-
-.focus-input100::before {
-  content: "";
-  display: block;
-  position: absolute;
-  bottom: -2px;
-  left: 0;
-  width: 0;
-  height: 2px;
-
-  -webkit-transition: all 0.4s;
-  -o-transition: all 0.4s;
-  -moz-transition: all 0.4s;
-  transition: all 0.4s;
-
-  background: #6a7dfe;
-  background: -webkit-linear-gradient(left, #21d4fd, #b721ff);
-  background: -o-linear-gradient(left, #21d4fd, #b721ff);
-  background: -moz-linear-gradient(left, #21d4fd, #b721ff);
-  background: linear-gradient(left, #21d4fd, #b721ff);
-}
-
-.focus-input100::after {
-  font-family: Poppins-Regular;
-  font-size: 15px;
-  color: #999999;
-  line-height: 1.2;
-
-  content: attr(data-placeholder);
-  display: block;
-  width: 100%;
-  position: absolute;
-  top: 16px;
-  left: 0px;
-  padding-left: 5px;
-
-  -webkit-transition: all 0.4s;
-  -o-transition: all 0.4s;
-  -moz-transition: all 0.4s;
-  transition: all 0.4s;
-}
-
-.input100:focus + .focus-input100::after {
-  top: -15px;
-}
-
-.input100:focus + .focus-input100::before {
-  width: 100%;
-}
-
-.has-val.input100 + .focus-input100::after {
-  top: -15px;
-}
-
-.has-val.input100 + .focus-input100::before {
-  width: 100%;
-}
-
-/*---------------------------------------------*/
-.btn-show-pass {
-  font-size: 15px;
-  color: #999999;
-
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: flex;
-  align-items: center;
-  position: absolute;
-  height: 100%;
-  top: 0;
-  right: 0;
-  padding-right: 5px;
-  cursor: pointer;
-  -webkit-transition: all 0.4s;
-  -o-transition: all 0.4s;
-  -moz-transition: all 0.4s;
-  transition: all 0.4s;
-}
-
-.btn-show-pass:hover {
-  color: #6a7dfe;
-  color: -webkit-linear-gradient(left, #21d4fd, #b721ff);
-  color: -o-linear-gradient(left, #21d4fd, #b721ff);
-  color: -moz-linear-gradient(left, #21d4fd, #b721ff);
-  color: linear-gradient(left, #21d4fd, #b721ff);
-}
-
-.btn-show-pass.active {
-  color: #6a7dfe;
-  color: -webkit-linear-gradient(left, #21d4fd, #b721ff);
-  color: -o-linear-gradient(left, #21d4fd, #b721ff);
-  color: -moz-linear-gradient(left, #21d4fd, #b721ff);
-  color: linear-gradient(left, #21d4fd, #b721ff);
-}
-
-
-
-/*------------------------------------------------------------------
-[ Button ]*/
-.container-login100-form-btn {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: center;
-  padding-top: 13px;
-}
-
-.wrap-login100-form-btn {
-  width: 100%;
-  display: block;
-  position: relative;
-  z-index: 1;
-  border-radius: 25px;
-  overflow: hidden;
-  margin: 0 auto;
-}
-
-.login100-form-bgbtn {
-  position: absolute;
-  z-index: -1;
-  width: 300%;
-  height: 100%;
-  background: #a64bf4;
-  background: -webkit-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
-  background: -o-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
-  background: -moz-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
-  background: linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff);
-  top: 0;
-  left: -100%;
-
-  -webkit-transition: all 0.4s;
-  -o-transition: all 0.4s;
-  -moz-transition: all 0.4s;
-  transition: all 0.4s;
-}
-
-.login100-form-btn {
-  font-family: Poppins-Medium;
-  font-size: 15px;
-  color: #fff;
-  line-height: 1.2;
-  text-transform: uppercase;
-
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  padding: 0 20px;
-  width: 100%;
-  height: 50px;
-  outline: none !important;
-  border: none;
-  background: transparent;
-}
-
-.login100-form-btn:hover {
-  cursor: pointer;
-}
-
-.wrap-login100-form-btn:hover .login100-form-bgbtn {
-  left: 0;
-}
-
-
-/*------------------------------------------------------------------
-[ Responsive ]*/
-
-@media (max-width: 576px) {
-  .wrap-login100 {
-    padding: 77px 15px 33px 15px;
-  }
-}
-
-
-
-/*------------------------------------------------------------------
-[ Alert validate ]*/
-
-.validate-input {
-  position: relative;
-}
-
-.alert-validate::before {
-  content: attr(data-validate);
-  position: absolute;
-  max-width: 70%;
-  background-color: #fff;
-  border: 1px solid #c80000;
-  border-radius: 2px;
-  padding: 4px 25px 4px 10px;
-  top: 50%;
-  -webkit-transform: translateY(-50%);
-  -moz-transform: translateY(-50%);
-  -ms-transform: translateY(-50%);
-  -o-transform: translateY(-50%);
-  transform: translateY(-50%);
-  right: 0px;
-  pointer-events: none;
-
-  font-family: Poppins-Regular;
-  color: #c80000;
-  font-size: 13px;
-  line-height: 1.4;
-  text-align: left;
-
-  visibility: hidden;
-  opacity: 0;
-
-  -webkit-transition: opacity 0.4s;
-  -o-transition: opacity 0.4s;
-  -moz-transition: opacity 0.4s;
-  transition: opacity 0.4s;
-}
-
-.alert-validate::after {
-  content: "\f06a";
-  font-family: FontAwesome;
-  font-size: 16px;
-  color: #c80000;
-
-  display: block;
-  position: absolute;
-  background-color: #fff;
-  top: 50%;
-  -webkit-transform: translateY(-50%);
-  -moz-transform: translateY(-50%);
-  -ms-transform: translateY(-50%);
-  -o-transform: translateY(-50%);
-  transform: translateY(-50%);
-  right: 5px;
-}
-
-.alert-validate:hover:before {
-  visibility: visible;
-  opacity: 1;
-}
-
-@media (max-width: 992px) {
-  .alert-validate::before {
-    visibility: visible;
-    opacity: 1;
-  }
-}
-
-/** util **/
-.p-b-26 {padding-bottom: 26px;}
-.p-b-48 {padding-bottom: 48px;}
-.p-t-115 {padding-top: 115px;}
-
-@keyframes login {
-  from {width: 100%}
-  to {width: 50px}
-}
-
-.login-loading{
-  width: 50px;
-  animation-name: login;
-  animation-duration: 0.5s;
-}
-.login-loading > .login100-form-btn {
-  visibility: hidden !important;
-}
-.login-loading-class{
-  stroke: rgb(255, 255, 255) !important;
-  background-color: transparent !important;
-}
-
-.login-loading-class > .el-loading-spinner .path {
-  stroke: rgb(255, 255, 255) !important;
-}
-
-
-
-
-/**font**/
-/* .zmdi {
-  display: inline-block;
-  font: normal normal normal 14px/1 'Material-Design-Iconic-Font';
-      font-size: 14px;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.zmdi-font::before {
-  content: '\f16a';
-}
-.login100-form-title i {
-  font-size: 60px;
-} */
-
diff --git a/web_src/static/favicon.ico b/web_src/static/favicon.ico
deleted file mode 100644
index 2d67268..0000000
--- a/web_src/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/web_src/static/fonts/poppins/Poppins-Bold.ttf b/web_src/static/fonts/poppins/Poppins-Bold.ttf
deleted file mode 100644
index 44313ca..0000000
--- a/web_src/static/fonts/poppins/Poppins-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/web_src/static/fonts/poppins/Poppins-Medium.ttf b/web_src/static/fonts/poppins/Poppins-Medium.ttf
deleted file mode 100644
index 5b46f19..0000000
--- a/web_src/static/fonts/poppins/Poppins-Medium.ttf
+++ /dev/null
Binary files differ
diff --git a/web_src/static/fonts/poppins/Poppins-Regular.ttf b/web_src/static/fonts/poppins/Poppins-Regular.ttf
deleted file mode 100644
index 246a861..0000000
--- a/web_src/static/fonts/poppins/Poppins-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/web_src/static/fonts/poppins/Poppins-SemiBold.ttf b/web_src/static/fonts/poppins/Poppins-SemiBold.ttf
deleted file mode 100644
index 3bbad2a..0000000
--- a/web_src/static/fonts/poppins/Poppins-SemiBold.ttf
+++ /dev/null
Binary files differ
diff --git a/web_src/static/images/zlm-logo.png b/web_src/static/images/zlm-logo.png
deleted file mode 100644
index 5f492dc..0000000
--- a/web_src/static/images/zlm-logo.png
+++ /dev/null
Binary files differ
diff --git a/web_src/static/js/EasyWasmPlayer.js b/web_src/static/js/EasyWasmPlayer.js
deleted file mode 100644
index f7b0bac..0000000
--- a/web_src/static/js/EasyWasmPlayer.js
+++ /dev/null
@@ -1,19 +0,0 @@
-!function(A,M){"object"==typeof exports&&"object"==typeof module?module.exports=M():"function"==typeof define&&define.amd?define([],M):"object"==typeof exports?exports.WasmPlayer=M():A.WasmPlayer=M()}(this,(function(){return function(A){var M={};function t(g){if(M[g])return M[g].exports;var I=M[g]={i:g,l:!1,exports:{}};return A[g].call(I.exports,I,I.exports,t),I.l=!0,I.exports}return t.m=A,t.c=M,t.d=function(A,M,g){t.o(A,M)||Object.defineProperty(A,M,{enumerable:!0,get:g})},t.r=function(A){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})},t.t=function(A,M){if(1&M&&(A=t(A)),8&M)return A;if(4&M&&"object"==typeof A&&A&&A.__esModule)return A;var g=Object.create(null);if(t.r(g),Object.defineProperty(g,"default",{enumerable:!0,value:A}),2&M&&"string"!=typeof A)for(var I in A)t.d(g,I,function(M){return A[M]}.bind(null,I));return g},t.n=function(A){var M=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(M,"a",M),M},t.o=function(A,M){return Object.prototype.hasOwnProperty.call(A,M)},t.p="",t(t.s=222)}([function(A,M,t){"use strict";t.d(M,"D",(function(){return g})),t.d(M,"B",(function(){return I})),t.d(M,"C",(function(){return e})),t.d(M,"u",(function(){return i})),t.d(M,"k",(function(){return T})),t.d(M,"o",(function(){return E})),t.d(M,"w",(function(){return N})),t.d(M,"t",(function(){return n})),t.d(M,"j",(function(){return D})),t.d(M,"q",(function(){return C})),t.d(M,"r",(function(){return r})),t.d(M,"l",(function(){return c})),t.d(M,"A",(function(){return o})),t.d(M,"v",(function(){return B})),t.d(M,"y",(function(){return Q})),t.d(M,"z",(function(){return a})),t.d(M,"s",(function(){return h})),t.d(M,"p",(function(){return s})),t.d(M,"n",(function(){return y})),t.d(M,"x",(function(){return w})),t.d(M,"m",(function(){return j})),t.d(M,"b",(function(){return L})),t.d(M,"a",(function(){return d})),t.d(M,"e",(function(){return x})),t.d(M,"h",(function(){return u})),t.d(M,"c",(function(){return S})),t.d(M,"g",(function(){return l})),t.d(M,"i",(function(){return z})),t.d(M,"d",(function(){return U})),t.d(M,"f",(function(){return f}));var g=1,I=2,e=3,i=1,T=2,E=3,N=4,n=6,D=7,C=10,r=11,c=12,o=13,B=14,Q=15,a=16,h=20,s=21,y=102,w=103,j=200,L=1,d=2,x=3,Y=!0;function u(A){Y=A}function S(){return Y}function l(A){A}function z(A){return new Promise((function(M){return setTimeout(M,A)}))}function U(A){var M,t=new Date,g=t.getFullYear(),I=t.getMonth()+1,e=t.getDate();t.getDay();M=g+"-"+I+"-"+e+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds(),console.log("["+M+"]:  "+A)}function f(){for(var A=window.location.href.split("/"),M="",t=0;t<3;t++)M+=A[t],M+="/";return M}},function(A,M,t){"use strict";var g=t(7),I=t.n(g),e=function(){function A(){}return A.e=function(M,t){M&&!A.FORCE_GLOBAL_TAG||(M=A.GLOBAL_TAG);var g="["+M+"] > "+t;A.ENABLE_CALLBACK&&A.emitter.emit("log","error",g),A.ENABLE_ERROR&&(console.error?console.error(g):console.warn?console.warn(g):console.log(g))},A.i=function(M,t){M&&!A.FORCE_GLOBAL_TAG||(M=A.GLOBAL_TAG);var g="["+M+"] > "+t;A.ENABLE_CALLBACK&&A.emitter.emit("log","info",g),A.ENABLE_INFO&&(console.info?console.info(g):console.log(g))},A.w=function(M,t){M&&!A.FORCE_GLOBAL_TAG||(M=A.GLOBAL_TAG);var g="["+M+"] > "+t;A.ENABLE_CALLBACK&&A.emitter.emit("log","warn",g),A.ENABLE_WARN&&(console.warn?console.warn(g):console.log(g))},A.d=function(M,t){M&&!A.FORCE_GLOBAL_TAG||(M=A.GLOBAL_TAG);var g="["+M+"] > "+t;A.ENABLE_CALLBACK&&A.emitter.emit("log","debug",g),A.ENABLE_DEBUG&&(console.debug?console.debug(g):console.log(g))},A.v=function(M,t){M&&!A.FORCE_GLOBAL_TAG||(M=A.GLOBAL_TAG);var g="["+M+"] > "+t;A.ENABLE_CALLBACK&&A.emitter.emit("log","verbose",g),A.ENABLE_VERBOSE&&console.log(g)},A}();e.GLOBAL_TAG="EasyPlayer.js",e.FORCE_GLOBAL_TAG=!1,e.ENABLE_ERROR=!0,e.ENABLE_INFO=!0,e.ENABLE_WARN=!0,e.ENABLE_DEBUG=!0,e.ENABLE_VERBOSE=!0,e.ENABLE_CALLBACK=!1,e.emitter=new I.a,M.a=e},function(A,M,t){"use strict";function g(A,M){A.prototype=Object.create(M.prototype),A.prototype.constructor=A,A.__proto__=M}function I(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}function e(A,M,t){return M&&I(A.prototype,M),t&&I(A,t),A}t.d(M,"d",(function(){return i})),t.d(M,"a",(function(){return T})),t.d(M,"b",(function(){return E})),t.d(M,"c",(function(){return N}));var i=function(){function A(A){this._message=A}return A.prototype.toString=function(){return this.name+": "+this.message},e(A,[{key:"name",get:function(){return"RuntimeException"}},{key:"message",get:function(){return this._message}}]),A}(),T=function(A){function M(M){return A.call(this,M)||this}return g(M,A),e(M,[{key:"name",get:function(){return"IllegalStateException"}}]),M}(i),E=function(A){function M(M){return A.call(this,M)||this}return g(M,A),e(M,[{key:"name",get:function(){return"InvalidArgumentException"}}]),M}(i),N=function(A){function M(M){return A.call(this,M)||this}return g(M,A),e(M,[{key:"name",get:function(){return"NotImplementedException"}}]),M}(i)},function(A,M){"function"==typeof Object.create?A.exports=function(A,M){M&&(A.super_=M,A.prototype=Object.create(M.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}))}:A.exports=function(A,M){if(M){A.super_=M;var t=function(){};t.prototype=M.prototype,A.prototype=new t,A.prototype.constructor=A}}},function(A,M,t){
-/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
-var g=t(9),I=g.Buffer;function e(A,M){for(var t in A)M[t]=A[t]}function i(A,M,t){return I(A,M,t)}I.from&&I.alloc&&I.allocUnsafe&&I.allocUnsafeSlow?A.exports=g:(e(g,M),M.Buffer=i),i.prototype=Object.create(I.prototype),e(I,i),i.from=function(A,M,t){if("number"==typeof A)throw new TypeError("Argument must not be a number");return I(A,M,t)},i.alloc=function(A,M,t){if("number"!=typeof A)throw new TypeError("Argument must be a number");var g=I(A);return void 0!==M?"string"==typeof t?g.fill(M,t):g.fill(M):g.fill(0),g},i.allocUnsafe=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return I(A)},i.allocUnsafeSlow=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return g.SlowBuffer(A)}},function(A,M,t){"use strict";M.a={OK:"OK",FORMAT_ERROR:"FormatError",FORMAT_UNSUPPORTED:"FormatUnsupported",CODEC_UNSUPPORTED:"CodecUnsupported"}},function(A,M,t){(function(A){!function(A,M){"use strict";function g(A,M){if(!A)throw new Error(M||"Assertion failed")}function I(A,M){A.super_=M;var t=function(){};t.prototype=M.prototype,A.prototype=new t,A.prototype.constructor=A}function e(A,M,t){if(e.isBN(A))return A;this.negative=0,this.words=null,this.length=0,this.red=null,null!==A&&("le"!==M&&"be"!==M||(t=M,M=10),this._init(A||0,M||10,t||"be"))}var i;"object"==typeof A?A.exports=e:M.BN=e,e.BN=e,e.wordSize=26;try{i=t(165).Buffer}catch(A){}function T(A,M,t){for(var g=0,I=Math.min(A.length,t),e=M;e<I;e++){var i=A.charCodeAt(e)-48;g<<=4,g|=i>=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return g}function E(A,M,t,g){for(var I=0,e=Math.min(A.length,t),i=M;i<e;i++){var T=A.charCodeAt(i)-48;I*=g,I+=T>=49?T-49+10:T>=17?T-17+10:T}return I}e.isBN=function(A){return A instanceof e||null!==A&&"object"==typeof A&&A.constructor.wordSize===e.wordSize&&Array.isArray(A.words)},e.max=function(A,M){return A.cmp(M)>0?A:M},e.min=function(A,M){return A.cmp(M)<0?A:M},e.prototype._init=function(A,M,t){if("number"==typeof A)return this._initNumber(A,M,t);if("object"==typeof A)return this._initArray(A,M,t);"hex"===M&&(M=16),g(M===(0|M)&&M>=2&&M<=36);var I=0;"-"===(A=A.toString().replace(/\s+/g,""))[0]&&I++,16===M?this._parseHex(A,I):this._parseBase(A,M,I),"-"===A[0]&&(this.negative=1),this.strip(),"le"===t&&this._initArray(this.toArray(),M,t)},e.prototype._initNumber=function(A,M,t){A<0&&(this.negative=1,A=-A),A<67108864?(this.words=[67108863&A],this.length=1):A<4503599627370496?(this.words=[67108863&A,A/67108864&67108863],this.length=2):(g(A<9007199254740992),this.words=[67108863&A,A/67108864&67108863,1],this.length=3),"le"===t&&this._initArray(this.toArray(),M,t)},e.prototype._initArray=function(A,M,t){if(g("number"==typeof A.length),A.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(A.length/3),this.words=new Array(this.length);for(var I=0;I<this.length;I++)this.words[I]=0;var e,i,T=0;if("be"===t)for(I=A.length-1,e=0;I>=0;I-=3)i=A[I]|A[I-1]<<8|A[I-2]<<16,this.words[e]|=i<<T&67108863,this.words[e+1]=i>>>26-T&67108863,(T+=24)>=26&&(T-=26,e++);else if("le"===t)for(I=0,e=0;I<A.length;I+=3)i=A[I]|A[I+1]<<8|A[I+2]<<16,this.words[e]|=i<<T&67108863,this.words[e+1]=i>>>26-T&67108863,(T+=24)>=26&&(T-=26,e++);return this.strip()},e.prototype._parseHex=function(A,M){this.length=Math.ceil((A.length-M)/6),this.words=new Array(this.length);for(var t=0;t<this.length;t++)this.words[t]=0;var g,I,e=0;for(t=A.length-6,g=0;t>=M;t-=6)I=T(A,t,t+6),this.words[g]|=I<<e&67108863,this.words[g+1]|=I>>>26-e&4194303,(e+=24)>=26&&(e-=26,g++);t+6!==M&&(I=T(A,M,t+6),this.words[g]|=I<<e&67108863,this.words[g+1]|=I>>>26-e&4194303),this.strip()},e.prototype._parseBase=function(A,M,t){this.words=[0],this.length=1;for(var g=0,I=1;I<=67108863;I*=M)g++;g--,I=I/M|0;for(var e=A.length-t,i=e%g,T=Math.min(e,e-i)+t,N=0,n=t;n<T;n+=g)N=E(A,n,n+g,M),this.imuln(I),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N);if(0!==i){var D=1;for(N=E(A,n,A.length,M),n=0;n<i;n++)D*=M;this.imuln(D),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N)}},e.prototype.copy=function(A){A.words=new Array(this.length);for(var M=0;M<this.length;M++)A.words[M]=this.words[M];A.length=this.length,A.negative=this.negative,A.red=this.red},e.prototype.clone=function(){var A=new e(null);return this.copy(A),A},e.prototype._expand=function(A){for(;this.length<A;)this.words[this.length++]=0;return this},e.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},e.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},e.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var N=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],n=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function C(A,M,t){t.negative=M.negative^A.negative;var g=A.length+M.length|0;t.length=g,g=g-1|0;var I=0|A.words[0],e=0|M.words[0],i=I*e,T=67108863&i,E=i/67108864|0;t.words[0]=T;for(var N=1;N<g;N++){for(var n=E>>>26,D=67108863&E,C=Math.min(N,M.length-1),r=Math.max(0,N-A.length+1);r<=C;r++){var c=N-r|0;n+=(i=(I=0|A.words[c])*(e=0|M.words[r])+D)/67108864|0,D=67108863&i}t.words[N]=0|D,E=0|n}return 0!==E?t.words[N]=0|E:t.length--,t.strip()}e.prototype.toString=function(A,M){var t;if(M=0|M||1,16===(A=A||10)||"hex"===A){t="";for(var I=0,e=0,i=0;i<this.length;i++){var T=this.words[i],E=(16777215&(T<<I|e)).toString(16);t=0!==(e=T>>>24-I&16777215)||i!==this.length-1?N[6-E.length]+E+t:E+t,(I+=2)>=26&&(I-=26,i--)}for(0!==e&&(t=e.toString(16)+t);t.length%M!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(A===(0|A)&&A>=2&&A<=36){var C=n[A],r=D[A];t="";var c=this.clone();for(c.negative=0;!c.isZero();){var o=c.modn(r).toString(A);t=(c=c.idivn(r)).isZero()?o+t:N[C-o.length]+o+t}for(this.isZero()&&(t="0"+t);t.length%M!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}g(!1,"Base should be between 2 and 36")},e.prototype.toNumber=function(){var A=this.words[0];return 2===this.length?A+=67108864*this.words[1]:3===this.length&&1===this.words[2]?A+=4503599627370496+67108864*this.words[1]:this.length>2&&g(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-A:A},e.prototype.toJSON=function(){return this.toString(16)},e.prototype.toBuffer=function(A,M){return g(void 0!==i),this.toArrayLike(i,A,M)},e.prototype.toArray=function(A,M){return this.toArrayLike(Array,A,M)},e.prototype.toArrayLike=function(A,M,t){var I=this.byteLength(),e=t||Math.max(1,I);g(I<=e,"byte array longer than desired length"),g(e>0,"Requested array length <= 0"),this.strip();var i,T,E="le"===M,N=new A(e),n=this.clone();if(E){for(T=0;!n.isZero();T++)i=n.andln(255),n.iushrn(8),N[T]=i;for(;T<e;T++)N[T]=0}else{for(T=0;T<e-I;T++)N[T]=0;for(T=0;!n.isZero();T++)i=n.andln(255),n.iushrn(8),N[e-T-1]=i}return N},Math.clz32?e.prototype._countBits=function(A){return 32-Math.clz32(A)}:e.prototype._countBits=function(A){var M=A,t=0;return M>=4096&&(t+=13,M>>>=13),M>=64&&(t+=7,M>>>=7),M>=8&&(t+=4,M>>>=4),M>=2&&(t+=2,M>>>=2),t+M},e.prototype._zeroBits=function(A){if(0===A)return 26;var M=A,t=0;return 0==(8191&M)&&(t+=13,M>>>=13),0==(127&M)&&(t+=7,M>>>=7),0==(15&M)&&(t+=4,M>>>=4),0==(3&M)&&(t+=2,M>>>=2),0==(1&M)&&t++,t},e.prototype.bitLength=function(){var A=this.words[this.length-1],M=this._countBits(A);return 26*(this.length-1)+M},e.prototype.zeroBits=function(){if(this.isZero())return 0;for(var A=0,M=0;M<this.length;M++){var t=this._zeroBits(this.words[M]);if(A+=t,26!==t)break}return A},e.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},e.prototype.toTwos=function(A){return 0!==this.negative?this.abs().inotn(A).iaddn(1):this.clone()},e.prototype.fromTwos=function(A){return this.testn(A-1)?this.notn(A).iaddn(1).ineg():this.clone()},e.prototype.isNeg=function(){return 0!==this.negative},e.prototype.neg=function(){return this.clone().ineg()},e.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},e.prototype.iuor=function(A){for(;this.length<A.length;)this.words[this.length++]=0;for(var M=0;M<A.length;M++)this.words[M]=this.words[M]|A.words[M];return this.strip()},e.prototype.ior=function(A){return g(0==(this.negative|A.negative)),this.iuor(A)},e.prototype.or=function(A){return this.length>A.length?this.clone().ior(A):A.clone().ior(this)},e.prototype.uor=function(A){return this.length>A.length?this.clone().iuor(A):A.clone().iuor(this)},e.prototype.iuand=function(A){var M;M=this.length>A.length?A:this;for(var t=0;t<M.length;t++)this.words[t]=this.words[t]&A.words[t];return this.length=M.length,this.strip()},e.prototype.iand=function(A){return g(0==(this.negative|A.negative)),this.iuand(A)},e.prototype.and=function(A){return this.length>A.length?this.clone().iand(A):A.clone().iand(this)},e.prototype.uand=function(A){return this.length>A.length?this.clone().iuand(A):A.clone().iuand(this)},e.prototype.iuxor=function(A){var M,t;this.length>A.length?(M=this,t=A):(M=A,t=this);for(var g=0;g<t.length;g++)this.words[g]=M.words[g]^t.words[g];if(this!==M)for(;g<M.length;g++)this.words[g]=M.words[g];return this.length=M.length,this.strip()},e.prototype.ixor=function(A){return g(0==(this.negative|A.negative)),this.iuxor(A)},e.prototype.xor=function(A){return this.length>A.length?this.clone().ixor(A):A.clone().ixor(this)},e.prototype.uxor=function(A){return this.length>A.length?this.clone().iuxor(A):A.clone().iuxor(this)},e.prototype.inotn=function(A){g("number"==typeof A&&A>=0);var M=0|Math.ceil(A/26),t=A%26;this._expand(M),t>0&&M--;for(var I=0;I<M;I++)this.words[I]=67108863&~this.words[I];return t>0&&(this.words[I]=~this.words[I]&67108863>>26-t),this.strip()},e.prototype.notn=function(A){return this.clone().inotn(A)},e.prototype.setn=function(A,M){g("number"==typeof A&&A>=0);var t=A/26|0,I=A%26;return this._expand(t+1),this.words[t]=M?this.words[t]|1<<I:this.words[t]&~(1<<I),this.strip()},e.prototype.iadd=function(A){var M,t,g;if(0!==this.negative&&0===A.negative)return this.negative=0,M=this.isub(A),this.negative^=1,this._normSign();if(0===this.negative&&0!==A.negative)return A.negative=0,M=this.isub(A),A.negative=1,M._normSign();this.length>A.length?(t=this,g=A):(t=A,g=this);for(var I=0,e=0;e<g.length;e++)M=(0|t.words[e])+(0|g.words[e])+I,this.words[e]=67108863&M,I=M>>>26;for(;0!==I&&e<t.length;e++)M=(0|t.words[e])+I,this.words[e]=67108863&M,I=M>>>26;if(this.length=t.length,0!==I)this.words[this.length]=I,this.length++;else if(t!==this)for(;e<t.length;e++)this.words[e]=t.words[e];return this},e.prototype.add=function(A){var M;return 0!==A.negative&&0===this.negative?(A.negative=0,M=this.sub(A),A.negative^=1,M):0===A.negative&&0!==this.negative?(this.negative=0,M=A.sub(this),this.negative=1,M):this.length>A.length?this.clone().iadd(A):A.clone().iadd(this)},e.prototype.isub=function(A){if(0!==A.negative){A.negative=0;var M=this.iadd(A);return A.negative=1,M._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(A),this.negative=1,this._normSign();var t,g,I=this.cmp(A);if(0===I)return this.negative=0,this.length=1,this.words[0]=0,this;I>0?(t=this,g=A):(t=A,g=this);for(var e=0,i=0;i<g.length;i++)e=(M=(0|t.words[i])-(0|g.words[i])+e)>>26,this.words[i]=67108863&M;for(;0!==e&&i<t.length;i++)e=(M=(0|t.words[i])+e)>>26,this.words[i]=67108863&M;if(0===e&&i<t.length&&t!==this)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=Math.max(this.length,i),t!==this&&(this.negative=1),this.strip()},e.prototype.sub=function(A){return this.clone().isub(A)};var r=function(A,M,t){var g,I,e,i=A.words,T=M.words,E=t.words,N=0,n=0|i[0],D=8191&n,C=n>>>13,r=0|i[1],c=8191&r,o=r>>>13,B=0|i[2],Q=8191&B,a=B>>>13,h=0|i[3],s=8191&h,y=h>>>13,w=0|i[4],j=8191&w,L=w>>>13,d=0|i[5],x=8191&d,Y=d>>>13,u=0|i[6],S=8191&u,l=u>>>13,z=0|i[7],U=8191&z,f=z>>>13,O=0|i[8],F=8191&O,m=O>>>13,R=0|i[9],k=8191&R,p=R>>>13,b=0|T[0],G=8191&b,J=b>>>13,H=0|T[1],X=8191&H,v=H>>>13,V=0|T[2],W=8191&V,P=V>>>13,Z=0|T[3],K=8191&Z,q=Z>>>13,_=0|T[4],$=8191&_,AA=_>>>13,MA=0|T[5],tA=8191&MA,gA=MA>>>13,IA=0|T[6],eA=8191&IA,iA=IA>>>13,TA=0|T[7],EA=8191&TA,NA=TA>>>13,nA=0|T[8],DA=8191&nA,CA=nA>>>13,rA=0|T[9],cA=8191&rA,oA=rA>>>13;t.negative=A.negative^M.negative,t.length=19;var BA=(N+(g=Math.imul(D,G))|0)+((8191&(I=(I=Math.imul(D,J))+Math.imul(C,G)|0))<<13)|0;N=((e=Math.imul(C,J))+(I>>>13)|0)+(BA>>>26)|0,BA&=67108863,g=Math.imul(c,G),I=(I=Math.imul(c,J))+Math.imul(o,G)|0,e=Math.imul(o,J);var QA=(N+(g=g+Math.imul(D,X)|0)|0)+((8191&(I=(I=I+Math.imul(D,v)|0)+Math.imul(C,X)|0))<<13)|0;N=((e=e+Math.imul(C,v)|0)+(I>>>13)|0)+(QA>>>26)|0,QA&=67108863,g=Math.imul(Q,G),I=(I=Math.imul(Q,J))+Math.imul(a,G)|0,e=Math.imul(a,J),g=g+Math.imul(c,X)|0,I=(I=I+Math.imul(c,v)|0)+Math.imul(o,X)|0,e=e+Math.imul(o,v)|0;var aA=(N+(g=g+Math.imul(D,W)|0)|0)+((8191&(I=(I=I+Math.imul(D,P)|0)+Math.imul(C,W)|0))<<13)|0;N=((e=e+Math.imul(C,P)|0)+(I>>>13)|0)+(aA>>>26)|0,aA&=67108863,g=Math.imul(s,G),I=(I=Math.imul(s,J))+Math.imul(y,G)|0,e=Math.imul(y,J),g=g+Math.imul(Q,X)|0,I=(I=I+Math.imul(Q,v)|0)+Math.imul(a,X)|0,e=e+Math.imul(a,v)|0,g=g+Math.imul(c,W)|0,I=(I=I+Math.imul(c,P)|0)+Math.imul(o,W)|0,e=e+Math.imul(o,P)|0;var hA=(N+(g=g+Math.imul(D,K)|0)|0)+((8191&(I=(I=I+Math.imul(D,q)|0)+Math.imul(C,K)|0))<<13)|0;N=((e=e+Math.imul(C,q)|0)+(I>>>13)|0)+(hA>>>26)|0,hA&=67108863,g=Math.imul(j,G),I=(I=Math.imul(j,J))+Math.imul(L,G)|0,e=Math.imul(L,J),g=g+Math.imul(s,X)|0,I=(I=I+Math.imul(s,v)|0)+Math.imul(y,X)|0,e=e+Math.imul(y,v)|0,g=g+Math.imul(Q,W)|0,I=(I=I+Math.imul(Q,P)|0)+Math.imul(a,W)|0,e=e+Math.imul(a,P)|0,g=g+Math.imul(c,K)|0,I=(I=I+Math.imul(c,q)|0)+Math.imul(o,K)|0,e=e+Math.imul(o,q)|0;var sA=(N+(g=g+Math.imul(D,$)|0)|0)+((8191&(I=(I=I+Math.imul(D,AA)|0)+Math.imul(C,$)|0))<<13)|0;N=((e=e+Math.imul(C,AA)|0)+(I>>>13)|0)+(sA>>>26)|0,sA&=67108863,g=Math.imul(x,G),I=(I=Math.imul(x,J))+Math.imul(Y,G)|0,e=Math.imul(Y,J),g=g+Math.imul(j,X)|0,I=(I=I+Math.imul(j,v)|0)+Math.imul(L,X)|0,e=e+Math.imul(L,v)|0,g=g+Math.imul(s,W)|0,I=(I=I+Math.imul(s,P)|0)+Math.imul(y,W)|0,e=e+Math.imul(y,P)|0,g=g+Math.imul(Q,K)|0,I=(I=I+Math.imul(Q,q)|0)+Math.imul(a,K)|0,e=e+Math.imul(a,q)|0,g=g+Math.imul(c,$)|0,I=(I=I+Math.imul(c,AA)|0)+Math.imul(o,$)|0,e=e+Math.imul(o,AA)|0;var yA=(N+(g=g+Math.imul(D,tA)|0)|0)+((8191&(I=(I=I+Math.imul(D,gA)|0)+Math.imul(C,tA)|0))<<13)|0;N=((e=e+Math.imul(C,gA)|0)+(I>>>13)|0)+(yA>>>26)|0,yA&=67108863,g=Math.imul(S,G),I=(I=Math.imul(S,J))+Math.imul(l,G)|0,e=Math.imul(l,J),g=g+Math.imul(x,X)|0,I=(I=I+Math.imul(x,v)|0)+Math.imul(Y,X)|0,e=e+Math.imul(Y,v)|0,g=g+Math.imul(j,W)|0,I=(I=I+Math.imul(j,P)|0)+Math.imul(L,W)|0,e=e+Math.imul(L,P)|0,g=g+Math.imul(s,K)|0,I=(I=I+Math.imul(s,q)|0)+Math.imul(y,K)|0,e=e+Math.imul(y,q)|0,g=g+Math.imul(Q,$)|0,I=(I=I+Math.imul(Q,AA)|0)+Math.imul(a,$)|0,e=e+Math.imul(a,AA)|0,g=g+Math.imul(c,tA)|0,I=(I=I+Math.imul(c,gA)|0)+Math.imul(o,tA)|0,e=e+Math.imul(o,gA)|0;var wA=(N+(g=g+Math.imul(D,eA)|0)|0)+((8191&(I=(I=I+Math.imul(D,iA)|0)+Math.imul(C,eA)|0))<<13)|0;N=((e=e+Math.imul(C,iA)|0)+(I>>>13)|0)+(wA>>>26)|0,wA&=67108863,g=Math.imul(U,G),I=(I=Math.imul(U,J))+Math.imul(f,G)|0,e=Math.imul(f,J),g=g+Math.imul(S,X)|0,I=(I=I+Math.imul(S,v)|0)+Math.imul(l,X)|0,e=e+Math.imul(l,v)|0,g=g+Math.imul(x,W)|0,I=(I=I+Math.imul(x,P)|0)+Math.imul(Y,W)|0,e=e+Math.imul(Y,P)|0,g=g+Math.imul(j,K)|0,I=(I=I+Math.imul(j,q)|0)+Math.imul(L,K)|0,e=e+Math.imul(L,q)|0,g=g+Math.imul(s,$)|0,I=(I=I+Math.imul(s,AA)|0)+Math.imul(y,$)|0,e=e+Math.imul(y,AA)|0,g=g+Math.imul(Q,tA)|0,I=(I=I+Math.imul(Q,gA)|0)+Math.imul(a,tA)|0,e=e+Math.imul(a,gA)|0,g=g+Math.imul(c,eA)|0,I=(I=I+Math.imul(c,iA)|0)+Math.imul(o,eA)|0,e=e+Math.imul(o,iA)|0;var jA=(N+(g=g+Math.imul(D,EA)|0)|0)+((8191&(I=(I=I+Math.imul(D,NA)|0)+Math.imul(C,EA)|0))<<13)|0;N=((e=e+Math.imul(C,NA)|0)+(I>>>13)|0)+(jA>>>26)|0,jA&=67108863,g=Math.imul(F,G),I=(I=Math.imul(F,J))+Math.imul(m,G)|0,e=Math.imul(m,J),g=g+Math.imul(U,X)|0,I=(I=I+Math.imul(U,v)|0)+Math.imul(f,X)|0,e=e+Math.imul(f,v)|0,g=g+Math.imul(S,W)|0,I=(I=I+Math.imul(S,P)|0)+Math.imul(l,W)|0,e=e+Math.imul(l,P)|0,g=g+Math.imul(x,K)|0,I=(I=I+Math.imul(x,q)|0)+Math.imul(Y,K)|0,e=e+Math.imul(Y,q)|0,g=g+Math.imul(j,$)|0,I=(I=I+Math.imul(j,AA)|0)+Math.imul(L,$)|0,e=e+Math.imul(L,AA)|0,g=g+Math.imul(s,tA)|0,I=(I=I+Math.imul(s,gA)|0)+Math.imul(y,tA)|0,e=e+Math.imul(y,gA)|0,g=g+Math.imul(Q,eA)|0,I=(I=I+Math.imul(Q,iA)|0)+Math.imul(a,eA)|0,e=e+Math.imul(a,iA)|0,g=g+Math.imul(c,EA)|0,I=(I=I+Math.imul(c,NA)|0)+Math.imul(o,EA)|0,e=e+Math.imul(o,NA)|0;var LA=(N+(g=g+Math.imul(D,DA)|0)|0)+((8191&(I=(I=I+Math.imul(D,CA)|0)+Math.imul(C,DA)|0))<<13)|0;N=((e=e+Math.imul(C,CA)|0)+(I>>>13)|0)+(LA>>>26)|0,LA&=67108863,g=Math.imul(k,G),I=(I=Math.imul(k,J))+Math.imul(p,G)|0,e=Math.imul(p,J),g=g+Math.imul(F,X)|0,I=(I=I+Math.imul(F,v)|0)+Math.imul(m,X)|0,e=e+Math.imul(m,v)|0,g=g+Math.imul(U,W)|0,I=(I=I+Math.imul(U,P)|0)+Math.imul(f,W)|0,e=e+Math.imul(f,P)|0,g=g+Math.imul(S,K)|0,I=(I=I+Math.imul(S,q)|0)+Math.imul(l,K)|0,e=e+Math.imul(l,q)|0,g=g+Math.imul(x,$)|0,I=(I=I+Math.imul(x,AA)|0)+Math.imul(Y,$)|0,e=e+Math.imul(Y,AA)|0,g=g+Math.imul(j,tA)|0,I=(I=I+Math.imul(j,gA)|0)+Math.imul(L,tA)|0,e=e+Math.imul(L,gA)|0,g=g+Math.imul(s,eA)|0,I=(I=I+Math.imul(s,iA)|0)+Math.imul(y,eA)|0,e=e+Math.imul(y,iA)|0,g=g+Math.imul(Q,EA)|0,I=(I=I+Math.imul(Q,NA)|0)+Math.imul(a,EA)|0,e=e+Math.imul(a,NA)|0,g=g+Math.imul(c,DA)|0,I=(I=I+Math.imul(c,CA)|0)+Math.imul(o,DA)|0,e=e+Math.imul(o,CA)|0;var dA=(N+(g=g+Math.imul(D,cA)|0)|0)+((8191&(I=(I=I+Math.imul(D,oA)|0)+Math.imul(C,cA)|0))<<13)|0;N=((e=e+Math.imul(C,oA)|0)+(I>>>13)|0)+(dA>>>26)|0,dA&=67108863,g=Math.imul(k,X),I=(I=Math.imul(k,v))+Math.imul(p,X)|0,e=Math.imul(p,v),g=g+Math.imul(F,W)|0,I=(I=I+Math.imul(F,P)|0)+Math.imul(m,W)|0,e=e+Math.imul(m,P)|0,g=g+Math.imul(U,K)|0,I=(I=I+Math.imul(U,q)|0)+Math.imul(f,K)|0,e=e+Math.imul(f,q)|0,g=g+Math.imul(S,$)|0,I=(I=I+Math.imul(S,AA)|0)+Math.imul(l,$)|0,e=e+Math.imul(l,AA)|0,g=g+Math.imul(x,tA)|0,I=(I=I+Math.imul(x,gA)|0)+Math.imul(Y,tA)|0,e=e+Math.imul(Y,gA)|0,g=g+Math.imul(j,eA)|0,I=(I=I+Math.imul(j,iA)|0)+Math.imul(L,eA)|0,e=e+Math.imul(L,iA)|0,g=g+Math.imul(s,EA)|0,I=(I=I+Math.imul(s,NA)|0)+Math.imul(y,EA)|0,e=e+Math.imul(y,NA)|0,g=g+Math.imul(Q,DA)|0,I=(I=I+Math.imul(Q,CA)|0)+Math.imul(a,DA)|0,e=e+Math.imul(a,CA)|0;var xA=(N+(g=g+Math.imul(c,cA)|0)|0)+((8191&(I=(I=I+Math.imul(c,oA)|0)+Math.imul(o,cA)|0))<<13)|0;N=((e=e+Math.imul(o,oA)|0)+(I>>>13)|0)+(xA>>>26)|0,xA&=67108863,g=Math.imul(k,W),I=(I=Math.imul(k,P))+Math.imul(p,W)|0,e=Math.imul(p,P),g=g+Math.imul(F,K)|0,I=(I=I+Math.imul(F,q)|0)+Math.imul(m,K)|0,e=e+Math.imul(m,q)|0,g=g+Math.imul(U,$)|0,I=(I=I+Math.imul(U,AA)|0)+Math.imul(f,$)|0,e=e+Math.imul(f,AA)|0,g=g+Math.imul(S,tA)|0,I=(I=I+Math.imul(S,gA)|0)+Math.imul(l,tA)|0,e=e+Math.imul(l,gA)|0,g=g+Math.imul(x,eA)|0,I=(I=I+Math.imul(x,iA)|0)+Math.imul(Y,eA)|0,e=e+Math.imul(Y,iA)|0,g=g+Math.imul(j,EA)|0,I=(I=I+Math.imul(j,NA)|0)+Math.imul(L,EA)|0,e=e+Math.imul(L,NA)|0,g=g+Math.imul(s,DA)|0,I=(I=I+Math.imul(s,CA)|0)+Math.imul(y,DA)|0,e=e+Math.imul(y,CA)|0;var YA=(N+(g=g+Math.imul(Q,cA)|0)|0)+((8191&(I=(I=I+Math.imul(Q,oA)|0)+Math.imul(a,cA)|0))<<13)|0;N=((e=e+Math.imul(a,oA)|0)+(I>>>13)|0)+(YA>>>26)|0,YA&=67108863,g=Math.imul(k,K),I=(I=Math.imul(k,q))+Math.imul(p,K)|0,e=Math.imul(p,q),g=g+Math.imul(F,$)|0,I=(I=I+Math.imul(F,AA)|0)+Math.imul(m,$)|0,e=e+Math.imul(m,AA)|0,g=g+Math.imul(U,tA)|0,I=(I=I+Math.imul(U,gA)|0)+Math.imul(f,tA)|0,e=e+Math.imul(f,gA)|0,g=g+Math.imul(S,eA)|0,I=(I=I+Math.imul(S,iA)|0)+Math.imul(l,eA)|0,e=e+Math.imul(l,iA)|0,g=g+Math.imul(x,EA)|0,I=(I=I+Math.imul(x,NA)|0)+Math.imul(Y,EA)|0,e=e+Math.imul(Y,NA)|0,g=g+Math.imul(j,DA)|0,I=(I=I+Math.imul(j,CA)|0)+Math.imul(L,DA)|0,e=e+Math.imul(L,CA)|0;var uA=(N+(g=g+Math.imul(s,cA)|0)|0)+((8191&(I=(I=I+Math.imul(s,oA)|0)+Math.imul(y,cA)|0))<<13)|0;N=((e=e+Math.imul(y,oA)|0)+(I>>>13)|0)+(uA>>>26)|0,uA&=67108863,g=Math.imul(k,$),I=(I=Math.imul(k,AA))+Math.imul(p,$)|0,e=Math.imul(p,AA),g=g+Math.imul(F,tA)|0,I=(I=I+Math.imul(F,gA)|0)+Math.imul(m,tA)|0,e=e+Math.imul(m,gA)|0,g=g+Math.imul(U,eA)|0,I=(I=I+Math.imul(U,iA)|0)+Math.imul(f,eA)|0,e=e+Math.imul(f,iA)|0,g=g+Math.imul(S,EA)|0,I=(I=I+Math.imul(S,NA)|0)+Math.imul(l,EA)|0,e=e+Math.imul(l,NA)|0,g=g+Math.imul(x,DA)|0,I=(I=I+Math.imul(x,CA)|0)+Math.imul(Y,DA)|0,e=e+Math.imul(Y,CA)|0;var SA=(N+(g=g+Math.imul(j,cA)|0)|0)+((8191&(I=(I=I+Math.imul(j,oA)|0)+Math.imul(L,cA)|0))<<13)|0;N=((e=e+Math.imul(L,oA)|0)+(I>>>13)|0)+(SA>>>26)|0,SA&=67108863,g=Math.imul(k,tA),I=(I=Math.imul(k,gA))+Math.imul(p,tA)|0,e=Math.imul(p,gA),g=g+Math.imul(F,eA)|0,I=(I=I+Math.imul(F,iA)|0)+Math.imul(m,eA)|0,e=e+Math.imul(m,iA)|0,g=g+Math.imul(U,EA)|0,I=(I=I+Math.imul(U,NA)|0)+Math.imul(f,EA)|0,e=e+Math.imul(f,NA)|0,g=g+Math.imul(S,DA)|0,I=(I=I+Math.imul(S,CA)|0)+Math.imul(l,DA)|0,e=e+Math.imul(l,CA)|0;var lA=(N+(g=g+Math.imul(x,cA)|0)|0)+((8191&(I=(I=I+Math.imul(x,oA)|0)+Math.imul(Y,cA)|0))<<13)|0;N=((e=e+Math.imul(Y,oA)|0)+(I>>>13)|0)+(lA>>>26)|0,lA&=67108863,g=Math.imul(k,eA),I=(I=Math.imul(k,iA))+Math.imul(p,eA)|0,e=Math.imul(p,iA),g=g+Math.imul(F,EA)|0,I=(I=I+Math.imul(F,NA)|0)+Math.imul(m,EA)|0,e=e+Math.imul(m,NA)|0,g=g+Math.imul(U,DA)|0,I=(I=I+Math.imul(U,CA)|0)+Math.imul(f,DA)|0,e=e+Math.imul(f,CA)|0;var zA=(N+(g=g+Math.imul(S,cA)|0)|0)+((8191&(I=(I=I+Math.imul(S,oA)|0)+Math.imul(l,cA)|0))<<13)|0;N=((e=e+Math.imul(l,oA)|0)+(I>>>13)|0)+(zA>>>26)|0,zA&=67108863,g=Math.imul(k,EA),I=(I=Math.imul(k,NA))+Math.imul(p,EA)|0,e=Math.imul(p,NA),g=g+Math.imul(F,DA)|0,I=(I=I+Math.imul(F,CA)|0)+Math.imul(m,DA)|0,e=e+Math.imul(m,CA)|0;var UA=(N+(g=g+Math.imul(U,cA)|0)|0)+((8191&(I=(I=I+Math.imul(U,oA)|0)+Math.imul(f,cA)|0))<<13)|0;N=((e=e+Math.imul(f,oA)|0)+(I>>>13)|0)+(UA>>>26)|0,UA&=67108863,g=Math.imul(k,DA),I=(I=Math.imul(k,CA))+Math.imul(p,DA)|0,e=Math.imul(p,CA);var fA=(N+(g=g+Math.imul(F,cA)|0)|0)+((8191&(I=(I=I+Math.imul(F,oA)|0)+Math.imul(m,cA)|0))<<13)|0;N=((e=e+Math.imul(m,oA)|0)+(I>>>13)|0)+(fA>>>26)|0,fA&=67108863;var OA=(N+(g=Math.imul(k,cA))|0)+((8191&(I=(I=Math.imul(k,oA))+Math.imul(p,cA)|0))<<13)|0;return N=((e=Math.imul(p,oA))+(I>>>13)|0)+(OA>>>26)|0,OA&=67108863,E[0]=BA,E[1]=QA,E[2]=aA,E[3]=hA,E[4]=sA,E[5]=yA,E[6]=wA,E[7]=jA,E[8]=LA,E[9]=dA,E[10]=xA,E[11]=YA,E[12]=uA,E[13]=SA,E[14]=lA,E[15]=zA,E[16]=UA,E[17]=fA,E[18]=OA,0!==N&&(E[19]=N,t.length++),t};function c(A,M,t){return(new o).mulp(A,M,t)}function o(A,M){this.x=A,this.y=M}Math.imul||(r=C),e.prototype.mulTo=function(A,M){var t=this.length+A.length;return 10===this.length&&10===A.length?r(this,A,M):t<63?C(this,A,M):t<1024?function(A,M,t){t.negative=M.negative^A.negative,t.length=A.length+M.length;for(var g=0,I=0,e=0;e<t.length-1;e++){var i=I;I=0;for(var T=67108863&g,E=Math.min(e,M.length-1),N=Math.max(0,e-A.length+1);N<=E;N++){var n=e-N,D=(0|A.words[n])*(0|M.words[N]),C=67108863&D;T=67108863&(C=C+T|0),I+=(i=(i=i+(D/67108864|0)|0)+(C>>>26)|0)>>>26,i&=67108863}t.words[e]=T,g=i,i=I}return 0!==g?t.words[e]=g:t.length--,t.strip()}(this,A,M):c(this,A,M)},o.prototype.makeRBT=function(A){for(var M=new Array(A),t=e.prototype._countBits(A)-1,g=0;g<A;g++)M[g]=this.revBin(g,t,A);return M},o.prototype.revBin=function(A,M,t){if(0===A||A===t-1)return A;for(var g=0,I=0;I<M;I++)g|=(1&A)<<M-I-1,A>>=1;return g},o.prototype.permute=function(A,M,t,g,I,e){for(var i=0;i<e;i++)g[i]=M[A[i]],I[i]=t[A[i]]},o.prototype.transform=function(A,M,t,g,I,e){this.permute(e,A,M,t,g,I);for(var i=1;i<I;i<<=1)for(var T=i<<1,E=Math.cos(2*Math.PI/T),N=Math.sin(2*Math.PI/T),n=0;n<I;n+=T)for(var D=E,C=N,r=0;r<i;r++){var c=t[n+r],o=g[n+r],B=t[n+r+i],Q=g[n+r+i],a=D*B-C*Q;Q=D*Q+C*B,B=a,t[n+r]=c+B,g[n+r]=o+Q,t[n+r+i]=c-B,g[n+r+i]=o-Q,r!==T&&(a=E*D-N*C,C=E*C+N*D,D=a)}},o.prototype.guessLen13b=function(A,M){var t=1|Math.max(M,A),g=1&t,I=0;for(t=t/2|0;t;t>>>=1)I++;return 1<<I+1+g},o.prototype.conjugate=function(A,M,t){if(!(t<=1))for(var g=0;g<t/2;g++){var I=A[g];A[g]=A[t-g-1],A[t-g-1]=I,I=M[g],M[g]=-M[t-g-1],M[t-g-1]=-I}},o.prototype.normalize13b=function(A,M){for(var t=0,g=0;g<M/2;g++){var I=8192*Math.round(A[2*g+1]/M)+Math.round(A[2*g]/M)+t;A[g]=67108863&I,t=I<67108864?0:I/67108864|0}return A},o.prototype.convert13b=function(A,M,t,I){for(var e=0,i=0;i<M;i++)e+=0|A[i],t[2*i]=8191&e,e>>>=13,t[2*i+1]=8191&e,e>>>=13;for(i=2*M;i<I;++i)t[i]=0;g(0===e),g(0==(-8192&e))},o.prototype.stub=function(A){for(var M=new Array(A),t=0;t<A;t++)M[t]=0;return M},o.prototype.mulp=function(A,M,t){var g=2*this.guessLen13b(A.length,M.length),I=this.makeRBT(g),e=this.stub(g),i=new Array(g),T=new Array(g),E=new Array(g),N=new Array(g),n=new Array(g),D=new Array(g),C=t.words;C.length=g,this.convert13b(A.words,A.length,i,g),this.convert13b(M.words,M.length,N,g),this.transform(i,e,T,E,g,I),this.transform(N,e,n,D,g,I);for(var r=0;r<g;r++){var c=T[r]*n[r]-E[r]*D[r];E[r]=T[r]*D[r]+E[r]*n[r],T[r]=c}return this.conjugate(T,E,g),this.transform(T,E,C,e,g,I),this.conjugate(C,e,g),this.normalize13b(C,g),t.negative=A.negative^M.negative,t.length=A.length+M.length,t.strip()},e.prototype.mul=function(A){var M=new e(null);return M.words=new Array(this.length+A.length),this.mulTo(A,M)},e.prototype.mulf=function(A){var M=new e(null);return M.words=new Array(this.length+A.length),c(this,A,M)},e.prototype.imul=function(A){return this.clone().mulTo(A,this)},e.prototype.imuln=function(A){g("number"==typeof A),g(A<67108864);for(var M=0,t=0;t<this.length;t++){var I=(0|this.words[t])*A,e=(67108863&I)+(67108863&M);M>>=26,M+=I/67108864|0,M+=e>>>26,this.words[t]=67108863&e}return 0!==M&&(this.words[t]=M,this.length++),this},e.prototype.muln=function(A){return this.clone().imuln(A)},e.prototype.sqr=function(){return this.mul(this)},e.prototype.isqr=function(){return this.imul(this.clone())},e.prototype.pow=function(A){var M=function(A){for(var M=new Array(A.bitLength()),t=0;t<M.length;t++){var g=t/26|0,I=t%26;M[t]=(A.words[g]&1<<I)>>>I}return M}(A);if(0===M.length)return new e(1);for(var t=this,g=0;g<M.length&&0===M[g];g++,t=t.sqr());if(++g<M.length)for(var I=t.sqr();g<M.length;g++,I=I.sqr())0!==M[g]&&(t=t.mul(I));return t},e.prototype.iushln=function(A){g("number"==typeof A&&A>=0);var M,t=A%26,I=(A-t)/26,e=67108863>>>26-t<<26-t;if(0!==t){var i=0;for(M=0;M<this.length;M++){var T=this.words[M]&e,E=(0|this.words[M])-T<<t;this.words[M]=E|i,i=T>>>26-t}i&&(this.words[M]=i,this.length++)}if(0!==I){for(M=this.length-1;M>=0;M--)this.words[M+I]=this.words[M];for(M=0;M<I;M++)this.words[M]=0;this.length+=I}return this.strip()},e.prototype.ishln=function(A){return g(0===this.negative),this.iushln(A)},e.prototype.iushrn=function(A,M,t){var I;g("number"==typeof A&&A>=0),I=M?(M-M%26)/26:0;var e=A%26,i=Math.min((A-e)/26,this.length),T=67108863^67108863>>>e<<e,E=t;if(I-=i,I=Math.max(0,I),E){for(var N=0;N<i;N++)E.words[N]=this.words[N];E.length=i}if(0===i);else if(this.length>i)for(this.length-=i,N=0;N<this.length;N++)this.words[N]=this.words[N+i];else this.words[0]=0,this.length=1;var n=0;for(N=this.length-1;N>=0&&(0!==n||N>=I);N--){var D=0|this.words[N];this.words[N]=n<<26-e|D>>>e,n=D&T}return E&&0!==n&&(E.words[E.length++]=n),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},e.prototype.ishrn=function(A,M,t){return g(0===this.negative),this.iushrn(A,M,t)},e.prototype.shln=function(A){return this.clone().ishln(A)},e.prototype.ushln=function(A){return this.clone().iushln(A)},e.prototype.shrn=function(A){return this.clone().ishrn(A)},e.prototype.ushrn=function(A){return this.clone().iushrn(A)},e.prototype.testn=function(A){g("number"==typeof A&&A>=0);var M=A%26,t=(A-M)/26,I=1<<M;return!(this.length<=t)&&!!(this.words[t]&I)},e.prototype.imaskn=function(A){g("number"==typeof A&&A>=0);var M=A%26,t=(A-M)/26;if(g(0===this.negative,"imaskn works only with positive numbers"),this.length<=t)return this;if(0!==M&&t++,this.length=Math.min(t,this.length),0!==M){var I=67108863^67108863>>>M<<M;this.words[this.length-1]&=I}return this.strip()},e.prototype.maskn=function(A){return this.clone().imaskn(A)},e.prototype.iaddn=function(A){return g("number"==typeof A),g(A<67108864),A<0?this.isubn(-A):0!==this.negative?1===this.length&&(0|this.words[0])<A?(this.words[0]=A-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(A),this.negative=1,this):this._iaddn(A)},e.prototype._iaddn=function(A){this.words[0]+=A;for(var M=0;M<this.length&&this.words[M]>=67108864;M++)this.words[M]-=67108864,M===this.length-1?this.words[M+1]=1:this.words[M+1]++;return this.length=Math.max(this.length,M+1),this},e.prototype.isubn=function(A){if(g("number"==typeof A),g(A<67108864),A<0)return this.iaddn(-A);if(0!==this.negative)return this.negative=0,this.iaddn(A),this.negative=1,this;if(this.words[0]-=A,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var M=0;M<this.length&&this.words[M]<0;M++)this.words[M]+=67108864,this.words[M+1]-=1;return this.strip()},e.prototype.addn=function(A){return this.clone().iaddn(A)},e.prototype.subn=function(A){return this.clone().isubn(A)},e.prototype.iabs=function(){return this.negative=0,this},e.prototype.abs=function(){return this.clone().iabs()},e.prototype._ishlnsubmul=function(A,M,t){var I,e,i=A.length+t;this._expand(i);var T=0;for(I=0;I<A.length;I++){e=(0|this.words[I+t])+T;var E=(0|A.words[I])*M;T=((e-=67108863&E)>>26)-(E/67108864|0),this.words[I+t]=67108863&e}for(;I<this.length-t;I++)T=(e=(0|this.words[I+t])+T)>>26,this.words[I+t]=67108863&e;if(0===T)return this.strip();for(g(-1===T),T=0,I=0;I<this.length;I++)T=(e=-(0|this.words[I])+T)>>26,this.words[I]=67108863&e;return this.negative=1,this.strip()},e.prototype._wordDiv=function(A,M){var t=(this.length,A.length),g=this.clone(),I=A,i=0|I.words[I.length-1];0!==(t=26-this._countBits(i))&&(I=I.ushln(t),g.iushln(t),i=0|I.words[I.length-1]);var T,E=g.length-I.length;if("mod"!==M){(T=new e(null)).length=E+1,T.words=new Array(T.length);for(var N=0;N<T.length;N++)T.words[N]=0}var n=g.clone()._ishlnsubmul(I,1,E);0===n.negative&&(g=n,T&&(T.words[E]=1));for(var D=E-1;D>=0;D--){var C=67108864*(0|g.words[I.length+D])+(0|g.words[I.length+D-1]);for(C=Math.min(C/i|0,67108863),g._ishlnsubmul(I,C,D);0!==g.negative;)C--,g.negative=0,g._ishlnsubmul(I,1,D),g.isZero()||(g.negative^=1);T&&(T.words[D]=C)}return T&&T.strip(),g.strip(),"div"!==M&&0!==t&&g.iushrn(t),{div:T||null,mod:g}},e.prototype.divmod=function(A,M,t){return g(!A.isZero()),this.isZero()?{div:new e(0),mod:new e(0)}:0!==this.negative&&0===A.negative?(T=this.neg().divmod(A,M),"mod"!==M&&(I=T.div.neg()),"div"!==M&&(i=T.mod.neg(),t&&0!==i.negative&&i.iadd(A)),{div:I,mod:i}):0===this.negative&&0!==A.negative?(T=this.divmod(A.neg(),M),"mod"!==M&&(I=T.div.neg()),{div:I,mod:T.mod}):0!=(this.negative&A.negative)?(T=this.neg().divmod(A.neg(),M),"div"!==M&&(i=T.mod.neg(),t&&0!==i.negative&&i.isub(A)),{div:T.div,mod:i}):A.length>this.length||this.cmp(A)<0?{div:new e(0),mod:this}:1===A.length?"div"===M?{div:this.divn(A.words[0]),mod:null}:"mod"===M?{div:null,mod:new e(this.modn(A.words[0]))}:{div:this.divn(A.words[0]),mod:new e(this.modn(A.words[0]))}:this._wordDiv(A,M);var I,i,T},e.prototype.div=function(A){return this.divmod(A,"div",!1).div},e.prototype.mod=function(A){return this.divmod(A,"mod",!1).mod},e.prototype.umod=function(A){return this.divmod(A,"mod",!0).mod},e.prototype.divRound=function(A){var M=this.divmod(A);if(M.mod.isZero())return M.div;var t=0!==M.div.negative?M.mod.isub(A):M.mod,g=A.ushrn(1),I=A.andln(1),e=t.cmp(g);return e<0||1===I&&0===e?M.div:0!==M.div.negative?M.div.isubn(1):M.div.iaddn(1)},e.prototype.modn=function(A){g(A<=67108863);for(var M=(1<<26)%A,t=0,I=this.length-1;I>=0;I--)t=(M*t+(0|this.words[I]))%A;return t},e.prototype.idivn=function(A){g(A<=67108863);for(var M=0,t=this.length-1;t>=0;t--){var I=(0|this.words[t])+67108864*M;this.words[t]=I/A|0,M=I%A}return this.strip()},e.prototype.divn=function(A){return this.clone().idivn(A)},e.prototype.egcd=function(A){g(0===A.negative),g(!A.isZero());var M=this,t=A.clone();M=0!==M.negative?M.umod(A):M.clone();for(var I=new e(1),i=new e(0),T=new e(0),E=new e(1),N=0;M.isEven()&&t.isEven();)M.iushrn(1),t.iushrn(1),++N;for(var n=t.clone(),D=M.clone();!M.isZero();){for(var C=0,r=1;0==(M.words[0]&r)&&C<26;++C,r<<=1);if(C>0)for(M.iushrn(C);C-- >0;)(I.isOdd()||i.isOdd())&&(I.iadd(n),i.isub(D)),I.iushrn(1),i.iushrn(1);for(var c=0,o=1;0==(t.words[0]&o)&&c<26;++c,o<<=1);if(c>0)for(t.iushrn(c);c-- >0;)(T.isOdd()||E.isOdd())&&(T.iadd(n),E.isub(D)),T.iushrn(1),E.iushrn(1);M.cmp(t)>=0?(M.isub(t),I.isub(T),i.isub(E)):(t.isub(M),T.isub(I),E.isub(i))}return{a:T,b:E,gcd:t.iushln(N)}},e.prototype._invmp=function(A){g(0===A.negative),g(!A.isZero());var M=this,t=A.clone();M=0!==M.negative?M.umod(A):M.clone();for(var I,i=new e(1),T=new e(0),E=t.clone();M.cmpn(1)>0&&t.cmpn(1)>0;){for(var N=0,n=1;0==(M.words[0]&n)&&N<26;++N,n<<=1);if(N>0)for(M.iushrn(N);N-- >0;)i.isOdd()&&i.iadd(E),i.iushrn(1);for(var D=0,C=1;0==(t.words[0]&C)&&D<26;++D,C<<=1);if(D>0)for(t.iushrn(D);D-- >0;)T.isOdd()&&T.iadd(E),T.iushrn(1);M.cmp(t)>=0?(M.isub(t),i.isub(T)):(t.isub(M),T.isub(i))}return(I=0===M.cmpn(1)?i:T).cmpn(0)<0&&I.iadd(A),I},e.prototype.gcd=function(A){if(this.isZero())return A.abs();if(A.isZero())return this.abs();var M=this.clone(),t=A.clone();M.negative=0,t.negative=0;for(var g=0;M.isEven()&&t.isEven();g++)M.iushrn(1),t.iushrn(1);for(;;){for(;M.isEven();)M.iushrn(1);for(;t.isEven();)t.iushrn(1);var I=M.cmp(t);if(I<0){var e=M;M=t,t=e}else if(0===I||0===t.cmpn(1))break;M.isub(t)}return t.iushln(g)},e.prototype.invm=function(A){return this.egcd(A).a.umod(A)},e.prototype.isEven=function(){return 0==(1&this.words[0])},e.prototype.isOdd=function(){return 1==(1&this.words[0])},e.prototype.andln=function(A){return this.words[0]&A},e.prototype.bincn=function(A){g("number"==typeof A);var M=A%26,t=(A-M)/26,I=1<<M;if(this.length<=t)return this._expand(t+1),this.words[t]|=I,this;for(var e=I,i=t;0!==e&&i<this.length;i++){var T=0|this.words[i];e=(T+=e)>>>26,T&=67108863,this.words[i]=T}return 0!==e&&(this.words[i]=e,this.length++),this},e.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},e.prototype.cmpn=function(A){var M,t=A<0;if(0!==this.negative&&!t)return-1;if(0===this.negative&&t)return 1;if(this.strip(),this.length>1)M=1;else{t&&(A=-A),g(A<=67108863,"Number is too big");var I=0|this.words[0];M=I===A?0:I<A?-1:1}return 0!==this.negative?0|-M:M},e.prototype.cmp=function(A){if(0!==this.negative&&0===A.negative)return-1;if(0===this.negative&&0!==A.negative)return 1;var M=this.ucmp(A);return 0!==this.negative?0|-M:M},e.prototype.ucmp=function(A){if(this.length>A.length)return 1;if(this.length<A.length)return-1;for(var M=0,t=this.length-1;t>=0;t--){var g=0|this.words[t],I=0|A.words[t];if(g!==I){g<I?M=-1:g>I&&(M=1);break}}return M},e.prototype.gtn=function(A){return 1===this.cmpn(A)},e.prototype.gt=function(A){return 1===this.cmp(A)},e.prototype.gten=function(A){return this.cmpn(A)>=0},e.prototype.gte=function(A){return this.cmp(A)>=0},e.prototype.ltn=function(A){return-1===this.cmpn(A)},e.prototype.lt=function(A){return-1===this.cmp(A)},e.prototype.lten=function(A){return this.cmpn(A)<=0},e.prototype.lte=function(A){return this.cmp(A)<=0},e.prototype.eqn=function(A){return 0===this.cmpn(A)},e.prototype.eq=function(A){return 0===this.cmp(A)},e.red=function(A){return new w(A)},e.prototype.toRed=function(A){return g(!this.red,"Already a number in reduction context"),g(0===this.negative,"red works only with positives"),A.convertTo(this)._forceRed(A)},e.prototype.fromRed=function(){return g(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},e.prototype._forceRed=function(A){return this.red=A,this},e.prototype.forceRed=function(A){return g(!this.red,"Already a number in reduction context"),this._forceRed(A)},e.prototype.redAdd=function(A){return g(this.red,"redAdd works only with red numbers"),this.red.add(this,A)},e.prototype.redIAdd=function(A){return g(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,A)},e.prototype.redSub=function(A){return g(this.red,"redSub works only with red numbers"),this.red.sub(this,A)},e.prototype.redISub=function(A){return g(this.red,"redISub works only with red numbers"),this.red.isub(this,A)},e.prototype.redShl=function(A){return g(this.red,"redShl works only with red numbers"),this.red.shl(this,A)},e.prototype.redMul=function(A){return g(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.mul(this,A)},e.prototype.redIMul=function(A){return g(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.imul(this,A)},e.prototype.redSqr=function(){return g(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},e.prototype.redISqr=function(){return g(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},e.prototype.redSqrt=function(){return g(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},e.prototype.redInvm=function(){return g(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},e.prototype.redNeg=function(){return g(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},e.prototype.redPow=function(A){return g(this.red&&!A.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,A)};var B={k256:null,p224:null,p192:null,p25519:null};function Q(A,M){this.name=A,this.p=new e(M,16),this.n=this.p.bitLength(),this.k=new e(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function a(){Q.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function h(){Q.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function s(){Q.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){Q.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function w(A){if("string"==typeof A){var M=e._prime(A);this.m=M.p,this.prime=M}else g(A.gtn(1),"modulus must be greater than 1"),this.m=A,this.prime=null}function j(A){w.call(this,A),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new e(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}Q.prototype._tmp=function(){var A=new e(null);return A.words=new Array(Math.ceil(this.n/13)),A},Q.prototype.ireduce=function(A){var M,t=A;do{this.split(t,this.tmp),M=(t=(t=this.imulK(t)).iadd(this.tmp)).bitLength()}while(M>this.n);var g=M<this.n?-1:t.ucmp(this.p);return 0===g?(t.words[0]=0,t.length=1):g>0?t.isub(this.p):void 0!==t.strip?t.strip():t._strip(),t},Q.prototype.split=function(A,M){A.iushrn(this.n,0,M)},Q.prototype.imulK=function(A){return A.imul(this.k)},I(a,Q),a.prototype.split=function(A,M){for(var t=Math.min(A.length,9),g=0;g<t;g++)M.words[g]=A.words[g];if(M.length=t,A.length<=9)return A.words[0]=0,void(A.length=1);var I=A.words[9];for(M.words[M.length++]=4194303&I,g=10;g<A.length;g++){var e=0|A.words[g];A.words[g-10]=(4194303&e)<<4|I>>>22,I=e}I>>>=22,A.words[g-10]=I,0===I&&A.length>10?A.length-=10:A.length-=9},a.prototype.imulK=function(A){A.words[A.length]=0,A.words[A.length+1]=0,A.length+=2;for(var M=0,t=0;t<A.length;t++){var g=0|A.words[t];M+=977*g,A.words[t]=67108863&M,M=64*g+(M/67108864|0)}return 0===A.words[A.length-1]&&(A.length--,0===A.words[A.length-1]&&A.length--),A},I(h,Q),I(s,Q),I(y,Q),y.prototype.imulK=function(A){for(var M=0,t=0;t<A.length;t++){var g=19*(0|A.words[t])+M,I=67108863&g;g>>>=26,A.words[t]=I,M=g}return 0!==M&&(A.words[A.length++]=M),A},e._prime=function(A){if(B[A])return B[A];var M;if("k256"===A)M=new a;else if("p224"===A)M=new h;else if("p192"===A)M=new s;else{if("p25519"!==A)throw new Error("Unknown prime "+A);M=new y}return B[A]=M,M},w.prototype._verify1=function(A){g(0===A.negative,"red works only with positives"),g(A.red,"red works only with red numbers")},w.prototype._verify2=function(A,M){g(0==(A.negative|M.negative),"red works only with positives"),g(A.red&&A.red===M.red,"red works only with red numbers")},w.prototype.imod=function(A){return this.prime?this.prime.ireduce(A)._forceRed(this):A.umod(this.m)._forceRed(this)},w.prototype.neg=function(A){return A.isZero()?A.clone():this.m.sub(A)._forceRed(this)},w.prototype.add=function(A,M){this._verify2(A,M);var t=A.add(M);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},w.prototype.iadd=function(A,M){this._verify2(A,M);var t=A.iadd(M);return t.cmp(this.m)>=0&&t.isub(this.m),t},w.prototype.sub=function(A,M){this._verify2(A,M);var t=A.sub(M);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},w.prototype.isub=function(A,M){this._verify2(A,M);var t=A.isub(M);return t.cmpn(0)<0&&t.iadd(this.m),t},w.prototype.shl=function(A,M){return this._verify1(A),this.imod(A.ushln(M))},w.prototype.imul=function(A,M){return this._verify2(A,M),this.imod(A.imul(M))},w.prototype.mul=function(A,M){return this._verify2(A,M),this.imod(A.mul(M))},w.prototype.isqr=function(A){return this.imul(A,A.clone())},w.prototype.sqr=function(A){return this.mul(A,A)},w.prototype.sqrt=function(A){if(A.isZero())return A.clone();var M=this.m.andln(3);if(g(M%2==1),3===M){var t=this.m.add(new e(1)).iushrn(2);return this.pow(A,t)}for(var I=this.m.subn(1),i=0;!I.isZero()&&0===I.andln(1);)i++,I.iushrn(1);g(!I.isZero());var T=new e(1).toRed(this),E=T.redNeg(),N=this.m.subn(1).iushrn(1),n=this.m.bitLength();for(n=new e(2*n*n).toRed(this);0!==this.pow(n,N).cmp(E);)n.redIAdd(E);for(var D=this.pow(n,I),C=this.pow(A,I.addn(1).iushrn(1)),r=this.pow(A,I),c=i;0!==r.cmp(T);){for(var o=r,B=0;0!==o.cmp(T);B++)o=o.redSqr();g(B<c);var Q=this.pow(D,new e(1).iushln(c-B-1));C=C.redMul(Q),D=Q.redSqr(),r=r.redMul(D),c=B}return C},w.prototype.invm=function(A){var M=A._invmp(this.m);return 0!==M.negative?(M.negative=0,this.imod(M).redNeg()):this.imod(M)},w.prototype.pow=function(A,M){if(M.isZero())return new e(1).toRed(this);if(0===M.cmpn(1))return A.clone();var t=new Array(16);t[0]=new e(1).toRed(this),t[1]=A;for(var g=2;g<t.length;g++)t[g]=this.mul(t[g-1],A);var I=t[0],i=0,T=0,E=M.bitLength()%26;for(0===E&&(E=26),g=M.length-1;g>=0;g--){for(var N=M.words[g],n=E-1;n>=0;n--){var D=N>>n&1;I!==t[0]&&(I=this.sqr(I)),0!==D||0!==i?(i<<=1,i|=D,(4===++T||0===g&&0===n)&&(I=this.mul(I,t[i]),T=0,i=0)):T=0}E=26}return I},w.prototype.convertTo=function(A){var M=A.umod(this.m);return M===A?M.clone():M},w.prototype.convertFrom=function(A){var M=A.clone();return M.red=null,M},e.mont=function(A){return new j(A)},I(j,w),j.prototype.convertTo=function(A){return this.imod(A.ushln(this.shift))},j.prototype.convertFrom=function(A){var M=this.imod(A.mul(this.rinv));return M.red=null,M},j.prototype.imul=function(A,M){if(A.isZero()||M.isZero())return A.words[0]=0,A.length=1,A;var t=A.imul(M),g=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),I=t.isub(g).iushrn(this.shift),e=I;return I.cmp(this.m)>=0?e=I.isub(this.m):I.cmpn(0)<0&&(e=I.iadd(this.m)),e._forceRed(this)},j.prototype.mul=function(A,M){if(A.isZero()||M.isZero())return new e(0)._forceRed(this);var t=A.mul(M),g=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),I=t.isub(g).iushrn(this.shift),i=I;return I.cmp(this.m)>=0?i=I.isub(this.m):I.cmpn(0)<0&&(i=I.iadd(this.m)),i._forceRed(this)},j.prototype.invm=function(A){return this.imod(A._invmp(this.m).mul(this.r2))._forceRed(this)}}(A,this)}).call(this,t(92)(A))},function(A,M,t){"use strict";var g,I="object"==typeof Reflect?Reflect:null,e=I&&"function"==typeof I.apply?I.apply:function(A,M,t){return Function.prototype.apply.call(A,M,t)};g=I&&"function"==typeof I.ownKeys?I.ownKeys:Object.getOwnPropertySymbols?function(A){return Object.getOwnPropertyNames(A).concat(Object.getOwnPropertySymbols(A))}:function(A){return Object.getOwnPropertyNames(A)};var i=Number.isNaN||function(A){return A!=A};function T(){T.init.call(this)}A.exports=T,A.exports.once=function(A,M){return new Promise((function(t,g){function I(){void 0!==e&&A.removeListener("error",e),t([].slice.call(arguments))}var e;"error"!==M&&(e=function(t){A.removeListener(M,I),g(t)},A.once("error",e)),A.once(M,I)}))},T.EventEmitter=T,T.prototype._events=void 0,T.prototype._eventsCount=0,T.prototype._maxListeners=void 0;var E=10;function N(A){if("function"!=typeof A)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof A)}function n(A){return void 0===A._maxListeners?T.defaultMaxListeners:A._maxListeners}function D(A,M,t,g){var I,e,i,T;if(N(t),void 0===(e=A._events)?(e=A._events=Object.create(null),A._eventsCount=0):(void 0!==e.newListener&&(A.emit("newListener",M,t.listener?t.listener:t),e=A._events),i=e[M]),void 0===i)i=e[M]=t,++A._eventsCount;else if("function"==typeof i?i=e[M]=g?[t,i]:[i,t]:g?i.unshift(t):i.push(t),(I=n(A))>0&&i.length>I&&!i.warned){i.warned=!0;var E=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(M)+" listeners added. Use emitter.setMaxListeners() to increase limit");E.name="MaxListenersExceededWarning",E.emitter=A,E.type=M,E.count=i.length,T=E,console&&console.warn&&console.warn(T)}return A}function C(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function r(A,M,t){var g={fired:!1,wrapFn:void 0,target:A,type:M,listener:t},I=C.bind(g);return I.listener=t,g.wrapFn=I,I}function c(A,M,t){var g=A._events;if(void 0===g)return[];var I=g[M];return void 0===I?[]:"function"==typeof I?t?[I.listener||I]:[I]:t?function(A){for(var M=new Array(A.length),t=0;t<M.length;++t)M[t]=A[t].listener||A[t];return M}(I):B(I,I.length)}function o(A){var M=this._events;if(void 0!==M){var t=M[A];if("function"==typeof t)return 1;if(void 0!==t)return t.length}return 0}function B(A,M){for(var t=new Array(M),g=0;g<M;++g)t[g]=A[g];return t}Object.defineProperty(T,"defaultMaxListeners",{enumerable:!0,get:function(){return E},set:function(A){if("number"!=typeof A||A<0||i(A))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+A+".");E=A}}),T.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},T.prototype.setMaxListeners=function(A){if("number"!=typeof A||A<0||i(A))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+A+".");return this._maxListeners=A,this},T.prototype.getMaxListeners=function(){return n(this)},T.prototype.emit=function(A){for(var M=[],t=1;t<arguments.length;t++)M.push(arguments[t]);var g="error"===A,I=this._events;if(void 0!==I)g=g&&void 0===I.error;else if(!g)return!1;if(g){var i;if(M.length>0&&(i=M[0]),i instanceof Error)throw i;var T=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw T.context=i,T}var E=I[A];if(void 0===E)return!1;if("function"==typeof E)e(E,this,M);else{var N=E.length,n=B(E,N);for(t=0;t<N;++t)e(n[t],this,M)}return!0},T.prototype.addListener=function(A,M){return D(this,A,M,!1)},T.prototype.on=T.prototype.addListener,T.prototype.prependListener=function(A,M){return D(this,A,M,!0)},T.prototype.once=function(A,M){return N(M),this.on(A,r(this,A,M)),this},T.prototype.prependOnceListener=function(A,M){return N(M),this.prependListener(A,r(this,A,M)),this},T.prototype.removeListener=function(A,M){var t,g,I,e,i;if(N(M),void 0===(g=this._events))return this;if(void 0===(t=g[A]))return this;if(t===M||t.listener===M)0==--this._eventsCount?this._events=Object.create(null):(delete g[A],g.removeListener&&this.emit("removeListener",A,t.listener||M));else if("function"!=typeof t){for(I=-1,e=t.length-1;e>=0;e--)if(t[e]===M||t[e].listener===M){i=t[e].listener,I=e;break}if(I<0)return this;0===I?t.shift():function(A,M){for(;M+1<A.length;M++)A[M]=A[M+1];A.pop()}(t,I),1===t.length&&(g[A]=t[0]),void 0!==g.removeListener&&this.emit("removeListener",A,i||M)}return this},T.prototype.off=T.prototype.removeListener,T.prototype.removeAllListeners=function(A){var M,t,g;if(void 0===(t=this._events))return this;if(void 0===t.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==t[A]&&(0==--this._eventsCount?this._events=Object.create(null):delete t[A]),this;if(0===arguments.length){var I,e=Object.keys(t);for(g=0;g<e.length;++g)"removeListener"!==(I=e[g])&&this.removeAllListeners(I);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(M=t[A]))this.removeListener(A,M);else if(void 0!==M)for(g=M.length-1;g>=0;g--)this.removeListener(A,M[g]);return this},T.prototype.listeners=function(A){return c(this,A,!0)},T.prototype.rawListeners=function(A){return c(this,A,!1)},T.listenerCount=function(A,M){return"function"==typeof A.listenerCount?A.listenerCount(M):o.call(A,M)},T.prototype.listenerCount=o,T.prototype.eventNames=function(){return this._eventsCount>0?g(this._events):[]}},function(A,M){var t,g,I=A.exports={};function e(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function T(A){if(t===setTimeout)return setTimeout(A,0);if((t===e||!t)&&setTimeout)return t=setTimeout,setTimeout(A,0);try{return t(A,0)}catch(M){try{return t.call(null,A,0)}catch(M){return t.call(this,A,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:e}catch(A){t=e}try{g="function"==typeof clearTimeout?clearTimeout:i}catch(A){g=i}}();var E,N=[],n=!1,D=-1;function C(){n&&E&&(n=!1,E.length?N=E.concat(N):D=-1,N.length&&r())}function r(){if(!n){var A=T(C);n=!0;for(var M=N.length;M;){for(E=N,N=[];++D<M;)E&&E[D].run();D=-1,M=N.length}E=null,n=!1,function(A){if(g===clearTimeout)return clearTimeout(A);if((g===i||!g)&&clearTimeout)return g=clearTimeout,clearTimeout(A);try{g(A)}catch(M){try{return g.call(null,A)}catch(M){return g.call(this,A)}}}(A)}}function c(A,M){this.fun=A,this.array=M}function o(){}I.nextTick=function(A){var M=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)M[t-1]=arguments[t];N.push(new c(A,M)),1!==N.length||n||T(r)},c.prototype.run=function(){this.fun.apply(null,this.array)},I.title="browser",I.browser=!0,I.env={},I.argv=[],I.version="",I.versions={},I.on=o,I.addListener=o,I.once=o,I.off=o,I.removeListener=o,I.removeAllListeners=o,I.emit=o,I.prependListener=o,I.prependOnceListener=o,I.listeners=function(A){return[]},I.binding=function(A){throw new Error("process.binding is not supported")},I.cwd=function(){return"/"},I.chdir=function(A){throw new Error("process.chdir is not supported")},I.umask=function(){return 0}},function(A,M,t){"use strict";(function(A){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <http://feross.org>
- * @license  MIT
- */
-var g=t(111),I=t(112),e=t(59);function i(){return E.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function T(A,M){if(i()<M)throw new RangeError("Invalid typed array length");return E.TYPED_ARRAY_SUPPORT?(A=new Uint8Array(M)).__proto__=E.prototype:(null===A&&(A=new E(M)),A.length=M),A}function E(A,M,t){if(!(E.TYPED_ARRAY_SUPPORT||this instanceof E))return new E(A,M,t);if("number"==typeof A){if("string"==typeof M)throw new Error("If encoding is specified then the first argument must be a string");return D(this,A)}return N(this,A,M,t)}function N(A,M,t,g){if("number"==typeof M)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&M instanceof ArrayBuffer?function(A,M,t,g){if(M.byteLength,t<0||M.byteLength<t)throw new RangeError("'offset' is out of bounds");if(M.byteLength<t+(g||0))throw new RangeError("'length' is out of bounds");M=void 0===t&&void 0===g?new Uint8Array(M):void 0===g?new Uint8Array(M,t):new Uint8Array(M,t,g);E.TYPED_ARRAY_SUPPORT?(A=M).__proto__=E.prototype:A=C(A,M);return A}(A,M,t,g):"string"==typeof M?function(A,M,t){"string"==typeof t&&""!==t||(t="utf8");if(!E.isEncoding(t))throw new TypeError('"encoding" must be a valid string encoding');var g=0|c(M,t),I=(A=T(A,g)).write(M,t);I!==g&&(A=A.slice(0,I));return A}(A,M,t):function(A,M){if(E.isBuffer(M)){var t=0|r(M.length);return 0===(A=T(A,t)).length||M.copy(A,0,0,t),A}if(M){if("undefined"!=typeof ArrayBuffer&&M.buffer instanceof ArrayBuffer||"length"in M)return"number"!=typeof M.length||(g=M.length)!=g?T(A,0):C(A,M);if("Buffer"===M.type&&e(M.data))return C(A,M.data)}var g;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(A,M)}function n(A){if("number"!=typeof A)throw new TypeError('"size" argument must be a number');if(A<0)throw new RangeError('"size" argument must not be negative')}function D(A,M){if(n(M),A=T(A,M<0?0:0|r(M)),!E.TYPED_ARRAY_SUPPORT)for(var t=0;t<M;++t)A[t]=0;return A}function C(A,M){var t=M.length<0?0:0|r(M.length);A=T(A,t);for(var g=0;g<t;g+=1)A[g]=255&M[g];return A}function r(A){if(A>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|A}function c(A,M){if(E.isBuffer(A))return A.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(A)||A instanceof ArrayBuffer))return A.byteLength;"string"!=typeof A&&(A=""+A);var t=A.length;if(0===t)return 0;for(var g=!1;;)switch(M){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":case void 0:return b(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return G(A).length;default:if(g)return b(A).length;M=(""+M).toLowerCase(),g=!0}}function o(A,M,t){var g=!1;if((void 0===M||M<0)&&(M=0),M>this.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(M>>>=0))return"";for(A||(A="utf8");;)switch(A){case"hex":return S(this,M,t);case"utf8":case"utf-8":return x(this,M,t);case"ascii":return Y(this,M,t);case"latin1":case"binary":return u(this,M,t);case"base64":return d(this,M,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return l(this,M,t);default:if(g)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),g=!0}}function B(A,M,t){var g=A[M];A[M]=A[t],A[t]=g}function Q(A,M,t,g,I){if(0===A.length)return-1;if("string"==typeof t?(g=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,isNaN(t)&&(t=I?0:A.length-1),t<0&&(t=A.length+t),t>=A.length){if(I)return-1;t=A.length-1}else if(t<0){if(!I)return-1;t=0}if("string"==typeof M&&(M=E.from(M,g)),E.isBuffer(M))return 0===M.length?-1:a(A,M,t,g,I);if("number"==typeof M)return M&=255,E.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?I?Uint8Array.prototype.indexOf.call(A,M,t):Uint8Array.prototype.lastIndexOf.call(A,M,t):a(A,[M],t,g,I);throw new TypeError("val must be string, number or Buffer")}function a(A,M,t,g,I){var e,i=1,T=A.length,E=M.length;if(void 0!==g&&("ucs2"===(g=String(g).toLowerCase())||"ucs-2"===g||"utf16le"===g||"utf-16le"===g)){if(A.length<2||M.length<2)return-1;i=2,T/=2,E/=2,t/=2}function N(A,M){return 1===i?A[M]:A.readUInt16BE(M*i)}if(I){var n=-1;for(e=t;e<T;e++)if(N(A,e)===N(M,-1===n?0:e-n)){if(-1===n&&(n=e),e-n+1===E)return n*i}else-1!==n&&(e-=e-n),n=-1}else for(t+E>T&&(t=T-E),e=t;e>=0;e--){for(var D=!0,C=0;C<E;C++)if(N(A,e+C)!==N(M,C)){D=!1;break}if(D)return e}return-1}function h(A,M,t,g){t=Number(t)||0;var I=A.length-t;g?(g=Number(g))>I&&(g=I):g=I;var e=M.length;if(e%2!=0)throw new TypeError("Invalid hex string");g>e/2&&(g=e/2);for(var i=0;i<g;++i){var T=parseInt(M.substr(2*i,2),16);if(isNaN(T))return i;A[t+i]=T}return i}function s(A,M,t,g){return J(b(M,A.length-t),A,t,g)}function y(A,M,t,g){return J(function(A){for(var M=[],t=0;t<A.length;++t)M.push(255&A.charCodeAt(t));return M}(M),A,t,g)}function w(A,M,t,g){return y(A,M,t,g)}function j(A,M,t,g){return J(G(M),A,t,g)}function L(A,M,t,g){return J(function(A,M){for(var t,g,I,e=[],i=0;i<A.length&&!((M-=2)<0);++i)t=A.charCodeAt(i),g=t>>8,I=t%256,e.push(I),e.push(g);return e}(M,A.length-t),A,t,g)}function d(A,M,t){return 0===M&&t===A.length?g.fromByteArray(A):g.fromByteArray(A.slice(M,t))}function x(A,M,t){t=Math.min(A.length,t);for(var g=[],I=M;I<t;){var e,i,T,E,N=A[I],n=null,D=N>239?4:N>223?3:N>191?2:1;if(I+D<=t)switch(D){case 1:N<128&&(n=N);break;case 2:128==(192&(e=A[I+1]))&&(E=(31&N)<<6|63&e)>127&&(n=E);break;case 3:e=A[I+1],i=A[I+2],128==(192&e)&&128==(192&i)&&(E=(15&N)<<12|(63&e)<<6|63&i)>2047&&(E<55296||E>57343)&&(n=E);break;case 4:e=A[I+1],i=A[I+2],T=A[I+3],128==(192&e)&&128==(192&i)&&128==(192&T)&&(E=(15&N)<<18|(63&e)<<12|(63&i)<<6|63&T)>65535&&E<1114112&&(n=E)}null===n?(n=65533,D=1):n>65535&&(n-=65536,g.push(n>>>10&1023|55296),n=56320|1023&n),g.push(n),I+=D}return function(A){var M=A.length;if(M<=4096)return String.fromCharCode.apply(String,A);var t="",g=0;for(;g<M;)t+=String.fromCharCode.apply(String,A.slice(g,g+=4096));return t}(g)}M.Buffer=E,M.SlowBuffer=function(A){+A!=A&&(A=0);return E.alloc(+A)},M.INSPECT_MAX_BYTES=50,E.TYPED_ARRAY_SUPPORT=void 0!==A.TYPED_ARRAY_SUPPORT?A.TYPED_ARRAY_SUPPORT:function(){try{var A=new Uint8Array(1);return A.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===A.foo()&&"function"==typeof A.subarray&&0===A.subarray(1,1).byteLength}catch(A){return!1}}(),M.kMaxLength=i(),E.poolSize=8192,E._augment=function(A){return A.__proto__=E.prototype,A},E.from=function(A,M,t){return N(null,A,M,t)},E.TYPED_ARRAY_SUPPORT&&(E.prototype.__proto__=Uint8Array.prototype,E.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&E[Symbol.species]===E&&Object.defineProperty(E,Symbol.species,{value:null,configurable:!0})),E.alloc=function(A,M,t){return function(A,M,t,g){return n(M),M<=0?T(A,M):void 0!==t?"string"==typeof g?T(A,M).fill(t,g):T(A,M).fill(t):T(A,M)}(null,A,M,t)},E.allocUnsafe=function(A){return D(null,A)},E.allocUnsafeSlow=function(A){return D(null,A)},E.isBuffer=function(A){return!(null==A||!A._isBuffer)},E.compare=function(A,M){if(!E.isBuffer(A)||!E.isBuffer(M))throw new TypeError("Arguments must be Buffers");if(A===M)return 0;for(var t=A.length,g=M.length,I=0,e=Math.min(t,g);I<e;++I)if(A[I]!==M[I]){t=A[I],g=M[I];break}return t<g?-1:g<t?1:0},E.isEncoding=function(A){switch(String(A).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},E.concat=function(A,M){if(!e(A))throw new TypeError('"list" argument must be an Array of Buffers');if(0===A.length)return E.alloc(0);var t;if(void 0===M)for(M=0,t=0;t<A.length;++t)M+=A[t].length;var g=E.allocUnsafe(M),I=0;for(t=0;t<A.length;++t){var i=A[t];if(!E.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(g,I),I+=i.length}return g},E.byteLength=c,E.prototype._isBuffer=!0,E.prototype.swap16=function(){var A=this.length;if(A%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var M=0;M<A;M+=2)B(this,M,M+1);return this},E.prototype.swap32=function(){var A=this.length;if(A%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var M=0;M<A;M+=4)B(this,M,M+3),B(this,M+1,M+2);return this},E.prototype.swap64=function(){var A=this.length;if(A%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var M=0;M<A;M+=8)B(this,M,M+7),B(this,M+1,M+6),B(this,M+2,M+5),B(this,M+3,M+4);return this},E.prototype.toString=function(){var A=0|this.length;return 0===A?"":0===arguments.length?x(this,0,A):o.apply(this,arguments)},E.prototype.equals=function(A){if(!E.isBuffer(A))throw new TypeError("Argument must be a Buffer");return this===A||0===E.compare(this,A)},E.prototype.inspect=function(){var A="",t=M.INSPECT_MAX_BYTES;return this.length>0&&(A=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(A+=" ... ")),"<Buffer "+A+">"},E.prototype.compare=function(A,M,t,g,I){if(!E.isBuffer(A))throw new TypeError("Argument must be a Buffer");if(void 0===M&&(M=0),void 0===t&&(t=A?A.length:0),void 0===g&&(g=0),void 0===I&&(I=this.length),M<0||t>A.length||g<0||I>this.length)throw new RangeError("out of range index");if(g>=I&&M>=t)return 0;if(g>=I)return-1;if(M>=t)return 1;if(this===A)return 0;for(var e=(I>>>=0)-(g>>>=0),i=(t>>>=0)-(M>>>=0),T=Math.min(e,i),N=this.slice(g,I),n=A.slice(M,t),D=0;D<T;++D)if(N[D]!==n[D]){e=N[D],i=n[D];break}return e<i?-1:i<e?1:0},E.prototype.includes=function(A,M,t){return-1!==this.indexOf(A,M,t)},E.prototype.indexOf=function(A,M,t){return Q(this,A,M,t,!0)},E.prototype.lastIndexOf=function(A,M,t){return Q(this,A,M,t,!1)},E.prototype.write=function(A,M,t,g){if(void 0===M)g="utf8",t=this.length,M=0;else if(void 0===t&&"string"==typeof M)g=M,t=this.length,M=0;else{if(!isFinite(M))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");M|=0,isFinite(t)?(t|=0,void 0===g&&(g="utf8")):(g=t,t=void 0)}var I=this.length-M;if((void 0===t||t>I)&&(t=I),A.length>0&&(t<0||M<0)||M>this.length)throw new RangeError("Attempt to write outside buffer bounds");g||(g="utf8");for(var e=!1;;)switch(g){case"hex":return h(this,A,M,t);case"utf8":case"utf-8":return s(this,A,M,t);case"ascii":return y(this,A,M,t);case"latin1":case"binary":return w(this,A,M,t);case"base64":return j(this,A,M,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,A,M,t);default:if(e)throw new TypeError("Unknown encoding: "+g);g=(""+g).toLowerCase(),e=!0}},E.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Y(A,M,t){var g="";t=Math.min(A.length,t);for(var I=M;I<t;++I)g+=String.fromCharCode(127&A[I]);return g}function u(A,M,t){var g="";t=Math.min(A.length,t);for(var I=M;I<t;++I)g+=String.fromCharCode(A[I]);return g}function S(A,M,t){var g=A.length;(!M||M<0)&&(M=0),(!t||t<0||t>g)&&(t=g);for(var I="",e=M;e<t;++e)I+=p(A[e]);return I}function l(A,M,t){for(var g=A.slice(M,t),I="",e=0;e<g.length;e+=2)I+=String.fromCharCode(g[e]+256*g[e+1]);return I}function z(A,M,t){if(A%1!=0||A<0)throw new RangeError("offset is not uint");if(A+M>t)throw new RangeError("Trying to access beyond buffer length")}function U(A,M,t,g,I,e){if(!E.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(M>I||M<e)throw new RangeError('"value" argument is out of bounds');if(t+g>A.length)throw new RangeError("Index out of range")}function f(A,M,t,g){M<0&&(M=65535+M+1);for(var I=0,e=Math.min(A.length-t,2);I<e;++I)A[t+I]=(M&255<<8*(g?I:1-I))>>>8*(g?I:1-I)}function O(A,M,t,g){M<0&&(M=4294967295+M+1);for(var I=0,e=Math.min(A.length-t,4);I<e;++I)A[t+I]=M>>>8*(g?I:3-I)&255}function F(A,M,t,g,I,e){if(t+g>A.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function m(A,M,t,g,e){return e||F(A,0,t,4),I.write(A,M,t,g,23,4),t+4}function R(A,M,t,g,e){return e||F(A,0,t,8),I.write(A,M,t,g,52,8),t+8}E.prototype.slice=function(A,M){var t,g=this.length;if((A=~~A)<0?(A+=g)<0&&(A=0):A>g&&(A=g),(M=void 0===M?g:~~M)<0?(M+=g)<0&&(M=0):M>g&&(M=g),M<A&&(M=A),E.TYPED_ARRAY_SUPPORT)(t=this.subarray(A,M)).__proto__=E.prototype;else{var I=M-A;t=new E(I,void 0);for(var e=0;e<I;++e)t[e]=this[e+A]}return t},E.prototype.readUIntLE=function(A,M,t){A|=0,M|=0,t||z(A,M,this.length);for(var g=this[A],I=1,e=0;++e<M&&(I*=256);)g+=this[A+e]*I;return g},E.prototype.readUIntBE=function(A,M,t){A|=0,M|=0,t||z(A,M,this.length);for(var g=this[A+--M],I=1;M>0&&(I*=256);)g+=this[A+--M]*I;return g},E.prototype.readUInt8=function(A,M){return M||z(A,1,this.length),this[A]},E.prototype.readUInt16LE=function(A,M){return M||z(A,2,this.length),this[A]|this[A+1]<<8},E.prototype.readUInt16BE=function(A,M){return M||z(A,2,this.length),this[A]<<8|this[A+1]},E.prototype.readUInt32LE=function(A,M){return M||z(A,4,this.length),(this[A]|this[A+1]<<8|this[A+2]<<16)+16777216*this[A+3]},E.prototype.readUInt32BE=function(A,M){return M||z(A,4,this.length),16777216*this[A]+(this[A+1]<<16|this[A+2]<<8|this[A+3])},E.prototype.readIntLE=function(A,M,t){A|=0,M|=0,t||z(A,M,this.length);for(var g=this[A],I=1,e=0;++e<M&&(I*=256);)g+=this[A+e]*I;return g>=(I*=128)&&(g-=Math.pow(2,8*M)),g},E.prototype.readIntBE=function(A,M,t){A|=0,M|=0,t||z(A,M,this.length);for(var g=M,I=1,e=this[A+--g];g>0&&(I*=256);)e+=this[A+--g]*I;return e>=(I*=128)&&(e-=Math.pow(2,8*M)),e},E.prototype.readInt8=function(A,M){return M||z(A,1,this.length),128&this[A]?-1*(255-this[A]+1):this[A]},E.prototype.readInt16LE=function(A,M){M||z(A,2,this.length);var t=this[A]|this[A+1]<<8;return 32768&t?4294901760|t:t},E.prototype.readInt16BE=function(A,M){M||z(A,2,this.length);var t=this[A+1]|this[A]<<8;return 32768&t?4294901760|t:t},E.prototype.readInt32LE=function(A,M){return M||z(A,4,this.length),this[A]|this[A+1]<<8|this[A+2]<<16|this[A+3]<<24},E.prototype.readInt32BE=function(A,M){return M||z(A,4,this.length),this[A]<<24|this[A+1]<<16|this[A+2]<<8|this[A+3]},E.prototype.readFloatLE=function(A,M){return M||z(A,4,this.length),I.read(this,A,!0,23,4)},E.prototype.readFloatBE=function(A,M){return M||z(A,4,this.length),I.read(this,A,!1,23,4)},E.prototype.readDoubleLE=function(A,M){return M||z(A,8,this.length),I.read(this,A,!0,52,8)},E.prototype.readDoubleBE=function(A,M){return M||z(A,8,this.length),I.read(this,A,!1,52,8)},E.prototype.writeUIntLE=function(A,M,t,g){(A=+A,M|=0,t|=0,g)||U(this,A,M,t,Math.pow(2,8*t)-1,0);var I=1,e=0;for(this[M]=255&A;++e<t&&(I*=256);)this[M+e]=A/I&255;return M+t},E.prototype.writeUIntBE=function(A,M,t,g){(A=+A,M|=0,t|=0,g)||U(this,A,M,t,Math.pow(2,8*t)-1,0);var I=t-1,e=1;for(this[M+I]=255&A;--I>=0&&(e*=256);)this[M+I]=A/e&255;return M+t},E.prototype.writeUInt8=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,1,255,0),E.TYPED_ARRAY_SUPPORT||(A=Math.floor(A)),this[M]=255&A,M+1},E.prototype.writeUInt16LE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,2,65535,0),E.TYPED_ARRAY_SUPPORT?(this[M]=255&A,this[M+1]=A>>>8):f(this,A,M,!0),M+2},E.prototype.writeUInt16BE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,2,65535,0),E.TYPED_ARRAY_SUPPORT?(this[M]=A>>>8,this[M+1]=255&A):f(this,A,M,!1),M+2},E.prototype.writeUInt32LE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,4,4294967295,0),E.TYPED_ARRAY_SUPPORT?(this[M+3]=A>>>24,this[M+2]=A>>>16,this[M+1]=A>>>8,this[M]=255&A):O(this,A,M,!0),M+4},E.prototype.writeUInt32BE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,4,4294967295,0),E.TYPED_ARRAY_SUPPORT?(this[M]=A>>>24,this[M+1]=A>>>16,this[M+2]=A>>>8,this[M+3]=255&A):O(this,A,M,!1),M+4},E.prototype.writeIntLE=function(A,M,t,g){if(A=+A,M|=0,!g){var I=Math.pow(2,8*t-1);U(this,A,M,t,I-1,-I)}var e=0,i=1,T=0;for(this[M]=255&A;++e<t&&(i*=256);)A<0&&0===T&&0!==this[M+e-1]&&(T=1),this[M+e]=(A/i>>0)-T&255;return M+t},E.prototype.writeIntBE=function(A,M,t,g){if(A=+A,M|=0,!g){var I=Math.pow(2,8*t-1);U(this,A,M,t,I-1,-I)}var e=t-1,i=1,T=0;for(this[M+e]=255&A;--e>=0&&(i*=256);)A<0&&0===T&&0!==this[M+e+1]&&(T=1),this[M+e]=(A/i>>0)-T&255;return M+t},E.prototype.writeInt8=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,1,127,-128),E.TYPED_ARRAY_SUPPORT||(A=Math.floor(A)),A<0&&(A=255+A+1),this[M]=255&A,M+1},E.prototype.writeInt16LE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,2,32767,-32768),E.TYPED_ARRAY_SUPPORT?(this[M]=255&A,this[M+1]=A>>>8):f(this,A,M,!0),M+2},E.prototype.writeInt16BE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,2,32767,-32768),E.TYPED_ARRAY_SUPPORT?(this[M]=A>>>8,this[M+1]=255&A):f(this,A,M,!1),M+2},E.prototype.writeInt32LE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,4,2147483647,-2147483648),E.TYPED_ARRAY_SUPPORT?(this[M]=255&A,this[M+1]=A>>>8,this[M+2]=A>>>16,this[M+3]=A>>>24):O(this,A,M,!0),M+4},E.prototype.writeInt32BE=function(A,M,t){return A=+A,M|=0,t||U(this,A,M,4,2147483647,-2147483648),A<0&&(A=4294967295+A+1),E.TYPED_ARRAY_SUPPORT?(this[M]=A>>>24,this[M+1]=A>>>16,this[M+2]=A>>>8,this[M+3]=255&A):O(this,A,M,!1),M+4},E.prototype.writeFloatLE=function(A,M,t){return m(this,A,M,!0,t)},E.prototype.writeFloatBE=function(A,M,t){return m(this,A,M,!1,t)},E.prototype.writeDoubleLE=function(A,M,t){return R(this,A,M,!0,t)},E.prototype.writeDoubleBE=function(A,M,t){return R(this,A,M,!1,t)},E.prototype.copy=function(A,M,t,g){if(t||(t=0),g||0===g||(g=this.length),M>=A.length&&(M=A.length),M||(M=0),g>0&&g<t&&(g=t),g===t)return 0;if(0===A.length||0===this.length)return 0;if(M<0)throw new RangeError("targetStart out of bounds");if(t<0||t>=this.length)throw new RangeError("sourceStart out of bounds");if(g<0)throw new RangeError("sourceEnd out of bounds");g>this.length&&(g=this.length),A.length-M<g-t&&(g=A.length-M+t);var I,e=g-t;if(this===A&&t<M&&M<g)for(I=e-1;I>=0;--I)A[I+M]=this[I+t];else if(e<1e3||!E.TYPED_ARRAY_SUPPORT)for(I=0;I<e;++I)A[I+M]=this[I+t];else Uint8Array.prototype.set.call(A,this.subarray(t,t+e),M);return e},E.prototype.fill=function(A,M,t,g){if("string"==typeof A){if("string"==typeof M?(g=M,M=0,t=this.length):"string"==typeof t&&(g=t,t=this.length),1===A.length){var I=A.charCodeAt(0);I<256&&(A=I)}if(void 0!==g&&"string"!=typeof g)throw new TypeError("encoding must be a string");if("string"==typeof g&&!E.isEncoding(g))throw new TypeError("Unknown encoding: "+g)}else"number"==typeof A&&(A&=255);if(M<0||this.length<M||this.length<t)throw new RangeError("Out of range index");if(t<=M)return this;var e;if(M>>>=0,t=void 0===t?this.length:t>>>0,A||(A=0),"number"==typeof A)for(e=M;e<t;++e)this[e]=A;else{var i=E.isBuffer(A)?A:b(new E(A,g).toString()),T=i.length;for(e=0;e<t-M;++e)this[e+M]=i[e%T]}return this};var k=/[^+\/0-9A-Za-z-_]/g;function p(A){return A<16?"0"+A.toString(16):A.toString(16)}function b(A,M){var t;M=M||1/0;for(var g=A.length,I=null,e=[],i=0;i<g;++i){if((t=A.charCodeAt(i))>55295&&t<57344){if(!I){if(t>56319){(M-=3)>-1&&e.push(239,191,189);continue}if(i+1===g){(M-=3)>-1&&e.push(239,191,189);continue}I=t;continue}if(t<56320){(M-=3)>-1&&e.push(239,191,189),I=t;continue}t=65536+(I-55296<<10|t-56320)}else I&&(M-=3)>-1&&e.push(239,191,189);if(I=null,t<128){if((M-=1)<0)break;e.push(t)}else if(t<2048){if((M-=2)<0)break;e.push(t>>6|192,63&t|128)}else if(t<65536){if((M-=3)<0)break;e.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((M-=4)<0)break;e.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return e}function G(A){return g.toByteArray(function(A){if((A=function(A){return A.trim?A.trim():A.replace(/^\s+|\s+$/g,"")}(A).replace(k,"")).length<2)return"";for(;A.length%4!=0;)A+="=";return A}(A))}function J(A,M,t,g){for(var I=0;I<g&&!(I+t>=M.length||I>=A.length);++I)M[I+t]=A[I];return I}}).call(this,t(10))},function(A,M){var t;t=function(){return this}();try{t=t||new Function("return this")()}catch(A){"object"==typeof window&&(t=window)}A.exports=t},function(A,M){function t(A,M){if(!A)throw new Error(M||"Assertion failed")}A.exports=t,t.equal=function(A,M,t){if(A!=M)throw new Error(t||"Assertion failed: "+A+" != "+M)}},function(A,M,t){"use strict";var g=M,I=t(6),e=t(11),i=t(94);g.assert=e,g.toArray=i.toArray,g.zero2=i.zero2,g.toHex=i.toHex,g.encode=i.encode,g.getNAF=function(A,M,t){var g=new Array(Math.max(A.bitLength(),t)+1);g.fill(0);for(var I=1<<M+1,e=A.clone(),i=0;i<g.length;i++){var T,E=e.andln(I-1);e.isOdd()?(T=E>(I>>1)-1?(I>>1)-E:E,e.isubn(T)):T=0,g[i]=T,e.iushrn(1)}return g},g.getJSF=function(A,M){var t=[[],[]];A=A.clone(),M=M.clone();for(var g=0,I=0;A.cmpn(-g)>0||M.cmpn(-I)>0;){var e,i,T,E=A.andln(3)+g&3,N=M.andln(3)+I&3;if(3===E&&(E=-1),3===N&&(N=-1),0==(1&E))e=0;else e=3!==(T=A.andln(7)+g&7)&&5!==T||2!==N?E:-E;if(t[0].push(e),0==(1&N))i=0;else i=3!==(T=M.andln(7)+I&7)&&5!==T||2!==E?N:-N;t[1].push(i),2*g===e+1&&(g=1-g),2*I===i+1&&(I=1-I),A.iushrn(1),M.iushrn(1)}return t},g.cachedProperty=function(A,M,t){var g="_"+M;A.prototype[M]=function(){return void 0!==this[g]?this[g]:this[g]=t.call(this)}},g.parseBytes=function(A){return"string"==typeof A?g.toArray(A,"hex"):A},g.intFromLE=function(A){return new I(A,"hex","le")}},function(A,M,t){"use strict";var g=function(){function A(){this.mimeType=null,this.duration=null,this.hasAudio=null,this.hasVideo=null,this.audioCodec=null,this.videoCodec=null,this.audioDataRate=null,this.videoDataRate=null,this.audioSampleRate=null,this.audioChannelCount=null,this.width=null,this.height=null,this.fps=null,this.profile=null,this.level=null,this.refFrames=null,this.chromaFormat=null,this.sarNum=null,this.sarDen=null,this.metadata=null,this.segments=null,this.segmentCount=null,this.hasKeyframesIndex=null,this.keyframesIndex=null}var M=A.prototype;return M.isComplete=function(){var A=!1===this.hasAudio||!0===this.hasAudio&&null!=this.audioCodec&&null!=this.audioSampleRate&&null!=this.audioChannelCount,M=!1===this.hasVideo||!0===this.hasVideo&&null!=this.videoCodec&&null!=this.width&&null!=this.height&&null!=this.fps&&null!=this.profile&&null!=this.level&&null!=this.refFrames&&null!=this.chromaFormat&&null!=this.sarNum&&null!=this.sarDen;return null!=this.mimeType&&null!=this.duration&&null!=this.metadata&&null!=this.hasKeyframesIndex&&A&&M},M.isSeekable=function(){return!0===this.hasKeyframesIndex},M.getNearestKeyframe=function(A){if(null==this.keyframesIndex)return null;var M=this.keyframesIndex,t=this._search(M.times,A);return{index:t,milliseconds:M.times[t],fileposition:M.filepositions[t]}},M._search=function(A,M){var t=0,g=A.length-1,I=0,e=0,i=g;for(M<A[0]&&(t=0,e=i+1);e<=i;){if((I=e+Math.floor((i-e)/2))===g||M>=A[I]&&M<A[I+1]){t=I;break}A[I]<M?e=I+1:i=I-1}return t},A}();M.a=g},function(A,M,t){"use strict";var g=t(11),I=t(3);function e(A,M){return 55296==(64512&A.charCodeAt(M))&&(!(M<0||M+1>=A.length)&&56320==(64512&A.charCodeAt(M+1)))}function i(A){return(A>>>24|A>>>8&65280|A<<8&16711680|(255&A)<<24)>>>0}function T(A){return 1===A.length?"0"+A:A}function E(A){return 7===A.length?"0"+A:6===A.length?"00"+A:5===A.length?"000"+A:4===A.length?"0000"+A:3===A.length?"00000"+A:2===A.length?"000000"+A:1===A.length?"0000000"+A:A}M.inherits=I,M.toArray=function(A,M){if(Array.isArray(A))return A.slice();if(!A)return[];var t=[];if("string"==typeof A)if(M){if("hex"===M)for((A=A.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(A="0"+A),I=0;I<A.length;I+=2)t.push(parseInt(A[I]+A[I+1],16))}else for(var g=0,I=0;I<A.length;I++){var i=A.charCodeAt(I);i<128?t[g++]=i:i<2048?(t[g++]=i>>6|192,t[g++]=63&i|128):e(A,I)?(i=65536+((1023&i)<<10)+(1023&A.charCodeAt(++I)),t[g++]=i>>18|240,t[g++]=i>>12&63|128,t[g++]=i>>6&63|128,t[g++]=63&i|128):(t[g++]=i>>12|224,t[g++]=i>>6&63|128,t[g++]=63&i|128)}else for(I=0;I<A.length;I++)t[I]=0|A[I];return t},M.toHex=function(A){for(var M="",t=0;t<A.length;t++)M+=T(A[t].toString(16));return M},M.htonl=i,M.toHex32=function(A,M){for(var t="",g=0;g<A.length;g++){var I=A[g];"little"===M&&(I=i(I)),t+=E(I.toString(16))}return t},M.zero2=T,M.zero8=E,M.join32=function(A,M,t,I){var e=t-M;g(e%4==0);for(var i=new Array(e/4),T=0,E=M;T<i.length;T++,E+=4){var N;N="big"===I?A[E]<<24|A[E+1]<<16|A[E+2]<<8|A[E+3]:A[E+3]<<24|A[E+2]<<16|A[E+1]<<8|A[E],i[T]=N>>>0}return i},M.split32=function(A,M){for(var t=new Array(4*A.length),g=0,I=0;g<A.length;g++,I+=4){var e=A[g];"big"===M?(t[I]=e>>>24,t[I+1]=e>>>16&255,t[I+2]=e>>>8&255,t[I+3]=255&e):(t[I+3]=e>>>24,t[I+2]=e>>>16&255,t[I+1]=e>>>8&255,t[I]=255&e)}return t},M.rotr32=function(A,M){return A>>>M|A<<32-M},M.rotl32=function(A,M){return A<<M|A>>>32-M},M.sum32=function(A,M){return A+M>>>0},M.sum32_3=function(A,M,t){return A+M+t>>>0},M.sum32_4=function(A,M,t,g){return A+M+t+g>>>0},M.sum32_5=function(A,M,t,g,I){return A+M+t+g+I>>>0},M.sum64=function(A,M,t,g){var I=A[M],e=g+A[M+1]>>>0,i=(e<g?1:0)+t+I;A[M]=i>>>0,A[M+1]=e},M.sum64_hi=function(A,M,t,g){return(M+g>>>0<M?1:0)+A+t>>>0},M.sum64_lo=function(A,M,t,g){return M+g>>>0},M.sum64_4_hi=function(A,M,t,g,I,e,i,T){var E=0,N=M;return E+=(N=N+g>>>0)<M?1:0,E+=(N=N+e>>>0)<e?1:0,A+t+I+i+(E+=(N=N+T>>>0)<T?1:0)>>>0},M.sum64_4_lo=function(A,M,t,g,I,e,i,T){return M+g+e+T>>>0},M.sum64_5_hi=function(A,M,t,g,I,e,i,T,E,N){var n=0,D=M;return n+=(D=D+g>>>0)<M?1:0,n+=(D=D+e>>>0)<e?1:0,n+=(D=D+T>>>0)<T?1:0,A+t+I+i+E+(n+=(D=D+N>>>0)<N?1:0)>>>0},M.sum64_5_lo=function(A,M,t,g,I,e,i,T,E,N){return M+g+e+T+N>>>0},M.rotr64_hi=function(A,M,t){return(M<<32-t|A>>>t)>>>0},M.rotr64_lo=function(A,M,t){return(A<<32-t|M>>>t)>>>0},M.shr64_hi=function(A,M,t){return A>>>t},M.shr64_lo=function(A,M,t){return(A<<32-t|M>>>t)>>>0}},function(A,M,t){var g=t(4).Buffer,I=t(135).Transform,e=t(24).StringDecoder;function i(A){I.call(this),this.hashMode="string"==typeof A,this.hashMode?this[A]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}t(3)(i,I),i.prototype.update=function(A,M,t){"string"==typeof A&&(A=g.from(A,M));var I=this._update(A);return this.hashMode?this:(t&&(I=this._toString(I,t)),I)},i.prototype.setAutoPadding=function(){},i.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},i.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},i.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},i.prototype._transform=function(A,M,t){var g;try{this.hashMode?this._update(A):this.push(this._update(A))}catch(A){g=A}finally{t(g)}},i.prototype._flush=function(A){var M;try{this.push(this.__final())}catch(A){M=A}A(M)},i.prototype._finalOrDigest=function(A){var M=this.__final()||g.alloc(0);return A&&(M=this._toString(M,A,!0)),M},i.prototype._toString=function(A,M,t){if(this._decoder||(this._decoder=new e(M),this._encoding=M),this._encoding!==M)throw new Error("can't switch encodings");var g=this._decoder.write(A);return t&&(g+=this._decoder.end()),g},A.exports=i},function(A,M,t){"use strict";var g=t(31),I=Object.keys||function(A){var M=[];for(var t in A)M.push(t);return M};A.exports=D;var e=Object.create(t(25));e.inherits=t(3);var i=t(72),T=t(43);e.inherits(D,i);for(var E=I(T.prototype),N=0;N<E.length;N++){var n=E[N];D.prototype[n]||(D.prototype[n]=T.prototype[n])}function D(A){if(!(this instanceof D))return new D(A);i.call(this,A),T.call(this,A),A&&!1===A.readable&&(this.readable=!1),A&&!1===A.writable&&(this.writable=!1),this.allowHalfOpen=!0,A&&!1===A.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",C)}function C(){this.allowHalfOpen||this._writableState.ended||g.nextTick(r,this)}function r(A){A.end()}Object.defineProperty(D.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(D.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(A){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=A,this._writableState.destroyed=A)}}),D.prototype._destroy=function(A,M){this.push(null),this.end(),g.nextTick(M,A)}},function(A,M,t){function g(A){var M={};function t(g){if(M[g])return M[g].exports;var I=M[g]={i:g,l:!1,exports:{}};return A[g].call(I.exports,I,I.exports,t),I.l=!0,I.exports}t.m=A,t.c=M,t.i=function(A){return A},t.d=function(A,M,g){t.o(A,M)||Object.defineProperty(A,M,{configurable:!1,enumerable:!0,get:g})},t.r=function(A){Object.defineProperty(A,"__esModule",{value:!0})},t.n=function(A){var M=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(M,"a",M),M},t.o=function(A,M){return Object.prototype.hasOwnProperty.call(A,M)},t.p="/",t.oe=function(A){throw console.error(A),A};var g=t(t.s=ENTRY_MODULE);return g.default||g}function I(A){return(A+"").replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}function e(A,M,g){var e={};e[g]=[];var i=M.toString(),T=i.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/);if(!T)return e;for(var E,N=T[1],n=new RegExp("(\\\\n|\\W)"+I(N)+"\\(\\s*(/\\*.*?\\*/)?\\s*.*?([\\.|\\-|\\+|\\w|/|@]+).*?\\)","g");E=n.exec(i);)"dll-reference"!==E[3]&&e[g].push(E[3]);for(n=new RegExp("\\("+I(N)+'\\("(dll-reference\\s([\\.|\\-|\\+|\\w|/|@]+))"\\)\\)\\(\\s*(/\\*.*?\\*/)?\\s*.*?([\\.|\\-|\\+|\\w|/|@]+).*?\\)',"g");E=n.exec(i);)A[E[2]]||(e[g].push(E[1]),A[E[2]]=t(E[1]).m),e[E[2]]=e[E[2]]||[],e[E[2]].push(E[4]);for(var D,C=Object.keys(e),r=0;r<C.length;r++)for(var c=0;c<e[C[r]].length;c++)D=e[C[r]][c],isNaN(1*D)||(e[C[r]][c]=1*e[C[r]][c]);return e}function i(A){return Object.keys(A).reduce((function(M,t){return M||A[t].length>0}),!1)}A.exports=function(A,M){M=M||{};var I={main:t.m},T=M.all?{main:Object.keys(I.main)}:function(A,M){for(var t={main:[M]},g={main:[]},I={main:{}};i(t);)for(var T=Object.keys(t),E=0;E<T.length;E++){var N=T[E],n=t[N].pop();if(I[N]=I[N]||{},!I[N][n]&&A[N][n]){I[N][n]=!0,g[N]=g[N]||[],g[N].push(n);for(var D=e(A,A[N][n],N),C=Object.keys(D),r=0;r<C.length;r++)t[C[r]]=t[C[r]]||[],t[C[r]]=t[C[r]].concat(D[C[r]])}}return g}(I,A),E="";Object.keys(T).filter((function(A){return"main"!==A})).forEach((function(A){for(var M=0;T[A][M];)M++;T[A].push(M),I[A][M]="(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })",E=E+"var "+A+" = ("+g.toString().replace("ENTRY_MODULE",JSON.stringify(M))+")({"+T[A].map((function(M){return JSON.stringify(M)+": "+I[A][M].toString()})).join(",")+"});\n"})),E=E+"new (("+g.toString().replace("ENTRY_MODULE",JSON.stringify(A))+")({"+T.main.map((function(A){return JSON.stringify(A)+": "+I.main[A].toString()})).join(",")+"}))(self);";var N=new window.Blob([E],{type:"text/javascript"});if(M.bare)return N;var n=(window.URL||window.webkitURL||window.mozURL||window.msURL).createObjectURL(N),D=new window.Worker(n);return D.objectURL=n,D}},function(A,M,t){"use strict";(function(M,g){var I=t(4).Buffer,e=M.crypto||M.msCrypto;e&&e.getRandomValues?A.exports=function(A,M){if(A>4294967295)throw new RangeError("requested too many random bytes");var t=I.allocUnsafe(A);if(A>0)if(A>65536)for(var i=0;i<A;i+=65536)e.getRandomValues(t.slice(i,i+65536));else e.getRandomValues(t);if("function"==typeof M)return g.nextTick((function(){M(null,t)}));return t}:A.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}).call(this,t(10),t(8))},function(A,M,t){"use strict";var g={};function I(A,M,t){t||(t=Error);var I=function(A){var t,g;function I(t,g,I){return A.call(this,function(A,t,g){return"string"==typeof M?M:M(A,t,g)}(t,g,I))||this}return g=A,(t=I).prototype=Object.create(g.prototype),t.prototype.constructor=t,t.__proto__=g,I}(t);I.prototype.name=t.name,I.prototype.code=A,g[A]=I}function e(A,M){if(Array.isArray(A)){var t=A.length;return A=A.map((function(A){return String(A)})),t>2?"one of ".concat(M," ").concat(A.slice(0,t-1).join(", "),", or ")+A[t-1]:2===t?"one of ".concat(M," ").concat(A[0]," or ").concat(A[1]):"of ".concat(M," ").concat(A[0])}return"of ".concat(M," ").concat(String(A))}I("ERR_INVALID_OPT_VALUE",(function(A,M){return'The value "'+M+'" is invalid for option "'+A+'"'}),TypeError),I("ERR_INVALID_ARG_TYPE",(function(A,M,t){var g,I,i,T;if("string"==typeof M&&(I="not ",M.substr(!i||i<0?0:+i,I.length)===I)?(g="must not be",M=M.replace(/^not /,"")):g="must be",function(A,M,t){return(void 0===t||t>A.length)&&(t=A.length),A.substring(t-M.length,t)===M}(A," argument"))T="The ".concat(A," ").concat(g," ").concat(e(M,"type"));else{var E=function(A,M,t){return"number"!=typeof t&&(t=0),!(t+M.length>A.length)&&-1!==A.indexOf(M,t)}(A,".")?"property":"argument";T='The "'.concat(A,'" ').concat(E," ").concat(g," ").concat(e(M,"type"))}return T+=". Received type ".concat(typeof t)}),TypeError),I("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),I("ERR_METHOD_NOT_IMPLEMENTED",(function(A){return"The "+A+" method is not implemented"})),I("ERR_STREAM_PREMATURE_CLOSE","Premature close"),I("ERR_STREAM_DESTROYED",(function(A){return"Cannot call "+A+" after a stream was destroyed"})),I("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),I("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),I("ERR_STREAM_WRITE_AFTER_END","write after end"),I("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),I("ERR_UNKNOWN_ENCODING",(function(A){return"Unknown encoding: "+A}),TypeError),I("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),A.exports.codes=g},function(A,M,t){"use strict";(function(M){var g=Object.keys||function(A){var M=[];for(var t in A)M.push(t);return M};A.exports=N;var I=t(63),e=t(67);t(3)(N,I);for(var i=g(e.prototype),T=0;T<i.length;T++){var E=i[T];N.prototype[E]||(N.prototype[E]=e.prototype[E])}function N(A){if(!(this instanceof N))return new N(A);I.call(this,A),e.call(this,A),this.allowHalfOpen=!0,A&&(!1===A.readable&&(this.readable=!1),!1===A.writable&&(this.writable=!1),!1===A.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",n)))}function n(){this._writableState.ended||M.nextTick(D,this)}function D(A){A.end()}Object.defineProperty(N.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(N.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(N.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(N.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(A){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=A,this._writableState.destroyed=A)}})}).call(this,t(8))},function(A,M,t){var g=t(4).Buffer;function I(A,M){this._block=g.alloc(A),this._finalSize=M,this._blockSize=A,this._len=0}I.prototype.update=function(A,M){"string"==typeof A&&(M=M||"utf8",A=g.from(A,M));for(var t=this._block,I=this._blockSize,e=A.length,i=this._len,T=0;T<e;){for(var E=i%I,N=Math.min(e-T,I-E),n=0;n<N;n++)t[E+n]=A[T+n];T+=N,(i+=N)%I==0&&this._update(t)}return this._len+=e,this},I.prototype.digest=function(A){var M=this._len%this._blockSize;this._block[M]=128,this._block.fill(0,M+1),M>=this._finalSize&&(this._update(this._block),this._block.fill(0));var t=8*this._len;if(t<=4294967295)this._block.writeUInt32BE(t,this._blockSize-4);else{var g=(4294967295&t)>>>0,I=(t-g)/4294967296;this._block.writeUInt32BE(I,this._blockSize-8),this._block.writeUInt32BE(g,this._blockSize-4)}this._update(this._block);var e=this._hash();return A?e.toString(A):e},I.prototype._update=function(){throw new Error("_update must be implemented by subclass")},A.exports=I},function(A,M,t){"use strict";
-/*! @name @videojs/vhs-utils @version 1.3.0 @license MIT */var g=function(){function A(){this.listeners={}}var M=A.prototype;return M.on=function(A,M){this.listeners[A]||(this.listeners[A]=[]),this.listeners[A].push(M)},M.off=function(A,M){if(!this.listeners[A])return!1;var t=this.listeners[A].indexOf(M);return this.listeners[A]=this.listeners[A].slice(0),this.listeners[A].splice(t,1),t>-1},M.trigger=function(A){var M=this.listeners[A];if(M)if(2===arguments.length)for(var t=M.length,g=0;g<t;++g)M[g].call(this,arguments[1]);else for(var I=Array.prototype.slice.call(arguments,1),e=M.length,i=0;i<e;++i)M[i].apply(this,I)},M.dispose=function(){this.listeners={}},M.pipe=function(A){this.on("data",(function(M){A.push(M)}))},A}();A.exports=g},function(A,M,t){"use strict";var g=t(3),I=t(37),e=t(39),i=t(40),T=t(15);function E(A){T.call(this,"digest"),this._hash=A}g(E,T),E.prototype._update=function(A){this._hash.update(A)},E.prototype._final=function(){return this._hash.digest()},A.exports=function(A){return"md5"===(A=A.toLowerCase())?new I:"rmd160"===A||"ripemd160"===A?new e:new E(i(A))}},function(A,M,t){"use strict";var g=t(4).Buffer,I=g.isEncoding||function(A){switch((A=""+A)&&A.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function e(A){var M;switch(this.encoding=function(A){var M=function(A){if(!A)return"utf8";for(var M;;)switch(A){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return A;default:if(M)return;A=(""+A).toLowerCase(),M=!0}}(A);if("string"!=typeof M&&(g.isEncoding===I||!I(A)))throw new Error("Unknown encoding: "+A);return M||A}(A),this.encoding){case"utf16le":this.text=E,this.end=N,M=4;break;case"utf8":this.fillLast=T,M=4;break;case"base64":this.text=n,this.end=D,M=3;break;default:return this.write=C,void(this.end=r)}this.lastNeed=0,this.lastTotal=0,this.lastChar=g.allocUnsafe(M)}function i(A){return A<=127?0:A>>5==6?2:A>>4==14?3:A>>3==30?4:A>>6==2?-1:-2}function T(A){var M=this.lastTotal-this.lastNeed,t=function(A,M,t){if(128!=(192&M[0]))return A.lastNeed=0,"�";if(A.lastNeed>1&&M.length>1){if(128!=(192&M[1]))return A.lastNeed=1,"�";if(A.lastNeed>2&&M.length>2&&128!=(192&M[2]))return A.lastNeed=2,"�"}}(this,A);return void 0!==t?t:this.lastNeed<=A.length?(A.copy(this.lastChar,M,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(A.copy(this.lastChar,M,0,A.length),void(this.lastNeed-=A.length))}function E(A,M){if((A.length-M)%2==0){var t=A.toString("utf16le",M);if(t){var g=t.charCodeAt(t.length-1);if(g>=55296&&g<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=A[A.length-2],this.lastChar[1]=A[A.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=A[A.length-1],A.toString("utf16le",M,A.length-1)}function N(A){var M=A&&A.length?this.write(A):"";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return M+this.lastChar.toString("utf16le",0,t)}return M}function n(A,M){var t=(A.length-M)%3;return 0===t?A.toString("base64",M):(this.lastNeed=3-t,this.lastTotal=3,1===t?this.lastChar[0]=A[A.length-1]:(this.lastChar[0]=A[A.length-2],this.lastChar[1]=A[A.length-1]),A.toString("base64",M,A.length-t))}function D(A){var M=A&&A.length?this.write(A):"";return this.lastNeed?M+this.lastChar.toString("base64",0,3-this.lastNeed):M}function C(A){return A.toString(this.encoding)}function r(A){return A&&A.length?this.write(A):""}M.StringDecoder=e,e.prototype.write=function(A){if(0===A.length)return"";var M,t;if(this.lastNeed){if(void 0===(M=this.fillLast(A)))return"";t=this.lastNeed,this.lastNeed=0}else t=0;return t<A.length?M?M+this.text(A,t):this.text(A,t):M||""},e.prototype.end=function(A){var M=A&&A.length?this.write(A):"";return this.lastNeed?M+"�":M},e.prototype.text=function(A,M){var t=function(A,M,t){var g=M.length-1;if(g<t)return 0;var I=i(M[g]);if(I>=0)return I>0&&(A.lastNeed=I-1),I;if(--g<t||-2===I)return 0;if((I=i(M[g]))>=0)return I>0&&(A.lastNeed=I-2),I;if(--g<t||-2===I)return 0;if((I=i(M[g]))>=0)return I>0&&(2===I?I=0:A.lastNeed=I-3),I;return 0}(this,A,M);if(!this.lastNeed)return A.toString("utf8",M);this.lastTotal=t;var g=A.length-(t-this.lastNeed);return A.copy(this.lastChar,0,g),A.toString("utf8",M,g)},e.prototype.fillLast=function(A){if(this.lastNeed<=A.length)return A.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);A.copy(this.lastChar,this.lastTotal-this.lastNeed,0,A.length),this.lastNeed-=A.length}},function(A,M,t){(function(A){function t(A){return Object.prototype.toString.call(A)}M.isArray=function(A){return Array.isArray?Array.isArray(A):"[object Array]"===t(A)},M.isBoolean=function(A){return"boolean"==typeof A},M.isNull=function(A){return null===A},M.isNullOrUndefined=function(A){return null==A},M.isNumber=function(A){return"number"==typeof A},M.isString=function(A){return"string"==typeof A},M.isSymbol=function(A){return"symbol"==typeof A},M.isUndefined=function(A){return void 0===A},M.isRegExp=function(A){return"[object RegExp]"===t(A)},M.isObject=function(A){return"object"==typeof A&&null!==A},M.isDate=function(A){return"[object Date]"===t(A)},M.isError=function(A){return"[object Error]"===t(A)||A instanceof Error},M.isFunction=function(A){return"function"==typeof A},M.isPrimitive=function(A){return null===A||"boolean"==typeof A||"number"==typeof A||"string"==typeof A||"symbol"==typeof A||void 0===A},M.isBuffer=A.isBuffer}).call(this,t(9).Buffer)},function(A,M,t){(function(M){A.exports=function(A,t){for(var g=Math.min(A.length,t.length),I=new M(g),e=0;e<g;++e)I[e]=A[e]^t[e];return I}}).call(this,t(9).Buffer)},function(A,M,t){"use strict";var g=t(14),I=t(11);function e(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}M.BlockHash=e,e.prototype.update=function(A,M){if(A=g.toArray(A,M),this.pending?this.pending=this.pending.concat(A):this.pending=A,this.pendingTotal+=A.length,this.pending.length>=this._delta8){var t=(A=this.pending).length%this._delta8;this.pending=A.slice(A.length-t,A.length),0===this.pending.length&&(this.pending=null),A=g.join32(A,0,A.length-t,this.endian);for(var I=0;I<A.length;I+=this._delta32)this._update(A,I,I+this._delta32)}return this},e.prototype.digest=function(A){return this.update(this._pad()),I(null===this.pending),this._digest(A)},e.prototype._pad=function(){var A=this.pendingTotal,M=this._delta8,t=M-(A+this.padLength)%M,g=new Array(t+this.padLength);g[0]=128;for(var I=1;I<t;I++)g[I]=0;if(A<<=3,"big"===this.endian){for(var e=8;e<this.padLength;e++)g[I++]=0;g[I++]=0,g[I++]=0,g[I++]=0,g[I++]=0,g[I++]=A>>>24&255,g[I++]=A>>>16&255,g[I++]=A>>>8&255,g[I++]=255&A}else for(g[I++]=255&A,g[I++]=A>>>8&255,g[I++]=A>>>16&255,g[I++]=A>>>24&255,g[I++]=0,g[I++]=0,g[I++]=0,g[I++]=0,e=8;e<this.padLength;e++)g[I++]=0;return g}},function(A,M,t){"use strict";var g=t(3),I=t(54).Reporter,e=t(52).Buffer;function i(A,M){I.call(this,M),e.isBuffer(A)?(this.base=A,this.offset=0,this.length=A.length):this.error("Input not Buffer")}function T(A,M){if(Array.isArray(A))this.length=0,this.value=A.map((function(A){return T.isEncoderBuffer(A)||(A=new T(A,M)),this.length+=A.length,A}),this);else if("number"==typeof A){if(!(0<=A&&A<=255))return M.error("non-byte EncoderBuffer value");this.value=A,this.length=1}else if("string"==typeof A)this.value=A,this.length=e.byteLength(A);else{if(!e.isBuffer(A))return M.error("Unsupported type: "+typeof A);this.value=A,this.length=A.length}}g(i,I),M.DecoderBuffer=i,i.isDecoderBuffer=function(A){return A instanceof i||"object"==typeof A&&e.isBuffer(A.base)&&"DecoderBuffer"===A.constructor.name&&"number"==typeof A.offset&&"number"==typeof A.length&&"function"==typeof A.save&&"function"==typeof A.restore&&"function"==typeof A.isEmpty&&"function"==typeof A.readUInt8&&"function"==typeof A.skip&&"function"==typeof A.raw},i.prototype.save=function(){return{offset:this.offset,reporter:I.prototype.save.call(this)}},i.prototype.restore=function(A){var M=new i(this.base);return M.offset=A.offset,M.length=this.offset,this.offset=A.offset,I.prototype.restore.call(this,A.reporter),M},i.prototype.isEmpty=function(){return this.offset===this.length},i.prototype.readUInt8=function(A){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(A||"DecoderBuffer overrun")},i.prototype.skip=function(A,M){if(!(this.offset+A<=this.length))return this.error(M||"DecoderBuffer overrun");var t=new i(this.base);return t._reporterState=this._reporterState,t.offset=this.offset,t.length=this.offset+A,this.offset+=A,t},i.prototype.raw=function(A){return this.base.slice(A?A.offset:this.offset,this.length)},M.EncoderBuffer=T,T.isEncoderBuffer=function(A){return A instanceof T||"object"==typeof A&&"EncoderBuffer"===A.constructor.name&&"number"==typeof A.length&&"function"==typeof A.join},T.prototype.join=function(A,M){return A||(A=e.alloc(this.length)),M||(M=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(t){t.join(A,M),M+=t.length})):("number"==typeof this.value?A[M]=this.value:"string"==typeof this.value?A.write(this.value,M):e.isBuffer(this.value)&&this.value.copy(A,M),M+=this.length)),A}},function(A,M,t){"use strict";var g=function(){function A(){this.stopFlag=!1,this.bufferSourcePtr=null}var M=A.prototype;return M.destroy=function(){this.interval&&clearInterval(this.interval),this.samples=null,this.audioCtx.close(),this.audioCtx=null},M.init=function(A){this.option=Object.assign({},{encoding:"16bitInt",channels:1,sampleRate:8e3,flushingTime:1e3},A),this.samples=new Float32Array,this.flush=this.flush.bind(this),this.interval=setInterval(this.flush,this.option.flushingTime),this.maxValue=this.getMaxValue(),this.typedArray=this.getTypedArray(),this.createContext()},M.getMaxValue=function(){var A={"8bitInt":128,"16bitInt":32768,"32bitInt":2147483648,"32bitFloat":1};return A[this.option.encoding]?A[this.option.encoding]:A["16bitInt"]},M.getTypedArray=function(){var A={"8bitInt":Int8Array,"16bitInt":Int16Array,"32bitInt":Int32Array,"32bitFloat":Float32Array};return A[this.option.encoding]?A[this.option.encoding]:A["16bitInt"]},M.createContext=function(){this.audioCtx=new(window.AudioContext||window.webkitAudioContext),this.gainNode=this.audioCtx.createGain(),this.gainNode.gain.value=1,this.gainNode.connect(this.audioCtx.destination),this.startTime=this.audioCtx.currentTime},M.isTypedArray=function(A){return A.byteLength&&A.buffer&&A.buffer.constructor==ArrayBuffer},M.feed=function(A){if(this.isTypedArray(A)){A=this.getFormatedValue(A);var M=new Float32Array(this.samples.length+A.length);M.set(this.samples,0),M.set(A,this.samples.length),this.samples=M}},M.getFormatedValue=function(A){A=new this.typedArray(A.buffer);var M,t=new Float32Array(A.length);for(M=0;M<A.length;M++)t[M]=A[M]/this.maxValue;return t},M.volume=function(A){this.gainNode.gain.value=A},M.flush=function(){if(null!=this.samples&&this.samples.length){console.log("flush audio data...");var A,M,t,g,I,e=this.audioCtx.createBufferSource(),i=this.samples.length/this.option.channels,T=this.audioCtx.createBuffer(this.option.channels,i,this.option.sampleRate);for(M=0;M<this.option.channels;M++)for(A=T.getChannelData(M),t=M,I=50,g=0;g<i;g++)A[g]=this.samples[t],g<50&&(A[g]=A[g]*g/50),g>=i-51&&(A[g]=A[g]*I--/50),t+=this.option.channels;this.startTime<this.audioCtx.currentTime&&(this.startTime=this.audioCtx.currentTime),e.buffer=T,e.connect(this.gainNode),e.start(this.startTime),this.startTime+=T.duration,this.samples=new Float32Array}},M.getTimestamp=function(){return this.audioCtx?this.audioCtx.currentTime:0},M.play=function(A){if(null!=this.audioCtx)if("running"===this.audioCtx.state){if(this.isTypedArray(A)&&(A=this.getFormatedValue(A)).length){this.stopFlag=!1;var M,t,g,I,e,i,T=this.audioCtx.createBufferSource(),E=A.length/this.option.channels;try{M=this.audioCtx.createBuffer(this.option.channels,E,this.option.sampleRate)}catch(A){}for(g=0;g<this.option.channels;g++)for(t=M.getChannelData(g),I=g,i=50,e=0;e<E;e++)t[e]=A[I],e<50&&(t[e]=t[e]*e/50),e>=E-51&&(t[e]=t[e]*i--/50),I+=this.option.channels;this.startTime<this.audioCtx.currentTime&&(this.startTime=this.audioCtx.currentTime),T.buffer=M,T.connect(this.gainNode),T.start(this.startTime),this.startTime+=M.duration,this.bufferSourcePtr=T}}else this.audioCtx.resume()},M.clearAudioBuffer=function(){this.stopFlag=!0,this.bufferSourcePtr&&this.bufferSourcePtr.stop(0)},M.pause=function(){null!=this.audioCtx&&"running"===this.audioCtx.state&&this.audioCtx.suspend()},M.resume=function(){null!=this.audioCtx&&"suspended"===this.audioCtx.state&&this.audioCtx.resume()},A}();M.a=g},function(A,M,t){"use strict";var g=t(2),I=function(){function A(A){this.TAG="ExpGolomb",this._buffer=A,this._buffer_index=0,this._total_bytes=A.byteLength,this._total_bits=8*A.byteLength,this._current_word=0,this._current_word_bits_left=0}var M=A.prototype;return M.destroy=function(){this._buffer=null},M._fillCurrentWord=function(){var A=this._total_bytes-this._buffer_index;if(A<=0)throw new g.a("ExpGolomb: _fillCurrentWord() but no bytes available");var M=Math.min(4,A),t=new Uint8Array(4);t.set(this._buffer.subarray(this._buffer_index,this._buffer_index+M)),this._current_word=new DataView(t.buffer).getUint32(0,!1),this._buffer_index+=M,this._current_word_bits_left=8*M},M.readBits=function(A){if(A>32)throw new g.b("ExpGolomb: readBits() bits exceeded max 32bits!");if(A<=this._current_word_bits_left){var M=this._current_word>>>32-A;return this._current_word<<=A,this._current_word_bits_left-=A,M}var t=this._current_word_bits_left?this._current_word:0;t>>>=32-this._current_word_bits_left;var I=A-this._current_word_bits_left;this._fillCurrentWord();var e=Math.min(I,this._current_word_bits_left),i=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t=t<<e|i},M.readBool=function(){return 1===this.readBits(1)},M.readByte=function(){return this.readBits(8)},M._skipLeadingZero=function(){var A;for(A=0;A<this._current_word_bits_left;A++)if(0!=(this._current_word&2147483648>>>A))return this._current_word<<=A,this._current_word_bits_left-=A,A;return this._fillCurrentWord(),A+this._skipLeadingZero()},M.readUEG=function(){var A=this._skipLeadingZero();return this.readBits(A+1)-1},M.readSEG=function(){var A=this.readUEG();return 1&A?A+1>>>1:-1*(A>>>1)},A}(),e=function(){function A(){}return A._ebsp2rbsp=function(A){for(var M=A,t=M.byteLength,g=new Uint8Array(t),I=0,e=0;e<t;e++)e>=2&&3===M[e]&&0===M[e-1]&&0===M[e-2]||(g[I]=M[e],I++);return new Uint8Array(g.buffer,0,I)},A.parseSPS=function(M){var t=A._ebsp2rbsp(M),g=new I(t);g.readByte();var e=g.readByte();g.readByte();var i=g.readByte();g.readUEG();var T=A.getProfileString(e),E=A.getLevelString(i),N=1,n=420,D=8;if((100===e||110===e||122===e||244===e||44===e||83===e||86===e||118===e||128===e||138===e||144===e)&&(3===(N=g.readUEG())&&g.readBits(1),N<=3&&(n=[0,420,422,444][N]),D=g.readUEG()+8,g.readUEG(),g.readBits(1),g.readBool()))for(var C=3!==N?8:12,r=0;r<C;r++)g.readBool()&&(r<6?A._skipScalingList(g,16):A._skipScalingList(g,64));g.readUEG();var c=g.readUEG();if(0===c)g.readUEG();else if(1===c){g.readBits(1),g.readSEG(),g.readSEG();for(var o=g.readUEG(),B=0;B<o;B++)g.readSEG()}var Q=g.readUEG();g.readBits(1);var a=g.readUEG(),h=g.readUEG(),s=g.readBits(1);0===s&&g.readBits(1),g.readBits(1);var y=0,w=0,j=0,L=0;g.readBool()&&(y=g.readUEG(),w=g.readUEG(),j=g.readUEG(),L=g.readUEG());var d=1,x=1,Y=0,u=!0,S=0,l=0;if(g.readBool()){if(g.readBool()){var z=g.readByte();z>0&&z<16?(d=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][z-1],x=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][z-1]):255===z&&(d=g.readByte()<<8|g.readByte(),x=g.readByte()<<8|g.readByte())}if(g.readBool()&&g.readBool(),g.readBool()&&(g.readBits(4),g.readBool()&&g.readBits(24)),g.readBool()&&(g.readUEG(),g.readUEG()),g.readBool()){var U=g.readBits(32),f=g.readBits(32);u=g.readBool(),Y=(S=f)/(l=2*U)}}var O=1;1===d&&1===x||(O=d/x);var F=0,m=0;0===N?(F=1,m=2-s):(F=3===N?1:2,m=(1===N?2:1)*(2-s));var R=16*(a+1),k=16*(h+1)*(2-s);R-=(y+w)*F,k-=(j+L)*m;var p=Math.ceil(R*O);return g.destroy(),g=null,{avc_profile:e,profile_string:T,avc_level:i,level_string:E,bit_depth:D,ref_frames:Q,chroma_format:n,chroma_format_string:A.getChromaFormatString(n),frame_rate:{fixed:u,fps:Y,fps_den:l,fps_num:S},sar_ratio:{width:d,height:x},codec_size:{width:R,height:k},present_size:{width:p,height:k}}},A._skipScalingList=function(A,M){for(var t=8,g=8,I=0;I<M;I++)0!==g&&(g=(t+A.readSEG()+256)%256),t=0===g?t:g},A.getProfileString=function(A){switch(A){case 66:return"Baseline";case 77:return"Main";case 88:return"Extended";case 100:return"High";case 110:return"High10";case 122:return"High422";case 244:return"High444";default:return"Unknown"}},A.getLevelString=function(A){return(A/10).toFixed(1)},A.getChromaFormatString=function(A){switch(A){case 420:return"4:2:0";case 422:return"4:2:2";case 444:return"4:4:4";default:return"Unknown"}},A}();M.a=e},function(A,M,t){"use strict";(function(M){void 0===M||!M.version||0===M.version.indexOf("v0.")||0===M.version.indexOf("v1.")&&0!==M.version.indexOf("v1.8.")?A.exports={nextTick:function(A,t,g,I){if("function"!=typeof A)throw new TypeError('"callback" argument must be a function');var e,i,T=arguments.length;switch(T){case 0:case 1:return M.nextTick(A);case 2:return M.nextTick((function(){A.call(null,t)}));case 3:return M.nextTick((function(){A.call(null,t,g)}));case 4:return M.nextTick((function(){A.call(null,t,g,I)}));default:for(e=new Array(T-1),i=0;i<e.length;)e[i++]=arguments[i];return M.nextTick((function(){A.apply(null,e)}))}}}:A.exports=M}).call(this,t(8))},function(A,M,t){var g=t(4).Buffer;function I(A){g.isBuffer(A)||(A=g.from(A));for(var M=A.length/4|0,t=new Array(M),I=0;I<M;I++)t[I]=A.readUInt32BE(4*I);return t}function e(A){for(;0<A.length;A++)A[0]=0}function i(A,M,t,g,I){for(var e,i,T,E,N=t[0],n=t[1],D=t[2],C=t[3],r=A[0]^M[0],c=A[1]^M[1],o=A[2]^M[2],B=A[3]^M[3],Q=4,a=1;a<I;a++)e=N[r>>>24]^n[c>>>16&255]^D[o>>>8&255]^C[255&B]^M[Q++],i=N[c>>>24]^n[o>>>16&255]^D[B>>>8&255]^C[255&r]^M[Q++],T=N[o>>>24]^n[B>>>16&255]^D[r>>>8&255]^C[255&c]^M[Q++],E=N[B>>>24]^n[r>>>16&255]^D[c>>>8&255]^C[255&o]^M[Q++],r=e,c=i,o=T,B=E;return e=(g[r>>>24]<<24|g[c>>>16&255]<<16|g[o>>>8&255]<<8|g[255&B])^M[Q++],i=(g[c>>>24]<<24|g[o>>>16&255]<<16|g[B>>>8&255]<<8|g[255&r])^M[Q++],T=(g[o>>>24]<<24|g[B>>>16&255]<<16|g[r>>>8&255]<<8|g[255&c])^M[Q++],E=(g[B>>>24]<<24|g[r>>>16&255]<<16|g[c>>>8&255]<<8|g[255&o])^M[Q++],[e>>>=0,i>>>=0,T>>>=0,E>>>=0]}var T=[0,1,2,4,8,16,32,64,128,27,54],E=function(){for(var A=new Array(256),M=0;M<256;M++)A[M]=M<128?M<<1:M<<1^283;for(var t=[],g=[],I=[[],[],[],[]],e=[[],[],[],[]],i=0,T=0,E=0;E<256;++E){var N=T^T<<1^T<<2^T<<3^T<<4;N=N>>>8^255&N^99,t[i]=N,g[N]=i;var n=A[i],D=A[n],C=A[D],r=257*A[N]^16843008*N;I[0][i]=r<<24|r>>>8,I[1][i]=r<<16|r>>>16,I[2][i]=r<<8|r>>>24,I[3][i]=r,r=16843009*C^65537*D^257*n^16843008*i,e[0][N]=r<<24|r>>>8,e[1][N]=r<<16|r>>>16,e[2][N]=r<<8|r>>>24,e[3][N]=r,0===i?i=T=1:(i=n^A[A[A[C^n]]],T^=A[A[T]])}return{SBOX:t,INV_SBOX:g,SUB_MIX:I,INV_SUB_MIX:e}}();function N(A){this._key=I(A),this._reset()}N.blockSize=16,N.keySize=32,N.prototype.blockSize=N.blockSize,N.prototype.keySize=N.keySize,N.prototype._reset=function(){for(var A=this._key,M=A.length,t=M+6,g=4*(t+1),I=[],e=0;e<M;e++)I[e]=A[e];for(e=M;e<g;e++){var i=I[e-1];e%M==0?(i=i<<8|i>>>24,i=E.SBOX[i>>>24]<<24|E.SBOX[i>>>16&255]<<16|E.SBOX[i>>>8&255]<<8|E.SBOX[255&i],i^=T[e/M|0]<<24):M>6&&e%M==4&&(i=E.SBOX[i>>>24]<<24|E.SBOX[i>>>16&255]<<16|E.SBOX[i>>>8&255]<<8|E.SBOX[255&i]),I[e]=I[e-M]^i}for(var N=[],n=0;n<g;n++){var D=g-n,C=I[D-(n%4?0:4)];N[n]=n<4||D<=4?C:E.INV_SUB_MIX[0][E.SBOX[C>>>24]]^E.INV_SUB_MIX[1][E.SBOX[C>>>16&255]]^E.INV_SUB_MIX[2][E.SBOX[C>>>8&255]]^E.INV_SUB_MIX[3][E.SBOX[255&C]]}this._nRounds=t,this._keySchedule=I,this._invKeySchedule=N},N.prototype.encryptBlockRaw=function(A){return i(A=I(A),this._keySchedule,E.SUB_MIX,E.SBOX,this._nRounds)},N.prototype.encryptBlock=function(A){var M=this.encryptBlockRaw(A),t=g.allocUnsafe(16);return t.writeUInt32BE(M[0],0),t.writeUInt32BE(M[1],4),t.writeUInt32BE(M[2],8),t.writeUInt32BE(M[3],12),t},N.prototype.decryptBlock=function(A){var M=(A=I(A))[1];A[1]=A[3],A[3]=M;var t=i(A,this._invKeySchedule,E.INV_SUB_MIX,E.INV_SBOX,this._nRounds),e=g.allocUnsafe(16);return e.writeUInt32BE(t[0],0),e.writeUInt32BE(t[3],4),e.writeUInt32BE(t[2],8),e.writeUInt32BE(t[1],12),e},N.prototype.scrub=function(){e(this._keySchedule),e(this._invKeySchedule),e(this._key)},A.exports.AES=N},function(A,M,t){var g=t(4).Buffer,I=t(37);A.exports=function(A,M,t,e){if(g.isBuffer(A)||(A=g.from(A,"binary")),M&&(g.isBuffer(M)||(M=g.from(M,"binary")),8!==M.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var i=t/8,T=g.alloc(i),E=g.alloc(e||0),N=g.alloc(0);i>0||e>0;){var n=new I;n.update(N),n.update(A),M&&n.update(M),N=n.digest();var D=0;if(i>0){var C=T.length-i;D=Math.min(i,N.length),N.copy(T,C,0,D),i-=D}if(D<N.length&&e>0){var r=E.length-e,c=Math.min(e,N.length-D);N.copy(E,r,D,D+c),e-=c}}return N.fill(0),{key:T,iv:E}}},function(A,M,t){"use strict";var g=t(6),I=t(12),e=I.getNAF,i=I.getJSF,T=I.assert;function E(A,M){this.type=A,this.p=new g(M.p,16),this.red=M.prime?g.red(M.prime):g.mont(this.p),this.zero=new g(0).toRed(this.red),this.one=new g(1).toRed(this.red),this.two=new g(2).toRed(this.red),this.n=M.n&&new g(M.n,16),this.g=M.g&&this.pointFromJSON(M.g,M.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var t=this.n&&this.p.div(this.n);!t||t.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function N(A,M){this.curve=A,this.type=M,this.precomputed=null}A.exports=E,E.prototype.point=function(){throw new Error("Not implemented")},E.prototype.validate=function(){throw new Error("Not implemented")},E.prototype._fixedNafMul=function(A,M){T(A.precomputed);var t=A._getDoubles(),g=e(M,1,this._bitLength),I=(1<<t.step+1)-(t.step%2==0?2:1);I/=3;for(var i=[],E=0;E<g.length;E+=t.step){var N=0;for(M=E+t.step-1;M>=E;M--)N=(N<<1)+g[M];i.push(N)}for(var n=this.jpoint(null,null,null),D=this.jpoint(null,null,null),C=I;C>0;C--){for(E=0;E<i.length;E++){(N=i[E])===C?D=D.mixedAdd(t.points[E]):N===-C&&(D=D.mixedAdd(t.points[E].neg()))}n=n.add(D)}return n.toP()},E.prototype._wnafMul=function(A,M){var t=4,g=A._getNAFPoints(t);t=g.wnd;for(var I=g.points,i=e(M,t,this._bitLength),E=this.jpoint(null,null,null),N=i.length-1;N>=0;N--){for(M=0;N>=0&&0===i[N];N--)M++;if(N>=0&&M++,E=E.dblp(M),N<0)break;var n=i[N];T(0!==n),E="affine"===A.type?n>0?E.mixedAdd(I[n-1>>1]):E.mixedAdd(I[-n-1>>1].neg()):n>0?E.add(I[n-1>>1]):E.add(I[-n-1>>1].neg())}return"affine"===A.type?E.toP():E},E.prototype._wnafMulAdd=function(A,M,t,g,I){for(var T=this._wnafT1,E=this._wnafT2,N=this._wnafT3,n=0,D=0;D<g;D++){var C=(d=M[D])._getNAFPoints(A);T[D]=C.wnd,E[D]=C.points}for(D=g-1;D>=1;D-=2){var r=D-1,c=D;if(1===T[r]&&1===T[c]){var o=[M[r],null,null,M[c]];0===M[r].y.cmp(M[c].y)?(o[1]=M[r].add(M[c]),o[2]=M[r].toJ().mixedAdd(M[c].neg())):0===M[r].y.cmp(M[c].y.redNeg())?(o[1]=M[r].toJ().mixedAdd(M[c]),o[2]=M[r].add(M[c].neg())):(o[1]=M[r].toJ().mixedAdd(M[c]),o[2]=M[r].toJ().mixedAdd(M[c].neg()));var B=[-3,-1,-5,-7,0,7,5,1,3],Q=i(t[r],t[c]);n=Math.max(Q[0].length,n),N[r]=new Array(n),N[c]=new Array(n);for(var a=0;a<n;a++){var h=0|Q[0][a],s=0|Q[1][a];N[r][a]=B[3*(h+1)+(s+1)],N[c][a]=0,E[r]=o}}else N[r]=e(t[r],T[r],this._bitLength),N[c]=e(t[c],T[c],this._bitLength),n=Math.max(N[r].length,n),n=Math.max(N[c].length,n)}var y=this.jpoint(null,null,null),w=this._wnafT4;for(D=n;D>=0;D--){for(var j=0;D>=0;){var L=!0;for(a=0;a<g;a++)w[a]=0|N[a][D],0!==w[a]&&(L=!1);if(!L)break;j++,D--}if(D>=0&&j++,y=y.dblp(j),D<0)break;for(a=0;a<g;a++){var d,x=w[a];0!==x&&(x>0?d=E[a][x-1>>1]:x<0&&(d=E[a][-x-1>>1].neg()),y="affine"===d.type?y.mixedAdd(d):y.add(d))}}for(D=0;D<g;D++)E[D]=null;return I?y:y.toP()},E.BasePoint=N,N.prototype.eq=function(){throw new Error("Not implemented")},N.prototype.validate=function(){return this.curve.validate(this)},E.prototype.decodePoint=function(A,M){A=I.toArray(A,M);var t=this.p.byteLength();if((4===A[0]||6===A[0]||7===A[0])&&A.length-1==2*t)return 6===A[0]?T(A[A.length-1]%2==0):7===A[0]&&T(A[A.length-1]%2==1),this.point(A.slice(1,1+t),A.slice(1+t,1+2*t));if((2===A[0]||3===A[0])&&A.length-1===t)return this.pointFromX(A.slice(1,1+t),3===A[0]);throw new Error("Unknown point format")},N.prototype.encodeCompressed=function(A){return this.encode(A,!0)},N.prototype._encode=function(A){var M=this.curve.p.byteLength(),t=this.getX().toArray("be",M);return A?[this.getY().isEven()?2:3].concat(t):[4].concat(t,this.getY().toArray("be",M))},N.prototype.encode=function(A,M){return I.encode(this._encode(M),A)},N.prototype.precompute=function(A){if(this.precomputed)return this;var M={doubles:null,naf:null,beta:null};return M.naf=this._getNAFPoints(8),M.doubles=this._getDoubles(4,A),M.beta=this._getBeta(),this.precomputed=M,this},N.prototype._hasDoubles=function(A){if(!this.precomputed)return!1;var M=this.precomputed.doubles;return!!M&&M.points.length>=Math.ceil((A.bitLength()+1)/M.step)},N.prototype._getDoubles=function(A,M){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],g=this,I=0;I<M;I+=A){for(var e=0;e<A;e++)g=g.dbl();t.push(g)}return{step:A,points:t}},N.prototype._getNAFPoints=function(A){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var M=[this],t=(1<<A)-1,g=1===t?null:this.dbl(),I=1;I<t;I++)M[I]=M[I-1].add(g);return{wnd:A,points:M}},N.prototype._getBeta=function(){return null},N.prototype.dblp=function(A){for(var M=this,t=0;t<A;t++)M=M.dbl();return M}},function(A,M,t){var g=t(190),I=t(197),e=t(198),i=t(45),T=t(79),E=t(4).Buffer;function N(A){var M;"object"!=typeof A||E.isBuffer(A)||(M=A.passphrase,A=A.key),"string"==typeof A&&(A=E.from(A));var t,N,n=e(A,M),D=n.tag,C=n.data;switch(D){case"CERTIFICATE":N=g.certificate.decode(C,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(N||(N=g.PublicKey.decode(C,"der")),t=N.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return g.RSAPublicKey.decode(N.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return N.subjectPrivateKey=N.subjectPublicKey,{type:"ec",data:N};case"1.2.840.10040.4.1":return N.algorithm.params.pub_key=g.DSAparam.decode(N.subjectPublicKey.data,"der"),{type:"dsa",data:N.algorithm.params};default:throw new Error("unknown key id "+t)}case"ENCRYPTED PRIVATE KEY":C=function(A,M){var t=A.algorithm.decrypt.kde.kdeparams.salt,g=parseInt(A.algorithm.decrypt.kde.kdeparams.iters.toString(),10),e=I[A.algorithm.decrypt.cipher.algo.join(".")],N=A.algorithm.decrypt.cipher.iv,n=A.subjectPrivateKey,D=parseInt(e.split("-")[1],10)/8,C=T.pbkdf2Sync(M,t,g,D,"sha1"),r=i.createDecipheriv(e,C,N),c=[];return c.push(r.update(n)),c.push(r.final()),E.concat(c)}(C=g.EncryptedPrivateKey.decode(C,"der"),M);case"PRIVATE KEY":switch(t=(N=g.PrivateKey.decode(C,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return g.RSAPrivateKey.decode(N.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:N.algorithm.curve,privateKey:g.ECPrivateKey.decode(N.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return N.algorithm.params.priv_key=g.DSAparam.decode(N.subjectPrivateKey,"der"),{type:"dsa",params:N.algorithm.params};default:throw new Error("unknown key id "+t)}case"RSA PUBLIC KEY":return g.RSAPublicKey.decode(C,"der");case"RSA PRIVATE KEY":return g.RSAPrivateKey.decode(C,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:g.DSAPrivateKey.decode(C,"der")};case"EC PRIVATE KEY":return{curve:(C=g.ECPrivateKey.decode(C,"der")).parameters.value,privateKey:C.privateKey};default:throw new Error("unknown key type "+D)}}A.exports=N,N.signature=g.signature},function(A,M,t){"use strict";var g=t(1);function I(A,M,t){var g=A;if(M+t<g.length){for(;t--;)if(128!=(192&g[++M]))return!1;return!0}return!1}var e,i=function(A){for(var M=[],t=A,g=0,e=A.length;g<e;)if(t[g]<128)M.push(String.fromCharCode(t[g])),++g;else{if(t[g]<192);else if(t[g]<224){if(I(t,g,1)){var i=(31&t[g])<<6|63&t[g+1];if(i>=128){M.push(String.fromCharCode(65535&i)),g+=2;continue}}}else if(t[g]<240){if(I(t,g,2)){var T=(15&t[g])<<12|(63&t[g+1])<<6|63&t[g+2];if(T>=2048&&55296!=(63488&T)){M.push(String.fromCharCode(65535&T)),g+=3;continue}}}else if(t[g]<248&&I(t,g,3)){var E=(7&t[g])<<18|(63&t[g+1])<<12|(63&t[g+2])<<6|63&t[g+3];if(E>65536&&E<1114112){E-=65536,M.push(String.fromCharCode(E>>>10|55296)),M.push(String.fromCharCode(1023&E|56320)),g+=4;continue}}M.push(String.fromCharCode(65533)),++g}return M.join("")},T=t(2),E=(e=new ArrayBuffer(2),new DataView(e).setInt16(0,256,!0),256===new Int16Array(e)[0]),N=function(){function A(){}return A.parseScriptData=function(M,t,I){var e={};try{var i=A.parseValue(M,t,I);if(I-i.size<1)return e;var T=A.parseValue(M,t+i.size,I-i.size);e[i.data]=T.data}catch(A){g.a.e("AMF",A.toString())}return e},A.parseObject=function(M,t,g){if(g<3)throw new T.a("Data not enough when parse ScriptDataObject");var I=A.parseString(M,t,g),e=A.parseValue(M,t+I.size,g-I.size),i=e.objectEnd;return{data:{name:I.data,value:e.data},size:I.size+e.size,objectEnd:i}},A.parseVariable=function(M,t,g){return A.parseObject(M,t,g)},A.parseString=function(A,M,t){if(t<2)throw new T.a("Data not enough when parse String");var g=new DataView(A,M,t).getUint16(0,!E);return{data:g>0?i(new Uint8Array(A,M+2,g)):"",size:2+g}},A.parseLongString=function(A,M,t){if(t<4)throw new T.a("Data not enough when parse LongString");var g=new DataView(A,M,t).getUint32(0,!E);return{data:g>0?i(new Uint8Array(A,M+4,g)):"",size:4+g}},A.parseDate=function(A,M,t){if(t<10)throw new T.a("Data size invalid when parse Date");var g=new DataView(A,M,t),I=g.getFloat64(0,!E),e=g.getInt16(8,!E);return{data:new Date(I+=60*e*1e3),size:10}},A.parseValue=function(M,t,I){if(I<1)throw new T.a("Data not enough when parse Value");var e,i=new DataView(M,t,I),N=1,n=i.getUint8(0),D=!1;try{switch(n){case 0:e=i.getFloat64(1,!E),N+=8;break;case 1:e=!!i.getUint8(1),N+=1;break;case 2:var C=A.parseString(M,t+1,I-1);e=C.data,N+=C.size;break;case 3:e={};var r=0;for(9==(16777215&i.getUint32(I-4,!E))&&(r=3);N<I-4;){var c=A.parseObject(M,t+N,I-N-r);if(c.objectEnd)break;e[c.data.name]=c.data.value,N+=c.size}if(N<=I-3)9===(16777215&i.getUint32(N-1,!E))&&(N+=3);break;case 8:e={},N+=4;var o=0;for(9==(16777215&i.getUint32(I-4,!E))&&(o=3);N<I-8;){var B=A.parseVariable(M,t+N,I-N-o);if(B.objectEnd)break;e[B.data.name]=B.data.value,N+=B.size}if(N<=I-3)9===(16777215&i.getUint32(N-1,!E))&&(N+=3);break;case 9:e=void 0,N=1,D=!0;break;case 10:e=[];var Q=i.getUint32(1,!E);N+=4;for(var a=0;a<Q;a++){var h=A.parseValue(M,t+N,I-N);e.push(h.data),N+=h.size}break;case 11:var s=A.parseDate(M,t+1,I-1);e=s.data,N+=s.size;break;case 12:var y=A.parseString(M,t+1,I-1);e=y.data,N+=y.size;break;default:N=I}}catch(A){g.a.e("AMF",A.toString())}return{data:e,size:N,objectEnd:D}},A}(),n=t(30),D=t(5),C=t(13),r=t(0);function c(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var o=function(){function A(A,M,t,g){this.TAG="FLVDemuxer",this._config=M,this._onError=null,this._onMediaInfo=null,this._onMetaDataArrived=null,this._onScriptDataArrived=null,this._onTrackMetadata=null,this._onDataAvailable=null,this._dataOffset=A.dataOffset,this._firstParse=!0,this._dispatch=!1,this._hasAudio=A.hasAudioTrack,this._hasVideo=A.hasVideoTrack,this._hasAudioFlagOverrided=!1,this._hasVideoFlagOverrided=!1,this._audioInitialMetadataDispatched=!1,this._videoInitialMetadataDispatched=!1,this._mediaInfo=new C.a,this._mediaInfo.hasAudio=this._hasAudio,this._mediaInfo.hasVideo=this._hasVideo,this._metadata=null,this._audioMetadata=null,this._videoMetadata=null,this._naluLengthSize=4,this._timestampBase=0,this._timescale=1e3,this._duration=0,this._durationOverrided=!1,this._referenceFrameRate={fixed:!0,fps:23.976,fps_num:23976,fps_den:1e3},this._flvSoundRateTable=[5500,11025,22050,44100,48e3],this._mpegSamplingRates=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],this._mpegAudioV10SampleRateTable=[44100,48e3,32e3,0],this._mpegAudioV20SampleRateTable=[22050,24e3,16e3,0],this._mpegAudioV25SampleRateTable=[11025,12e3,8e3,0],this._mpegAudioL1BitRateTable=[0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1],this._mpegAudioL2BitRateTable=[0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1],this._mpegAudioL3BitRateTable=[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],this._videoTrack={type:"video",id:1,sequenceNumber:0,samples:[],length:0},this._audioTrack={type:"audio",id:2,sequenceNumber:0,samples:[],length:0},this._littleEndian=function(){var A=new ArrayBuffer(2);return new DataView(A).setInt16(0,256,!0),256===new Int16Array(A)[0]}(),this.videoCodecId=0,this.audioCodecId=0,this._AVC_SPS=null,this._AVC_PPS=null,this._HEVC_VPS=null,this._HEVC_SPS=null,this._HEVC_PPS=null,this._StartCode=[0,0,0,1],this._SampleRate=8e3,this._ChannelNum=1,this._pause=!1,this._callbackInitFlag=!1,this._callbackMediaDataFunc=t,this._callbackMediaDataUserPtr=g,this._debugProcCount=0,this._DebugBuf=null,this._DebugBufPos=0}var M,t,I,e=A.prototype;return e.destroy=function(){this._mediaInfo=null,this._metadata=null,this._audioMetadata=null,this._videoMetadata=null,this._videoTrack=null,this._audioTrack=null,this._onError=null,this._onMediaInfo=null,this._onMetaDataArrived=null,this._onScriptDataArrived=null,this._onTrackMetadata=null,this._onDataAvailable=null},A.probe=function(A){var M=new Uint8Array(A),t={match:!1};if(70!==M[0]||76!==M[1]||86!==M[2]||1!==M[3])return t;var g,I,e=(4&M[4])>>>2!=0,i=0!=(1&M[4]),T=(g=M)[I=5]<<24|g[I+1]<<16|g[I+2]<<8|g[I+3];return T<9?t:{match:!0,consumed:T,dataOffset:T,hasAudioTrack:e,hasVideoTrack:i}},e.bindDataSource=function(A){return A.onDataArrival=this.parseChunks.bind(this),this},e.resetMediaInfo=function(){this._mediaInfo=new C.a},e.pause=function(){this._pause=!0},e.resume=function(){this._pause=!1},e._onDataAvailableToSoftwareDecodeVideo=function(A,M){var t=M.samples,g=-1;for(t.length>1&&(g=0);t.length;){for(var I=t.shift(),e=0,i=0;i<I.units.length;i++)e+=I.units[i].data.length;for(var T=0,E=new Uint8Array(e);I.units.length;){var N=I.units.shift();27==A&&(N.data[0]=0,N.data[1]=0,N.data[2]=0,N.data[3]=1),E.set(N.data,T),T+=N.data.length}this._callbackMediaDataFunc&&(g>=0&&g++,this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!0,1,A,I.isKeyframe,E,e,I.pts,0,0))}},e._onDataAvailableToSoftwareDecodeAudio=function(A,M){var t=M.samples,g=-1;for(t.length>1&&(g=0);t.length;){var I=t.shift();this._callbackMediaDataFunc&&(g>=0&&g++,this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!0,2,A,0,I.unit,I.length,this._SampleRate,this._ChannelNum,this._SampleRate>=44100?32:16))}},e._isInitialMetadataDispatched=function(){return this._hasAudio&&this._hasVideo?this._audioInitialMetadataDispatched&&this._videoInitialMetadataDispatched:this._hasAudio&&!this._hasVideo?this._audioInitialMetadataDispatched:!(this._hasAudio||!this._hasVideo)&&this._videoInitialMetadataDispatched},e.parseChunks=function(M,t){if(null!==M){if(!(this._onError&&this._onMediaInfo&&this._onTrackMetadata&&this._onDataAvailable))throw new T.a("Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified");var I=0,e=this._littleEndian;if(0===t){if(!(M.byteLength>13))return 0;I=A.probe(M).dataOffset}if(this._firstParse)this._firstParse=!1,t+I!==this._dataOffset&&g.a.w(this.TAG,"First time parsing but chunk byteStart invalid!"),0!==new DataView(M,I).getUint32(0,!e)&&g.a.w(this.TAG,"PrevTagSize0 !== 0 !!!"),I+=4;for(;I<M.byteLength;){this._dispatch=!0;var i=new DataView(M,I);if(I+11+4>M.byteLength)break;var E=i.getUint8(0),N=16777215&i.getUint32(0,!e);if(I+11+N+4>M.byteLength)break;if(8===E||9===E||18===E){var n=i.getUint8(4),D=i.getUint8(5),C=i.getUint8(6)|D<<8|n<<16|i.getUint8(7)<<24;0!==(16777215&i.getUint32(7,!e))&&g.a.w(this.TAG,"Meet tag which has StreamID != 0!");var r=I+11;if(!this._pause)switch(E){case 8:this.audioCodecId=this._parseAudioData(M,r,N,C);break;case 9:this.videoCodecId=this._parseVideoData(M,r,N,C,t+I);break;case 18:this._parseScriptData(M,r,N)}var c=i.getUint32(11+N,!e);c!==11+N&&g.a.w(this.TAG,"Invalid PrevTagSize "+c),I+=11+N+4}else g.a.w(this.TAG,"Unsupported tag type "+E+", skipped"),I+=11+N+4}return this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&(7==this.videoCodecId?"auto"===this._config.decodeType||"hard"===this._config.decodeType?(this._onDataAvailable(this._audioTrack,this._videoTrack),this._callbackInitFlag||(this._callbackInitFlag=!0,this._callbackMediaDataFunc&&this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!1,1,0,0,null,0,0,0,0))):(this._videoTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeVideo(27,this._videoTrack),this._audioTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeAudio(10==this.audioCodecId?86018:0,this._audioTrack)):12==this.videoCodecId&&(this._videoTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeVideo(173,this._videoTrack),this._audioTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeAudio(10==this.audioCodecId?86018:0,this._audioTrack))):(this._debugProcCount++,this._debugProcCount>=60&&(console.log("InitialMetadataDispatched fail."),this._debugProcCount=0)),I}},e._parseScriptData=function(A,M,t){var I=N.parseScriptData(A,M,t);if(I.hasOwnProperty("onMetaData")){if(null==I.onMetaData||"object"!=typeof I.onMetaData)return void g.a.w(this.TAG,"Invalid onMetaData structure!");this._metadata&&g.a.w(this.TAG,"Found another onMetaData tag!"),this._metadata=I;var e=this._metadata.onMetaData;if(this._onMetaDataArrived&&this._onMetaDataArrived(Object.assign({},e)),"boolean"==typeof e.hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=e.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),"boolean"==typeof e.hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=e.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),"number"==typeof e.audiodatarate&&(this._mediaInfo.audioDataRate=e.audiodatarate),"number"==typeof e.videodatarate&&(this._mediaInfo.videoDataRate=e.videodatarate),"number"==typeof e.width&&(this._mediaInfo.width=e.width),"number"==typeof e.height&&(this._mediaInfo.height=e.height),"number"==typeof e.duration){if(!this._durationOverrided){var i=Math.floor(e.duration*this._timescale);this._duration=i,this._mediaInfo.duration=i}}else this._mediaInfo.duration=0;if("number"==typeof e.framerate){var T=Math.floor(1e3*e.framerate);if(T>0){var E=T/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=E,this._referenceFrameRate.fps_num=T,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=E}}if("object"==typeof e.keyframes){this._mediaInfo.hasKeyframesIndex=!0;var n=e.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(n),e.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._dispatch=!1,this._mediaInfo.metadata=e,g.a.v(this.TAG,"Parsed onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}Object.keys(I).length>0&&this._onScriptDataArrived&&this._onScriptDataArrived(Object.assign({},I))},e._parseKeyframesIndex=function(A){for(var M=[],t=[],g=1;g<A.times.length;g++){var I=this._timestampBase+Math.floor(1e3*A.times[g]);M.push(I),t.push(A.filepositions[g])}return{times:M,filepositions:t}},e._parseAudioData=function(A,M,t,I){if(t<=1)return g.a.w(this.TAG,"Flv: Invalid audio packet, missing SoundData payload!"),0;if(!0===this._hasAudioFlagOverrided&&!1===this._hasAudio)return 0;this._littleEndian;var e=new DataView(A,M,t).getUint8(0),i=e>>>4;if(2!==i&&10!==i)return this._onError(D.a.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+i),0;var T=0,E=(12&e)>>>2;if(!(E>=0&&E<=4))return this._onError(D.a.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+E),0;T=this._flvSoundRateTable[E];var N=1&e,n=this._audioMetadata,C=this._audioTrack;if(n||(!1===this._hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),(n=this._audioMetadata={}).type="audio",n.id=C.id,n.timescale=this._timescale,n.duration=this._duration,n.audioSampleRate=T,n.channelCount=0===N?1:2),10===i){var r=this._parseAACAudioData(A,M+1,t-1);if(null==r)return 0;if(0===r.packetType){n.config&&g.a.w(this.TAG,"Found another AudioSpecificConfig!");var c=r.data;n.audioSampleRate=c.samplingRate,n.channelCount=c.channelCount,n.codec=c.codec,n.originalCodec=c.originalCodec,n.config=c.config,n.refSampleDuration=1024/n.audioSampleRate*n.timescale,g.a.v(this.TAG,"Parsed AudioSpecificConfig"),this._SampleRate=c.samplingRate,this._ChannelNum=c.channelCount,this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._audioInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("audio",n);var o=this._mediaInfo;o.audioCodec=n.originalCodec,o.audioSampleRate=n.audioSampleRate,o.audioChannelCount=n.channelCount,o.hasVideo?null!=o.videoCodec&&(o.mimeType='video/x-flv; codecs="'+o.videoCodec+","+o.audioCodec+'"'):o.mimeType='video/x-flv; codecs="'+o.audioCodec+'"',o.isComplete()&&this._onMediaInfo(o)}else if(1===r.packetType){var B=this._timestampBase+I,Q={unit:r.data,length:r.data.byteLength,dts:B,pts:B};C.samples.push(Q),C.length+=r.data.length}else g.a.e(this.TAG,"Flv: Unsupported AAC data type "+r.packetType)}else if(2===i){if(!n.codec){var a=this._parseMP3AudioData(A,M+1,t-1,!0);if(null==a)return 0;n.audioSampleRate=a.samplingRate,n.channelCount=a.channelCount,n.codec=a.codec,n.originalCodec=a.originalCodec,n.refSampleDuration=1152/n.audioSampleRate*n.timescale,g.a.v(this.TAG,"Parsed MPEG Audio Frame Header"),this._audioInitialMetadataDispatched=!0,this._onTrackMetadata("audio",n);var h=this._mediaInfo;h.audioCodec=n.codec,h.audioSampleRate=n.audioSampleRate,h.audioChannelCount=n.channelCount,h.audioDataRate=a.bitRate,h.hasVideo?null!=h.videoCodec&&(h.mimeType='video/x-flv; codecs="'+h.videoCodec+","+h.audioCodec+'"'):h.mimeType='video/x-flv; codecs="'+h.audioCodec+'"',h.isComplete()&&this._onMediaInfo(h)}var s=this._parseMP3AudioData(A,M+1,t-1,!1);if(null==s)return 0;var y=this._timestampBase+I,w={unit:s,length:s.byteLength,dts:y,pts:y};C.samples.push(w),C.length+=s.length}return i},e._parseAACAudioData=function(A,M,t){if(!(t<=1)){var I={},e=new Uint8Array(A,M,t);return I.packetType=e[0],0===e[0]?I.data=this._parseAACAudioSpecificConfig(A,M+1,t-1):I.data=e.subarray(1),I}g.a.w(this.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!")},e._parseAACAudioSpecificConfig=function(A,M,t){var g,I,e=new Uint8Array(A,M,t),i=null,T=0,E=null;if(T=g=e[0]>>>3,(I=(7&e[0])<<1|e[1]>>>7)<0||I>=this._mpegSamplingRates.length)this._onError(D.a.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");else{var N=this._mpegSamplingRates[I],n=(120&e[1])>>>3;if(!(n<0||n>=8)){5===T&&(E=(7&e[1])<<1|e[2]>>>7,(124&e[2])>>>2);var C=self.navigator.userAgent.toLowerCase();return-1!==C.indexOf("firefox")?I>=6?(T=5,i=new Array(4),E=I-3):(T=2,i=new Array(2),E=I):-1!==C.indexOf("android")?(T=2,i=new Array(2),E=I):(T=5,E=I,i=new Array(4),I>=6?E=I-3:1===n&&(T=2,i=new Array(2),E=I)),i[0]=T<<3,i[0]|=(15&I)>>>1,i[1]=(15&I)<<7,i[1]|=(15&n)<<3,5===T&&(i[1]|=(15&E)>>>1,i[2]=(1&E)<<7,i[2]|=8,i[3]=0),{config:i,samplingRate:N,channelCount:n,codec:"mp4a.40."+T,originalCodec:"mp4a.40."+g}}this._onError(D.a.FORMAT_ERROR,"Flv: AAC invalid channel configuration")}},e._parseMP3AudioData=function(A,M,t,I){if(!(t<4)){this._littleEndian;var e=new Uint8Array(A,M,t),i=null;if(I){if(255!==e[0])return;var T=e[1]>>>3&3,E=(6&e[1])>>1,N=(240&e[2])>>>4,n=(12&e[2])>>>2,D=3!==(e[3]>>>6&3)?2:1,C=0,r=0;switch(T){case 0:C=this._mpegAudioV25SampleRateTable[n];break;case 2:C=this._mpegAudioV20SampleRateTable[n];break;case 3:C=this._mpegAudioV10SampleRateTable[n]}switch(E){case 1:34,N<this._mpegAudioL3BitRateTable.length&&(r=this._mpegAudioL3BitRateTable[N]);break;case 2:33,N<this._mpegAudioL2BitRateTable.length&&(r=this._mpegAudioL2BitRateTable[N]);break;case 3:32,N<this._mpegAudioL1BitRateTable.length&&(r=this._mpegAudioL1BitRateTable[N])}i={bitRate:r,samplingRate:C,channelCount:D,codec:"mp3",originalCodec:"mp3"}}else i=e;return i}g.a.w(this.TAG,"Flv: Invalid MP3 packet, header missing!")},e._parseVideoData=function(A,M,t,I,e){if(t<=1)g.a.w(this.TAG,"Flv: Invalid video packet, missing VideoData payload!");else if(!0!==this._hasVideoFlagOverrided||!1!==this._hasVideo){var i=new Uint8Array(A,M,t)[0],T=(240&i)>>>4,E=15&i;if(7===E||12===E)return this._parseAVCAndHEVCVideoPacket(E,A,M+1,t-1,I,e,T),E;this._onError(D.a.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: "+E)}},e._parseAVCAndHEVCVideoPacket=function(A,M,t,I,e,i,T){if(I<4)g.a.w(this.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");else{var E=this._littleEndian,N=new DataView(M,t,I),n=N.getUint8(0),C=(16777215&N.getUint32(0,!E))<<8>>8;if(0===n)7==A?(r.g("H264"),this._parseAVCDecoderConfigurationRecord(M,t+4,I-4)):(r.g("H265"),this._parseHEVCDecoderConfigurationRecord(M,t+4,I-4));else if(1===n)7==A?this._parseAVCVideoData(M,t+4,I-4,e,i,T,C):this._parseHEVCVideoData(M,t+4,I-4,e,i,T,C);else if(2!==n)return void this._onError(D.a.FORMAT_ERROR,"Flv: Invalid video packet type "+n)}},e._parseAVCDecoderConfigurationRecord=function(A,M,t){if(t<7)g.a.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");else{var I=this._videoMetadata,e=this._videoTrack,i=this._littleEndian,T=new DataView(A,M,t);I?void 0!==I.avcc&&g.a.w(this.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),(I=this._videoMetadata={}).type="video",I.id=e.id,I.timescale=this._timescale,I.duration=this._duration);var E=T.getUint8(0),N=T.getUint8(1);T.getUint8(2),T.getUint8(3);if(1===E&&0!==N)if(this._naluLengthSize=1+(3&T.getUint8(4)),3===this._naluLengthSize||4===this._naluLengthSize){var C=31&T.getUint8(5);if(0!==C){C>1&&g.a.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: SPS Count = "+C);for(var r=6,c=0;c<C;c++){var o=T.getUint16(r,!i);if(r+=2,0!==o){var B=new Uint8Array(A,M+r,o);this._AVC_SPS=new Uint8Array(o+4),r+=o,this._AVC_SPS.set(this._StartCode,0),this._AVC_SPS.set(B,4);var Q=n.a.parseSPS(B);if(0===c){I.codecWidth=Q.codec_size.width,I.codecHeight=Q.codec_size.height,I.presentWidth=Q.present_size.width,I.presentHeight=Q.present_size.height,I.profile=Q.profile_string,I.level=Q.level_string,I.bitDepth=Q.bit_depth,I.chromaFormat=Q.chroma_format,I.sarRatio=Q.sar_ratio,I.frameRate=Q.frame_rate,!1!==Q.frame_rate.fixed&&0!==Q.frame_rate.fps_num&&0!==Q.frame_rate.fps_den||(I.frameRate=this._referenceFrameRate);var a=I.frameRate.fps_den,h=I.frameRate.fps_num;I.refSampleDuration=I.timescale*(a/h);for(var s=B.subarray(1,4),y="avc1.",w=0;w<3;w++){var j=s[w].toString(16);j.length<2&&(j="0"+j),y+=j}I.codec=y;var L=this._mediaInfo;L.width=I.codecWidth,L.height=I.codecHeight,L.fps=I.frameRate.fps,L.profile=I.profile,L.level=I.level,L.refFrames=Q.ref_frames,L.chromaFormat=Q.chroma_format_string,L.sarNum=I.sarRatio.width,L.sarDen=I.sarRatio.height,L.videoCodec=y,L.hasAudio?null!=L.audioCodec&&(L.mimeType='video/x-flv; codecs="'+L.videoCodec+","+L.audioCodec+'"'):L.mimeType='video/x-flv; codecs="'+L.videoCodec+'"',L.isComplete()&&this._onMediaInfo(L)}}}var d=T.getUint8(r);if(0!==d){d>1&&g.a.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: PPS Count = "+d),r++;for(var x=0;x<d;x++){var Y=T.getUint16(r,!i);if(r+=2,0!==Y){var u=new Uint8Array(A,M+r,Y);this._AVC_PPS=new Uint8Array(Y+4),this._AVC_PPS.set(this._StartCode,0),this._AVC_PPS.set(u,4),r+=Y}}I.avcc=new Uint8Array(t),I.avcc.set(new Uint8Array(A,M,t),0),g.a.v(this.TAG,"Parsed AVCDecoderConfigurationRecord"),this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._videoInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("video",I),g.a.i(this.TAG,"Video resolution: "+I.codecWidth+" x "+I.codecHeight)}else this._onError(D.a.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No PPS")}else this._onError(D.a.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No SPS")}else this._onError(D.a.FORMAT_ERROR,"Flv: Strange NaluLengthSizeMinusOne: "+(this._naluLengthSize-1));else this._onError(D.a.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord")}},e._parseAVCVideoData=function(A,M,t,I,e,i,T){var E=this._littleEndian,N=new DataView(A,M,t),n=[],D=0,C=0,r=this._naluLengthSize,c=this._timestampBase+I,o=1===i,B=!0;for(7==this.videoCodecId&&("auto"!==this._config.decodeType&&"hard"!==this._config.decodeType||(B=!1));C<t;){if(C+4>=t){g.a.w(this.TAG,"Malformed Nalu near timestamp "+c+", offset = "+C+", dataSize = "+t);break}var Q=N.getUint32(C,!E);if(3===r&&(Q>>>=8),Q>t-r)return void g.a.w(this.TAG,"Malformed Nalus near timestamp "+c+", NaluSize > DataSize!");var a=31&N.getUint8(C+r);if(5===a&&(o=!0,n.length<1&&this._AVC_SPS&&this._AVC_SPS.length>0))if(B){var h={type:7,data:this._AVC_SPS};n.push(h),D+=h.data.length;var s={type:8,data:this._AVC_PPS};n.push(s),D+=s.data.length}else{var y=this._AVC_SPS.subarray(0,this._AVC_SPS.length),w=y.length-4;y[0]=w>>24,y[1]=w>>16,y[2]=w>>8,y[3]=255&w;var j={type:7,data:y};n.push(j),D+=j.data.length;var L=this._AVC_PPS.subarray(0,this._AVC_PPS.length),d=L.length-4;L[0]=d>>24,L[1]=d>>16,L[2]=d>>8,L[3]=255&d;var x={type:8,data:L};n.push(x),D+=x.data.length}var Y=new Uint8Array(A,M+C,r+Q),u={type:a,data:Y};n.push(u),D+=Y.byteLength,C+=r+Q}if(n.length){var S=this._videoTrack,l={units:n,length:D,isKeyframe:o,dts:c,cts:T,pts:c+T};o&&(l.fileposition=e),S.samples.push(l),S.length+=D}},e._parseHEVCDecoderConfigurationRecord=function(A,M,t){if(t<7)g.a.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");else{var I=this._videoMetadata,e=this._videoTrack,i=this._littleEndian,T=new DataView(A,M,t);I?void 0!==I.avcc&&g.a.w(this.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),(I=this._videoMetadata={}).type="video",I.id=e.id,I.timescale=this._timescale,I.duration=this._duration);var E=T.getUint8(0),N=T.getUint8(1),n=T.getUint8(2),D=T.getUint8(3);if(0===E&&0===N&&0===n&&1===D)console.log("H265 1");else{var C=22,r=T.getUint8(C);C+=1;for(var c=0;c<r;c++){var o=T.getUint8(C);C+=1;T.getUint16(C,!i);C+=2;var B=T.getUint16(C,!i);if(C+=2,32===o){var Q=new Uint8Array(A,M+C,B);this._HEVC_VPS=new Uint8Array(B+4),this._HEVC_VPS.set(this._StartCode,0),this._HEVC_VPS.set(Q,4)}else if(33===o){var a=new Uint8Array(A,M+C,B);this._HEVC_SPS=new Uint8Array(B+4),this._HEVC_SPS.set(this._StartCode,0),this._HEVC_SPS.set(a,4)}else if(34===o){var h=new Uint8Array(A,M+C,B);this._HEVC_PPS=new Uint8Array(B+4),this._HEVC_PPS.set(this._StartCode,0),this._HEVC_PPS.set(h,4)}C+=B}}this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._videoInitialMetadataDispatched=!0,this._dispatch=!1}},e._makeH265Header=function(A){var M=2;switch(A){case 78:case 80:M=1;break;case 64:case 66:case 32:case 34:case 36:case 38:case 40:case 42:M=1}return M},e._parseHEVCVideoData=function(A,M,t,I,e,i,T){for(var E=this._littleEndian,N=new DataView(A,M,t),n=this._timestampBase+I,D=1===i,C=[],r=0,c=0;c<t;){if(c+4>=t){g.a.w(this.TAG,"Malformed Nalu near timestamp "+n+", offset = "+c+", dataSize = "+t);break}var o=N.getUint8(c),B=N.getUint8(c+1),Q=N.getUint8(c+2),a=N.getUint8(c+3);if(0===o&&0===B&&0===Q&&1===a)console.log("memcpy.....");else{var h=N.getUint32(c,!E);c+=4;N.getUint8(c);if(c+=1,h>t-4)return void g.a.w(this.TAG,"Malformed Nalus near timestamp "+n+", NaluSize > DataSize!");if(h+c-1>t)break;var s=N.getUint8(c-1),y=this._makeH265Header(s);if((32===s||34===s||36===s||38===s||40===s||42===s)&&C.length<1){if(this._HEVC_VPS){var w={type:5,data:this._HEVC_VPS};C.push(w),r+=this._HEVC_VPS.length}if(this._HEVC_SPS){var j={type:6,data:this._HEVC_SPS};C.push(j),r+=this._HEVC_SPS.length}if(this._HEVC_PPS){var L={type:7,data:this._HEVC_PPS};C.push(L),r+=this._HEVC_PPS.length}}if(1===y&&this._HEVC_VPS&&this._HEVC_VPS[0],M+c-1-4>=0&&h>0){var d=new Uint8Array(A,M+c-1-4,h+4);d[0]=0,d[1]=0,d[2]=0,d[3]=1;var x={type:5,data:d};C.push(x),r+=d.length}c+=h-1}}if(this._DebugBuf&&(this._DebugBufPos<1048576?(this._DebugBuf.set(data2,this._DebugBufPos),this._DebugBufPos+=data2.length):(console.log("DebugBuf: "+this._DebugBuf),this._DebugBufPos=0)),C.length){var Y=this._videoTrack,u={units:C,length:r,isKeyframe:D,dts:n,cts:T,pts:n+T};D&&(u.fileposition=e),Y.samples.push(u),Y.length+=r}},M=A,(t=[{key:"onTrackMetadata",get:function(){return this._onTrackMetadata},set:function(A){this._onTrackMetadata=A}},{key:"onMediaInfo",get:function(){return this._onMediaInfo},set:function(A){this._onMediaInfo=A}},{key:"onMetaDataArrived",get:function(){return this._onMetaDataArrived},set:function(A){this._onMetaDataArrived=A}},{key:"onScriptDataArrived",get:function(){return this._onScriptDataArrived},set:function(A){this._onScriptDataArrived=A}},{key:"onError",get:function(){return this._onError},set:function(A){this._onError=A}},{key:"onDataAvailable",get:function(){return this._onDataAvailable},set:function(A){this._onDataAvailable=A}},{key:"timestampBase",get:function(){return this._timestampBase},set:function(A){this._timestampBase=A}},{key:"overridedDuration",get:function(){return this._duration},set:function(A){this._durationOverrided=!0,this._duration=A,this._mediaInfo.duration=A}},{key:"overridedHasAudio",set:function(A){this._hasAudioFlagOverrided=!0,this._hasAudio=A,this._mediaInfo.hasAudio=A}},{key:"overridedHasVideo",set:function(A){this._hasVideoFlagOverrided=!0,this._hasVideo=A,this._mediaInfo.hasVideo=A}}])&&c(M.prototype,t),I&&c(M,I),A}();M.a=o},function(A,M,t){"use strict";var g=t(3),I=t(61),e=t(4).Buffer,i=new Array(16);function T(){I.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function E(A,M){return A<<M|A>>>32-M}function N(A,M,t,g,I,e,i){return E(A+(M&t|~M&g)+I+e|0,i)+M|0}function n(A,M,t,g,I,e,i){return E(A+(M&g|t&~g)+I+e|0,i)+M|0}function D(A,M,t,g,I,e,i){return E(A+(M^t^g)+I+e|0,i)+M|0}function C(A,M,t,g,I,e,i){return E(A+(t^(M|~g))+I+e|0,i)+M|0}g(T,I),T.prototype._update=function(){for(var A=i,M=0;M<16;++M)A[M]=this._block.readInt32LE(4*M);var t=this._a,g=this._b,I=this._c,e=this._d;t=N(t,g,I,e,A[0],3614090360,7),e=N(e,t,g,I,A[1],3905402710,12),I=N(I,e,t,g,A[2],606105819,17),g=N(g,I,e,t,A[3],3250441966,22),t=N(t,g,I,e,A[4],4118548399,7),e=N(e,t,g,I,A[5],1200080426,12),I=N(I,e,t,g,A[6],2821735955,17),g=N(g,I,e,t,A[7],4249261313,22),t=N(t,g,I,e,A[8],1770035416,7),e=N(e,t,g,I,A[9],2336552879,12),I=N(I,e,t,g,A[10],4294925233,17),g=N(g,I,e,t,A[11],2304563134,22),t=N(t,g,I,e,A[12],1804603682,7),e=N(e,t,g,I,A[13],4254626195,12),I=N(I,e,t,g,A[14],2792965006,17),t=n(t,g=N(g,I,e,t,A[15],1236535329,22),I,e,A[1],4129170786,5),e=n(e,t,g,I,A[6],3225465664,9),I=n(I,e,t,g,A[11],643717713,14),g=n(g,I,e,t,A[0],3921069994,20),t=n(t,g,I,e,A[5],3593408605,5),e=n(e,t,g,I,A[10],38016083,9),I=n(I,e,t,g,A[15],3634488961,14),g=n(g,I,e,t,A[4],3889429448,20),t=n(t,g,I,e,A[9],568446438,5),e=n(e,t,g,I,A[14],3275163606,9),I=n(I,e,t,g,A[3],4107603335,14),g=n(g,I,e,t,A[8],1163531501,20),t=n(t,g,I,e,A[13],2850285829,5),e=n(e,t,g,I,A[2],4243563512,9),I=n(I,e,t,g,A[7],1735328473,14),t=D(t,g=n(g,I,e,t,A[12],2368359562,20),I,e,A[5],4294588738,4),e=D(e,t,g,I,A[8],2272392833,11),I=D(I,e,t,g,A[11],1839030562,16),g=D(g,I,e,t,A[14],4259657740,23),t=D(t,g,I,e,A[1],2763975236,4),e=D(e,t,g,I,A[4],1272893353,11),I=D(I,e,t,g,A[7],4139469664,16),g=D(g,I,e,t,A[10],3200236656,23),t=D(t,g,I,e,A[13],681279174,4),e=D(e,t,g,I,A[0],3936430074,11),I=D(I,e,t,g,A[3],3572445317,16),g=D(g,I,e,t,A[6],76029189,23),t=D(t,g,I,e,A[9],3654602809,4),e=D(e,t,g,I,A[12],3873151461,11),I=D(I,e,t,g,A[15],530742520,16),t=C(t,g=D(g,I,e,t,A[2],3299628645,23),I,e,A[0],4096336452,6),e=C(e,t,g,I,A[7],1126891415,10),I=C(I,e,t,g,A[14],2878612391,15),g=C(g,I,e,t,A[5],4237533241,21),t=C(t,g,I,e,A[12],1700485571,6),e=C(e,t,g,I,A[3],2399980690,10),I=C(I,e,t,g,A[10],4293915773,15),g=C(g,I,e,t,A[1],2240044497,21),t=C(t,g,I,e,A[8],1873313359,6),e=C(e,t,g,I,A[15],4264355552,10),I=C(I,e,t,g,A[6],2734768916,15),g=C(g,I,e,t,A[13],1309151649,21),t=C(t,g,I,e,A[4],4149444226,6),e=C(e,t,g,I,A[11],3174756917,10),I=C(I,e,t,g,A[2],718787259,15),g=C(g,I,e,t,A[9],3951481745,21),this._a=this._a+t|0,this._b=this._b+g|0,this._c=this._c+I|0,this._d=this._d+e|0},T.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var A=e.allocUnsafe(16);return A.writeInt32LE(this._a,0),A.writeInt32LE(this._b,4),A.writeInt32LE(this._c,8),A.writeInt32LE(this._d,12),A},A.exports=T},function(A,M,t){"use strict";var g=t(19).codes.ERR_STREAM_PREMATURE_CLOSE;function I(){}A.exports=function A(M,t,e){if("function"==typeof t)return A(M,null,t);t||(t={}),e=function(A){var M=!1;return function(){if(!M){M=!0;for(var t=arguments.length,g=new Array(t),I=0;I<t;I++)g[I]=arguments[I];A.apply(this,g)}}}(e||I);var i=t.readable||!1!==t.readable&&M.readable,T=t.writable||!1!==t.writable&&M.writable,E=function(){M.writable||n()},N=M._writableState&&M._writableState.finished,n=function(){T=!1,N=!0,i||e.call(M)},D=M._readableState&&M._readableState.endEmitted,C=function(){i=!1,D=!0,T||e.call(M)},r=function(A){e.call(M,A)},c=function(){var A;return i&&!D?(M._readableState&&M._readableState.ended||(A=new g),e.call(M,A)):T&&!N?(M._writableState&&M._writableState.ended||(A=new g),e.call(M,A)):void 0},o=function(){M.req.on("finish",n)};return!function(A){return A.setHeader&&"function"==typeof A.abort}(M)?T&&!M._writableState&&(M.on("end",E),M.on("close",E)):(M.on("complete",n),M.on("abort",c),M.req?o():M.on("request",o)),M.on("end",C),M.on("finish",n),!1!==t.error&&M.on("error",r),M.on("close",c),function(){M.removeListener("complete",n),M.removeListener("abort",c),M.removeListener("request",o),M.req&&M.req.removeListener("finish",n),M.removeListener("end",E),M.removeListener("close",E),M.removeListener("finish",n),M.removeListener("end",C),M.removeListener("error",r),M.removeListener("close",c)}}},function(A,M,t){"use strict";var g=t(9).Buffer,I=t(3),e=t(61),i=new Array(16),T=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],E=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],N=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],n=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],D=[0,1518500249,1859775393,2400959708,2840853838],C=[1352829926,1548603684,1836072691,2053994217,0];function r(){e.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function c(A,M){return A<<M|A>>>32-M}function o(A,M,t,g,I,e,i,T){return c(A+(M^t^g)+e+i|0,T)+I|0}function B(A,M,t,g,I,e,i,T){return c(A+(M&t|~M&g)+e+i|0,T)+I|0}function Q(A,M,t,g,I,e,i,T){return c(A+((M|~t)^g)+e+i|0,T)+I|0}function a(A,M,t,g,I,e,i,T){return c(A+(M&g|t&~g)+e+i|0,T)+I|0}function h(A,M,t,g,I,e,i,T){return c(A+(M^(t|~g))+e+i|0,T)+I|0}I(r,e),r.prototype._update=function(){for(var A=i,M=0;M<16;++M)A[M]=this._block.readInt32LE(4*M);for(var t=0|this._a,g=0|this._b,I=0|this._c,e=0|this._d,r=0|this._e,s=0|this._a,y=0|this._b,w=0|this._c,j=0|this._d,L=0|this._e,d=0;d<80;d+=1){var x,Y;d<16?(x=o(t,g,I,e,r,A[T[d]],D[0],N[d]),Y=h(s,y,w,j,L,A[E[d]],C[0],n[d])):d<32?(x=B(t,g,I,e,r,A[T[d]],D[1],N[d]),Y=a(s,y,w,j,L,A[E[d]],C[1],n[d])):d<48?(x=Q(t,g,I,e,r,A[T[d]],D[2],N[d]),Y=Q(s,y,w,j,L,A[E[d]],C[2],n[d])):d<64?(x=a(t,g,I,e,r,A[T[d]],D[3],N[d]),Y=B(s,y,w,j,L,A[E[d]],C[3],n[d])):(x=h(t,g,I,e,r,A[T[d]],D[4],N[d]),Y=o(s,y,w,j,L,A[E[d]],C[4],n[d])),t=r,r=e,e=c(I,10),I=g,g=x,s=L,L=j,j=c(w,10),w=y,y=Y}var u=this._b+I+j|0;this._b=this._c+e+L|0,this._c=this._d+r+s|0,this._d=this._e+t+y|0,this._e=this._a+g+w|0,this._a=u},r.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var A=g.alloc?g.alloc(20):new g(20);return A.writeInt32LE(this._a,0),A.writeInt32LE(this._b,4),A.writeInt32LE(this._c,8),A.writeInt32LE(this._d,12),A.writeInt32LE(this._e,16),A},A.exports=r},function(A,M,t){(M=A.exports=function(A){A=A.toLowerCase();var t=M[A];if(!t)throw new Error(A+" is not supported (we accept pull requests)");return new t}).sha=t(131),M.sha1=t(132),M.sha224=t(133),M.sha256=t(70),M.sha384=t(134),M.sha512=t(71)},function(A,M,t){(M=A.exports=t(72)).Stream=M,M.Readable=M,M.Writable=t(43),M.Duplex=t(16),M.Transform=t(75),M.PassThrough=t(141)},function(A,M,t){var g=t(9),I=g.Buffer;function e(A,M){for(var t in A)M[t]=A[t]}function i(A,M,t){return I(A,M,t)}I.from&&I.alloc&&I.allocUnsafe&&I.allocUnsafeSlow?A.exports=g:(e(g,M),M.Buffer=i),e(I,i),i.from=function(A,M,t){if("number"==typeof A)throw new TypeError("Argument must not be a number");return I(A,M,t)},i.alloc=function(A,M,t){if("number"!=typeof A)throw new TypeError("Argument must be a number");var g=I(A);return void 0!==M?"string"==typeof t?g.fill(M,t):g.fill(M):g.fill(0),g},i.allocUnsafe=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return I(A)},i.allocUnsafeSlow=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return g.SlowBuffer(A)}},function(A,M,t){"use strict";(function(M,g,I){var e=t(31);function i(A){var M=this;this.next=null,this.entry=null,this.finish=function(){!function(A,M,t){var g=A.entry;A.entry=null;for(;g;){var I=g.callback;M.pendingcb--,I(t),g=g.next}M.corkedRequestsFree?M.corkedRequestsFree.next=A:M.corkedRequestsFree=A}(M,A)}}A.exports=a;var T,E=!M.browser&&["v0.10","v0.9."].indexOf(M.version.slice(0,5))>-1?g:e.nextTick;a.WritableState=Q;var N=Object.create(t(25));N.inherits=t(3);var n={deprecate:t(68)},D=t(73),C=t(42).Buffer,r=I.Uint8Array||function(){};var c,o=t(74);function B(){}function Q(A,M){T=T||t(16),A=A||{};var g=M instanceof T;this.objectMode=!!A.objectMode,g&&(this.objectMode=this.objectMode||!!A.writableObjectMode);var I=A.highWaterMark,N=A.writableHighWaterMark,n=this.objectMode?16:16384;this.highWaterMark=I||0===I?I:g&&(N||0===N)?N:n,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var D=!1===A.decodeStrings;this.decodeStrings=!D,this.defaultEncoding=A.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(A){!function(A,M){var t=A._writableState,g=t.sync,I=t.writecb;if(function(A){A.writing=!1,A.writecb=null,A.length-=A.writelen,A.writelen=0}(t),M)!function(A,M,t,g,I){--M.pendingcb,t?(e.nextTick(I,g),e.nextTick(L,A,M),A._writableState.errorEmitted=!0,A.emit("error",g)):(I(g),A._writableState.errorEmitted=!0,A.emit("error",g),L(A,M))}(A,t,g,M,I);else{var i=w(t);i||t.corked||t.bufferProcessing||!t.bufferedRequest||y(A,t),g?E(s,A,t,i,I):s(A,t,i,I)}}(M,A)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new i(this)}function a(A){if(T=T||t(16),!(c.call(a,this)||this instanceof T))return new a(A);this._writableState=new Q(A,this),this.writable=!0,A&&("function"==typeof A.write&&(this._write=A.write),"function"==typeof A.writev&&(this._writev=A.writev),"function"==typeof A.destroy&&(this._destroy=A.destroy),"function"==typeof A.final&&(this._final=A.final)),D.call(this)}function h(A,M,t,g,I,e,i){M.writelen=g,M.writecb=i,M.writing=!0,M.sync=!0,t?A._writev(I,M.onwrite):A._write(I,e,M.onwrite),M.sync=!1}function s(A,M,t,g){t||function(A,M){0===M.length&&M.needDrain&&(M.needDrain=!1,A.emit("drain"))}(A,M),M.pendingcb--,g(),L(A,M)}function y(A,M){M.bufferProcessing=!0;var t=M.bufferedRequest;if(A._writev&&t&&t.next){var g=M.bufferedRequestCount,I=new Array(g),e=M.corkedRequestsFree;e.entry=t;for(var T=0,E=!0;t;)I[T]=t,t.isBuf||(E=!1),t=t.next,T+=1;I.allBuffers=E,h(A,M,!0,M.length,I,"",e.finish),M.pendingcb++,M.lastBufferedRequest=null,e.next?(M.corkedRequestsFree=e.next,e.next=null):M.corkedRequestsFree=new i(M),M.bufferedRequestCount=0}else{for(;t;){var N=t.chunk,n=t.encoding,D=t.callback;if(h(A,M,!1,M.objectMode?1:N.length,N,n,D),t=t.next,M.bufferedRequestCount--,M.writing)break}null===t&&(M.lastBufferedRequest=null)}M.bufferedRequest=t,M.bufferProcessing=!1}function w(A){return A.ending&&0===A.length&&null===A.bufferedRequest&&!A.finished&&!A.writing}function j(A,M){A._final((function(t){M.pendingcb--,t&&A.emit("error",t),M.prefinished=!0,A.emit("prefinish"),L(A,M)}))}function L(A,M){var t=w(M);return t&&(!function(A,M){M.prefinished||M.finalCalled||("function"==typeof A._final?(M.pendingcb++,M.finalCalled=!0,e.nextTick(j,A,M)):(M.prefinished=!0,A.emit("prefinish")))}(A,M),0===M.pendingcb&&(M.finished=!0,A.emit("finish"))),t}N.inherits(a,D),Q.prototype.getBuffer=function(){for(var A=this.bufferedRequest,M=[];A;)M.push(A),A=A.next;return M},function(){try{Object.defineProperty(Q.prototype,"buffer",{get:n.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(A){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(c=Function.prototype[Symbol.hasInstance],Object.defineProperty(a,Symbol.hasInstance,{value:function(A){return!!c.call(this,A)||this===a&&(A&&A._writableState instanceof Q)}})):c=function(A){return A instanceof this},a.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},a.prototype.write=function(A,M,t){var g,I=this._writableState,i=!1,T=!I.objectMode&&(g=A,C.isBuffer(g)||g instanceof r);return T&&!C.isBuffer(A)&&(A=function(A){return C.from(A)}(A)),"function"==typeof M&&(t=M,M=null),T?M="buffer":M||(M=I.defaultEncoding),"function"!=typeof t&&(t=B),I.ended?function(A,M){var t=new Error("write after end");A.emit("error",t),e.nextTick(M,t)}(this,t):(T||function(A,M,t,g){var I=!0,i=!1;return null===t?i=new TypeError("May not write null values to stream"):"string"==typeof t||void 0===t||M.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(A.emit("error",i),e.nextTick(g,i),I=!1),I}(this,I,A,t))&&(I.pendingcb++,i=function(A,M,t,g,I,e){if(!t){var i=function(A,M,t){A.objectMode||!1===A.decodeStrings||"string"!=typeof M||(M=C.from(M,t));return M}(M,g,I);g!==i&&(t=!0,I="buffer",g=i)}var T=M.objectMode?1:g.length;M.length+=T;var E=M.length<M.highWaterMark;E||(M.needDrain=!0);if(M.writing||M.corked){var N=M.lastBufferedRequest;M.lastBufferedRequest={chunk:g,encoding:I,isBuf:t,callback:e,next:null},N?N.next=M.lastBufferedRequest:M.bufferedRequest=M.lastBufferedRequest,M.bufferedRequestCount+=1}else h(A,M,!1,T,g,I,e);return E}(this,I,T,A,M,t)),i},a.prototype.cork=function(){this._writableState.corked++},a.prototype.uncork=function(){var A=this._writableState;A.corked&&(A.corked--,A.writing||A.corked||A.finished||A.bufferProcessing||!A.bufferedRequest||y(this,A))},a.prototype.setDefaultEncoding=function(A){if("string"==typeof A&&(A=A.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((A+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+A);return this._writableState.defaultEncoding=A,this},Object.defineProperty(a.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),a.prototype._write=function(A,M,t){t(new Error("_write() is not implemented"))},a.prototype._writev=null,a.prototype.end=function(A,M,t){var g=this._writableState;"function"==typeof A?(t=A,A=null,M=null):"function"==typeof M&&(t=M,M=null),null!=A&&this.write(A,M),g.corked&&(g.corked=1,this.uncork()),g.ending||g.finished||function(A,M,t){M.ending=!0,L(A,M),t&&(M.finished?e.nextTick(t):A.once("finish",t));M.ended=!0,A.writable=!1}(this,g,t)},Object.defineProperty(a.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(A){this._writableState&&(this._writableState.destroyed=A)}}),a.prototype.destroy=o.destroy,a.prototype._undestroy=o.undestroy,a.prototype._destroy=function(A,M){this.end(),M(A)}}).call(this,t(8),t(139).setImmediate,t(10))},function(A,M,t){"use strict";var g=t(11);function I(A){this.options=A,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}A.exports=I,I.prototype._init=function(){},I.prototype.update=function(A){return 0===A.length?[]:"decrypt"===this.type?this._updateDecrypt(A):this._updateEncrypt(A)},I.prototype._buffer=function(A,M){for(var t=Math.min(this.buffer.length-this.bufferOff,A.length-M),g=0;g<t;g++)this.buffer[this.bufferOff+g]=A[M+g];return this.bufferOff+=t,t},I.prototype._flushBuffer=function(A,M){return this._update(this.buffer,0,A,M),this.bufferOff=0,this.blockSize},I.prototype._updateEncrypt=function(A){var M=0,t=0,g=(this.bufferOff+A.length)/this.blockSize|0,I=new Array(g*this.blockSize);0!==this.bufferOff&&(M+=this._buffer(A,M),this.bufferOff===this.buffer.length&&(t+=this._flushBuffer(I,t)));for(var e=A.length-(A.length-M)%this.blockSize;M<e;M+=this.blockSize)this._update(A,M,I,t),t+=this.blockSize;for(;M<A.length;M++,this.bufferOff++)this.buffer[this.bufferOff]=A[M];return I},I.prototype._updateDecrypt=function(A){for(var M=0,t=0,g=Math.ceil((this.bufferOff+A.length)/this.blockSize)-1,I=new Array(g*this.blockSize);g>0;g--)M+=this._buffer(A,M),t+=this._flushBuffer(I,t);return M+=this._buffer(A,M),I},I.prototype.final=function(A){var M,t;return A&&(M=this.update(A)),t="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),M?M.concat(t):t},I.prototype._pad=function(A,M){if(0===M)return!1;for(;M<A.length;)A[M++]=0;return!0},I.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var A=new Array(this.blockSize);return this._update(this.buffer,0,A,0),A},I.prototype._unpad=function(A){return A},I.prototype._finalDecrypt=function(){g.equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var A=new Array(this.blockSize);return this._flushBuffer(A,0),this._unpad(A)}},function(A,M,t){var g=t(154),I=t(162),e=t(88);M.createCipher=M.Cipher=g.createCipher,M.createCipheriv=M.Cipheriv=g.createCipheriv,M.createDecipher=M.Decipher=I.createDecipher,M.createDecipheriv=M.Decipheriv=I.createDecipheriv,M.listCiphers=M.getCiphers=function(){return Object.keys(e)}},function(A,M,t){var g={ECB:t(155),CBC:t(156),CFB:t(157),CFB8:t(158),CFB1:t(159),OFB:t(160),CTR:t(86),GCM:t(86)},I=t(88);for(var e in I)I[e].module=g[I[e].mode];A.exports=I},function(A,M,t){var g;function I(A){this.rand=A}if(A.exports=function(A){return g||(g=new I(null)),g.generate(A)},A.exports.Rand=I,I.prototype.generate=function(A){return this._rand(A)},I.prototype._rand=function(A){if(this.rand.getBytes)return this.rand.getBytes(A);for(var M=new Uint8Array(A),t=0;t<M.length;t++)M[t]=this.rand.getByte();return M},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?I.prototype._rand=function(A){var M=new Uint8Array(A);return self.crypto.getRandomValues(M),M}:self.msCrypto&&self.msCrypto.getRandomValues?I.prototype._rand=function(A){var M=new Uint8Array(A);return self.msCrypto.getRandomValues(M),M}:"object"==typeof window&&(I.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var e=t(166);if("function"!=typeof e.randomBytes)throw new Error("Not supported");I.prototype._rand=function(A){return e.randomBytes(A)}}catch(A){}},function(A,M,t){(function(M){var g=t(6),I=t(18);function e(A,t){var I=function(A){var M=i(A);return{blinder:M.toRed(g.mont(A.modulus)).redPow(new g(A.publicExponent)).fromRed(),unblinder:M.invm(A.modulus)}}(t),e=t.modulus.byteLength(),T=(g.mont(t.modulus),new g(A).mul(I.blinder).umod(t.modulus)),E=T.toRed(g.mont(t.prime1)),N=T.toRed(g.mont(t.prime2)),n=t.coefficient,D=t.prime1,C=t.prime2,r=E.redPow(t.exponent1),c=N.redPow(t.exponent2);r=r.fromRed(),c=c.fromRed();var o=r.isub(c).imul(n).umod(D);return o.imul(C),c.iadd(o),new M(c.imul(I.unblinder).umod(t.modulus).toArray(!1,e))}function i(A){for(var M=A.modulus.byteLength(),t=new g(I(M));t.cmp(A.modulus)>=0||!t.umod(A.prime1)||!t.umod(A.prime2);)t=new g(I(M));return t}A.exports=e,e.getr=i}).call(this,t(9).Buffer)},function(A,M,t){"use strict";var g=M;g.version=t(171).version,g.utils=t(12),g.rand=t(47),g.curve=t(95),g.curves=t(50),g.ec=t(182),g.eddsa=t(186)},function(A,M,t){"use strict";var g,I=M,e=t(51),i=t(95),T=t(12).assert;function E(A){"short"===A.type?this.curve=new i.short(A):"edwards"===A.type?this.curve=new i.edwards(A):this.curve=new i.mont(A),this.g=this.curve.g,this.n=this.curve.n,this.hash=A.hash,T(this.g.validate(),"Invalid curve"),T(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function N(A,M){Object.defineProperty(I,A,{configurable:!0,enumerable:!0,get:function(){var t=new E(M);return Object.defineProperty(I,A,{configurable:!0,enumerable:!0,value:t}),t}})}I.PresetCurve=E,N("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:e.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),N("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:e.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),N("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:e.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),N("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:e.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),N("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:e.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),N("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:e.sha256,gRed:!1,g:["9"]}),N("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:e.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{g=t(181)}catch(A){g=void 0}N("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:e.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",g]})},function(A,M,t){var g=M;g.utils=t(14),g.common=t(27),g.sha=t(175),g.ripemd=t(179),g.hmac=t(180),g.sha1=g.sha.sha1,g.sha256=g.sha.sha256,g.sha224=g.sha.sha224,g.sha384=g.sha.sha384,g.sha512=g.sha.sha512,g.ripemd160=g.ripemd.ripemd160},function(A,M,t){"use strict";(function(M){var g,I=t(9),e=I.Buffer,i={};for(g in I)I.hasOwnProperty(g)&&"SlowBuffer"!==g&&"Buffer"!==g&&(i[g]=I[g]);var T=i.Buffer={};for(g in e)e.hasOwnProperty(g)&&"allocUnsafe"!==g&&"allocUnsafeSlow"!==g&&(T[g]=e[g]);if(i.Buffer.prototype=e.prototype,T.from&&T.from!==Uint8Array.from||(T.from=function(A,M,t){if("number"==typeof A)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof A);if(A&&void 0===A.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);return e(A,M,t)}),T.alloc||(T.alloc=function(A,M,t){if("number"!=typeof A)throw new TypeError('The "size" argument must be of type number. Received type '+typeof A);if(A<0||A>=2*(1<<30))throw new RangeError('The value "'+A+'" is invalid for option "size"');var g=e(A);return M&&0!==M.length?"string"==typeof t?g.fill(M,t):g.fill(M):g.fill(0),g}),!i.kStringMaxLength)try{i.kStringMaxLength=M.binding("buffer").kStringMaxLength}catch(A){}i.constants||(i.constants={MAX_LENGTH:i.kMaxLength},i.kStringMaxLength&&(i.constants.MAX_STRING_LENGTH=i.kStringMaxLength)),A.exports=i}).call(this,t(8))},function(A,M,t){"use strict";var g=t(54).Reporter,I=t(28).EncoderBuffer,e=t(28).DecoderBuffer,i=t(11),T=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],E=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(T);function N(A,M,t){var g={};this._baseState=g,g.name=t,g.enc=A,g.parent=M||null,g.children=null,g.tag=null,g.args=null,g.reverseArgs=null,g.choice=null,g.optional=!1,g.any=!1,g.obj=!1,g.use=null,g.useDecoder=null,g.key=null,g.default=null,g.explicit=null,g.implicit=null,g.contains=null,g.parent||(g.children=[],this._wrap())}A.exports=N;var n=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];N.prototype.clone=function(){var A=this._baseState,M={};n.forEach((function(t){M[t]=A[t]}));var t=new this.constructor(M.parent);return t._baseState=M,t},N.prototype._wrap=function(){var A=this._baseState;E.forEach((function(M){this[M]=function(){var t=new this.constructor(this);return A.children.push(t),t[M].apply(t,arguments)}}),this)},N.prototype._init=function(A){var M=this._baseState;i(null===M.parent),A.call(this),M.children=M.children.filter((function(A){return A._baseState.parent===this}),this),i.equal(M.children.length,1,"Root node can have only one child")},N.prototype._useArgs=function(A){var M=this._baseState,t=A.filter((function(A){return A instanceof this.constructor}),this);A=A.filter((function(A){return!(A instanceof this.constructor)}),this),0!==t.length&&(i(null===M.children),M.children=t,t.forEach((function(A){A._baseState.parent=this}),this)),0!==A.length&&(i(null===M.args),M.args=A,M.reverseArgs=A.map((function(A){if("object"!=typeof A||A.constructor!==Object)return A;var M={};return Object.keys(A).forEach((function(t){t==(0|t)&&(t|=0);var g=A[t];M[g]=t})),M})))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach((function(A){N.prototype[A]=function(){var M=this._baseState;throw new Error(A+" not implemented for encoding: "+M.enc)}})),T.forEach((function(A){N.prototype[A]=function(){var M=this._baseState,t=Array.prototype.slice.call(arguments);return i(null===M.tag),M.tag=A,this._useArgs(t),this}})),N.prototype.use=function(A){i(A);var M=this._baseState;return i(null===M.use),M.use=A,this},N.prototype.optional=function(){return this._baseState.optional=!0,this},N.prototype.def=function(A){var M=this._baseState;return i(null===M.default),M.default=A,M.optional=!0,this},N.prototype.explicit=function(A){var M=this._baseState;return i(null===M.explicit&&null===M.implicit),M.explicit=A,this},N.prototype.implicit=function(A){var M=this._baseState;return i(null===M.explicit&&null===M.implicit),M.implicit=A,this},N.prototype.obj=function(){var A=this._baseState,M=Array.prototype.slice.call(arguments);return A.obj=!0,0!==M.length&&this._useArgs(M),this},N.prototype.key=function(A){var M=this._baseState;return i(null===M.key),M.key=A,this},N.prototype.any=function(){return this._baseState.any=!0,this},N.prototype.choice=function(A){var M=this._baseState;return i(null===M.choice),M.choice=A,this._useArgs(Object.keys(A).map((function(M){return A[M]}))),this},N.prototype.contains=function(A){var M=this._baseState;return i(null===M.use),M.contains=A,this},N.prototype._decode=function(A,M){var t=this._baseState;if(null===t.parent)return A.wrapResult(t.children[0]._decode(A,M));var g,I=t.default,i=!0,T=null;if(null!==t.key&&(T=A.enterKey(t.key)),t.optional){var E=null;if(null!==t.explicit?E=t.explicit:null!==t.implicit?E=t.implicit:null!==t.tag&&(E=t.tag),null!==E||t.any){if(i=this._peekTag(A,E,t.any),A.isError(i))return i}else{var N=A.save();try{null===t.choice?this._decodeGeneric(t.tag,A,M):this._decodeChoice(A,M),i=!0}catch(A){i=!1}A.restore(N)}}if(t.obj&&i&&(g=A.enterObject()),i){if(null!==t.explicit){var n=this._decodeTag(A,t.explicit);if(A.isError(n))return n;A=n}var D=A.offset;if(null===t.use&&null===t.choice){var C;t.any&&(C=A.save());var r=this._decodeTag(A,null!==t.implicit?t.implicit:t.tag,t.any);if(A.isError(r))return r;t.any?I=A.raw(C):A=r}if(M&&M.track&&null!==t.tag&&M.track(A.path(),D,A.length,"tagged"),M&&M.track&&null!==t.tag&&M.track(A.path(),A.offset,A.length,"content"),t.any||(I=null===t.choice?this._decodeGeneric(t.tag,A,M):this._decodeChoice(A,M)),A.isError(I))return I;if(t.any||null!==t.choice||null===t.children||t.children.forEach((function(t){t._decode(A,M)})),t.contains&&("octstr"===t.tag||"bitstr"===t.tag)){var c=new e(I);I=this._getUse(t.contains,A._reporterState.obj)._decode(c,M)}}return t.obj&&i&&(I=A.leaveObject(g)),null===t.key||null===I&&!0!==i?null!==T&&A.exitKey(T):A.leaveKey(T,t.key,I),I},N.prototype._decodeGeneric=function(A,M,t){var g=this._baseState;return"seq"===A||"set"===A?null:"seqof"===A||"setof"===A?this._decodeList(M,A,g.args[0],t):/str$/.test(A)?this._decodeStr(M,A,t):"objid"===A&&g.args?this._decodeObjid(M,g.args[0],g.args[1],t):"objid"===A?this._decodeObjid(M,null,null,t):"gentime"===A||"utctime"===A?this._decodeTime(M,A,t):"null_"===A?this._decodeNull(M,t):"bool"===A?this._decodeBool(M,t):"objDesc"===A?this._decodeStr(M,A,t):"int"===A||"enum"===A?this._decodeInt(M,g.args&&g.args[0],t):null!==g.use?this._getUse(g.use,M._reporterState.obj)._decode(M,t):M.error("unknown tag: "+A)},N.prototype._getUse=function(A,M){var t=this._baseState;return t.useDecoder=this._use(A,M),i(null===t.useDecoder._baseState.parent),t.useDecoder=t.useDecoder._baseState.children[0],t.implicit!==t.useDecoder._baseState.implicit&&(t.useDecoder=t.useDecoder.clone(),t.useDecoder._baseState.implicit=t.implicit),t.useDecoder},N.prototype._decodeChoice=function(A,M){var t=this._baseState,g=null,I=!1;return Object.keys(t.choice).some((function(e){var i=A.save(),T=t.choice[e];try{var E=T._decode(A,M);if(A.isError(E))return!1;g={type:e,value:E},I=!0}catch(M){return A.restore(i),!1}return!0}),this),I?g:A.error("Choice not matched")},N.prototype._createEncoderBuffer=function(A){return new I(A,this.reporter)},N.prototype._encode=function(A,M,t){var g=this._baseState;if(null===g.default||g.default!==A){var I=this._encodeValue(A,M,t);if(void 0!==I&&!this._skipDefault(I,M,t))return I}},N.prototype._encodeValue=function(A,M,t){var I=this._baseState;if(null===I.parent)return I.children[0]._encode(A,M||new g);var e=null;if(this.reporter=M,I.optional&&void 0===A){if(null===I.default)return;A=I.default}var i=null,T=!1;if(I.any)e=this._createEncoderBuffer(A);else if(I.choice)e=this._encodeChoice(A,M);else if(I.contains)i=this._getUse(I.contains,t)._encode(A,M),T=!0;else if(I.children)i=I.children.map((function(t){if("null_"===t._baseState.tag)return t._encode(null,M,A);if(null===t._baseState.key)return M.error("Child should have a key");var g=M.enterKey(t._baseState.key);if("object"!=typeof A)return M.error("Child expected, but input is not object");var I=t._encode(A[t._baseState.key],M,A);return M.leaveKey(g),I}),this).filter((function(A){return A})),i=this._createEncoderBuffer(i);else if("seqof"===I.tag||"setof"===I.tag){if(!I.args||1!==I.args.length)return M.error("Too many args for : "+I.tag);if(!Array.isArray(A))return M.error("seqof/setof, but data is not Array");var E=this.clone();E._baseState.implicit=null,i=this._createEncoderBuffer(A.map((function(t){var g=this._baseState;return this._getUse(g.args[0],A)._encode(t,M)}),E))}else null!==I.use?e=this._getUse(I.use,t)._encode(A,M):(i=this._encodePrimitive(I.tag,A),T=!0);if(!I.any&&null===I.choice){var N=null!==I.implicit?I.implicit:I.tag,n=null===I.implicit?"universal":"context";null===N?null===I.use&&M.error("Tag could be omitted only for .use()"):null===I.use&&(e=this._encodeComposite(N,T,n,i))}return null!==I.explicit&&(e=this._encodeComposite(I.explicit,!1,"context",e)),e},N.prototype._encodeChoice=function(A,M){var t=this._baseState,g=t.choice[A.type];return g||i(!1,A.type+" not found in "+JSON.stringify(Object.keys(t.choice))),g._encode(A.value,M)},N.prototype._encodePrimitive=function(A,M){var t=this._baseState;if(/str$/.test(A))return this._encodeStr(M,A);if("objid"===A&&t.args)return this._encodeObjid(M,t.reverseArgs[0],t.args[1]);if("objid"===A)return this._encodeObjid(M,null,null);if("gentime"===A||"utctime"===A)return this._encodeTime(M,A);if("null_"===A)return this._encodeNull();if("int"===A||"enum"===A)return this._encodeInt(M,t.args&&t.reverseArgs[0]);if("bool"===A)return this._encodeBool(M);if("objDesc"===A)return this._encodeStr(M,A);throw new Error("Unsupported tag: "+A)},N.prototype._isNumstr=function(A){return/^[0-9 ]*$/.test(A)},N.prototype._isPrintstr=function(A){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(A)}},function(A,M,t){"use strict";var g=t(3);function I(A){this._reporterState={obj:null,path:[],options:A||{},errors:[]}}function e(A,M){this.path=A,this.rethrow(M)}M.Reporter=I,I.prototype.isError=function(A){return A instanceof e},I.prototype.save=function(){var A=this._reporterState;return{obj:A.obj,pathLen:A.path.length}},I.prototype.restore=function(A){var M=this._reporterState;M.obj=A.obj,M.path=M.path.slice(0,A.pathLen)},I.prototype.enterKey=function(A){return this._reporterState.path.push(A)},I.prototype.exitKey=function(A){var M=this._reporterState;M.path=M.path.slice(0,A-1)},I.prototype.leaveKey=function(A,M,t){var g=this._reporterState;this.exitKey(A),null!==g.obj&&(g.obj[M]=t)},I.prototype.path=function(){return this._reporterState.path.join("/")},I.prototype.enterObject=function(){var A=this._reporterState,M=A.obj;return A.obj={},M},I.prototype.leaveObject=function(A){var M=this._reporterState,t=M.obj;return M.obj=A,t},I.prototype.error=function(A){var M,t=this._reporterState,g=A instanceof e;if(M=g?A:new e(t.path.map((function(A){return"["+JSON.stringify(A)+"]"})).join(""),A.message||A,A.stack),!t.options.partial)throw M;return g||t.errors.push(M),M},I.prototype.wrapResult=function(A){var M=this._reporterState;return M.options.partial?{result:this.isError(A)?null:A,errors:M.errors}:A},g(e,Error),e.prototype.rethrow=function(A){if(this.message=A+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,e),!this.stack)try{throw new Error(this.message)}catch(A){this.stack=A.stack}return this}},function(A,M,t){"use strict";function g(A){var M={};return Object.keys(A).forEach((function(t){(0|t)==t&&(t|=0);var g=A[t];M[g]=t})),M}M.tagClass={0:"universal",1:"application",2:"context",3:"private"},M.tagClassByName=g(M.tagClass),M.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},M.tagByName=g(M.tag)},function(A,M,t){"use strict";var g,I=function(){return void 0===g&&(g=Boolean(window&&document&&document.all&&!window.atob)),g},e=function(){var A={};return function(M){if(void 0===A[M]){var t=document.querySelector(M);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(A){t=null}A[M]=t}return A[M]}}(),i=[];function T(A){for(var M=-1,t=0;t<i.length;t++)if(i[t].identifier===A){M=t;break}return M}function E(A,M){for(var t={},g=[],I=0;I<A.length;I++){var e=A[I],E=M.base?e[0]+M.base:e[0],N=t[E]||0,n="".concat(E," ").concat(N);t[E]=N+1;var D=T(n),C={css:e[1],media:e[2],sourceMap:e[3]};-1!==D?(i[D].references++,i[D].updater(C)):i.push({identifier:n,updater:B(C,M),references:1}),g.push(n)}return g}function N(A){var M=document.createElement("style"),g=A.attributes||{};if(void 0===g.nonce){var I=t.nc;I&&(g.nonce=I)}if(Object.keys(g).forEach((function(A){M.setAttribute(A,g[A])})),"function"==typeof A.insert)A.insert(M);else{var i=e(A.insert||"head");if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(M)}return M}var n,D=(n=[],function(A,M){return n[A]=M,n.filter(Boolean).join("\n")});function C(A,M,t,g){var I=t?"":g.media?"@media ".concat(g.media," {").concat(g.css,"}"):g.css;if(A.styleSheet)A.styleSheet.cssText=D(M,I);else{var e=document.createTextNode(I),i=A.childNodes;i[M]&&A.removeChild(i[M]),i.length?A.insertBefore(e,i[M]):A.appendChild(e)}}function r(A,M,t){var g=t.css,I=t.media,e=t.sourceMap;if(I?A.setAttribute("media",I):A.removeAttribute("media"),e&&btoa&&(g+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(e))))," */")),A.styleSheet)A.styleSheet.cssText=g;else{for(;A.firstChild;)A.removeChild(A.firstChild);A.appendChild(document.createTextNode(g))}}var c=null,o=0;function B(A,M){var t,g,I;if(M.singleton){var e=o++;t=c||(c=N(M)),g=C.bind(null,t,e,!1),I=C.bind(null,t,e,!0)}else t=N(M),g=r.bind(null,t,M),I=function(){!function(A){if(null===A.parentNode)return!1;A.parentNode.removeChild(A)}(t)};return g(A),function(M){if(M){if(M.css===A.css&&M.media===A.media&&M.sourceMap===A.sourceMap)return;g(A=M)}else I()}}A.exports=function(A,M){(M=M||{}).singleton||"boolean"==typeof M.singleton||(M.singleton=I());var t=E(A=A||[],M);return function(A){if(A=A||[],"[object Array]"===Object.prototype.toString.call(A)){for(var g=0;g<t.length;g++){var I=T(t[g]);i[I].references--}for(var e=E(A,M),N=0;N<t.length;N++){var n=T(t[N]);0===i[n].references&&(i[n].updater(),i.splice(n,1))}t=e}}}},function(A,M,t){"use strict";A.exports=function(A){var M=[];return M.toString=function(){return this.map((function(M){var t=function(A,M){var t=A[1]||"",g=A[3];if(!g)return t;if(M&&"function"==typeof btoa){var I=(i=g,T=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),E="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(T),"/*# ".concat(E," */")),e=g.sources.map((function(A){return"/*# sourceURL=".concat(g.sourceRoot||"").concat(A," */")}));return[t].concat(e).concat([I]).join("\n")}var i,T,E;return[t].join("\n")}(M,A);return M[2]?"@media ".concat(M[2]," {").concat(t,"}"):t})).join("")},M.i=function(A,t,g){"string"==typeof A&&(A=[[null,A,""]]);var I={};if(g)for(var e=0;e<this.length;e++){var i=this[e][0];null!=i&&(I[i]=!0)}for(var T=0;T<A.length;T++){var E=[].concat(A[T]);g&&I[E[0]]||(t&&(E[2]?E[2]="".concat(t," and ").concat(E[2]):E[2]=t),M.push(E))}},M}},function(A,M,t){"use strict";var g=t(0);function I(A,M,t){var g,I,e,i,T,E=navigator.userAgent.toLowerCase(),N=t,n=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];if(g=1+((192&A[M+2])>>>6),!((I=(60&A[M+2])>>>2)>n.length-1))return i=(1&A[M+2])<<2,i|=(192&A[M+3])>>>6,/firefox/i.test(E)?I>=6?(g=5,T=new Array(4),e=I-3):(g=2,T=new Array(2),e=I):-1!==E.indexOf("android")?(g=2,T=new Array(2),e=I):(g=5,T=new Array(4),t&&(-1!==t.indexOf("mp4a.40.29")||-1!==t.indexOf("mp4a.40.5"))||!t&&I>=6?e=I-3:((t&&-1!==t.indexOf("mp4a.40.2")&&(I>=6&&1===i||/vivaldi/i.test(E))||!t&&1===i)&&(g=2,T=new Array(2)),e=I)),T[0]=g<<3,T[0]|=(14&I)>>1,T[1]|=(1&I)<<7,T[1]|=i<<3,5===g&&(T[1]|=(14&e)>>1,T[2]=(1&e)<<7,T[2]|=8,T[3]=0),{config:T,samplerate:n[I],channelCount:i,codec:"mp4a.40."+g,manifestCodec:N};console.log("ADTS parse fail. reason: 'invalid ADTS sampling index:${adtsSampleingIndex}'")}function e(A,M){return 255===A[M]&&240==(246&A[M+1])}function T(A,M){return 1&A[M+1]?7:9}function E(A,M){return(3&A[M+3])<<11|A[M+4]<<3|(224&A[M+5])>>>5}function N(A,M){return!!(M+1<A.length&&e(A,M))}function n(A,M,t){return I(A,M,t)}function D(A){return 9216e4/A}function C(A,M,t,g,I){var e=function(A,M,t,g,I){var e,i,N=A.length;if(e=T(A,M),i=E(A,M),(i-=e)>0&&M+e+i<=N)return{headerLength:e,frameLength:i,stamp:t+g*I}}(M,t,g,I,D(A));if(e){var i=e.stamp,N=e.headerLength,n=e.frameLength;return{sample:{unit:M.subarray(t+N,t+N+n),pts:i,dts:i},length:n+N}}}var r=function(){function A(A){this.data=A,this.bytesAvailable=A.byteLength,this.word=0,this.bitsAvailable=0}var M=A.prototype;return M.loadWord=function(){var A=this.data,M=this.bytesAvailable,t=A.byteLength-M,g=new Uint8Array(4),I=Math.min(4,M);if(0===I)throw new Error("no bytes available");g.set(A.subarray(t,t+I)),this.word=new DataView(g.buffer).getUint32(0),this.bitsAvailable=8*I,this.bytesAvailable-=I},M.skipBits=function(A){var M;this.bitsAvailable>A?(this.word<<=A,this.bitsAvailable-=A):(A-=this.bitsAvailable,A-=(M=A>>3)>>3,this.bytesAvailable-=M,this.loadWord(),this.word<<=A,this.bitsAvailable-=A)},M.readBits=function(A){var M=Math.min(this.bitsAvailable,A),t=this.word>>>32-M;return A>32&&logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=M,this.bitsAvailable>0?this.word<<=M:this.bytesAvailable>0&&this.loadWord(),(M=A-M)>0&&this.bitsAvailable?t<<M|this.readBits(M):t},M.skipLZ=function(){var A;for(A=0;A<this.bitsAvailable;++A)if(0!=(this.word&2147483648>>>A))return this.word<<=A,this.bitsAvailable-=A,A;return this.loadWord(),A+this.skipLZ()},M.skipUEG=function(){this.skipBits(1+this.skipLZ())},M.skipEG=function(){this.skipBits(1+this.skipLZ())},M.readUEG=function(){var A=this.skipLZ();return this.readBits(A+1)-1},M.readEG=function(){var A=this.readUEG();return 1&A?1+A>>>1:-1*(A>>>1)},M.readBoolean=function(){return 1===this.readBits(1)},M.readUByte=function(){return this.readBits(8)},M.readUShort=function(){return this.readBits(16)},M.readUInt=function(){return this.readBits(32)},M.skipScalingList=function(A){var M,t=8,g=8;for(M=0;M<A;M++)0!==g&&(g=(t+this.readEG()+256)%256),t=0===g?t:g},M.readSPS=function(){var A,M,t,g,I,e,i,T=0,E=0,N=0,n=0,D=this.readUByte.bind(this),C=this.readBits.bind(this),r=this.readUEG.bind(this),c=this.readBoolean.bind(this),o=this.skipBits.bind(this),B=this.skipEG.bind(this),Q=this.skipUEG.bind(this),a=this.skipScalingList.bind(this);if(D(),A=D(),C(5),o(3),D(),Q(),100===A||110===A||122===A||244===A||44===A||83===A||86===A||118===A||128===A){var h=r();if(3===h&&o(1),Q(),Q(),o(1),c())for(e=3!==h?8:12,i=0;i<e;i++)c()&&a(i<6?16:64)}Q();var s=r();if(0===s)r();else if(1===s)for(o(1),B(),B(),M=r(),i=0;i<M;i++)B();Q(),o(1),t=r(),g=r(),0===(I=C(1))&&o(1),o(1),c()&&(T=r(),E=r(),N=r(),n=r());var y=[1,1];if(c()&&c())switch(D()){case 1:y=[1,1];break;case 2:y=[12,11];break;case 3:y=[10,11];break;case 4:y=[16,11];break;case 5:y=[40,33];break;case 6:y=[24,11];break;case 7:y=[20,11];break;case 8:y=[32,11];break;case 9:y=[80,33];break;case 10:y=[18,11];break;case 11:y=[15,11];break;case 12:y=[64,33];break;case 13:y=[160,99];break;case 14:y=[4,3];break;case 15:y=[3,2];break;case 16:y=[2,1];break;case 255:y=[D()<<8|D(),D()<<8|D()]}return{width:Math.ceil(16*(t+1)-2*T-2*E),height:(2-I)*(g+1)*16-(I?2:4)*(N+n),pixelRatio:y}},M.readSliceType=function(){return this.readUByte(),this.readUEG(),this.readUEG()},A}(),c=t(30),o=t(13);t(36);function B(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var Q=function(){function A(A,M,t){this.TAG="TSDemuxer",this._config=A,this._onError=null,this._onMediaInfo=null,this._onMetaDataArrived=null,this._onScriptDataArrived=null,this._onTrackMetadata=null,this._onDataAvailable=null,this._hasAudio=!1,this._hasVideo=!1,this._hasAudioFlagOverrided=!1,this._hasVideoFlagOverrided=!1,this._initVideoMetadata=!1,this._initAudioMetadata=!1,this._mediaInfo=new o.a,this._mediaInfo.hasAudio=!1,this._mediaInfo.hasVideo=!1,this._metadata=null,this._audioMetadata=null,this._videoMetadata=null,this.tagPosition=0,this.filePosition=0,this.isHEVC=0,this.isAAC=0,this.avcTrackPid=-1,this.audioTrackPid=-1,this.id3TrackPid=-1,this.audioSampleRate=0,this.audioChannel=2,this.audioBitPerSample=16,this.avcTrackPesData=null,this.audioTrackPesData=null,this.id3TrackPesData=null,this.findKeyframe=!0,this.syncVideoPts=0,this.syncAudioPts=0,this.startVideoPts=0,this.startAudioPts=0,this.accurateTimeOffset=0,this.lastVideoPts=0,this.currentVideoPts=0,this.seekVideoHistoryPts=0,this.currentAudioPts=0,this.audioFrameNum=0,this.reset=0,this._videoTrack={type:"video",id:1,sequenceNumber:0,samples:[],length:0},this._audioTrack={type:"audio",id:2,sequenceNumber:0,samples:[],length:0},this._timestampBase=0,this._timescale=1e3,this._duration=0,this._durationOverrided=!1,this._AVC_SPS=null,this._AVC_PPS=null,this._HEVC_VPS=null,this._HEVC_SPS=null,this._HEVC_PPS=null,this._StartCode=[0,0,0,1],this._AVC_Config=null,this._callbackInitFlag=!1,this._callbackMediaDataFunc=M,this._callbackMediaDataUserPtr=t}var M,t,I,e=A.prototype;return e.bindDataSource=function(A){return A.onDataArrival=this.append.bind(this),this},e.resetMediaInfo=function(){this._mediaInfo=new o.a},e.resetMediaPts=function(A){this.reset=A,this.syncVideoPts=0,this.syncAudioPts=0,this.findKeyframe=!0,this._videoTrack.samples=[],this._audioTrack.samples=[]},e._onDataAvailableToSoftwareDecodeVideo=function(A,M){var t=M.samples;if(A<1&&t.length>0)console.log("EXCEPTION:: No used...");else{var g=-1;for(t.length>1&&(g=0);t.length;){for(var I=t.shift(),e=0,i=0;i<I.units.length;i++)e+=I.units[i].data.length;for(var T=0,E=new Uint8Array(e);I.units.length;){var N=I.units.shift();27==A&&(N.data[0]=0,N.data[1]=0,N.data[2]=0,N.data[3]=1),E.set(N.data,T),T+=N.data.length}this._callbackMediaDataFunc&&(g>=0&&g++,this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!0,1,A,I.isKeyframe,E,e,I.pts,0,0))}}},e._onDataAvailableToSoftwareDecodeAudio=function(A,M){var t=M.samples,g=-1;for(t.length>1&&(g=0);t.length;){var I=t.shift();this._callbackMediaDataFunc&&(g>=0&&g++,this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!0,2,A,0,I.unit,I.length,this._SampleRate,this._ChannelNum,this._SampleRate>=44100?32:16))}},A.createTrack=function(A,M){return{container:"video"===A||"audio"===A?"video/mp2t":void 0,type:A,id:RemuxerTrackIdConfig[A],pid:-1,inputTimeScale:9e4,sequenceNumber:0,samples:[],dropped:"video"===A?0:void 0,isAAC:"audio"===A||void 0,duration:"audio"===A?M:void 0,isHEVC:0}},A._syncOffset=function(A){for(var M=Math.min(1e3,A.length-564),t=0;t<M;){if(71===A[t]&&71===A[t+188]&&71===A[t+376])return t;t++}return-1},e.destroy=function(){this._initPTS=this._initDTS=void 0,this._duration=0},e.parsePAT=function(A,M){return(31&A[M+10])<<8|A[M+11]},e.parsePMT=function(A,M,t,I){var e,i,T={audio:-1,avc:-1,hevc:-1,id3:-1,isAAC:!0};for(e=M+3+((15&A[M+1])<<8|A[M+2])-4,M+=12+((15&A[M+10])<<8|A[M+11]);M<e;){switch(i=(31&A[M+1])<<8|A[M+2],A[M]){case 207:if(!I)break;case 15:-1===T.audio&&(T.audio=i);break;case 21:-1===T.id3&&(T.id3=i);break;case 219:if(!I){logger.log("unknown stream type:"+A[M]);break}case 27:-1===T.avc&&(T.avc=i),g.g("H264");break;case 36:-1===T.avc&&(T.avc=i,T.hevc=i),g.g("H265");break;case 3:case 4:t?-1===T.audio&&(T.audio=i,T.isAAC=!1):logger.log("MPEG audio found, not supported in this browser for now");break;case 36:logger.warn("HEVC stream type found, not supported for now")}M+=5+((15&A[M+3])<<8|A[M+4])}return T},e.parsePES=function(A){if(1!==this.reset){var M,t,g,I,e,i,T,E,N=0,n=A.data;if(!A||0===A.size)return null;for(;n[0].length<19&&n.length>1;){var D=new Uint8Array(n[0].length+n[1].length);D.set(n[0]),D.set(n[1],n[0].length),n[0]=D,n.splice(1,1)}if(1===((M=n[0])[0]<<16)+(M[1]<<8)+M[2]){if((g=(M[4]<<8)+M[5])&&g>A.size-6)return null;if(192&(t=M[7])&&((i=536870912*(14&M[9])+4194304*(255&M[10])+16384*(254&M[11])+128*(255&M[12])+(254&M[13])/2)>4294967295&&(i-=4294967295),64&t?((T=536870912*(14&M[14])+4194304*(255&M[15])+16384*(254&M[16])+128*(255&M[17])+(254&M[18])/2)>4294967295&&(T-=4294967295),i-T>54e5&&(logger.warn(Math.round((i-T)/9e4)+"s delta between PTS and DTS, align them"),i=T)):T=i),E=(I=M[8])+9,A.size<=E)return null;A.size-=E,e=new Uint8Array(A.size);for(var C=0,r=n.length;C<r;C++){var c=(M=n[C]).byteLength;if(E){if(E>c){E-=c;continue}M=M.subarray(E),c-=E,E=0}e.set(M,N),N+=c}return g&&(g-=I+3),{data:e,pts:i,dts:T,len:g}}return null}},e.pushAccesUnit=function(A,M){if(A.units.length&&A.frame){var t=M.samples,g=t.length;if(isNaN(A.pts)){if(!g)return void M.dropped++;var I=t[g-1];A.pts=I.pts,A.dts=I.dts}!this.config.forceKeyFrameOnDiscontinuity||!0===A.key||M.sps&&(g||this.contiguous)?(A.id=g,t.push(A)):M.dropped++}A.debug.length&&logger.log(A.pts+"/"+A.dts+":"+A.debug)},e.parseAVCPES=function(A,M,t){var g=this,I=0;(0===this.startVideoPts||A.pts<this.startVideoPts)&&(this.startVideoPts=A.pts,I=1),this.audioFrameNum=0;var e=this._parseAVCNALu(A.data),T=[],E=0;A.data=null;var N=!1,n=!1;e.forEach((function(M){var t=M.data.length,I=new Uint8Array(4+t);I[0]=t>>24&255,I[1]=t>>16&255,I[2]=t>>8&255,I[3]=255&t,I.set(M.data,4);var e={type:M.type,data:I};switch(E+=I.length,T.push(e),M.type){case 1:!0;var D=M.data;if(n&&D.length>4){var C=new r(D).readSliceType();2!==C&&4!==C&&7!==C&&9!==C||console.log("key = true")}break;case 5:!0,g.findKeyframe=!1,N=!0;break;case 6:!0;var o=new r(g.discardEPB(M.data));o.readUByte();for(var B=0,Q=0,a=!1,h=0;!a&&o.bytesAvailable>1;){B=0;do{B+=h=o.readUByte()}while(255===h);Q=0;do{Q+=h=o.readUByte()}while(255===h);if(4===B&&0!==o.bytesAvailable){if(a=!0,181===o.readUByte())if(49===o.readUShort())if(1195456820===o.readUInt())if(3===o.readUByte()){var s=o.readUByte(),y=31&s,w=[s,o.readUByte()];for(i=0;i<y;i++)w.push(o.readUByte()),w.push(o.readUByte()),w.push(o.readUByte());g._insertSampleInOrder(g._txtTrack.samples,{type:3,pts:A.pts,bytes:w})}}else if(5===B&&0!==o.bytesAvailable){if(a=!0,Q>16){var j=[];for(i=0;i<16;i++)j.push(o.readUByte().toString(16)),3!==i&&5!==i&&7!==i&&9!==i||j.push("-");var L=Q-16,d=new Uint8Array(L);for(i=0;i<L;i++)d[i]=o.readUByte();g._insertSampleInOrder(g._txtTrack.samples,{pts:A.pts,payloadType:B,uuid:j.join(""),userDataBytes:d,userData:utf8ArrayToStr(d.buffer)})}}else if(Q<o.bytesAvailable)for(i=0;i<Q;i++)o.readUByte()}break;case 7:!0,n=!0,g.findKeyframe=!1,g.tagPosition=g.filePosition,g._AVC_Config=c.a.parseSPS(M.data);var x=g._AVC_Config,Y="avc1.";if(x)for(var u=M.data.subarray(1,4),S=0;S<3;S++){var l=u[S].toString(16);l.length<2&&(l="0"+l),Y+=l}if(!g._initVideoMetadata){null==g._AVC_SPS&&(g._AVC_SPS=new Uint8Array(M.data.length+4),g._AVC_SPS.set(g._StartCode,0),g._AVC_SPS.set(M.data,4));var z=g._videoMetadata,U=g._videoTrack;if(z?void 0!==z.avcc&&Log.w(g.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===g._hasVideo&&!1===g._hasVideoFlagOverrided&&(g._hasVideo=!0,g._mediaInfo.hasVideo=!0),(z=g._videoMetadata={}).type="video",z.id=U.id,z.timescale=g._timescale,z.duration=g._duration),z.codecWidth=x.codec_size.width,z.codecHeight=x.codec_size.height,z.presentWidth=x.present_size.width,z.presentHeight=x.present_size.height,z.profile=x.profile_string,z.level=x.level_string,z.bitDepth=x.bit_depth,z.chromaFormat=x.chroma_format,z.sarRatio=x.sar_ratio,z.frameRate=x.frame_rate,!1!==x.frame_rate.fixed&&0!==x.frame_rate.fps_num&&0!==x.frame_rate.fps_den||(z.frameRate=g._referenceFrameRate),void 0!==z.frameRate){var f=z.frameRate.fps_den,O=z.frameRate.fps_num;z.refSampleDuration=z.timescale*(f/O)}z.codec=Y;var F=g._mediaInfo;F.width=z.codecWidth,F.height=z.codecHeight,void 0!==z.frameRate&&(F.fps=z.frameRate.fps),F.profile=z.profile,F.level=z.level,F.refFrames=x.ref_frames,F.chromaFormat=x.chroma_format_string,F.sarNum=z.sarRatio.width,F.sarDen=z.sarRatio.height,F.videoCodec=Y,F.hasAudio?null!=F.audioCodec&&(F.mimeType='video/x-flv; codecs="'+F.videoCodec+","+F.audioCodec+'"'):F.mimeType='video/x-flv; codecs="'+F.videoCodec+'"',F.isComplete()&&g._onMediaInfo(F)}break;case 8:if(!0,g.findKeyframe=!1,null==g._AVC_PPS&&(g._AVC_PPS=new Uint8Array(M.data.length+4),g._AVC_PPS.set(g._StartCode,0),g._AVC_PPS.set(M.data,4)),!g._initVideoMetadata){g._initVideoMetadata=!0;var m=g._videoMetadata;if(null==m.avcc){var R=0,k=g._AVC_SPS.length-4+8+1+2+(g._AVC_PPS.length-4);m.avcc=new Uint8Array(k+1),m.avcc[0]=1,m.avcc[1]=g._AVC_SPS[5],m.avcc[2]=g._AVC_SPS[6],m.avcc[3]=g._AVC_SPS[7],m.avcc[4]=255,m.avcc[5]=225,R=6;new Uint8Array;m.avcc[R++]=g._AVC_SPS.length-4>>8,m.avcc[R++]=g._AVC_SPS.length-4&255;var p=g._AVC_SPS.subarray(4,g._AVC_SPS.length);m.avcc.set(p,R),R+=p.length,m.avcc[R++]=1,m.avcc[R++]=g._AVC_PPS.length-4>>8,m.avcc[R++]=g._AVC_PPS.length-4&255;var b=g._AVC_PPS.subarray(4,g._AVC_PPS.length);m.avcc.set(b,R),R+=b.length,m.avcc[k]=1}g._onTrackMetadata("video",m)}break;case 9:case 12:default:!1}}));var D=(A.pts-this.startVideoPts)/90;N&&this.syncVideoPts<1&&(this.syncVideoPts=this.startVideoPts);var C=this._videoTrack,o={units:T,length:E,isKeyframe:N,dts:D,cts:0,pts:D};N&&(o.fileposition=this.tagPosition),0!==this.reset||this.findKeyframe||(C.samples.push(o),C.length+=E),this.filePosition+=E,this.accurateTimeOffset=o.pts,this.lastVideoPts=A.pts,1===I&&(this.seekVideoHistoryPts=D),M&&0===this.reset&&("auto"===this._config.decodeType||"hard"===this._config.decodeType?this._onDataAvailable(this._audioTrack,this._videoTrack):(this._videoTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeVideo(27,this._videoTrack),this._audioTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeAudio(86018,this._audioTrack)))},e.parseHEVCPES=function(A,M,t){(0===this.startVideoPts||A.pts<this.startVideoPts)&&(this.startVideoPts=A.pts);var g=[],I=0,e={type:1,data:A.data},i=0;if((I+=A.data.length)>32){var T=0;for(T=0;T<32;T++)if(0===A.data[T]&&0===A.data[T+1]&&0===A.data[T+2]&&1===A.data[T+3]&&64===A.data[T+4]){i=1,this.findKeyframe=!1;break}}g.push(e);var E=(A.pts-this.startVideoPts)/90;i&&this.syncVideoPts<1&&(this.syncVideoPts=this.startVideoPts);var N=this._videoTrack,n={units:g,length:I,isKeyframe:i,dts:E,cts:0,pts:E};i&&(n.fileposition=this.tagPosition),N.samples.push(n),N.length+=I,this._videoTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeVideo(173,this._videoTrack),this._audioTrack.samples.length>0&&this._onDataAvailableToSoftwareDecodeAudio(86018,this._audioTrack)},e._insertSampleInOrder=function(A,M){var t=A.length;if(t>0){if(M.pts>=A[t-1].pts)A.push(M);else for(var g=t-1;g>=0;g--)if(M.pts<A[g].pts){A.splice(g,0,M);break}}else A.push(M)},e._getLastNalUnit=function(){var A,M=this.avcSample;if(!M||0===M.units.length){var t=this._avcTrack.samples;M=t[t.length-1]}if(M){var g=M.units;A=g[g.length-1]}return A},e._parseAVCNALu=function(A){var M,t,g,I=0,e=A.byteLength,i=0,T=[],E=-1;for(-1===i&&(E=0,g=31&A[0],i=0,I=1);I<e;)if(M=A[I++],i)if(1!==i)if(M)if(1===M){if(E>=0)9!=(t={data:A.subarray(E,I-i-1),type:g}).type&&T.push(t);else;I<e?(E=I,g=31&A[I],i=0):i=-1}else i=0;else i=3;else i=M?0:2;else i=M?0:1;if(E>=0&&i>=0&&(t={data:A.subarray(E,e),type:g,state:i},T.push(t)),0===T.length){var N=this._getLastNalUnit();if(N){var n=new Uint8Array(N.data.byteLength+A.byteLength);n.set(N.data,0),n.set(A,N.data.byteLength),N.data=n}}return T},e.discardEPB=function(A){for(var M,t,g=A.byteLength,I=[],e=1;e<g-2;)0===A[e]&&0===A[e+1]&&3===A[e+2]?(I.push(e+2),e+=2):e++;if(0===I.length)return A;M=g-I.length,t=new Uint8Array(M);var i=0;for(e=0;e<M;i++,e++)i===I[0]&&(i++,I.shift()),t[e]=A[i];return t},e.parseAACPES=function(A,M){0===this.startAudioPts&&(this.startAudioPts=A.pts);var t,g,I,e,i,T,E,r=this._audioTrack,c=A.data,o=A.pts,B=this.aacOverFlow,Q=this.aacLastPTS;if(B){var a=new Uint8Array(B.byteLength+c.byteLength);a.set(B,0),a.set(c,B.byteLength),c=a}for(I=0,i=c.length;I<i-1&&!N(c,I);I++);if(I&&(I<i-1?(T="AAC PES did not start with ADTS header,offset:"+I,E=!1):(T="no ADTS header found in AAC PES",E=!0),logger.warn("parsing error:"+T),this.observer.trigger(Event.ERROR,{type:ErrorTypes.MEDIA_ERROR,details:ErrorDetails.FRAG_PARSING_ERROR,fatal:E,reason:T}),E))return;if(this.audioSampleRate<1){var h=n(c,I,this.audioCodec);if(h&&(this.audioSampleRate=h.samplerate,this.audioChannel=h.channelCount,this.audioBitPerSample=16,!this._initAudioMetadata)){this._initAudioMetadata=!0;var s=this._audioMetadata,y=this._audioTrack;s||((s=this._audioMetadata={}).type="audio",s.id=y.id,s.timescale=1e3,s.duration=0,s.audioSampleRate=this.audioSampleRate,s.channelCount=this.audioChannel),s.config&&Log.w(this.TAG,"Found another AudioSpecificConfig!");h.config;s.audioSampleRate=h.samplerate,s.channelCount=h.channelCount,s.codec=h.codec,s.originalCodec=h.originalCodec,s.config=h.config,s.refSampleDuration=1024/s.audioSampleRate*s.timescale,this._SampleRate=h.samplerate,this._ChannelNum=h.channelCount,this._onDataAvailable(this._audioTrack,this._videoTrack),this._onTrackMetadata("audio",s);var w=this._mediaInfo;w.audioCodec=s.originalCodec,w.audioSampleRate=s.audioSampleRate,w.audioChannelCount=s.channelCount,w.hasVideo?null!=w.videoCodec&&(w.mimeType='video/x-flv; codecs="'+w.videoCodec+","+w.audioCodec+'"'):w.mimeType='video/x-flv; codecs="'+w.audioCodec+'"',w.isComplete()&&this._onMediaInfo(w)}}if(g=0,t=D(this.audioSampleRate),B&&Q){var j=Q+t;Math.abs(j-o)>1&&(console.log("AAC: align PTS for overlapping frames by "+Math.round((j-o)/90)),o=j)}for(;I<i;)if(N(c,I)&&I+5<i){var L=C(this.audioSampleRate,c,I,o,g);if(!L)break;var d=Math.round((L.sample.pts-this.startAudioPts)/90),x={unit:L.sample.unit,length:L.length,dts:d,pts:d};0!==this.reset||this.findKeyframe||(this.syncAudioPts<1&&this.syncVideoPts>0&&(this.syncAudioPts=this.syncVideoPts),this.syncAudioPts>0&&(r.samples.push(x),r.length+=L.length)),I+=L.length,e=L.sample.pts,g++}else I++;B=I<i?c.subarray(I,i):null,this.aacOverFlow=B,this.aacLastPTS=e},e.parseMPEGPES=function(A){for(var M=A.data,t=M.length,g=0,I=0,e=A.pts;I<t;)if(MpegAudio.isHeader(M,I)){var i=MpegAudio.appendFrame(this._audioTrack,M,I,e,g);if(!i)break;I+=i.length,g++}else I++},e.append=function(M,t,g){if(null!=M&&(t=M.length,1!==this.reset)){var I,e,i,T,E,N,n=t,D=!1,C=-1,r=-1,c=-1,o=this.avcTrackPesData,B=this.audioTrackPesData,Q=this.id3TrackPesData,a=!1,h=A._syncOffset(M);for(n-=(n+h)%188,I=h;I<n;I+=188)if(71===M[I]){if(e=!!(64&M[I+1]),i=((31&M[I+1])<<8)+M[I+2],(48&M[I+3])>>4>1){if((T=I+5+M[I+4])===I+188)continue}else T=I+4;switch(i){case C:e&&(o&&(E=this.parsePES(o))&&(1==this.isHEVC?this.parseHEVCPES(E,!1,g):this.parseAVCPES(E,!1,g)),o={data:[],size:0}),o&&(o.data.push(M.subarray(T,I+188)),o.size+=I+188-T);break;case r:e&&(B&&(E=this.parsePES(B))&&(this.isAAC?this.parseAACPES(E,!1):this.parseMPEGPES(E)),B={data:[],size:0}),B&&(B.data.push(M.subarray(T,I+188)),B.size+=I+188-T);break;case c:e&&(Q&&(E=this.parsePES(Q))&&parseID3PES(E),Q={data:[],size:0}),Q&&(Q.data.push(M.subarray(T,I+188)),Q.size+=I+188-T);break;case 0:e&&(T+=M[T]+1),N=this.parsePAT(M,T);break;case N:e&&(T+=M[T]+1);var s=this.parsePMT(M,T,!1,!1);C=s.avc,s.hevc>0&&(C=s.hevc,this.isHEVC=1),C>0&&(this.avcTrackPid=C),!this._callbackInitFlag&&this._callbackMediaDataFunc&&(this._callbackInitFlag=!0,1===this.isHEVC||"auto"!==this._config.decodeType&&"hard"!==this._config.decodeType||this._callbackMediaDataFunc(this._callbackMediaDataUserPtr,!1,1,0,0,null,0,0,0,0)),(r=s.audio)>0&&(this.audioTrackPid=r,this.isAAC=s.isAAC),(c=s.id3)>0&&(this.id3TrackPid=c),D&&!a&&(logger.log("reparse from beginning"),D=!1,I=h-188),a=!0;break;case 17:case 8191:break;default:D=!0}}else console.log("parse error... reason: 'TS packet did not start with 0x47'");o&&(E=this.parsePES(o))?(1==this.isHEVC?this.parseHEVCPES(E,!0,g):this.parseAVCPES(E,!0,g),this.avcTrackPesData=null):this.avcTrackPesData=o,B&&(E=this.parsePES(B))?(this.isAAC?this.parseAACPES(E,!0):this.parseMPEGPES(E),this.audioTrackPesData=null):(B&&B.size&&logger.log("last AAC PES packet truncated,might overlap between fragments"),this.audioTrackPesData=B),Q&&(E=this.parsePES(Q))?(parseID3PES(E),this.id3TrackPesData=null):this.id3TrackPesData=Q}},M=A,(t=[{key:"onTrackMetadata",get:function(){return this._onTrackMetadata},set:function(A){this._onTrackMetadata=A}},{key:"onMediaInfo",get:function(){return this._onMediaInfo},set:function(A){this._onMediaInfo=A}},{key:"onMetaDataArrived",get:function(){return this._onMetaDataArrived},set:function(A){this._onMetaDataArrived=A}},{key:"onScriptDataArrived",get:function(){return this._onScriptDataArrived},set:function(A){this._onScriptDataArrived=A}},{key:"onError",get:function(){return this._onError},set:function(A){this._onError=A}},{key:"onDataAvailable",get:function(){return this._onDataAvailable},set:function(A){this._onDataAvailable=A}},{key:"timestampBase",get:function(){return this._timestampBase},set:function(A){this._timestampBase=A}},{key:"overridedDuration",get:function(){return this._duration},set:function(A){this._durationOverrided=!0,this._duration=A,this._mediaInfo.duration=A}},{key:"overridedHasAudio",set:function(A){this._hasAudioFlagOverrided=!0,this._hasAudio=A,this._mediaInfo.hasAudio=A}},{key:"overridedHasVideo",set:function(A){this._hasVideoFlagOverrided=!0,this._hasVideo=A,this._mediaInfo.hasVideo=A}}])&&B(M.prototype,t),I&&B(M,I),A}();M.a=Q},function(A,M){var t={}.toString;A.exports=Array.isArray||function(A){return"[object Array]"==t.call(A)}},function(A,M,t){"use strict";t.r(M),function(A,g,I,e){var i=t(0),T=(t(117),""),E=void 0!==E?E:{};function N(){var M,i={};for(M in E)E.hasOwnProperty(M)&&(i[M]=E[M]);var N=[],n="./this.program",D=function(A,M){throw M},C=!1,r=!1,c=!1,o=!1,B=!1;if(C="object"==typeof window,r="function"==typeof importScripts,o="object"==typeof A&&"object"==typeof A.versions&&"string"==typeof A.versions.node,c=o&&!C&&!r,B=!C&&!c&&!r,E.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)");var Q,a,h,s,y="";function w(A){return E.locateFile?E.locateFile(A,y):y+A}if(c)y=g+"/",Q=function(A,M){var g;return h||(h=t(121)),s||(s=t(122)),A=s.normalize(A),g=h.readFileSync(A),M?g:g.toString()},a=function(A){var M=Q(A,!0);return M.buffer||(M=new Uint8Array(M)),F(M.buffer),M},A.argv.length>1&&(n=A.argv[1].replace(/\\/g,"/")),N=A.argv.slice(2),I.exports=E,A.on("uncaughtException",(function(A){if(!(A instanceof Wt))throw A})),A.on("unhandledRejection",mA),D=function(M){A.exit(M)},E.inspect=function(){return"[Emscripten Module object]"};else if(B)"undefined"!=typeof read&&(Q=function(A){return read(A)}),a=function(A){var M;return"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(F("object"==typeof(M=read(A,"binary"))),M)},"undefined"!=typeof scriptArgs?N=scriptArgs:void 0!==arguments&&(N=arguments),"function"==typeof quit&&(D=function(A){quit(A)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print);else{if(!C&&!r)throw new Error("environment detection error");r?y=self.location.href:document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",Q=function(A){var M=new XMLHttpRequest;return M.open("GET",A,!1),M.send(null),M.responseText},r&&(a=function(A){var M=new XMLHttpRequest;return M.open("GET",A,!1),M.responseType="arraybuffer",M.send(null),new Uint8Array(M.response)}),function(A,M,t){var g=new XMLHttpRequest;g.open("GET",A,!0),g.responseType="arraybuffer",g.onload=function(){200==g.status||0==g.status&&g.response?M(g.response):t()},g.onerror=t,g.send(null)},function(A){document.title=A}}var j=E.print||console.log.bind(console),L=E.printErr||console.warn.bind(console);for(M in i)i.hasOwnProperty(M)&&(E[M]=i[M]);function d(A){d.shown||(d.shown={}),d.shown[A]||(d.shown[A]=1,L(A))}function x(A,M){var t=[1,0,1,96],g=M.slice(0,1),I=M.slice(1),e={i:127,j:126,f:125,d:124};t.push(I.length);for(var i=0;i<I.length;++i)t.push(e[I[i]]);"v"==g?t.push(0):t=t.concat([1,e[g]]),t[1]=t.length-2;var T=new Uint8Array([0,97,115,109,1,0,0,0].concat(t,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0])),E=new WebAssembly.Module(T);return new WebAssembly.Instance(E,{e:{f:A}}).exports.f}function Y(A,M){var t=f,g=t.length;try{t.grow(1)}catch(A){if(!A instanceof RangeError)throw A;throw"Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH."}try{t.set(g,A)}catch(e){if(!e instanceof TypeError)throw e;F(void 0!==M,"Missing signature argument to addFunction");var I=x(A,M);t.set(g,I)}return g}function u(A,M){return F(void 0!==A),Y(A,M)}i=null,E.arguments&&(N=E.arguments),Object.getOwnPropertyDescriptor(E,"arguments")||Object.defineProperty(E,"arguments",{configurable:!0,get:function(){mA("Module.arguments has been replaced with plain arguments_")}}),E.thisProgram&&(n=E.thisProgram),Object.getOwnPropertyDescriptor(E,"thisProgram")||Object.defineProperty(E,"thisProgram",{configurable:!0,get:function(){mA("Module.thisProgram has been replaced with plain thisProgram")}}),E.quit&&(D=E.quit),Object.getOwnPropertyDescriptor(E,"quit")||Object.defineProperty(E,"quit",{configurable:!0,get:function(){mA("Module.quit has been replaced with plain quit_")}}),F(void 0===E.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),F(void 0===E.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),F(void 0===E.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),F(void 0===E.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),F(void 0===E.read,"Module.read option was removed (modify read_ in JS)"),F(void 0===E.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),F(void 0===E.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),F(void 0===E.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),Object.getOwnPropertyDescriptor(E,"read")||Object.defineProperty(E,"read",{configurable:!0,get:function(){mA("Module.read has been replaced with plain read_")}}),Object.getOwnPropertyDescriptor(E,"readAsync")||Object.defineProperty(E,"readAsync",{configurable:!0,get:function(){mA("Module.readAsync has been replaced with plain readAsync")}}),Object.getOwnPropertyDescriptor(E,"readBinary")||Object.defineProperty(E,"readBinary",{configurable:!0,get:function(){mA("Module.readBinary has been replaced with plain readBinary")}}),Xt=Vt=vt=function(){mA("cannot use the stack before compiled code is ready to run, and has provided stack access")};var S,l,z,U=function(A){A};E.wasmBinary&&(S=E.wasmBinary),Object.getOwnPropertyDescriptor(E,"wasmBinary")||Object.defineProperty(E,"wasmBinary",{configurable:!0,get:function(){mA("Module.wasmBinary has been replaced with plain wasmBinary")}}),E.noExitRuntime&&(l=E.noExitRuntime),Object.getOwnPropertyDescriptor(E,"noExitRuntime")||Object.defineProperty(E,"noExitRuntime",{configurable:!0,get:function(){mA("Module.noExitRuntime has been replaced with plain noExitRuntime")}}),"object"!=typeof WebAssembly&&mA("No WebAssembly support found. Build with -s WASM=0 to target JavaScript instead.");var f=new WebAssembly.Table({initial:2263,maximum:2273,element:"anyfunc"}),O=!1;function F(A,M){A||mA("Assertion failed: "+M)}function m(A){var M=E["_"+A];return F(M,"Cannot call unknown function "+A+", make sure it is exported"),M}function R(A,M,t,g,I){var e={string:function(A){var M=0;if(null!=A&&0!==A){var t=1+(A.length<<2);H(A,M=vt(t),t)}return M},array:function(A){var M=vt(A.length);return v(A,M),M}};var i=m(A),T=[],E=0;if(F("array"!==M,'Return type should not be "array".'),g)for(var N=0;N<g.length;N++){var n=e[t[N]];n?(0===E&&(E=Xt()),T[N]=n(g[N])):T[N]=g[N]}var D=i.apply(null,T);return D=function(A){return"string"===M?G(A):"boolean"===M?Boolean(A):A}(D),0!==E&&Vt(E),D}function k(A,M,t,g){return function(){return R(A,M,t,arguments)}}var p="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function b(A,M,t){for(var g=M+t,I=M;A[I]&&!(I>=g);)++I;if(I-M>16&&A.subarray&&p)return p.decode(A.subarray(M,I));for(var e="";M<I;){var i=A[M++];if(128&i){var T=63&A[M++];if(192!=(224&i)){var E=63&A[M++];if(224==(240&i)?i=(15&i)<<12|T<<6|E:(240!=(248&i)&&d("Invalid UTF-8 leading byte 0x"+i.toString(16)+" encountered when deserializing a UTF-8 string on the asm.js/wasm heap to a JS string!"),i=(7&i)<<18|T<<12|E<<6|63&A[M++]),i<65536)e+=String.fromCharCode(i);else{var N=i-65536;e+=String.fromCharCode(55296|N>>10,56320|1023&N)}}else e+=String.fromCharCode((31&i)<<6|T)}else e+=String.fromCharCode(i)}return e}function G(A,M){return A?b(Z,A,M):""}function J(A,M,t,g){if(!(g>0))return 0;for(var I=t,e=t+g-1,i=0;i<A.length;++i){var T=A.charCodeAt(i);if(T>=55296&&T<=57343)T=65536+((1023&T)<<10)|1023&A.charCodeAt(++i);if(T<=127){if(t>=e)break;M[t++]=T}else if(T<=2047){if(t+1>=e)break;M[t++]=192|T>>6,M[t++]=128|63&T}else if(T<=65535){if(t+2>=e)break;M[t++]=224|T>>12,M[t++]=128|T>>6&63,M[t++]=128|63&T}else{if(t+3>=e)break;T>=2097152&&d("Invalid Unicode code point 0x"+T.toString(16)+" encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF)."),M[t++]=240|T>>18,M[t++]=128|T>>12&63,M[t++]=128|T>>6&63,M[t++]=128|63&T}}return M[t]=0,t-I}function H(A,M,t){return F("number"==typeof t,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),J(A,Z,M,t)}function X(A){for(var M=0,t=0;t<A.length;++t){var g=A.charCodeAt(t);g>=55296&&g<=57343&&(g=65536+((1023&g)<<10)|1023&A.charCodeAt(++t)),g<=127?++M:M+=g<=2047?2:g<=65535?3:4}return M}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");function v(A,M){F(A.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),P.set(A,M)}function V(A,M,t){for(var g=0;g<A.length;++g)F(A.charCodeAt(g)==A.charCodeAt(g)&255),P[M++>>0]=A.charCodeAt(g);t||(P[M>>0]=0)}var W,P,Z,K,q,_,$=65536;function AA(A,M){return A%M>0&&(A+=M-A%M),A}function MA(A){W=A,E.HEAP8=P=new Int8Array(A),E.HEAP16=K=new Int16Array(A),E.HEAP32=q=new Int32Array(A),E.HEAPU8=Z=new Uint8Array(A),E.HEAPU16=new Uint16Array(A),E.HEAPU32=_=new Uint32Array(A),E.HEAPF32=new Float32Array(A),E.HEAPF64=new Float64Array(A)}var tA=6415696,gA=1172816,IA=6415696,eA=1172656;F(tA%16==0,"stack must start aligned"),F(IA%16==0,"heap must start aligned");var iA=5242880;E.TOTAL_STACK&&F(iA===E.TOTAL_STACK,"the stack size can no longer be determined at runtime");var TA=E.TOTAL_MEMORY||67108864;function EA(){F(0==(3&gA)),_[1+(gA>>2)]=34821223,_[2+(gA>>2)]=2310721022,q[0]=1668509029}function NA(){var A=_[1+(gA>>2)],M=_[2+(gA>>2)];34821223==A&&2310721022==M||mA("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x"+M.toString(16)+" "+A.toString(16)),1668509029!==q[0]&&mA("Runtime error: The application has corrupted its heap memory area (address zero)!")}function nA(A){mA("Stack overflow! Attempted to allocate "+A+" bytes on the stack, but stack has only "+(gA-Xt()+A)+" bytes available!")}function DA(A){for(;A.length>0;){var M=A.shift();if("function"!=typeof M){var t=M.func;"number"==typeof t?void 0===M.arg?E.dynCall_v(t):E.dynCall_vi(t,M.arg):t(void 0===M.arg?null:M.arg)}else M()}}Object.getOwnPropertyDescriptor(E,"TOTAL_MEMORY")||Object.defineProperty(E,"TOTAL_MEMORY",{configurable:!0,get:function(){mA("Module.TOTAL_MEMORY has been replaced with plain INITIAL_TOTAL_MEMORY")}}),F(TA>=iA,"TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TA+"! (TOTAL_STACK="+iA+")"),F("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&void 0!==Int32Array.prototype.subarray&&void 0!==Int32Array.prototype.set,"JS engine does not provide full typed array support"),(z=E.wasmMemory?E.wasmMemory:new WebAssembly.Memory({initial:TA/$}))&&(W=z.buffer),F((TA=W.byteLength)%$==0),MA(W),q[eA>>2]=IA,function(){var A=new Int16Array(1),M=new Int8Array(A.buffer);if(A[0]=25459,115!==M[0]||99!==M[1])throw"Runtime error: expected the system to be little-endian!"}();var CA=[],rA=[],cA=[],oA=[],BA=!1,QA=!1;function aA(){if(E.preRun)for("function"==typeof E.preRun&&(E.preRun=[E.preRun]);E.preRun.length;)jA(E.preRun.shift());DA(CA)}function hA(){NA(),F(!BA),BA=!0,E.noFSInit||iM.init.initialized||iM.init(),tM.init(),DA(rA)}function sA(){NA(),iM.ignorePermissions=!1,DA(cA)}function yA(){NA(),QA=!0}function wA(){if(NA(),E.postRun)for("function"==typeof E.postRun&&(E.postRun=[E.postRun]);E.postRun.length;)LA(E.postRun.shift());DA(oA)}function jA(A){CA.unshift(A)}function LA(A){oA.unshift(A)}F(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var dA=Math.abs,xA=Math.ceil,YA=Math.floor,uA=Math.min,SA=0,lA=null,zA=null,UA={};function fA(A){for(var M=A;;){if(!UA[A])return A;A=M+Math.random()}return A}function OA(A){SA++,E.monitorRunDependencies&&E.monitorRunDependencies(SA),A?(F(!UA[A]),UA[A]=1,null===lA&&"undefined"!=typeof setInterval&&(lA=setInterval((function(){if(O)return clearInterval(lA),void(lA=null);var A=!1;for(var M in UA)A||(A=!0,L("still waiting on run dependencies:")),L("dependency: "+M);A&&L("(end of list)")}),1e4))):L("warning: run dependency added without ID")}function FA(A){if(SA--,E.monitorRunDependencies&&E.monitorRunDependencies(SA),A?(F(UA[A]),delete UA[A]):L("warning: run dependency removed without ID"),0==SA&&(null!==lA&&(clearInterval(lA),lA=null),zA)){var M=zA;zA=null,M()}}function mA(A){throw E.onAbort&&E.onAbort(A),j(A+=""),L(A),O=!0,1,A="abort("+A+") at "+PA(),new WebAssembly.RuntimeError(A)}E.preloadedImages={},E.preloadedAudios={};var RA="data:application/octet-stream;base64,";function kA(A){return String.prototype.startsWith?A.startsWith(RA):0===A.indexOf(RA)}var pA,bA,GA=T+"static/libDecoder.wasm";function JA(){try{if(S)return new Uint8Array(S);if(a)return a(GA);throw"both async and sync fetching of the wasm failed"}catch(A){mA(A)}}function HA(){return S||!C&&!r||"function"!=typeof fetch?new Promise((function(A,M){A(JA())})):fetch(GA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+GA+"'";return A.arrayBuffer()})).catch((function(){return JA()}))}function XA(){var A={env:zM,wasi_unstable:zM};function M(A,M){var t=A.exports;E.asm=t,FA("wasm-instantiate")}OA("wasm-instantiate");var t=E;function g(A){F(E===t,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),t=null,M(A.instance)}function I(M){return HA().then((function(M){return WebAssembly.instantiate(M,A)})).then(M,(function(A){L("failed to asynchronously prepare wasm: "+A),mA(A)}))}if(E.instantiateWasm)try{return E.instantiateWasm(A,M)}catch(A){return L("Module.instantiateWasm callback failed with error: "+A),!1}return function(){if(S||"function"!=typeof WebAssembly.instantiateStreaming||kA(GA)||"function"!=typeof fetch)return I(g);fetch(GA,{credentials:"same-origin"}).then((function(M){return WebAssembly.instantiateStreaming(M,A).then(g,(function(A){L("wasm streaming compile failed: "+A),L("falling back to ArrayBuffer instantiation"),I(g)}))}))}(),{}}function vA(A){return d("warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling"),A}function VA(A){return A.replace(/\b_Z[\w\d_]+/g,(function(A){var M=vA(A);return A===M?A:M+" ["+A+"]"}))}function WA(){var A=new Error;if(!A.stack){try{throw new Error(0)}catch(M){A=M}if(!A.stack)return"(no stack trace available)"}return A.stack.toString()}function PA(){var A=WA();return E.extraStackTrace&&(A+="\n"+E.extraStackTrace()),VA(A)}function ZA(A){return Jt(A)}kA(GA)||(GA=w(GA)),rA.push({func:function(){Gt()}});var KA={};function qA(A,M,t){throw KA[A]={ptr:A,adjusted:[A],type:M,destructor:t,refcount:0,caught:!1,rethrown:!1},A,"uncaught_exception"in Ht?Ht.uncaught_exceptions++:Ht.uncaught_exceptions=1,A+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function _A(){}function $A(A){return E.___errno_location?q[E.___errno_location()>>2]=A:L("failed to set errno from JS"),A}var AM={splitPath:function(A){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(A).slice(1)},normalizeArray:function(A,M){for(var t=0,g=A.length-1;g>=0;g--){var I=A[g];"."===I?A.splice(g,1):".."===I?(A.splice(g,1),t++):t&&(A.splice(g,1),t--)}if(M)for(;t;t--)A.unshift("..");return A},normalize:function(A){var M="/"===A.charAt(0),t="/"===A.substr(-1);return(A=AM.normalizeArray(A.split("/").filter((function(A){return!!A})),!M).join("/"))||M||(A="."),A&&t&&(A+="/"),(M?"/":"")+A},dirname:function(A){var M=AM.splitPath(A),t=M[0],g=M[1];return t||g?(g&&(g=g.substr(0,g.length-1)),t+g):"."},basename:function(A){if("/"===A)return"/";var M=A.lastIndexOf("/");return-1===M?A:A.substr(M+1)},extname:function(A){return AM.splitPath(A)[3]},join:function(){var A=Array.prototype.slice.call(arguments,0);return AM.normalize(A.join("/"))},join2:function(A,M){return AM.normalize(A+"/"+M)}},MM={resolve:function(){for(var A="",M=!1,t=arguments.length-1;t>=-1&&!M;t--){var g=t>=0?arguments[t]:iM.cwd();if("string"!=typeof g)throw new TypeError("Arguments to path.resolve must be strings");if(!g)return"";A=g+"/"+A,M="/"===g.charAt(0)}return(M?"/":"")+(A=AM.normalizeArray(A.split("/").filter((function(A){return!!A})),!M).join("/"))||"."},relative:function(A,M){function t(A){for(var M=0;M<A.length&&""===A[M];M++);for(var t=A.length-1;t>=0&&""===A[t];t--);return M>t?[]:A.slice(M,t-M+1)}A=MM.resolve(A).substr(1),M=MM.resolve(M).substr(1);for(var g=t(A.split("/")),I=t(M.split("/")),e=Math.min(g.length,I.length),i=e,T=0;T<e;T++)if(g[T]!==I[T]){i=T;break}var E=[];for(T=i;T<g.length;T++)E.push("..");return(E=E.concat(I.slice(i))).join("/")}},tM={ttys:[],init:function(){},shutdown:function(){},register:function(A,M){tM.ttys[A]={input:[],output:[],ops:M},iM.registerDevice(A,tM.stream_ops)},stream_ops:{open:function(A){var M=tM.ttys[A.node.rdev];if(!M)throw new iM.ErrnoError(43);A.tty=M,A.seekable=!1},close:function(A){A.tty.ops.flush(A.tty)},flush:function(A){A.tty.ops.flush(A.tty)},read:function(A,M,t,g,I){if(!A.tty||!A.tty.ops.get_char)throw new iM.ErrnoError(60);for(var e=0,i=0;i<g;i++){var T;try{T=A.tty.ops.get_char(A.tty)}catch(A){throw new iM.ErrnoError(29)}if(void 0===T&&0===e)throw new iM.ErrnoError(6);if(null==T)break;e++,M[t+i]=T}return e&&(A.node.timestamp=Date.now()),e},write:function(A,M,t,g,I){if(!A.tty||!A.tty.ops.put_char)throw new iM.ErrnoError(60);try{for(var e=0;e<g;e++)A.tty.ops.put_char(A.tty,M[t+e])}catch(A){throw new iM.ErrnoError(29)}return g&&(A.node.timestamp=Date.now()),e}},default_tty_ops:{get_char:function(M){if(!M.input.length){var t=null;if(c){var g=e.alloc?e.alloc(256):new e(256),I=0;try{I=h.readSync(A.stdin.fd,g,0,256,null)}catch(A){if(-1==A.toString().indexOf("EOF"))throw A;I=0}t=I>0?g.slice(0,I).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(t=window.prompt("Input: "))&&(t+="\n"):"function"==typeof readline&&null!==(t=readline())&&(t+="\n");if(!t)return null;M.input=lM(t,!0)}return M.input.shift()},put_char:function(A,M){null===M||10===M?(j(b(A.output,0)),A.output=[]):0!=M&&A.output.push(M)},flush:function(A){A.output&&A.output.length>0&&(j(b(A.output,0)),A.output=[])}},default_tty1_ops:{put_char:function(A,M){null===M||10===M?(L(b(A.output,0)),A.output=[]):0!=M&&A.output.push(M)},flush:function(A){A.output&&A.output.length>0&&(L(b(A.output,0)),A.output=[])}}},gM={ops_table:null,mount:function(A){return gM.createNode(null,"/",16895,0)},createNode:function(A,M,t,g){if(iM.isBlkdev(t)||iM.isFIFO(t))throw new iM.ErrnoError(63);gM.ops_table||(gM.ops_table={dir:{node:{getattr:gM.node_ops.getattr,setattr:gM.node_ops.setattr,lookup:gM.node_ops.lookup,mknod:gM.node_ops.mknod,rename:gM.node_ops.rename,unlink:gM.node_ops.unlink,rmdir:gM.node_ops.rmdir,readdir:gM.node_ops.readdir,symlink:gM.node_ops.symlink},stream:{llseek:gM.stream_ops.llseek}},file:{node:{getattr:gM.node_ops.getattr,setattr:gM.node_ops.setattr},stream:{llseek:gM.stream_ops.llseek,read:gM.stream_ops.read,write:gM.stream_ops.write,allocate:gM.stream_ops.allocate,mmap:gM.stream_ops.mmap,msync:gM.stream_ops.msync}},link:{node:{getattr:gM.node_ops.getattr,setattr:gM.node_ops.setattr,readlink:gM.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gM.node_ops.getattr,setattr:gM.node_ops.setattr},stream:iM.chrdev_stream_ops}});var I=iM.createNode(A,M,t,g);return iM.isDir(I.mode)?(I.node_ops=gM.ops_table.dir.node,I.stream_ops=gM.ops_table.dir.stream,I.contents={}):iM.isFile(I.mode)?(I.node_ops=gM.ops_table.file.node,I.stream_ops=gM.ops_table.file.stream,I.usedBytes=0,I.contents=null):iM.isLink(I.mode)?(I.node_ops=gM.ops_table.link.node,I.stream_ops=gM.ops_table.link.stream):iM.isChrdev(I.mode)&&(I.node_ops=gM.ops_table.chrdev.node,I.stream_ops=gM.ops_table.chrdev.stream),I.timestamp=Date.now(),A&&(A.contents[M]=I),I},getFileDataAsRegularArray:function(A){if(A.contents&&A.contents.subarray){for(var M=[],t=0;t<A.usedBytes;++t)M.push(A.contents[t]);return M}return A.contents},getFileDataAsTypedArray:function(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array},expandFileStorage:function(A,M){var t=A.contents?A.contents.length:0;if(!(t>=M)){M=Math.max(M,t*(t<1048576?2:1.125)|0),0!=t&&(M=Math.max(M,256));var g=A.contents;A.contents=new Uint8Array(M),A.usedBytes>0&&A.contents.set(g.subarray(0,A.usedBytes),0)}},resizeFileStorage:function(A,M){if(A.usedBytes!=M){if(0==M)return A.contents=null,void(A.usedBytes=0);if(!A.contents||A.contents.subarray){var t=A.contents;return A.contents=new Uint8Array(new ArrayBuffer(M)),t&&A.contents.set(t.subarray(0,Math.min(M,A.usedBytes))),void(A.usedBytes=M)}if(A.contents||(A.contents=[]),A.contents.length>M)A.contents.length=M;else for(;A.contents.length<M;)A.contents.push(0);A.usedBytes=M}},node_ops:{getattr:function(A){var M={};return M.dev=iM.isChrdev(A.mode)?A.id:1,M.ino=A.id,M.mode=A.mode,M.nlink=1,M.uid=0,M.gid=0,M.rdev=A.rdev,iM.isDir(A.mode)?M.size=4096:iM.isFile(A.mode)?M.size=A.usedBytes:iM.isLink(A.mode)?M.size=A.link.length:M.size=0,M.atime=new Date(A.timestamp),M.mtime=new Date(A.timestamp),M.ctime=new Date(A.timestamp),M.blksize=4096,M.blocks=Math.ceil(M.size/M.blksize),M},setattr:function(A,M){void 0!==M.mode&&(A.mode=M.mode),void 0!==M.timestamp&&(A.timestamp=M.timestamp),void 0!==M.size&&gM.resizeFileStorage(A,M.size)},lookup:function(A,M){throw iM.genericErrors[44]},mknod:function(A,M,t,g){return gM.createNode(A,M,t,g)},rename:function(A,M,t){if(iM.isDir(A.mode)){var g;try{g=iM.lookupNode(M,t)}catch(A){}if(g)for(var I in g.contents)throw new iM.ErrnoError(55)}delete A.parent.contents[A.name],A.name=t,M.contents[t]=A,A.parent=M},unlink:function(A,M){delete A.contents[M]},rmdir:function(A,M){var t=iM.lookupNode(A,M);for(var g in t.contents)throw new iM.ErrnoError(55);delete A.contents[M]},readdir:function(A){var M=[".",".."];for(var t in A.contents)A.contents.hasOwnProperty(t)&&M.push(t);return M},symlink:function(A,M,t){var g=gM.createNode(A,M,41471,0);return g.link=t,g},readlink:function(A){if(!iM.isLink(A.mode))throw new iM.ErrnoError(28);return A.link}},stream_ops:{read:function(A,M,t,g,I){var e=A.node.contents;if(I>=A.node.usedBytes)return 0;var i=Math.min(A.node.usedBytes-I,g);if(F(i>=0),i>8&&e.subarray)M.set(e.subarray(I,I+i),t);else for(var T=0;T<i;T++)M[t+T]=e[I+T];return i},write:function(A,M,t,g,I,e){if(e&&d("file packager has copied file data into memory, but in memory growth we are forced to copy it again (see --no-heap-copy)"),e=!1,!g)return 0;var i=A.node;if(i.timestamp=Date.now(),M.subarray&&(!i.contents||i.contents.subarray)){if(e)return F(0===I,"canOwn must imply no weird position inside the file"),i.contents=M.subarray(t,t+g),i.usedBytes=g,g;if(0===i.usedBytes&&0===I)return i.contents=new Uint8Array(M.subarray(t,t+g)),i.usedBytes=g,g;if(I+g<=i.usedBytes)return i.contents.set(M.subarray(t,t+g),I),g}if(gM.expandFileStorage(i,I+g),i.contents.subarray&&M.subarray)i.contents.set(M.subarray(t,t+g),I);else for(var T=0;T<g;T++)i.contents[I+T]=M[t+T];return i.usedBytes=Math.max(i.usedBytes,I+g),g},llseek:function(A,M,t){var g=M;if(1===t?g+=A.position:2===t&&iM.isFile(A.node.mode)&&(g+=A.node.usedBytes),g<0)throw new iM.ErrnoError(28);return g},allocate:function(A,M,t){gM.expandFileStorage(A.node,M+t),A.node.usedBytes=Math.max(A.node.usedBytes,M+t)},mmap:function(A,M,t,g,I,e,i){if(!iM.isFile(A.node.mode))throw new iM.ErrnoError(43);var T,E,N=A.node.contents;if(2&i||N.buffer!==M&&N.buffer!==M.buffer){(I>0||I+g<A.node.usedBytes)&&(N=N.subarray?N.subarray(I,I+g):Array.prototype.slice.call(N,I,I+g)),E=!0;var n=M.buffer==P.buffer;if(!(T=Jt(g)))throw new iM.ErrnoError(48);(n?P:M).set(N,T)}else E=!1,T=N.byteOffset;return{ptr:T,allocated:E}},msync:function(A,M,t,g,I){if(!iM.isFile(A.node.mode))throw new iM.ErrnoError(43);if(2&I)return 0;gM.stream_ops.write(A,M,0,g,t,!1);return 0}}},IM={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can   access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"},eM={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},iM={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(A){if(!(A instanceof iM.ErrnoError))throw A+" : "+PA();return $A(A.errno)},lookupPath:function(A,M){if(M=M||{},!(A=MM.resolve(iM.cwd(),A)))return{path:"",node:null};var t={follow_mount:!0,recurse_count:0};for(var g in t)void 0===M[g]&&(M[g]=t[g]);if(M.recurse_count>8)throw new iM.ErrnoError(32);for(var I=AM.normalizeArray(A.split("/").filter((function(A){return!!A})),!1),e=iM.root,i="/",T=0;T<I.length;T++){var E=T===I.length-1;if(E&&M.parent)break;if(e=iM.lookupNode(e,I[T]),i=AM.join2(i,I[T]),iM.isMountpoint(e)&&(!E||E&&M.follow_mount)&&(e=e.mounted.root),!E||M.follow)for(var N=0;iM.isLink(e.mode);){var n=iM.readlink(i);if(i=MM.resolve(AM.dirname(i),n),e=iM.lookupPath(i,{recurse_count:M.recurse_count}).node,N++>40)throw new iM.ErrnoError(32)}}return{path:i,node:e}},getPath:function(A){for(var M;;){if(iM.isRoot(A)){var t=A.mount.mountpoint;return M?"/"!==t[t.length-1]?t+"/"+M:t+M:t}M=M?A.name+"/"+M:A.name,A=A.parent}},hashName:function(A,M){for(var t=0,g=0;g<M.length;g++)t=(t<<5)-t+M.charCodeAt(g)|0;return(A+t>>>0)%iM.nameTable.length},hashAddNode:function(A){var M=iM.hashName(A.parent.id,A.name);A.name_next=iM.nameTable[M],iM.nameTable[M]=A},hashRemoveNode:function(A){var M=iM.hashName(A.parent.id,A.name);if(iM.nameTable[M]===A)iM.nameTable[M]=A.name_next;else for(var t=iM.nameTable[M];t;){if(t.name_next===A){t.name_next=A.name_next;break}t=t.name_next}},lookupNode:function(A,M){var t=iM.mayLookup(A);if(t)throw new iM.ErrnoError(t,A);for(var g=iM.hashName(A.id,M),I=iM.nameTable[g];I;I=I.name_next){var e=I.name;if(I.parent.id===A.id&&e===M)return I}return iM.lookup(A,M)},createNode:function(A,M,t,g){if(!iM.FSNode){iM.FSNode=function(A,M,t,g){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=iM.nextInode++,this.name=M,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=g},iM.FSNode.prototype={};Object.defineProperties(iM.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(A){A?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(A){A?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return iM.isDir(this.mode)}},isDevice:{get:function(){return iM.isChrdev(this.mode)}}})}var I=new iM.FSNode(A,M,t,g);return iM.hashAddNode(I),I},destroyNode:function(A){iM.hashRemoveNode(A)},isRoot:function(A){return A===A.parent},isMountpoint:function(A){return!!A.mounted},isFile:function(A){return 32768==(61440&A)},isDir:function(A){return 16384==(61440&A)},isLink:function(A){return 40960==(61440&A)},isChrdev:function(A){return 8192==(61440&A)},isBlkdev:function(A){return 24576==(61440&A)},isFIFO:function(A){return 4096==(61440&A)},isSocket:function(A){return 49152==(49152&A)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(A){var M=iM.flagModes[A];if(void 0===M)throw new Error("Unknown file open mode: "+A);return M},flagsToPermissionString:function(A){var M=["r","w","rw"][3&A];return 512&A&&(M+="w"),M},nodePermissions:function(A,M){return iM.ignorePermissions||(-1===M.indexOf("r")||292&A.mode)&&(-1===M.indexOf("w")||146&A.mode)&&(-1===M.indexOf("x")||73&A.mode)?0:2},mayLookup:function(A){var M=iM.nodePermissions(A,"x");return M||(A.node_ops.lookup?0:2)},mayCreate:function(A,M){try{iM.lookupNode(A,M);return 20}catch(A){}return iM.nodePermissions(A,"wx")},mayDelete:function(A,M,t){var g;try{g=iM.lookupNode(A,M)}catch(A){return A.errno}var I=iM.nodePermissions(A,"wx");if(I)return I;if(t){if(!iM.isDir(g.mode))return 54;if(iM.isRoot(g)||iM.getPath(g)===iM.cwd())return 10}else if(iM.isDir(g.mode))return 31;return 0},mayOpen:function(A,M){return A?iM.isLink(A.mode)?32:iM.isDir(A.mode)&&("r"!==iM.flagsToPermissionString(M)||512&M)?31:iM.nodePermissions(A,iM.flagsToPermissionString(M)):44},MAX_OPEN_FDS:4096,nextfd:function(A,M){A=A||0,M=M||iM.MAX_OPEN_FDS;for(var t=A;t<=M;t++)if(!iM.streams[t])return t;throw new iM.ErrnoError(33)},getStream:function(A){return iM.streams[A]},createStream:function(A,M,t){iM.FSStream||(iM.FSStream=function(){},iM.FSStream.prototype={},Object.defineProperties(iM.FSStream.prototype,{object:{get:function(){return this.node},set:function(A){this.node=A}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var g=new iM.FSStream;for(var I in A)g[I]=A[I];A=g;var e=iM.nextfd(M,t);return A.fd=e,iM.streams[e]=A,A},closeStream:function(A){iM.streams[A]=null},chrdev_stream_ops:{open:function(A){var M=iM.getDevice(A.node.rdev);A.stream_ops=M.stream_ops,A.stream_ops.open&&A.stream_ops.open(A)},llseek:function(){throw new iM.ErrnoError(70)}},major:function(A){return A>>8},minor:function(A){return 255&A},makedev:function(A,M){return A<<8|M},registerDevice:function(A,M){iM.devices[A]={stream_ops:M}},getDevice:function(A){return iM.devices[A]},getMounts:function(A){for(var M=[],t=[A];t.length;){var g=t.pop();M.push(g),t.push.apply(t,g.mounts)}return M},syncfs:function(A,M){"function"==typeof A&&(M=A,A=!1),iM.syncFSRequests++,iM.syncFSRequests>1&&console.log("warning: "+iM.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=iM.getMounts(iM.root.mount),g=0;function I(A){return F(iM.syncFSRequests>0),iM.syncFSRequests--,M(A)}function e(A){if(A)return e.errored?void 0:(e.errored=!0,I(A));++g>=t.length&&I(null)}t.forEach((function(M){if(!M.type.syncfs)return e(null);M.type.syncfs(M,A,e)}))},mount:function(A,M,t){if("string"==typeof A)throw A;var g,I="/"===t,e=!t;if(I&&iM.root)throw new iM.ErrnoError(10);if(!I&&!e){var i=iM.lookupPath(t,{follow_mount:!1});if(t=i.path,g=i.node,iM.isMountpoint(g))throw new iM.ErrnoError(10);if(!iM.isDir(g.mode))throw new iM.ErrnoError(54)}var T={type:A,opts:M,mountpoint:t,mounts:[]},E=A.mount(T);return E.mount=T,T.root=E,I?iM.root=E:g&&(g.mounted=T,g.mount&&g.mount.mounts.push(T)),E},unmount:function(A){var M=iM.lookupPath(A,{follow_mount:!1});if(!iM.isMountpoint(M.node))throw new iM.ErrnoError(28);var t=M.node,g=t.mounted,I=iM.getMounts(g);Object.keys(iM.nameTable).forEach((function(A){for(var M=iM.nameTable[A];M;){var t=M.name_next;-1!==I.indexOf(M.mount)&&iM.destroyNode(M),M=t}})),t.mounted=null;var e=t.mount.mounts.indexOf(g);F(-1!==e),t.mount.mounts.splice(e,1)},lookup:function(A,M){return A.node_ops.lookup(A,M)},mknod:function(A,M,t){var g=iM.lookupPath(A,{parent:!0}).node,I=AM.basename(A);if(!I||"."===I||".."===I)throw new iM.ErrnoError(28);var e=iM.mayCreate(g,I);if(e)throw new iM.ErrnoError(e);if(!g.node_ops.mknod)throw new iM.ErrnoError(63);return g.node_ops.mknod(g,I,M,t)},create:function(A,M){return M=void 0!==M?M:438,M&=4095,M|=32768,iM.mknod(A,M,0)},mkdir:function(A,M){return M=void 0!==M?M:511,M&=1023,M|=16384,iM.mknod(A,M,0)},mkdirTree:function(A,M){for(var t=A.split("/"),g="",I=0;I<t.length;++I)if(t[I]){g+="/"+t[I];try{iM.mkdir(g,M)}catch(A){if(20!=A.errno)throw A}}},mkdev:function(A,M,t){return void 0===t&&(t=M,M=438),M|=8192,iM.mknod(A,M,t)},symlink:function(A,M){if(!MM.resolve(A))throw new iM.ErrnoError(44);var t=iM.lookupPath(M,{parent:!0}).node;if(!t)throw new iM.ErrnoError(44);var g=AM.basename(M),I=iM.mayCreate(t,g);if(I)throw new iM.ErrnoError(I);if(!t.node_ops.symlink)throw new iM.ErrnoError(63);return t.node_ops.symlink(t,g,A)},rename:function(A,M){var t,g,I=AM.dirname(A),e=AM.dirname(M),i=AM.basename(A),T=AM.basename(M);try{t=iM.lookupPath(A,{parent:!0}).node,g=iM.lookupPath(M,{parent:!0}).node}catch(A){throw new iM.ErrnoError(10)}if(!t||!g)throw new iM.ErrnoError(44);if(t.mount!==g.mount)throw new iM.ErrnoError(75);var E,N=iM.lookupNode(t,i),n=MM.relative(A,e);if("."!==n.charAt(0))throw new iM.ErrnoError(28);if("."!==(n=MM.relative(M,I)).charAt(0))throw new iM.ErrnoError(55);try{E=iM.lookupNode(g,T)}catch(A){}if(N!==E){var D=iM.isDir(N.mode),C=iM.mayDelete(t,i,D);if(C)throw new iM.ErrnoError(C);if(C=E?iM.mayDelete(g,T,D):iM.mayCreate(g,T))throw new iM.ErrnoError(C);if(!t.node_ops.rename)throw new iM.ErrnoError(63);if(iM.isMountpoint(N)||E&&iM.isMountpoint(E))throw new iM.ErrnoError(10);if(g!==t&&(C=iM.nodePermissions(t,"w")))throw new iM.ErrnoError(C);try{iM.trackingDelegate.willMovePath&&iM.trackingDelegate.willMovePath(A,M)}catch(t){console.log("FS.trackingDelegate['willMovePath']('"+A+"', '"+M+"') threw an exception: "+t.message)}iM.hashRemoveNode(N);try{t.node_ops.rename(N,g,T)}catch(A){throw A}finally{iM.hashAddNode(N)}try{iM.trackingDelegate.onMovePath&&iM.trackingDelegate.onMovePath(A,M)}catch(t){console.log("FS.trackingDelegate['onMovePath']('"+A+"', '"+M+"') threw an exception: "+t.message)}}},rmdir:function(A){var M=iM.lookupPath(A,{parent:!0}).node,t=AM.basename(A),g=iM.lookupNode(M,t),I=iM.mayDelete(M,t,!0);if(I)throw new iM.ErrnoError(I);if(!M.node_ops.rmdir)throw new iM.ErrnoError(63);if(iM.isMountpoint(g))throw new iM.ErrnoError(10);try{iM.trackingDelegate.willDeletePath&&iM.trackingDelegate.willDeletePath(A)}catch(M){console.log("FS.trackingDelegate['willDeletePath']('"+A+"') threw an exception: "+M.message)}M.node_ops.rmdir(M,t),iM.destroyNode(g);try{iM.trackingDelegate.onDeletePath&&iM.trackingDelegate.onDeletePath(A)}catch(M){console.log("FS.trackingDelegate['onDeletePath']('"+A+"') threw an exception: "+M.message)}},readdir:function(A){var M=iM.lookupPath(A,{follow:!0}).node;if(!M.node_ops.readdir)throw new iM.ErrnoError(54);return M.node_ops.readdir(M)},unlink:function(A){var M=iM.lookupPath(A,{parent:!0}).node,t=AM.basename(A),g=iM.lookupNode(M,t),I=iM.mayDelete(M,t,!1);if(I)throw new iM.ErrnoError(I);if(!M.node_ops.unlink)throw new iM.ErrnoError(63);if(iM.isMountpoint(g))throw new iM.ErrnoError(10);try{iM.trackingDelegate.willDeletePath&&iM.trackingDelegate.willDeletePath(A)}catch(M){console.log("FS.trackingDelegate['willDeletePath']('"+A+"') threw an exception: "+M.message)}M.node_ops.unlink(M,t),iM.destroyNode(g);try{iM.trackingDelegate.onDeletePath&&iM.trackingDelegate.onDeletePath(A)}catch(M){console.log("FS.trackingDelegate['onDeletePath']('"+A+"') threw an exception: "+M.message)}},readlink:function(A){var M=iM.lookupPath(A).node;if(!M)throw new iM.ErrnoError(44);if(!M.node_ops.readlink)throw new iM.ErrnoError(28);return MM.resolve(iM.getPath(M.parent),M.node_ops.readlink(M))},stat:function(A,M){var t=iM.lookupPath(A,{follow:!M}).node;if(!t)throw new iM.ErrnoError(44);if(!t.node_ops.getattr)throw new iM.ErrnoError(63);return t.node_ops.getattr(t)},lstat:function(A){return iM.stat(A,!0)},chmod:function(A,M,t){var g;"string"==typeof A?g=iM.lookupPath(A,{follow:!t}).node:g=A;if(!g.node_ops.setattr)throw new iM.ErrnoError(63);g.node_ops.setattr(g,{mode:4095&M|-4096&g.mode,timestamp:Date.now()})},lchmod:function(A,M){iM.chmod(A,M,!0)},fchmod:function(A,M){var t=iM.getStream(A);if(!t)throw new iM.ErrnoError(8);iM.chmod(t.node,M)},chown:function(A,M,t,g){var I;"string"==typeof A?I=iM.lookupPath(A,{follow:!g}).node:I=A;if(!I.node_ops.setattr)throw new iM.ErrnoError(63);I.node_ops.setattr(I,{timestamp:Date.now()})},lchown:function(A,M,t){iM.chown(A,M,t,!0)},fchown:function(A,M,t){var g=iM.getStream(A);if(!g)throw new iM.ErrnoError(8);iM.chown(g.node,M,t)},truncate:function(A,M){if(M<0)throw new iM.ErrnoError(28);var t;"string"==typeof A?t=iM.lookupPath(A,{follow:!0}).node:t=A;if(!t.node_ops.setattr)throw new iM.ErrnoError(63);if(iM.isDir(t.mode))throw new iM.ErrnoError(31);if(!iM.isFile(t.mode))throw new iM.ErrnoError(28);var g=iM.nodePermissions(t,"w");if(g)throw new iM.ErrnoError(g);t.node_ops.setattr(t,{size:M,timestamp:Date.now()})},ftruncate:function(A,M){var t=iM.getStream(A);if(!t)throw new iM.ErrnoError(8);if(0==(2097155&t.flags))throw new iM.ErrnoError(28);iM.truncate(t.node,M)},utime:function(A,M,t){var g=iM.lookupPath(A,{follow:!0}).node;g.node_ops.setattr(g,{timestamp:Math.max(M,t)})},open:function(A,M,t,g,I){if(""===A)throw new iM.ErrnoError(44);var e;if(t=void 0===t?438:t,t=64&(M="string"==typeof M?iM.modeStringToFlags(M):M)?4095&t|32768:0,"object"==typeof A)e=A;else{A=AM.normalize(A);try{e=iM.lookupPath(A,{follow:!(131072&M)}).node}catch(A){}}var i=!1;if(64&M)if(e){if(128&M)throw new iM.ErrnoError(20)}else e=iM.mknod(A,t,0),i=!0;if(!e)throw new iM.ErrnoError(44);if(iM.isChrdev(e.mode)&&(M&=-513),65536&M&&!iM.isDir(e.mode))throw new iM.ErrnoError(54);if(!i){var T=iM.mayOpen(e,M);if(T)throw new iM.ErrnoError(T)}512&M&&iM.truncate(e,0),M&=-641;var N=iM.createStream({node:e,path:iM.getPath(e),flags:M,seekable:!0,position:0,stream_ops:e.stream_ops,ungotten:[],error:!1},g,I);N.stream_ops.open&&N.stream_ops.open(N),!E.logReadFiles||1&M||(iM.readFiles||(iM.readFiles={}),A in iM.readFiles||(iM.readFiles[A]=1,console.log("FS.trackingDelegate error on read file: "+A)));try{if(iM.trackingDelegate.onOpenFile){var n=0;1!=(2097155&M)&&(n|=iM.tracking.openFlags.READ),0!=(2097155&M)&&(n|=iM.tracking.openFlags.WRITE),iM.trackingDelegate.onOpenFile(A,n)}}catch(M){console.log("FS.trackingDelegate['onOpenFile']('"+A+"', flags) threw an exception: "+M.message)}return N},close:function(A){if(iM.isClosed(A))throw new iM.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{iM.closeStream(A.fd)}A.fd=null},isClosed:function(A){return null===A.fd},llseek:function(A,M,t){if(iM.isClosed(A))throw new iM.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new iM.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new iM.ErrnoError(28);return A.position=A.stream_ops.llseek(A,M,t),A.ungotten=[],A.position},read:function(A,M,t,g,I){if(g<0||I<0)throw new iM.ErrnoError(28);if(iM.isClosed(A))throw new iM.ErrnoError(8);if(1==(2097155&A.flags))throw new iM.ErrnoError(8);if(iM.isDir(A.node.mode))throw new iM.ErrnoError(31);if(!A.stream_ops.read)throw new iM.ErrnoError(28);var e=void 0!==I;if(e){if(!A.seekable)throw new iM.ErrnoError(70)}else I=A.position;var i=A.stream_ops.read(A,M,t,g,I);return e||(A.position+=i),i},write:function(A,M,t,g,I,e){if(g<0||I<0)throw new iM.ErrnoError(28);if(iM.isClosed(A))throw new iM.ErrnoError(8);if(0==(2097155&A.flags))throw new iM.ErrnoError(8);if(iM.isDir(A.node.mode))throw new iM.ErrnoError(31);if(!A.stream_ops.write)throw new iM.ErrnoError(28);1024&A.flags&&iM.llseek(A,0,2);var i=void 0!==I;if(i){if(!A.seekable)throw new iM.ErrnoError(70)}else I=A.position;var T=A.stream_ops.write(A,M,t,g,I,e);i||(A.position+=T);try{A.path&&iM.trackingDelegate.onWriteToFile&&iM.trackingDelegate.onWriteToFile(A.path)}catch(M){console.log("FS.trackingDelegate['onWriteToFile']('"+A.path+"') threw an exception: "+M.message)}return T},allocate:function(A,M,t){if(iM.isClosed(A))throw new iM.ErrnoError(8);if(M<0||t<=0)throw new iM.ErrnoError(28);if(0==(2097155&A.flags))throw new iM.ErrnoError(8);if(!iM.isFile(A.node.mode)&&!iM.isDir(A.node.mode))throw new iM.ErrnoError(43);if(!A.stream_ops.allocate)throw new iM.ErrnoError(138);A.stream_ops.allocate(A,M,t)},mmap:function(A,M,t,g,I,e,i){if(0!=(2&e)&&0==(2&i)&&2!=(2097155&A.flags))throw new iM.ErrnoError(2);if(1==(2097155&A.flags))throw new iM.ErrnoError(2);if(!A.stream_ops.mmap)throw new iM.ErrnoError(43);return A.stream_ops.mmap(A,M,t,g,I,e,i)},msync:function(A,M,t,g,I){return A&&A.stream_ops.msync?A.stream_ops.msync(A,M,t,g,I):0},munmap:function(A){return 0},ioctl:function(A,M,t){if(!A.stream_ops.ioctl)throw new iM.ErrnoError(59);return A.stream_ops.ioctl(A,M,t)},readFile:function(A,M){if((M=M||{}).flags=M.flags||"r",M.encoding=M.encoding||"binary","utf8"!==M.encoding&&"binary"!==M.encoding)throw new Error('Invalid encoding type "'+M.encoding+'"');var t,g=iM.open(A,M.flags),I=iM.stat(A).size,e=new Uint8Array(I);return iM.read(g,e,0,I,0),"utf8"===M.encoding?t=b(e,0):"binary"===M.encoding&&(t=e),iM.close(g),t},writeFile:function(A,M,t){(t=t||{}).flags=t.flags||"w";var g=iM.open(A,t.flags,t.mode);if("string"==typeof M){var I=new Uint8Array(X(M)+1),e=J(M,I,0,I.length);iM.write(g,I,0,e,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(M))throw new Error("Unsupported data type");iM.write(g,M,0,M.byteLength,void 0,t.canOwn)}iM.close(g)},cwd:function(){return iM.currentPath},chdir:function(A){var M=iM.lookupPath(A,{follow:!0});if(null===M.node)throw new iM.ErrnoError(44);if(!iM.isDir(M.node.mode))throw new iM.ErrnoError(54);var t=iM.nodePermissions(M.node,"x");if(t)throw new iM.ErrnoError(t);iM.currentPath=M.path},createDefaultDirectories:function(){iM.mkdir("/tmp"),iM.mkdir("/home"),iM.mkdir("/home/web_user")},createDefaultDevices:function(){var A;if(iM.mkdir("/dev"),iM.registerDevice(iM.makedev(1,3),{read:function(){return 0},write:function(A,M,t,g,I){return g}}),iM.mkdev("/dev/null",iM.makedev(1,3)),tM.register(iM.makedev(5,0),tM.default_tty_ops),tM.register(iM.makedev(6,0),tM.default_tty1_ops),iM.mkdev("/dev/tty",iM.makedev(5,0)),iM.mkdev("/dev/tty1",iM.makedev(6,0)),"object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var M=new Uint8Array(1);A=function(){return crypto.getRandomValues(M),M[0]}}else if(c)try{var g=t(123);A=function(){return g.randomBytes(1)[0]}}catch(A){}A||(A=function(){mA("no cryptographic support found for random_device. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}),iM.createDevice("/dev","random",A),iM.createDevice("/dev","urandom",A),iM.mkdir("/dev/shm"),iM.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){iM.mkdir("/proc"),iM.mkdir("/proc/self"),iM.mkdir("/proc/self/fd"),iM.mount({mount:function(){var A=iM.createNode("/proc/self","fd",16895,73);return A.node_ops={lookup:function(A,M){var t=+M,g=iM.getStream(t);if(!g)throw new iM.ErrnoError(8);var I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return g.path}}};return I.parent=I,I}},A}},{},"/proc/self/fd")},createStandardStreams:function(){E.stdin?iM.createDevice("/dev","stdin",E.stdin):iM.symlink("/dev/tty","/dev/stdin"),E.stdout?iM.createDevice("/dev","stdout",null,E.stdout):iM.symlink("/dev/tty","/dev/stdout"),E.stderr?iM.createDevice("/dev","stderr",null,E.stderr):iM.symlink("/dev/tty1","/dev/stderr");var A=iM.open("/dev/stdin","r"),M=iM.open("/dev/stdout","w"),t=iM.open("/dev/stderr","w");F(0===A.fd,"invalid handle for stdin ("+A.fd+")"),F(1===M.fd,"invalid handle for stdout ("+M.fd+")"),F(2===t.fd,"invalid handle for stderr ("+t.fd+")")},ensureErrnoError:function(){iM.ErrnoError||(iM.ErrnoError=function(A,M){this.node=M,this.setErrno=function(A){for(var M in this.errno=A,eM)if(eM[M]===A){this.code=M;break}},this.setErrno(A),this.message=IM[A],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=VA(this.stack))},iM.ErrnoError.prototype=new Error,iM.ErrnoError.prototype.constructor=iM.ErrnoError,[44].forEach((function(A){iM.genericErrors[A]=new iM.ErrnoError(A),iM.genericErrors[A].stack="<generic error, no stack>"})))},staticInit:function(){iM.ensureErrnoError(),iM.nameTable=new Array(4096),iM.mount(gM,{},"/"),iM.createDefaultDirectories(),iM.createDefaultDevices(),iM.createSpecialDirectories(),iM.filesystems={MEMFS:gM}},init:function(A,M,t){F(!iM.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),iM.init.initialized=!0,iM.ensureErrnoError(),E.stdin=A||E.stdin,E.stdout=M||E.stdout,E.stderr=t||E.stderr,iM.createStandardStreams()},quit:function(){iM.init.initialized=!1;var A=E._fflush;A&&A(0);for(var M=0;M<iM.streams.length;M++){var t=iM.streams[M];t&&iM.close(t)}},getMode:function(A,M){var t=0;return A&&(t|=365),M&&(t|=146),t},joinPath:function(A,M){var t=AM.join.apply(null,A);return M&&"/"==t[0]&&(t=t.substr(1)),t},absolutePath:function(A,M){return MM.resolve(M,A)},standardizePath:function(A){return AM.normalize(A)},findObject:function(A,M){var t=iM.analyzePath(A,M);return t.exists?t.object:($A(t.error),null)},analyzePath:function(A,M){try{A=(g=iM.lookupPath(A,{follow:!M})).path}catch(A){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var g=iM.lookupPath(A,{parent:!0});t.parentExists=!0,t.parentPath=g.path,t.parentObject=g.node,t.name=AM.basename(A),g=iM.lookupPath(A,{follow:!M}),t.exists=!0,t.path=g.path,t.object=g.node,t.name=g.node.name,t.isRoot="/"===g.path}catch(A){t.error=A.errno}return t},createFolder:function(A,M,t,g){var I=AM.join2("string"==typeof A?A:iM.getPath(A),M),e=iM.getMode(t,g);return iM.mkdir(I,e)},createPath:function(A,M,t,g){A="string"==typeof A?A:iM.getPath(A);for(var I=M.split("/").reverse();I.length;){var e=I.pop();if(e){var i=AM.join2(A,e);try{iM.mkdir(i)}catch(A){}A=i}}return i},createFile:function(A,M,t,g,I){var e=AM.join2("string"==typeof A?A:iM.getPath(A),M),i=iM.getMode(g,I);return iM.create(e,i)},createDataFile:function(A,M,t,g,I,e){var i=M?AM.join2("string"==typeof A?A:iM.getPath(A),M):A,T=iM.getMode(g,I),E=iM.create(i,T);if(t){if("string"==typeof t){for(var N=new Array(t.length),n=0,D=t.length;n<D;++n)N[n]=t.charCodeAt(n);t=N}iM.chmod(E,146|T);var C=iM.open(E,"w");iM.write(C,t,0,t.length,0,e),iM.close(C),iM.chmod(E,T)}return E},createDevice:function(A,M,t,g){var I=AM.join2("string"==typeof A?A:iM.getPath(A),M),e=iM.getMode(!!t,!!g);iM.createDevice.major||(iM.createDevice.major=64);var i=iM.makedev(iM.createDevice.major++,0);return iM.registerDevice(i,{open:function(A){A.seekable=!1},close:function(A){g&&g.buffer&&g.buffer.length&&g(10)},read:function(A,M,g,I,e){for(var i=0,T=0;T<I;T++){var E;try{E=t()}catch(A){throw new iM.ErrnoError(29)}if(void 0===E&&0===i)throw new iM.ErrnoError(6);if(null==E)break;i++,M[g+T]=E}return i&&(A.node.timestamp=Date.now()),i},write:function(A,M,t,I,e){for(var i=0;i<I;i++)try{g(M[t+i])}catch(A){throw new iM.ErrnoError(29)}return I&&(A.node.timestamp=Date.now()),i}}),iM.mkdev(I,e,i)},createLink:function(A,M,t,g,I){var e=AM.join2("string"==typeof A?A:iM.getPath(A),M);return iM.symlink(t,e)},forceLoadFile:function(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;var M=!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!Q)throw new Error("Cannot load without read() or XMLHttpRequest.");try{A.contents=lM(Q(A.url),!0),A.usedBytes=A.contents.length}catch(A){M=!1}return M||$A(29),M},createLazyFile:function(A,M,t,g,I){function e(){this.lengthKnown=!1,this.chunks=[]}if(e.prototype.get=function(A){if(!(A>this.length-1||A<0)){var M=A%this.chunkSize,t=A/this.chunkSize|0;return this.getter(t)[M]}},e.prototype.setDataGetter=function(A){this.getter=A},e.prototype.cacheLength=function(){var A=new XMLHttpRequest;if(A.open("HEAD",t,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error("Couldn't load "+t+". Status: "+A.status);var M,g=Number(A.getResponseHeader("Content-length")),I=(M=A.getResponseHeader("Accept-Ranges"))&&"bytes"===M,e=(M=A.getResponseHeader("Content-Encoding"))&&"gzip"===M,i=1048576;I||(i=g);var T=this;T.setDataGetter((function(A){var M=A*i,I=(A+1)*i-1;if(I=Math.min(I,g-1),void 0===T.chunks[A]&&(T.chunks[A]=function(A,M){if(A>M)throw new Error("invalid range ("+A+", "+M+") or no bytes requested!");if(M>g-1)throw new Error("only "+g+" bytes available! programmer error!");var I=new XMLHttpRequest;if(I.open("GET",t,!1),g!==i&&I.setRequestHeader("Range","bytes="+A+"-"+M),"undefined"!=typeof Uint8Array&&(I.responseType="arraybuffer"),I.overrideMimeType&&I.overrideMimeType("text/plain; charset=x-user-defined"),I.send(null),!(I.status>=200&&I.status<300||304===I.status))throw new Error("Couldn't load "+t+". Status: "+I.status);return void 0!==I.response?new Uint8Array(I.response||[]):lM(I.responseText||"",!0)}(M,I)),void 0===T.chunks[A])throw new Error("doXHR failed!");return T.chunks[A]})),!e&&g||(i=g=1,g=this.getter(0).length,i=g,console.log("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=g,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!r)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new e;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var T={isDevice:!1,contents:i}}else T={isDevice:!1,url:t};var E=iM.createFile(A,M,T,g,I);T.contents?E.contents=T.contents:T.url&&(E.contents=null,E.url=T.url),Object.defineProperties(E,{usedBytes:{get:function(){return this.contents.length}}});var N={};return Object.keys(E.stream_ops).forEach((function(A){var M=E.stream_ops[A];N[A]=function(){if(!iM.forceLoadFile(E))throw new iM.ErrnoError(29);return M.apply(null,arguments)}})),N.read=function(A,M,t,g,I){if(!iM.forceLoadFile(E))throw new iM.ErrnoError(29);var e=A.node.contents;if(I>=e.length)return 0;var i=Math.min(e.length-I,g);if(F(i>=0),e.slice)for(var T=0;T<i;T++)M[t+T]=e[I+T];else for(T=0;T<i;T++)M[t+T]=e.get(I+T);return i},E.stream_ops=N,E},createPreloadedFile:function(A,M,t,g,I,e,i,T,N,n){Browser.init();var D=M?MM.resolve(AM.join2(A,M)):A,C=fA("cp "+D);function r(t){function r(t){n&&n(),T||iM.createDataFile(A,M,t,g,I,N),e&&e(),FA(C)}var c=!1;E.preloadPlugins.forEach((function(A){c||A.canHandle(D)&&(A.handle(t,D,r,(function(){i&&i(),FA(C)})),c=!0)})),c||r(t)}OA(C),"string"==typeof t?Browser.asyncLoad(t,(function(A){r(A)}),i):r(t)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(A,M,t){M=M||function(){},t=t||function(){};var g=iM.indexedDB();try{var I=g.open(iM.DB_NAME(),iM.DB_VERSION)}catch(A){return t(A)}I.onupgradeneeded=function(){console.log("creating db"),I.result.createObjectStore(iM.DB_STORE_NAME)},I.onsuccess=function(){var g=I.result.transaction([iM.DB_STORE_NAME],"readwrite"),e=g.objectStore(iM.DB_STORE_NAME),i=0,T=0,E=A.length;function N(){0==T?M():t()}A.forEach((function(A){var M=e.put(iM.analyzePath(A).object.contents,A);M.onsuccess=function(){++i+T==E&&N()},M.onerror=function(){T++,i+T==E&&N()}})),g.onerror=t},I.onerror=t},loadFilesFromDB:function(A,M,t){M=M||function(){},t=t||function(){};var g=iM.indexedDB();try{var I=g.open(iM.DB_NAME(),iM.DB_VERSION)}catch(A){return t(A)}I.onupgradeneeded=t,I.onsuccess=function(){var g=I.result;try{var e=g.transaction([iM.DB_STORE_NAME],"readonly")}catch(A){return void t(A)}var i=e.objectStore(iM.DB_STORE_NAME),T=0,E=0,N=A.length;function n(){0==E?M():t()}A.forEach((function(A){var M=i.get(A);M.onsuccess=function(){iM.analyzePath(A).exists&&iM.unlink(A),iM.createDataFile(AM.dirname(A),AM.basename(A),M.result,!0,!0,!0),++T+E==N&&n()},M.onerror=function(){E++,T+E==N&&n()}})),e.onerror=t},I.onerror=t}},TM={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(A,M){if("/"!==M[0]){var t;if(-100===A)t=iM.cwd();else{var g=iM.getStream(A);if(!g)throw new iM.ErrnoError(8);t=g.path}M=AM.join2(t,M)}return M},doStat:function(A,M,t){try{var g=A(M)}catch(A){if(A&&A.node&&AM.normalize(M)!==AM.normalize(iM.getPath(A.node)))return-54;throw A}return q[t>>2]=g.dev,q[t+4>>2]=0,q[t+8>>2]=g.ino,q[t+12>>2]=g.mode,q[t+16>>2]=g.nlink,q[t+20>>2]=g.uid,q[t+24>>2]=g.gid,q[t+28>>2]=g.rdev,q[t+32>>2]=0,bA=[g.size>>>0,(pA=g.size,+dA(pA)>=1?pA>0?(0|uA(+YA(pA/4294967296),4294967295))>>>0:~~+xA((pA-+(~~pA>>>0))/4294967296)>>>0:0)],q[t+40>>2]=bA[0],q[t+44>>2]=bA[1],q[t+48>>2]=4096,q[t+52>>2]=g.blocks,q[t+56>>2]=g.atime.getTime()/1e3|0,q[t+60>>2]=0,q[t+64>>2]=g.mtime.getTime()/1e3|0,q[t+68>>2]=0,q[t+72>>2]=g.ctime.getTime()/1e3|0,q[t+76>>2]=0,bA=[g.ino>>>0,(pA=g.ino,+dA(pA)>=1?pA>0?(0|uA(+YA(pA/4294967296),4294967295))>>>0:~~+xA((pA-+(~~pA>>>0))/4294967296)>>>0:0)],q[t+80>>2]=bA[0],q[t+84>>2]=bA[1],0},doMsync:function(A,M,t,g){var I=new Uint8Array(Z.subarray(A,A+t));iM.msync(M,I,0,t,g)},doMkdir:function(A,M){return"/"===(A=AM.normalize(A))[A.length-1]&&(A=A.substr(0,A.length-1)),iM.mkdir(A,M,0),0},doMknod:function(A,M,t){switch(61440&M){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return iM.mknod(A,M,t),0},doReadlink:function(A,M,t){if(t<=0)return-28;var g=iM.readlink(A),I=Math.min(t,X(g)),e=P[M+I];return H(g,M,t+1),P[M+I]=e,I},doAccess:function(A,M){if(-8&M)return-28;var t;if(!(t=iM.lookupPath(A,{follow:!0}).node))return-44;var g="";return 4&M&&(g+="r"),2&M&&(g+="w"),1&M&&(g+="x"),g&&iM.nodePermissions(t,g)?-2:0},doDup:function(A,M,t){var g=iM.getStream(t);return g&&iM.close(g),iM.open(A,M,0,t,t).fd},doReadv:function(A,M,t,g){for(var I=0,e=0;e<t;e++){var i=q[M+8*e>>2],T=q[M+(8*e+4)>>2],E=iM.read(A,P,i,T,g);if(E<0)return-1;if(I+=E,E<T)break}return I},doWritev:function(A,M,t,g){for(var I=0,e=0;e<t;e++){var i=q[M+8*e>>2],T=q[M+(8*e+4)>>2],E=iM.write(A,P,i,T,g);if(E<0)return-1;I+=E}return I},varargs:0,get:function(A){return TM.varargs+=4,q[TM.varargs-4>>2]},getStr:function(){return G(TM.get())},getStreamFromFD:function(A){void 0===A&&(A=TM.get());var M=iM.getStream(A);if(!M)throw new iM.ErrnoError(8);return M},get64:function(){var A=TM.get(),M=TM.get();return F(A>=0?0===M:-1===M),A},getZero:function(){F(0===TM.get())}};function EM(A,M){TM.varargs=M;try{var t=TM.getStreamFromFD();switch(TM.get()){case 0:return(g=TM.get())<0?-28:iM.open(t.path,t.flags,0,g).fd;case 1:case 2:return 0;case 3:return t.flags;case 4:var g=TM.get();return t.flags|=g,0;case 12:g=TM.get();return K[g+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return $A(28),-1;default:return-28}}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),-A.errno}}function NM(A,M){TM.varargs=M;try{var t=TM.getStreamFromFD(),g=TM.get(),I=TM.get();return iM.read(t,P,g,I)}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),-A.errno}}function nM(A,M){TM.varargs=M;try{var t=TM.getStr(),g=TM.get(),I=TM.get();return iM.open(t,g,I).fd}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),-A.errno}}function DM(){}function CM(){mA()}function rM(){return void 0===rM.start&&(rM.start=Date.now()),1e3*(Date.now()-rM.start)|0}function cM(){return P.length}function oM(A,M,t){Z.set(Z.subarray(M,M+t),A)}function BM(A){try{return z.grow(A-W.byteLength+65535>>16),MA(z.buffer),1}catch(M){console.error("emscripten_realloc_buffer: Attempted to grow heap from "+W.byteLength+" bytes to "+A+" bytes, but got error: "+M)}}function QM(A){var M=cM();F(A>M);if(A>2147418112)return L("Cannot enlarge memory, asked to go up to "+A+" bytes, but the limit is 2147418112 bytes!"),!1;for(var t=Math.max(M,16777216);t<A;)(t=t<=536870912?AA(2*t,65536):Math.min(AA((3*t+2147483648)/4,65536),2147418112))===M&&d("Cannot ask for more memory since we reached the practical limit in browsers (which is just below 2GB), so the request would have failed. Requesting only "+P.length);return!!BM(t)||(L("Failed to grow the heap from "+M+" bytes to "+t+" bytes, not enough memory!"),!1)}var aM={};function hM(){if(!hM.strings){var A={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n};for(var M in aM)A[M]=aM[M];var t=[];for(var M in A)t.push(M+"="+A[M]);hM.strings=t}return hM.strings}function sM(A,M){var t=hM(),g=0;return t.forEach((function(t,I){var e=M+g;q[A+4*I>>2]=e,V(t,e),g+=t.length+1})),0}function yM(A,M){var t=hM();q[A>>2]=t.length;var g=0;return t.forEach((function(A){g+=A.length+1})),q[M>>2]=g,0}function wM(A){try{var M=TM.getStreamFromFD(A);return iM.close(M),0}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),A.errno}}function jM(A,M){try{var t=TM.getStreamFromFD(A),g=t.tty?2:iM.isDir(t.mode)?3:iM.isLink(t.mode)?7:4;return P[M>>0]=g,0}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),A.errno}}function LM(A,M,t,g,I){try{var e=TM.getStreamFromFD(A),i=4294967296*t+(M>>>0);return i<=-9007199254740992||i>=9007199254740992?-61:(iM.llseek(e,i,g),bA=[e.position>>>0,(pA=e.position,+dA(pA)>=1?pA>0?(0|uA(+YA(pA/4294967296),4294967295))>>>0:~~+xA((pA-+(~~pA>>>0))/4294967296)>>>0:0)],q[I>>2]=bA[0],q[I+4>>2]=bA[1],e.getdents&&0===i&&0===g&&(e.getdents=null),0)}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),A.errno}}function dM(A,M,t,g){try{var I=TM.getStreamFromFD(A),e=TM.doWritev(I,M,t);return q[g>>2]=e,0}catch(A){return void 0!==iM&&A instanceof iM.ErrnoError||mA(A),A.errno}}function xM(A){var M=Date.now();return q[A>>2]=M/1e3|0,q[A+4>>2]=M%1e3*1e3|0,0}H("GMT",1172720,4);function YM(A){return(A=+A)>=0?+YA(A+.5):+xA(A-.5)}function uM(A){U(0|A)}function SM(A){var M=Date.now()/1e3|0;return A&&(q[A>>2]=M),M}function lM(A,M,t){var g=t>0?t:X(A)+1,I=new Array(g),e=J(A,I,0,I.length);return M&&(I.length=e),I}iM.staticInit();var zM={__cxa_allocate_exception:ZA,__cxa_throw:qA,__lock:_A,__syscall221:EM,__syscall3:NM,__syscall5:nM,__unlock:DM,abort:CM,clock:rM,emscripten_memcpy_big:oM,emscripten_resize_heap:QM,environ_get:sM,environ_sizes_get:yM,fd_close:wM,fd_fdstat_get:jM,fd_seek:LM,fd_write:dM,gettimeofday:xM,memory:z,round:YM,setTempRet0:uM,table:f,time:SM},UM=XA(),fM=UM.__wasm_call_ctors;UM.__wasm_call_ctors=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),fM.apply(null,arguments)};var OM=UM.WasmDecoder_Check;UM.WasmDecoder_Check=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),OM.apply(null,arguments)};var FM=UM.WasmDecoder_Init;UM.WasmDecoder_Init=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),FM.apply(null,arguments)};var mM=UM.WasmDecoder_Deinit;UM.WasmDecoder_Deinit=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),mM.apply(null,arguments)};var RM=UM.WasmDecoder_OpenChannel;UM.WasmDecoder_OpenChannel=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),RM.apply(null,arguments)};var kM=UM.WasmDecoder_InputFlvStream;UM.WasmDecoder_InputFlvStream=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),kM.apply(null,arguments)};var pM=UM.WasmDecoder_GetFlvDecodeData;UM.WasmDecoder_GetFlvDecodeData=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),pM.apply(null,arguments)};var bM=UM.WasmDecoder_InputFlvStreamAndDecode;UM.WasmDecoder_InputFlvStreamAndDecode=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),bM.apply(null,arguments)};var GM=UM.WasmDecoder_OpenVideoDecoder;UM.WasmDecoder_OpenVideoDecoder=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),GM.apply(null,arguments)};var JM=UM.WasmDecoder_OpenAudioDecoder;UM.WasmDecoder_OpenAudioDecoder=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),JM.apply(null,arguments)};var HM=UM.WasmDecoder_DecodeVideoFrame;UM.WasmDecoder_DecodeVideoFrame=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),HM.apply(null,arguments)};var XM=UM.WasmDecoder_DecodeAudioFrame;UM.WasmDecoder_DecodeAudioFrame=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),XM.apply(null,arguments)};var vM=UM.WasmDecoder_CloseChannel;UM.WasmDecoder_CloseChannel=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),vM.apply(null,arguments)};var VM=UM.main;UM.main=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),VM.apply(null,arguments)};var WM=UM.malloc;UM.malloc=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),WM.apply(null,arguments)};var PM=UM.free;UM.free=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),PM.apply(null,arguments)};var ZM=UM.__errno_location;UM.__errno_location=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ZM.apply(null,arguments)};var KM=UM.fflush;UM.fflush=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),KM.apply(null,arguments)};var qM=UM._get_tzname;UM._get_tzname=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),qM.apply(null,arguments)};var _M=UM._get_daylight;UM._get_daylight=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),_M.apply(null,arguments)};var $M=UM._get_timezone;UM._get_timezone=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),$M.apply(null,arguments)};var At=UM.setThrew;UM.setThrew=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),At.apply(null,arguments)};var Mt=UM._ZSt18uncaught_exceptionv;UM._ZSt18uncaught_exceptionv=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Mt.apply(null,arguments)};var tt=UM.stackSave;UM.stackSave=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),tt.apply(null,arguments)};var gt=UM.stackAlloc;UM.stackAlloc=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),gt.apply(null,arguments)};var It=UM.stackRestore;UM.stackRestore=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),It.apply(null,arguments)};var et=UM.__growWasmMemory;UM.__growWasmMemory=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),et.apply(null,arguments)};var it=UM.dynCall_ii;UM.dynCall_ii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),it.apply(null,arguments)};var Tt=UM.dynCall_viiiii;UM.dynCall_viiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Tt.apply(null,arguments)};var Et=UM.dynCall_viiiiiifi;UM.dynCall_viiiiiifi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Et.apply(null,arguments)};var Nt=UM.dynCall_viiii;UM.dynCall_viiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Nt.apply(null,arguments)};var nt=UM.dynCall_viii;UM.dynCall_viii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),nt.apply(null,arguments)};var Dt=UM.dynCall_iiiiiii;UM.dynCall_iiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Dt.apply(null,arguments)};var Ct=UM.dynCall_iiiiii;UM.dynCall_iiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Ct.apply(null,arguments)};var rt=UM.dynCall_vii;UM.dynCall_vii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),rt.apply(null,arguments)};var ct=UM.dynCall_iii;UM.dynCall_iii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ct.apply(null,arguments)};var ot=UM.dynCall_viiiiii;UM.dynCall_viiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ot.apply(null,arguments)};var Bt=UM.dynCall_viiiiiiiii;UM.dynCall_viiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Bt.apply(null,arguments)};var Qt=UM.dynCall_viiiiiiii;UM.dynCall_viiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Qt.apply(null,arguments)};var at=UM.dynCall_iiiii;UM.dynCall_iiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),at.apply(null,arguments)};var ht=UM.dynCall_viiiiiiiiiiiiii;UM.dynCall_viiiiiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ht.apply(null,arguments)};var st=UM.dynCall_viiiiiiiiiii;UM.dynCall_viiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),st.apply(null,arguments)};var yt=UM.dynCall_viiiiiii;UM.dynCall_viiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),yt.apply(null,arguments)};var wt=UM.dynCall_viiiiiiiiiiii;UM.dynCall_viiiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),wt.apply(null,arguments)};var jt=UM.dynCall_vi;UM.dynCall_vi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),jt.apply(null,arguments)};var Lt=UM.dynCall_iiii;UM.dynCall_iiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Lt.apply(null,arguments)};var dt=UM.dynCall_viiiifii;UM.dynCall_viiiifii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),dt.apply(null,arguments)};var xt=UM.dynCall_fii;UM.dynCall_fii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),xt.apply(null,arguments)};var Yt=UM.dynCall_viiiiiiiiii;UM.dynCall_viiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Yt.apply(null,arguments)};var ut=UM.dynCall_dd;UM.dynCall_dd=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ut.apply(null,arguments)};var St=UM.dynCall_viifi;UM.dynCall_viifi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),St.apply(null,arguments)};var lt=UM.dynCall_fiii;UM.dynCall_fiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),lt.apply(null,arguments)};var zt=UM.dynCall_viidi;UM.dynCall_viidi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),zt.apply(null,arguments)};var Ut=UM.dynCall_iiiiiiii;UM.dynCall_iiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Ut.apply(null,arguments)};var ft=UM.dynCall_viiijj;UM.dynCall_viiijj=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),ft.apply(null,arguments)};var Ot=UM.dynCall_iiiiiiidiiddii;UM.dynCall_iiiiiiidiiddii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Ot.apply(null,arguments)};var Ft=UM.dynCall_jij;UM.dynCall_jij=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Ft.apply(null,arguments)};var mt=UM.dynCall_jii;UM.dynCall_jii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),mt.apply(null,arguments)};var Rt=UM.dynCall_v;UM.dynCall_v=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),Rt.apply(null,arguments)};var kt=UM.dynCall_iidiiii;UM.dynCall_iidiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),kt.apply(null,arguments)};var pt=UM.dynCall_jiji;UM.dynCall_jiji=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),pt.apply(null,arguments)},E.asm=UM;var bt,Gt=E.___wasm_call_ctors=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.__wasm_call_ctors.apply(null,arguments)},Jt=(E._WasmDecoder_Check=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_Check.apply(null,arguments)},E._WasmDecoder_Init=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_Init.apply(null,arguments)},E._WasmDecoder_Deinit=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_Deinit.apply(null,arguments)},E._WasmDecoder_OpenChannel=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_OpenChannel.apply(null,arguments)},E._WasmDecoder_InputFlvStream=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_InputFlvStream.apply(null,arguments)},E._WasmDecoder_GetFlvDecodeData=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_GetFlvDecodeData.apply(null,arguments)},E._WasmDecoder_InputFlvStreamAndDecode=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_InputFlvStreamAndDecode.apply(null,arguments)},E._WasmDecoder_OpenVideoDecoder=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_OpenVideoDecoder.apply(null,arguments)},E._WasmDecoder_OpenAudioDecoder=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_OpenAudioDecoder.apply(null,arguments)},E._WasmDecoder_DecodeVideoFrame=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_DecodeVideoFrame.apply(null,arguments)},E._WasmDecoder_DecodeAudioFrame=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_DecodeAudioFrame.apply(null,arguments)},E._WasmDecoder_CloseChannel=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.WasmDecoder_CloseChannel.apply(null,arguments)},E._main=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.main.apply(null,arguments)},E._malloc=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.malloc.apply(null,arguments)}),Ht=(E._free=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.free.apply(null,arguments)},E.___errno_location=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.__errno_location.apply(null,arguments)},E._fflush=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.fflush.apply(null,arguments)},E.__get_tzname=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm._get_tzname.apply(null,arguments)},E.__get_daylight=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm._get_daylight.apply(null,arguments)},E.__get_timezone=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm._get_timezone.apply(null,arguments)},E._setThrew=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.setThrew.apply(null,arguments)},E.__ZSt18uncaught_exceptionv=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm._ZSt18uncaught_exceptionv.apply(null,arguments)}),Xt=E.stackSave=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.stackSave.apply(null,arguments)},vt=E.stackAlloc=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.stackAlloc.apply(null,arguments)},Vt=E.stackRestore=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.stackRestore.apply(null,arguments)};E.__growWasmMemory=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.__growWasmMemory.apply(null,arguments)},E.dynCall_ii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_ii.apply(null,arguments)},E.dynCall_viiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiii.apply(null,arguments)},E.dynCall_viiiiiifi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiifi.apply(null,arguments)},E.dynCall_viiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiii.apply(null,arguments)},E.dynCall_viii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viii.apply(null,arguments)},E.dynCall_iiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiiiiii.apply(null,arguments)},E.dynCall_iiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiiiii.apply(null,arguments)},E.dynCall_vii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_vii.apply(null,arguments)},E.dynCall_iii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iii.apply(null,arguments)},E.dynCall_viiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiii.apply(null,arguments)},E.dynCall_viiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiiii.apply(null,arguments)},E.dynCall_viiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiii.apply(null,arguments)},E.dynCall_iiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiiii.apply(null,arguments)},E.dynCall_viiiiiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiiiiiiiii.apply(null,arguments)},E.dynCall_viiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiiiiii.apply(null,arguments)},E.dynCall_viiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiii.apply(null,arguments)},E.dynCall_viiiiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiiiiiii.apply(null,arguments)},E.dynCall_vi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_vi.apply(null,arguments)},E.dynCall_iiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiii.apply(null,arguments)},E.dynCall_viiiifii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiifii.apply(null,arguments)},E.dynCall_fii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_fii.apply(null,arguments)},E.dynCall_viiiiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiiiiiiiii.apply(null,arguments)},E.dynCall_dd=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_dd.apply(null,arguments)},E.dynCall_viifi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viifi.apply(null,arguments)},E.dynCall_fiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_fiii.apply(null,arguments)},E.dynCall_viidi=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viidi.apply(null,arguments)},E.dynCall_iiiiiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiiiiiii.apply(null,arguments)},E.dynCall_viiijj=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_viiijj.apply(null,arguments)},E.dynCall_iiiiiiidiiddii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iiiiiiidiiddii.apply(null,arguments)},E.dynCall_jij=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_jij.apply(null,arguments)},E.dynCall_jii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_jii.apply(null,arguments)},E.dynCall_v=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_v.apply(null,arguments)},E.dynCall_iidiiii=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_iidiiii.apply(null,arguments)},E.dynCall_jiji=function(){return F(BA,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)"),F(!QA,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),E.asm.dynCall_jiji.apply(null,arguments)};function Wt(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A}E.asm=UM,Object.getOwnPropertyDescriptor(E,"intArrayFromString")||(E.intArrayFromString=function(){mA("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"intArrayToString")||(E.intArrayToString=function(){mA("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),E.ccall=R,E.cwrap=k,Object.getOwnPropertyDescriptor(E,"setValue")||(E.setValue=function(){mA("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getValue")||(E.getValue=function(){mA("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"allocate")||(E.allocate=function(){mA("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getMemory")||(E.getMemory=function(){mA("'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"AsciiToString")||(E.AsciiToString=function(){mA("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stringToAscii")||(E.stringToAscii=function(){mA("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"UTF8ArrayToString")||(E.UTF8ArrayToString=function(){mA("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"UTF8ToString")||(E.UTF8ToString=function(){mA("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stringToUTF8Array")||(E.stringToUTF8Array=function(){mA("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stringToUTF8")||(E.stringToUTF8=function(){mA("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"lengthBytesUTF8")||(E.lengthBytesUTF8=function(){mA("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"UTF16ToString")||(E.UTF16ToString=function(){mA("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stringToUTF16")||(E.stringToUTF16=function(){mA("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"lengthBytesUTF16")||(E.lengthBytesUTF16=function(){mA("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"UTF32ToString")||(E.UTF32ToString=function(){mA("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stringToUTF32")||(E.stringToUTF32=function(){mA("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"lengthBytesUTF32")||(E.lengthBytesUTF32=function(){mA("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"allocateUTF8")||(E.allocateUTF8=function(){mA("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stackTrace")||(E.stackTrace=function(){mA("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addOnPreRun")||(E.addOnPreRun=function(){mA("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addOnInit")||(E.addOnInit=function(){mA("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addOnPreMain")||(E.addOnPreMain=function(){mA("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addOnExit")||(E.addOnExit=function(){mA("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addOnPostRun")||(E.addOnPostRun=function(){mA("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"writeStringToMemory")||(E.writeStringToMemory=function(){mA("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"writeArrayToMemory")||(E.writeArrayToMemory=function(){mA("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"writeAsciiToMemory")||(E.writeAsciiToMemory=function(){mA("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"addRunDependency")||(E.addRunDependency=function(){mA("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"removeRunDependency")||(E.removeRunDependency=function(){mA("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"ENV")||(E.ENV=function(){mA("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"FS")||(E.FS=function(){mA("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"FS_createFolder")||(E.FS_createFolder=function(){mA("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createPath")||(E.FS_createPath=function(){mA("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createDataFile")||(E.FS_createDataFile=function(){mA("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createPreloadedFile")||(E.FS_createPreloadedFile=function(){mA("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createLazyFile")||(E.FS_createLazyFile=function(){mA("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createLink")||(E.FS_createLink=function(){mA("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_createDevice")||(E.FS_createDevice=function(){mA("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"FS_unlink")||(E.FS_unlink=function(){mA("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}),Object.getOwnPropertyDescriptor(E,"GL")||(E.GL=function(){mA("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"dynamicAlloc")||(E.dynamicAlloc=function(){mA("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"loadDynamicLibrary")||(E.loadDynamicLibrary=function(){mA("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"loadWebAssemblyModule")||(E.loadWebAssemblyModule=function(){mA("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getLEB")||(E.getLEB=function(){mA("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getFunctionTables")||(E.getFunctionTables=function(){mA("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"alignFunctionTables")||(E.alignFunctionTables=function(){mA("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"registerFunctions")||(E.registerFunctions=function(){mA("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),E.addFunction=u,Object.getOwnPropertyDescriptor(E,"removeFunction")||(E.removeFunction=function(){mA("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getFuncWrapper")||(E.getFuncWrapper=function(){mA("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"prettyPrint")||(E.prettyPrint=function(){mA("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"makeBigInt")||(E.makeBigInt=function(){mA("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"dynCall")||(E.dynCall=function(){mA("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getCompilerSetting")||(E.getCompilerSetting=function(){mA("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stackSave")||(E.stackSave=function(){mA("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stackRestore")||(E.stackRestore=function(){mA("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"stackAlloc")||(E.stackAlloc=function(){mA("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"establishStackSpace")||(E.establishStackSpace=function(){mA("'establishStackSpace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"print")||(E.print=function(){mA("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"printErr")||(E.printErr=function(){mA("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"getTempRet0")||(E.getTempRet0=function(){mA("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"setTempRet0")||(E.setTempRet0=function(){mA("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"callMain")||(E.callMain=function(){mA("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"abort")||(E.abort=function(){mA("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"Pointer_stringify")||(E.Pointer_stringify=function(){mA("'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),Object.getOwnPropertyDescriptor(E,"warnOnce")||(E.warnOnce=function(){mA("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}),E.writeStackCookie=EA,E.checkStackCookie=NA,E.abortStackOverflow=nA,Object.getOwnPropertyDescriptor(E,"ALLOC_NORMAL")||Object.defineProperty(E,"ALLOC_NORMAL",{configurable:!0,get:function(){mA("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),Object.getOwnPropertyDescriptor(E,"ALLOC_STACK")||Object.defineProperty(E,"ALLOC_STACK",{configurable:!0,get:function(){mA("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),Object.getOwnPropertyDescriptor(E,"ALLOC_DYNAMIC")||Object.defineProperty(E,"ALLOC_DYNAMIC",{configurable:!0,get:function(){mA("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),Object.getOwnPropertyDescriptor(E,"ALLOC_NONE")||Object.defineProperty(E,"ALLOC_NONE",{configurable:!0,get:function(){mA("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),Object.getOwnPropertyDescriptor(E,"calledRun")||Object.defineProperty(E,"calledRun",{configurable:!0,get:function(){mA("'calledRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")}});function Pt(A){F(0==SA,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'),F(0==CA.length,"cannot call main when preRun functions remain to be called");var M=E._main;try{qt(M(0,0),!0)}catch(A){if(A instanceof Wt)return;if("SimulateInfiniteLoop"==A)return void(l=!0);var t=A;A&&"object"==typeof A&&A.stack&&(t=[A,A.stack]),L("exception thrown: "+t),D(1,A)}finally{!0}}function Zt(A){function M(){bt||(bt=!0,O||(hA(),sA(),E.onRuntimeInitialized&&E.onRuntimeInitialized(),_t&&Pt(),wA()))}A=A||N,SA>0||(EA(),aA(),SA>0||(E.setStatus?(E.setStatus("Running..."),setTimeout((function(){setTimeout((function(){E.setStatus("")}),1),M()}),1)):M(),NA()))}function Kt(){var A=j,M=L,t=!1;j=L=function(A){t=!0};try{var g=E._fflush;g&&g(0),["stdout","stderr"].forEach((function(A){var M=iM.analyzePath("/dev/"+A);if(M){var g=M.object.rdev,I=tM.ttys[g];I&&I.output&&I.output.length&&(t=!0)}}))}catch(A){}j=A,L=M,t&&d("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}function qt(A,M){Kt(),M&&l&&0===A||(l?M||L("program exited (with status: "+A+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)"):(O=!0,A,yA(),E.onExit&&E.onExit(A)),D(A,new Wt(A)))}if(zA=function A(){bt||Zt(),bt||(zA=A)},E.run=Zt,E.preInit)for("function"==typeof E.preInit&&(E.preInit=[E.preInit]);E.preInit.length>0;)E.preInit.pop()();var _t=!0;E.noInitialRun&&(_t=!1),l=!0,Zt()}var n=!1;M.default=function(A){A.isFlvStream=!0,A.enableAudio=!1,A.pause=!1,A.exitFlag=!1,A.needMoreData=!1,A.wasmDecoderId=-1,A.wasmInitVideoDecoder=!1,A.wasmInitAudioDecoder=!1,A.videoQueue=[],A.audioQueue=[],A.videoFrameNum=0,A.videoRawData=null,A.audioRawData=null,A.videoPacketData=null,A.audioPacketData=null,A.findKeyFrame=!0,A.videoIntervalHandle=-1,A.videoIntervalValue=40,A.audioIntervalHandle=-1,A.audioIntervalValue=80,A.lastPTS=0,A.ptsCount=0,A.maxCacheFrameNum=0,A.calcDelayFlag=!0,A.procVideoFlag=!1,A.procAudioFlag=!1;var M=function(){null==A.videoRawData&&(A.videoRawData=E._malloc(8294400)),null==A.audioRawData&&(A.audioRawData=E._malloc(16384)),null==A.videoPacketData&&(A.videoPacketData=E._malloc(1048576)),null==A.audioPacketData&&(A.audioPacketData=E._malloc(2048)),A.wasmDecoderId<0&&(A.wasmDecoderId=E._WasmDecoder_OpenChannel())},t=function(M,t,g,I,e,T,N,n,D){if(A.procVideoFlag)return-1;A.procVideoFlag=!0,E.HEAPU8.set(n,A.videoPacketData);var C,r=i.D,c=0;if(r==i.D?c=0:r==i.B?c=2:r==i.C&&(c=26),1==M&&A.videoFrameNum>0&&(A.videoFrameNum-=1),1==M&&!A.wasmInitVideoDecoder&&g)0==E._WasmDecoder_OpenVideoDecoder(A.wasmDecoderId,t,0,0,c)&&(A.wasmInitVideoDecoder=!0);else if(2==M&&!A.wasmInitAudioDecoder){0==E._WasmDecoder_OpenAudioDecoder(A.wasmDecoderId,t,e,N,T)&&(A.wasmInitAudioDecoder=!0)}var o=null;if(1==M&&A.wasmInitVideoDecoder?o=E._WasmDecoder_DecodeVideoFrame(A.wasmDecoderId,A.videoPacketData,D,0,0,A.videoRawData,0):2==M&&A.wasmInitAudioDecoder&&A.enableAudio&&(o=E._WasmDecoder_DecodeAudioFrame(A.wasmDecoderId,A.videoPacketData,D,A.audioRawData,0)),0!=o&&null!=o){var B=E.HEAPU32[o/4],Q=(E.HEAPU32[o/4+1],E.HEAPU32[o/4+2]),a=(E.HEAPU32[o/4+3],E.HEAPU32[o/4+4]),h=E.HEAPU32[o/4+5],s=(E.HEAPU32[o/4+6],E.HEAPU32[o/4+7]),y=E.HEAPU32[o/4+8],w=E.HEAPU32[o/4+9],j=E.HEAPU32[o/4+10],L=E.HEAPU32[o/4+11],d=(E.HEAPU32[o/4+12],E.HEAPU32[o/4+13]);if(Q<1)return void(A.procVideoFlag=!1);if(1==B){0==c?C=a*h*3/2:2==c?C=a*h*3:(25==c||26==c)&&(C=a*h*4);var x=E.HEAPU8.subarray(A.videoRawData,A.videoRawData+C),Y=new Uint8Array(x),u={cmd:i.o,workerId:i.a,mediaType:1,ts:d,width:a,height:h,framesize:D,rawsize:C,fps:s,interval:y,playTimeSec:I,frameNum:A.videoFrameNum,dat:Y};if(A.postMessage(u,[u.dat.buffer]),a>=1920&&h>=720)return A.procVideoFlag=!1,1}else if(2==B){x=E.HEAPU8.subarray(A.audioRawData,A.audioRawData+Q),Y=new Uint8Array(x);var S=0;8==L?S=0:16==L?S=1:32==L&&(S=2);u={cmd:i.o,workerId:i.a,mediaType:2,fmt:S,ch:w,samplerate:j,ts:d,framesize:Q,dat:Y};A.postMessage(u,[u.dat.buffer])}}return A.procVideoFlag=!1,0},g=function(M,t,g,I,e,T){(E.HEAPU8.set(e,A.audioPacketData),A.wasmInitAudioDecoder)||0==E._WasmDecoder_OpenAudioDecoder(A.wasmDecoderId,M,t,I,g)&&(A.wasmInitAudioDecoder=!0);var N=null;if(A.wasmInitAudioDecoder&&A.enableAudio&&(N=E._WasmDecoder_DecodeAudioFrame(A.wasmDecoderId,A.audioPacketData,T,A.audioRawData,0)),0!=N&&null!=N){E.HEAPU32[N/4],E.HEAPU32[N/4+1];var n=E.HEAPU32[N/4+2],D=(E.HEAPU32[N/4+3],E.HEAPU32[N/4+4],E.HEAPU32[N/4+5],E.HEAPU32[N/4+6],E.HEAPU32[N/4+7],E.HEAPU32[N/4+8],E.HEAPU32[N/4+9]),C=E.HEAPU32[N/4+10],r=E.HEAPU32[N/4+11],c=(E.HEAPU32[N/4+12],E.HEAPU32[N/4+13]);if(n<1)return;var o=E.HEAPU8.subarray(A.audioRawData,A.audioRawData+n),B=new Uint8Array(o),Q=0;8==r?Q=0:16==r?Q=1:32==r&&(Q=2);var a={cmd:i.o,workerId:i.a,mediaType:2,fmt:Q,ch:D,samplerate:C,ts:c,framesize:n,dat:B};A.postMessage(a,[a.dat.buffer])}},I=function(){if(A.wasmDecoderId<0&&M(),A.wasmDecoderId>0&&A.videoQueue.length>0&&!A.pause){var g=null,I=-1;if(A.isFlvStream)g=A.videoQueue[0],I=t(g.mediaType,g.codecId,g.frameType,g.playTimeSec,g.samplerate,g.channelNum,g.bitPerSample,g.dat,g.dat.length);else{if(A.findKeyFrame)for(;A.videoQueue.length>0;){if((g=A.videoQueue[0]).frameType&&A.videoQueue.length<160){A.findKeyFrame=!1;break}A.videoQueue.shift()}else A.videoQueue.length>160&&(A.findKeyFrame=!0);A.videoQueue.length>0&&(null==g&&(g=A.videoQueue[0]),I=t(g.mediaType,g.codecId,g.frameType,g.playTimeSec,g.samplerate,g.channelNum,g.bitPerSample,g.dat,g.dat.length))}I>=0&&A.videoQueue.shift(),A.videoQueue.length>A.maxCacheFrameNum&&A.videoQueue.length}},e=function(){if(!(A.wasmDecoderId<0)&&A.wasmDecoderId>0)for(;A.audioQueue.length>0&&!A.pause;)if(!A.pause){var M=A.audioQueue[0];A.enableAudio&&g(M.codecId,M.samplerate,M.channelNum,M.bitPerSample,M.dat,M.dat.length),A.audioQueue.shift()}};E.onRuntimeInitialized=function(){A.videoIntervalHandle=setInterval(I,A.videoIntervalValue),A.isFlvStream&&(A.audioIntervalHandle=setInterval(e,A.audioIntervalValue));var M={cmd:i.m};A.postMessage(M),n=!0};var D=function(M){if(M>A.lastPTS)if(A.lastPTS>0){if(A.videoQueue.length%5==0){var t=A.ptsCount/5;A.videoQueue.length<=A.maxCacheFrameNum&&(!function(M){if(n){var t=M;(t<5||t>500)&&(t=40),t!=A.videoIntervalValue&&(A.videoIntervalHandle>=0&&(clearInterval(A.videoIntervalHandle),A.videoIntervalHandle=-1),A.videoIntervalValue=Math.floor(t),A.videoIntervalHandle=setInterval(I,A.videoIntervalValue),console.log("SetInterval: "+A.videoIntervalValue))}}(t),console.log("Update interval: "+t)),A.ptsCount=M-A.lastPTS}else A.ptsCount+=M-A.lastPTS;A.lastPTS=M}else A.lastPTS=M,A.ptsCount=40;else A.lastPTS=M,A.ptsCount=40};A.addEventListener("message",(function(t){var g=t.data;switch(g.cmd){case i.u:T=g.url,A.isFlvStream=g.isFlv,N();break;case i.k:A.exitFlag=!0,A.wasmDecoderId>0&&(E._WasmDecoder_CloseChannel(A.wasmDecoderId),A.wasmDecoderId=-1),null!=A.videoRawData&&(E._free(A.videoRawData),A.videoRawData=null),null!=A.audioRawData&&(E._free(A.audioRawData),A.audioRawData=null),null!=A.videoPacketData&&(E._free(A.videoPacketData),A.videoPacketData=null),null!=A.audioPacketData&&(E._free(A.audioPacketData),A.audioPacketData=null),A.videoIntervalHandle>=0&&(clearInterval(A.videoIntervalHandle),A.videoIntervalHandle=-1),A.audioIntervalHandle>=0&&(clearInterval(A.audioIntervalHandle),A.audioIntervalHandle=-1),A.videoQueue.clear,A.videoQueue.length=0,A.videoFrameNum=0,A.audioQueue.clear,A.audioQueue.length=0;var I={cmd:i.k,workerId:i.a};A.postMessage(I);break;case i.t:A.enableAudio=!0;break;case i.j:A.enableAudio=!1;break;case i.v:A.pause=!0;break;case i.y:A.pause=!1;break;case i.z:A.videoQueue.clear,A.videoQueue.length=0,A.videoFrameNum=0,A.audioQueue.clear,A.audioQueue.length=0;break;case i.A:A.updateIntervalTime(g.interval);break;case i.o:if(A.exitFlag){console.log("exit...");break}n?A.isFlvStream?(A.wasmDecoderId<0&&M(),A.wasmDecoderId>0?1==g.mediaType?A.videoIntervalHandle>=0&&(A.videoQueue.push(g),A.maxCacheFrameNum=5):2==g.mediaType&&A.audioIntervalHandle>=0&&!A.findKeyFrame&&A.audioQueue.push(g):A.videoQueue.length<100&&1==g.mediaType&&g.frameType&&A.videoIntervalHandle>=0&&(A.videoQueue.push(g),A.videoQueue.length>=5&&A.videoQueue.shift())):(1==g.mediaType?A.videoIntervalHandle>=0&&(A.videoQueue.push(g),D(g.samplerate),A.videoFrameNum+=1,A.calcDelayFlag&&A.maxCacheFrameNum<A.videoQueue.length?A.maxCacheFrameNum=A.videoQueue.length:A.calcDelayFlag&&(A.calcDelayFlag=!1)):2==g.mediaType&&A.audioIntervalHandle>=0&&A.audioQueue.push(g),A.needMoreData=!1):A.isFlvStream&&A.videoQueue.length<5?1==g.mediaType&&g.frameType&&A.videoIntervalHandle>=0&&(A.videoQueue.push(g),A.videoQueue.length>=5&&A.videoQueue.shift()):!A.isFlvStream&&A.videoQueue.length<1e3&&(1==g.mediaType?A.videoIntervalHandle>=0&&(A.videoQueue.push(g),D(g.samplerate),A.videoFrameNum+=1,A.calcDelayFlag&&A.maxCacheFrameNum<A.videoQueue.length?A.maxCacheFrameNum=A.videoQueue.length:A.calcDelayFlag&&(A.calcDelayFlag=!1,console.log("videoQueue.length: "+A.maxCacheFrameNum+"  interval:"+A.videoIntervalValue))):2==g.mediaType&&A.audioIntervalHandle>=0&&A.audioQueue.push(g))}}))}}.call(this,t(8),"/",t(116)(A),t(9).Buffer)},function(A,M,t){"use strict";var g=t(4).Buffer,I=t(62).Transform;function e(A){I.call(this),this._block=g.allocUnsafe(A),this._blockSize=A,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}t(3)(e,I),e.prototype._transform=function(A,M,t){var g=null;try{this.update(A,M)}catch(A){g=A}t(g)},e.prototype._flush=function(A){var M=null;try{this.push(this.digest())}catch(A){M=A}A(M)},e.prototype.update=function(A,M){if(function(A,M){if(!g.isBuffer(A)&&"string"!=typeof A)throw new TypeError(M+" must be a string or a buffer")}(A,"Data"),this._finalized)throw new Error("Digest already called");g.isBuffer(A)||(A=g.from(A,M));for(var t=this._block,I=0;this._blockOffset+A.length-I>=this._blockSize;){for(var e=this._blockOffset;e<this._blockSize;)t[e++]=A[I++];this._update(),this._blockOffset=0}for(;I<A.length;)t[this._blockOffset++]=A[I++];for(var i=0,T=8*A.length;T>0;++i)this._length[i]+=T,(T=this._length[i]/4294967296|0)>0&&(this._length[i]-=4294967296*T);return this},e.prototype._update=function(){throw new Error("_update is not implemented")},e.prototype.digest=function(A){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var M=this._digest();void 0!==A&&(M=M.toString(A)),this._block.fill(0),this._blockOffset=0;for(var t=0;t<4;++t)this._length[t]=0;return M},e.prototype._digest=function(){throw new Error("_digest is not implemented")},A.exports=e},function(A,M,t){(M=A.exports=t(63)).Stream=M,M.Readable=M,M.Writable=t(67),M.Duplex=t(20),M.Transform=t(69),M.PassThrough=t(129),M.finished=t(38),M.pipeline=t(130)},function(A,M,t){"use strict";(function(M,g){var I;A.exports=d,d.ReadableState=L;t(7).EventEmitter;var e=function(A,M){return A.listeners(M).length},i=t(64),T=t(9).Buffer,E=M.Uint8Array||function(){};var N,n=t(124);N=n&&n.debuglog?n.debuglog("stream"):function(){};var D,C,r,c=t(125),o=t(65),B=t(66).getHighWaterMark,Q=t(19).codes,a=Q.ERR_INVALID_ARG_TYPE,h=Q.ERR_STREAM_PUSH_AFTER_EOF,s=Q.ERR_METHOD_NOT_IMPLEMENTED,y=Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;t(3)(d,i);var w=o.errorOrDestroy,j=["error","close","destroy","pause","resume"];function L(A,M,g){I=I||t(20),A=A||{},"boolean"!=typeof g&&(g=M instanceof I),this.objectMode=!!A.objectMode,g&&(this.objectMode=this.objectMode||!!A.readableObjectMode),this.highWaterMark=B(this,A,"readableHighWaterMark",g),this.buffer=new c,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==A.emitClose,this.autoDestroy=!!A.autoDestroy,this.destroyed=!1,this.defaultEncoding=A.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,A.encoding&&(D||(D=t(24).StringDecoder),this.decoder=new D(A.encoding),this.encoding=A.encoding)}function d(A){if(I=I||t(20),!(this instanceof d))return new d(A);var M=this instanceof I;this._readableState=new L(A,this,M),this.readable=!0,A&&("function"==typeof A.read&&(this._read=A.read),"function"==typeof A.destroy&&(this._destroy=A.destroy)),i.call(this)}function x(A,M,t,g,I){N("readableAddChunk",M);var e,i=A._readableState;if(null===M)i.reading=!1,function(A,M){if(N("onEofChunk"),M.ended)return;if(M.decoder){var t=M.decoder.end();t&&t.length&&(M.buffer.push(t),M.length+=M.objectMode?1:t.length)}M.ended=!0,M.sync?S(A):(M.needReadable=!1,M.emittedReadable||(M.emittedReadable=!0,l(A)))}(A,i);else if(I||(e=function(A,M){var t;g=M,T.isBuffer(g)||g instanceof E||"string"==typeof M||void 0===M||A.objectMode||(t=new a("chunk",["string","Buffer","Uint8Array"],M));var g;return t}(i,M)),e)w(A,e);else if(i.objectMode||M&&M.length>0)if("string"==typeof M||i.objectMode||Object.getPrototypeOf(M)===T.prototype||(M=function(A){return T.from(A)}(M)),g)i.endEmitted?w(A,new y):Y(A,i,M,!0);else if(i.ended)w(A,new h);else{if(i.destroyed)return!1;i.reading=!1,i.decoder&&!t?(M=i.decoder.write(M),i.objectMode||0!==M.length?Y(A,i,M,!1):z(A,i)):Y(A,i,M,!1)}else g||(i.reading=!1,z(A,i));return!i.ended&&(i.length<i.highWaterMark||0===i.length)}function Y(A,M,t,g){M.flowing&&0===M.length&&!M.sync?(M.awaitDrain=0,A.emit("data",t)):(M.length+=M.objectMode?1:t.length,g?M.buffer.unshift(t):M.buffer.push(t),M.needReadable&&S(A)),z(A,M)}Object.defineProperty(d.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(A){this._readableState&&(this._readableState.destroyed=A)}}),d.prototype.destroy=o.destroy,d.prototype._undestroy=o.undestroy,d.prototype._destroy=function(A,M){M(A)},d.prototype.push=function(A,M){var t,g=this._readableState;return g.objectMode?t=!0:"string"==typeof A&&((M=M||g.defaultEncoding)!==g.encoding&&(A=T.from(A,M),M=""),t=!0),x(this,A,M,!1,t)},d.prototype.unshift=function(A){return x(this,A,null,!0,!1)},d.prototype.isPaused=function(){return!1===this._readableState.flowing},d.prototype.setEncoding=function(A){D||(D=t(24).StringDecoder);var M=new D(A);this._readableState.decoder=M,this._readableState.encoding=this._readableState.decoder.encoding;for(var g=this._readableState.buffer.head,I="";null!==g;)I+=M.write(g.data),g=g.next;return this._readableState.buffer.clear(),""!==I&&this._readableState.buffer.push(I),this._readableState.length=I.length,this};function u(A,M){return A<=0||0===M.length&&M.ended?0:M.objectMode?1:A!=A?M.flowing&&M.length?M.buffer.head.data.length:M.length:(A>M.highWaterMark&&(M.highWaterMark=function(A){return A>=1073741824?A=1073741824:(A--,A|=A>>>1,A|=A>>>2,A|=A>>>4,A|=A>>>8,A|=A>>>16,A++),A}(A)),A<=M.length?A:M.ended?M.length:(M.needReadable=!0,0))}function S(A){var M=A._readableState;N("emitReadable",M.needReadable,M.emittedReadable),M.needReadable=!1,M.emittedReadable||(N("emitReadable",M.flowing),M.emittedReadable=!0,g.nextTick(l,A))}function l(A){var M=A._readableState;N("emitReadable_",M.destroyed,M.length,M.ended),M.destroyed||!M.length&&!M.ended||(A.emit("readable"),M.emittedReadable=!1),M.needReadable=!M.flowing&&!M.ended&&M.length<=M.highWaterMark,m(A)}function z(A,M){M.readingMore||(M.readingMore=!0,g.nextTick(U,A,M))}function U(A,M){for(;!M.reading&&!M.ended&&(M.length<M.highWaterMark||M.flowing&&0===M.length);){var t=M.length;if(N("maybeReadMore read 0"),A.read(0),t===M.length)break}M.readingMore=!1}function f(A){var M=A._readableState;M.readableListening=A.listenerCount("readable")>0,M.resumeScheduled&&!M.paused?M.flowing=!0:A.listenerCount("data")>0&&A.resume()}function O(A){N("readable nexttick read 0"),A.read(0)}function F(A,M){N("resume",M.reading),M.reading||A.read(0),M.resumeScheduled=!1,A.emit("resume"),m(A),M.flowing&&!M.reading&&A.read(0)}function m(A){var M=A._readableState;for(N("flow",M.flowing);M.flowing&&null!==A.read(););}function R(A,M){return 0===M.length?null:(M.objectMode?t=M.buffer.shift():!A||A>=M.length?(t=M.decoder?M.buffer.join(""):1===M.buffer.length?M.buffer.first():M.buffer.concat(M.length),M.buffer.clear()):t=M.buffer.consume(A,M.decoder),t);var t}function k(A){var M=A._readableState;N("endReadable",M.endEmitted),M.endEmitted||(M.ended=!0,g.nextTick(p,M,A))}function p(A,M){if(N("endReadableNT",A.endEmitted,A.length),!A.endEmitted&&0===A.length&&(A.endEmitted=!0,M.readable=!1,M.emit("end"),A.autoDestroy)){var t=M._writableState;(!t||t.autoDestroy&&t.finished)&&M.destroy()}}function b(A,M){for(var t=0,g=A.length;t<g;t++)if(A[t]===M)return t;return-1}d.prototype.read=function(A){N("read",A),A=parseInt(A,10);var M=this._readableState,t=A;if(0!==A&&(M.emittedReadable=!1),0===A&&M.needReadable&&((0!==M.highWaterMark?M.length>=M.highWaterMark:M.length>0)||M.ended))return N("read: emitReadable",M.length,M.ended),0===M.length&&M.ended?k(this):S(this),null;if(0===(A=u(A,M))&&M.ended)return 0===M.length&&k(this),null;var g,I=M.needReadable;return N("need readable",I),(0===M.length||M.length-A<M.highWaterMark)&&N("length less than watermark",I=!0),M.ended||M.reading?N("reading or ended",I=!1):I&&(N("do read"),M.reading=!0,M.sync=!0,0===M.length&&(M.needReadable=!0),this._read(M.highWaterMark),M.sync=!1,M.reading||(A=u(t,M))),null===(g=A>0?R(A,M):null)?(M.needReadable=M.length<=M.highWaterMark,A=0):(M.length-=A,M.awaitDrain=0),0===M.length&&(M.ended||(M.needReadable=!0),t!==A&&M.ended&&k(this)),null!==g&&this.emit("data",g),g},d.prototype._read=function(A){w(this,new s("_read()"))},d.prototype.pipe=function(A,M){var t=this,I=this._readableState;switch(I.pipesCount){case 0:I.pipes=A;break;case 1:I.pipes=[I.pipes,A];break;default:I.pipes.push(A)}I.pipesCount+=1,N("pipe count=%d opts=%j",I.pipesCount,M);var i=(!M||!1!==M.end)&&A!==g.stdout&&A!==g.stderr?E:B;function T(M,g){N("onunpipe"),M===t&&g&&!1===g.hasUnpiped&&(g.hasUnpiped=!0,N("cleanup"),A.removeListener("close",c),A.removeListener("finish",o),A.removeListener("drain",n),A.removeListener("error",r),A.removeListener("unpipe",T),t.removeListener("end",E),t.removeListener("end",B),t.removeListener("data",C),D=!0,!I.awaitDrain||A._writableState&&!A._writableState.needDrain||n())}function E(){N("onend"),A.end()}I.endEmitted?g.nextTick(i):t.once("end",i),A.on("unpipe",T);var n=function(A){return function(){var M=A._readableState;N("pipeOnDrain",M.awaitDrain),M.awaitDrain&&M.awaitDrain--,0===M.awaitDrain&&e(A,"data")&&(M.flowing=!0,m(A))}}(t);A.on("drain",n);var D=!1;function C(M){N("ondata");var g=A.write(M);N("dest.write",g),!1===g&&((1===I.pipesCount&&I.pipes===A||I.pipesCount>1&&-1!==b(I.pipes,A))&&!D&&(N("false write response, pause",I.awaitDrain),I.awaitDrain++),t.pause())}function r(M){N("onerror",M),B(),A.removeListener("error",r),0===e(A,"error")&&w(A,M)}function c(){A.removeListener("finish",o),B()}function o(){N("onfinish"),A.removeListener("close",c),B()}function B(){N("unpipe"),t.unpipe(A)}return t.on("data",C),function(A,M,t){if("function"==typeof A.prependListener)return A.prependListener(M,t);A._events&&A._events[M]?Array.isArray(A._events[M])?A._events[M].unshift(t):A._events[M]=[t,A._events[M]]:A.on(M,t)}(A,"error",r),A.once("close",c),A.once("finish",o),A.emit("pipe",t),I.flowing||(N("pipe resume"),t.resume()),A},d.prototype.unpipe=function(A){var M=this._readableState,t={hasUnpiped:!1};if(0===M.pipesCount)return this;if(1===M.pipesCount)return A&&A!==M.pipes||(A||(A=M.pipes),M.pipes=null,M.pipesCount=0,M.flowing=!1,A&&A.emit("unpipe",this,t)),this;if(!A){var g=M.pipes,I=M.pipesCount;M.pipes=null,M.pipesCount=0,M.flowing=!1;for(var e=0;e<I;e++)g[e].emit("unpipe",this,{hasUnpiped:!1});return this}var i=b(M.pipes,A);return-1===i||(M.pipes.splice(i,1),M.pipesCount-=1,1===M.pipesCount&&(M.pipes=M.pipes[0]),A.emit("unpipe",this,t)),this},d.prototype.on=function(A,M){var t=i.prototype.on.call(this,A,M),I=this._readableState;return"data"===A?(I.readableListening=this.listenerCount("readable")>0,!1!==I.flowing&&this.resume()):"readable"===A&&(I.endEmitted||I.readableListening||(I.readableListening=I.needReadable=!0,I.flowing=!1,I.emittedReadable=!1,N("on readable",I.length,I.reading),I.length?S(this):I.reading||g.nextTick(O,this))),t},d.prototype.addListener=d.prototype.on,d.prototype.removeListener=function(A,M){var t=i.prototype.removeListener.call(this,A,M);return"readable"===A&&g.nextTick(f,this),t},d.prototype.removeAllListeners=function(A){var M=i.prototype.removeAllListeners.apply(this,arguments);return"readable"!==A&&void 0!==A||g.nextTick(f,this),M},d.prototype.resume=function(){var A=this._readableState;return A.flowing||(N("resume"),A.flowing=!A.readableListening,function(A,M){M.resumeScheduled||(M.resumeScheduled=!0,g.nextTick(F,A,M))}(this,A)),A.paused=!1,this},d.prototype.pause=function(){return N("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(N("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},d.prototype.wrap=function(A){var M=this,t=this._readableState,g=!1;for(var I in A.on("end",(function(){if(N("wrapped end"),t.decoder&&!t.ended){var A=t.decoder.end();A&&A.length&&M.push(A)}M.push(null)})),A.on("data",(function(I){(N("wrapped data"),t.decoder&&(I=t.decoder.write(I)),t.objectMode&&null==I)||(t.objectMode||I&&I.length)&&(M.push(I)||(g=!0,A.pause()))})),A)void 0===this[I]&&"function"==typeof A[I]&&(this[I]=function(M){return function(){return A[M].apply(A,arguments)}}(I));for(var e=0;e<j.length;e++)A.on(j[e],this.emit.bind(this,j[e]));return this._read=function(M){N("wrapped _read",M),g&&(g=!1,A.resume())},this},"function"==typeof Symbol&&(d.prototype[Symbol.asyncIterator]=function(){return void 0===C&&(C=t(127)),C(this)}),Object.defineProperty(d.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(d.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(d.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(A){this._readableState&&(this._readableState.flowing=A)}}),d._fromList=R,Object.defineProperty(d.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),"function"==typeof Symbol&&(d.from=function(A,M){return void 0===r&&(r=t(128)),r(d,A,M)})}).call(this,t(10),t(8))},function(A,M,t){A.exports=t(7).EventEmitter},function(A,M,t){"use strict";(function(M){function t(A,M){I(A,M),g(A)}function g(A){A._writableState&&!A._writableState.emitClose||A._readableState&&!A._readableState.emitClose||A.emit("close")}function I(A,M){A.emit("error",M)}A.exports={destroy:function(A,e){var i=this,T=this._readableState&&this._readableState.destroyed,E=this._writableState&&this._writableState.destroyed;return T||E?(e?e(A):A&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,M.nextTick(I,this,A)):M.nextTick(I,this,A)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(A||null,(function(A){!e&&A?i._writableState?i._writableState.errorEmitted?M.nextTick(g,i):(i._writableState.errorEmitted=!0,M.nextTick(t,i,A)):M.nextTick(t,i,A):e?(M.nextTick(g,i),e(A)):M.nextTick(g,i)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(A,M){var t=A._readableState,g=A._writableState;t&&t.autoDestroy||g&&g.autoDestroy?A.destroy(M):A.emit("error",M)}}}).call(this,t(8))},function(A,M,t){"use strict";var g=t(19).codes.ERR_INVALID_OPT_VALUE;A.exports={getHighWaterMark:function(A,M,t,I){var e=function(A,M,t){return null!=A.highWaterMark?A.highWaterMark:M?A[t]:null}(M,I,t);if(null!=e){if(!isFinite(e)||Math.floor(e)!==e||e<0)throw new g(I?t:"highWaterMark",e);return Math.floor(e)}return A.objectMode?16:16384}}},function(A,M,t){"use strict";(function(M,g){function I(A){var M=this;this.next=null,this.entry=null,this.finish=function(){!function(A,M,t){var g=A.entry;A.entry=null;for(;g;){var I=g.callback;M.pendingcb--,I(t),g=g.next}M.corkedRequestsFree.next=A}(M,A)}}var e;A.exports=d,d.WritableState=L;var i={deprecate:t(68)},T=t(64),E=t(9).Buffer,N=M.Uint8Array||function(){};var n,D=t(65),C=t(66).getHighWaterMark,r=t(19).codes,c=r.ERR_INVALID_ARG_TYPE,o=r.ERR_METHOD_NOT_IMPLEMENTED,B=r.ERR_MULTIPLE_CALLBACK,Q=r.ERR_STREAM_CANNOT_PIPE,a=r.ERR_STREAM_DESTROYED,h=r.ERR_STREAM_NULL_VALUES,s=r.ERR_STREAM_WRITE_AFTER_END,y=r.ERR_UNKNOWN_ENCODING,w=D.errorOrDestroy;function j(){}function L(A,M,i){e=e||t(20),A=A||{},"boolean"!=typeof i&&(i=M instanceof e),this.objectMode=!!A.objectMode,i&&(this.objectMode=this.objectMode||!!A.writableObjectMode),this.highWaterMark=C(this,A,"writableHighWaterMark",i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var T=!1===A.decodeStrings;this.decodeStrings=!T,this.defaultEncoding=A.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(A){!function(A,M){var t=A._writableState,I=t.sync,e=t.writecb;if("function"!=typeof e)throw new B;if(function(A){A.writing=!1,A.writecb=null,A.length-=A.writelen,A.writelen=0}(t),M)!function(A,M,t,I,e){--M.pendingcb,t?(g.nextTick(e,I),g.nextTick(z,A,M),A._writableState.errorEmitted=!0,w(A,I)):(e(I),A._writableState.errorEmitted=!0,w(A,I),z(A,M))}(A,t,I,M,e);else{var i=S(t)||A.destroyed;i||t.corked||t.bufferProcessing||!t.bufferedRequest||u(A,t),I?g.nextTick(Y,A,t,i,e):Y(A,t,i,e)}}(M,A)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==A.emitClose,this.autoDestroy=!!A.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new I(this)}function d(A){var M=this instanceof(e=e||t(20));if(!M&&!n.call(d,this))return new d(A);this._writableState=new L(A,this,M),this.writable=!0,A&&("function"==typeof A.write&&(this._write=A.write),"function"==typeof A.writev&&(this._writev=A.writev),"function"==typeof A.destroy&&(this._destroy=A.destroy),"function"==typeof A.final&&(this._final=A.final)),T.call(this)}function x(A,M,t,g,I,e,i){M.writelen=g,M.writecb=i,M.writing=!0,M.sync=!0,M.destroyed?M.onwrite(new a("write")):t?A._writev(I,M.onwrite):A._write(I,e,M.onwrite),M.sync=!1}function Y(A,M,t,g){t||function(A,M){0===M.length&&M.needDrain&&(M.needDrain=!1,A.emit("drain"))}(A,M),M.pendingcb--,g(),z(A,M)}function u(A,M){M.bufferProcessing=!0;var t=M.bufferedRequest;if(A._writev&&t&&t.next){var g=M.bufferedRequestCount,e=new Array(g),i=M.corkedRequestsFree;i.entry=t;for(var T=0,E=!0;t;)e[T]=t,t.isBuf||(E=!1),t=t.next,T+=1;e.allBuffers=E,x(A,M,!0,M.length,e,"",i.finish),M.pendingcb++,M.lastBufferedRequest=null,i.next?(M.corkedRequestsFree=i.next,i.next=null):M.corkedRequestsFree=new I(M),M.bufferedRequestCount=0}else{for(;t;){var N=t.chunk,n=t.encoding,D=t.callback;if(x(A,M,!1,M.objectMode?1:N.length,N,n,D),t=t.next,M.bufferedRequestCount--,M.writing)break}null===t&&(M.lastBufferedRequest=null)}M.bufferedRequest=t,M.bufferProcessing=!1}function S(A){return A.ending&&0===A.length&&null===A.bufferedRequest&&!A.finished&&!A.writing}function l(A,M){A._final((function(t){M.pendingcb--,t&&w(A,t),M.prefinished=!0,A.emit("prefinish"),z(A,M)}))}function z(A,M){var t=S(M);if(t&&(function(A,M){M.prefinished||M.finalCalled||("function"!=typeof A._final||M.destroyed?(M.prefinished=!0,A.emit("prefinish")):(M.pendingcb++,M.finalCalled=!0,g.nextTick(l,A,M)))}(A,M),0===M.pendingcb&&(M.finished=!0,A.emit("finish"),M.autoDestroy))){var I=A._readableState;(!I||I.autoDestroy&&I.endEmitted)&&A.destroy()}return t}t(3)(d,T),L.prototype.getBuffer=function(){for(var A=this.bufferedRequest,M=[];A;)M.push(A),A=A.next;return M},function(){try{Object.defineProperty(L.prototype,"buffer",{get:i.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(A){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(n=Function.prototype[Symbol.hasInstance],Object.defineProperty(d,Symbol.hasInstance,{value:function(A){return!!n.call(this,A)||this===d&&(A&&A._writableState instanceof L)}})):n=function(A){return A instanceof this},d.prototype.pipe=function(){w(this,new Q)},d.prototype.write=function(A,M,t){var I,e=this._writableState,i=!1,T=!e.objectMode&&(I=A,E.isBuffer(I)||I instanceof N);return T&&!E.isBuffer(A)&&(A=function(A){return E.from(A)}(A)),"function"==typeof M&&(t=M,M=null),T?M="buffer":M||(M=e.defaultEncoding),"function"!=typeof t&&(t=j),e.ending?function(A,M){var t=new s;w(A,t),g.nextTick(M,t)}(this,t):(T||function(A,M,t,I){var e;return null===t?e=new h:"string"==typeof t||M.objectMode||(e=new c("chunk",["string","Buffer"],t)),!e||(w(A,e),g.nextTick(I,e),!1)}(this,e,A,t))&&(e.pendingcb++,i=function(A,M,t,g,I,e){if(!t){var i=function(A,M,t){A.objectMode||!1===A.decodeStrings||"string"!=typeof M||(M=E.from(M,t));return M}(M,g,I);g!==i&&(t=!0,I="buffer",g=i)}var T=M.objectMode?1:g.length;M.length+=T;var N=M.length<M.highWaterMark;N||(M.needDrain=!0);if(M.writing||M.corked){var n=M.lastBufferedRequest;M.lastBufferedRequest={chunk:g,encoding:I,isBuf:t,callback:e,next:null},n?n.next=M.lastBufferedRequest:M.bufferedRequest=M.lastBufferedRequest,M.bufferedRequestCount+=1}else x(A,M,!1,T,g,I,e);return N}(this,e,T,A,M,t)),i},d.prototype.cork=function(){this._writableState.corked++},d.prototype.uncork=function(){var A=this._writableState;A.corked&&(A.corked--,A.writing||A.corked||A.bufferProcessing||!A.bufferedRequest||u(this,A))},d.prototype.setDefaultEncoding=function(A){if("string"==typeof A&&(A=A.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((A+"").toLowerCase())>-1))throw new y(A);return this._writableState.defaultEncoding=A,this},Object.defineProperty(d.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(d.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),d.prototype._write=function(A,M,t){t(new o("_write()"))},d.prototype._writev=null,d.prototype.end=function(A,M,t){var I=this._writableState;return"function"==typeof A?(t=A,A=null,M=null):"function"==typeof M&&(t=M,M=null),null!=A&&this.write(A,M),I.corked&&(I.corked=1,this.uncork()),I.ending||function(A,M,t){M.ending=!0,z(A,M),t&&(M.finished?g.nextTick(t):A.once("finish",t));M.ended=!0,A.writable=!1}(this,I,t),this},Object.defineProperty(d.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(d.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(A){this._writableState&&(this._writableState.destroyed=A)}}),d.prototype.destroy=D.destroy,d.prototype._undestroy=D.undestroy,d.prototype._destroy=function(A,M){M(A)}}).call(this,t(10),t(8))},function(A,M,t){(function(M){function t(A){try{if(!M.localStorage)return!1}catch(A){return!1}var t=M.localStorage[A];return null!=t&&"true"===String(t).toLowerCase()}A.exports=function(A,M){if(t("noDeprecation"))return A;var g=!1;return function(){if(!g){if(t("throwDeprecation"))throw new Error(M);t("traceDeprecation")?console.trace(M):console.warn(M),g=!0}return A.apply(this,arguments)}}}).call(this,t(10))},function(A,M,t){"use strict";A.exports=n;var g=t(19).codes,I=g.ERR_METHOD_NOT_IMPLEMENTED,e=g.ERR_MULTIPLE_CALLBACK,i=g.ERR_TRANSFORM_ALREADY_TRANSFORMING,T=g.ERR_TRANSFORM_WITH_LENGTH_0,E=t(20);function N(A,M){var t=this._transformState;t.transforming=!1;var g=t.writecb;if(null===g)return this.emit("error",new e);t.writechunk=null,t.writecb=null,null!=M&&this.push(M),g(A);var I=this._readableState;I.reading=!1,(I.needReadable||I.length<I.highWaterMark)&&this._read(I.highWaterMark)}function n(A){if(!(this instanceof n))return new n(A);E.call(this,A),this._transformState={afterTransform:N.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,A&&("function"==typeof A.transform&&(this._transform=A.transform),"function"==typeof A.flush&&(this._flush=A.flush)),this.on("prefinish",D)}function D(){var A=this;"function"!=typeof this._flush||this._readableState.destroyed?C(this,null,null):this._flush((function(M,t){C(A,M,t)}))}function C(A,M,t){if(M)return A.emit("error",M);if(null!=t&&A.push(t),A._writableState.length)throw new T;if(A._transformState.transforming)throw new i;return A.push(null)}t(3)(n,E),n.prototype.push=function(A,M){return this._transformState.needTransform=!1,E.prototype.push.call(this,A,M)},n.prototype._transform=function(A,M,t){t(new I("_transform()"))},n.prototype._write=function(A,M,t){var g=this._transformState;if(g.writecb=t,g.writechunk=A,g.writeencoding=M,!g.transforming){var I=this._readableState;(g.needTransform||I.needReadable||I.length<I.highWaterMark)&&this._read(I.highWaterMark)}},n.prototype._read=function(A){var M=this._transformState;null===M.writechunk||M.transforming?M.needTransform=!0:(M.transforming=!0,this._transform(M.writechunk,M.writeencoding,M.afterTransform))},n.prototype._destroy=function(A,M){E.prototype._destroy.call(this,A,(function(A){M(A)}))}},function(A,M,t){var g=t(3),I=t(21),e=t(4).Buffer,i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],T=new Array(64);function E(){this.init(),this._w=T,I.call(this,64,56)}function N(A,M,t){return t^A&(M^t)}function n(A,M,t){return A&M|t&(A|M)}function D(A){return(A>>>2|A<<30)^(A>>>13|A<<19)^(A>>>22|A<<10)}function C(A){return(A>>>6|A<<26)^(A>>>11|A<<21)^(A>>>25|A<<7)}function r(A){return(A>>>7|A<<25)^(A>>>18|A<<14)^A>>>3}g(E,I),E.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},E.prototype._update=function(A){for(var M,t=this._w,g=0|this._a,I=0|this._b,e=0|this._c,T=0|this._d,E=0|this._e,c=0|this._f,o=0|this._g,B=0|this._h,Q=0;Q<16;++Q)t[Q]=A.readInt32BE(4*Q);for(;Q<64;++Q)t[Q]=0|(((M=t[Q-2])>>>17|M<<15)^(M>>>19|M<<13)^M>>>10)+t[Q-7]+r(t[Q-15])+t[Q-16];for(var a=0;a<64;++a){var h=B+C(E)+N(E,c,o)+i[a]+t[a]|0,s=D(g)+n(g,I,e)|0;B=o,o=c,c=E,E=T+h|0,T=e,e=I,I=g,g=h+s|0}this._a=g+this._a|0,this._b=I+this._b|0,this._c=e+this._c|0,this._d=T+this._d|0,this._e=E+this._e|0,this._f=c+this._f|0,this._g=o+this._g|0,this._h=B+this._h|0},E.prototype._hash=function(){var A=e.allocUnsafe(32);return A.writeInt32BE(this._a,0),A.writeInt32BE(this._b,4),A.writeInt32BE(this._c,8),A.writeInt32BE(this._d,12),A.writeInt32BE(this._e,16),A.writeInt32BE(this._f,20),A.writeInt32BE(this._g,24),A.writeInt32BE(this._h,28),A},A.exports=E},function(A,M,t){var g=t(3),I=t(21),e=t(4).Buffer,i=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],T=new Array(160);function E(){this.init(),this._w=T,I.call(this,128,112)}function N(A,M,t){return t^A&(M^t)}function n(A,M,t){return A&M|t&(A|M)}function D(A,M){return(A>>>28|M<<4)^(M>>>2|A<<30)^(M>>>7|A<<25)}function C(A,M){return(A>>>14|M<<18)^(A>>>18|M<<14)^(M>>>9|A<<23)}function r(A,M){return(A>>>1|M<<31)^(A>>>8|M<<24)^A>>>7}function c(A,M){return(A>>>1|M<<31)^(A>>>8|M<<24)^(A>>>7|M<<25)}function o(A,M){return(A>>>19|M<<13)^(M>>>29|A<<3)^A>>>6}function B(A,M){return(A>>>19|M<<13)^(M>>>29|A<<3)^(A>>>6|M<<26)}function Q(A,M){return A>>>0<M>>>0?1:0}g(E,I),E.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},E.prototype._update=function(A){for(var M=this._w,t=0|this._ah,g=0|this._bh,I=0|this._ch,e=0|this._dh,T=0|this._eh,E=0|this._fh,a=0|this._gh,h=0|this._hh,s=0|this._al,y=0|this._bl,w=0|this._cl,j=0|this._dl,L=0|this._el,d=0|this._fl,x=0|this._gl,Y=0|this._hl,u=0;u<32;u+=2)M[u]=A.readInt32BE(4*u),M[u+1]=A.readInt32BE(4*u+4);for(;u<160;u+=2){var S=M[u-30],l=M[u-30+1],z=r(S,l),U=c(l,S),f=o(S=M[u-4],l=M[u-4+1]),O=B(l,S),F=M[u-14],m=M[u-14+1],R=M[u-32],k=M[u-32+1],p=U+m|0,b=z+F+Q(p,U)|0;b=(b=b+f+Q(p=p+O|0,O)|0)+R+Q(p=p+k|0,k)|0,M[u]=b,M[u+1]=p}for(var G=0;G<160;G+=2){b=M[G],p=M[G+1];var J=n(t,g,I),H=n(s,y,w),X=D(t,s),v=D(s,t),V=C(T,L),W=C(L,T),P=i[G],Z=i[G+1],K=N(T,E,a),q=N(L,d,x),_=Y+W|0,$=h+V+Q(_,Y)|0;$=($=($=$+K+Q(_=_+q|0,q)|0)+P+Q(_=_+Z|0,Z)|0)+b+Q(_=_+p|0,p)|0;var AA=v+H|0,MA=X+J+Q(AA,v)|0;h=a,Y=x,a=E,x=d,E=T,d=L,T=e+$+Q(L=j+_|0,j)|0,e=I,j=w,I=g,w=y,g=t,y=s,t=$+MA+Q(s=_+AA|0,_)|0}this._al=this._al+s|0,this._bl=this._bl+y|0,this._cl=this._cl+w|0,this._dl=this._dl+j|0,this._el=this._el+L|0,this._fl=this._fl+d|0,this._gl=this._gl+x|0,this._hl=this._hl+Y|0,this._ah=this._ah+t+Q(this._al,s)|0,this._bh=this._bh+g+Q(this._bl,y)|0,this._ch=this._ch+I+Q(this._cl,w)|0,this._dh=this._dh+e+Q(this._dl,j)|0,this._eh=this._eh+T+Q(this._el,L)|0,this._fh=this._fh+E+Q(this._fl,d)|0,this._gh=this._gh+a+Q(this._gl,x)|0,this._hh=this._hh+h+Q(this._hl,Y)|0},E.prototype._hash=function(){var A=e.allocUnsafe(64);function M(M,t,g){A.writeInt32BE(M,g),A.writeInt32BE(t,g+4)}return M(this._ah,this._al,0),M(this._bh,this._bl,8),M(this._ch,this._cl,16),M(this._dh,this._dl,24),M(this._eh,this._el,32),M(this._fh,this._fl,40),M(this._gh,this._gl,48),M(this._hh,this._hl,56),A},A.exports=E},function(A,M,t){"use strict";(function(M,g){var I=t(31);A.exports=h;var e,i=t(59);h.ReadableState=a;t(7).EventEmitter;var T=function(A,M){return A.listeners(M).length},E=t(73),N=t(42).Buffer,n=M.Uint8Array||function(){};var D=Object.create(t(25));D.inherits=t(3);var C=t(136),r=void 0;r=C&&C.debuglog?C.debuglog("stream"):function(){};var c,o=t(137),B=t(74);D.inherits(h,E);var Q=["error","close","destroy","pause","resume"];function a(A,M){A=A||{};var g=M instanceof(e=e||t(16));this.objectMode=!!A.objectMode,g&&(this.objectMode=this.objectMode||!!A.readableObjectMode);var I=A.highWaterMark,i=A.readableHighWaterMark,T=this.objectMode?16:16384;this.highWaterMark=I||0===I?I:g&&(i||0===i)?i:T,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new o,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=A.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,A.encoding&&(c||(c=t(24).StringDecoder),this.decoder=new c(A.encoding),this.encoding=A.encoding)}function h(A){if(e=e||t(16),!(this instanceof h))return new h(A);this._readableState=new a(A,this),this.readable=!0,A&&("function"==typeof A.read&&(this._read=A.read),"function"==typeof A.destroy&&(this._destroy=A.destroy)),E.call(this)}function s(A,M,t,g,I){var e,i=A._readableState;null===M?(i.reading=!1,function(A,M){if(M.ended)return;if(M.decoder){var t=M.decoder.end();t&&t.length&&(M.buffer.push(t),M.length+=M.objectMode?1:t.length)}M.ended=!0,j(A)}(A,i)):(I||(e=function(A,M){var t;g=M,N.isBuffer(g)||g instanceof n||"string"==typeof M||void 0===M||A.objectMode||(t=new TypeError("Invalid non-string/buffer chunk"));var g;return t}(i,M)),e?A.emit("error",e):i.objectMode||M&&M.length>0?("string"==typeof M||i.objectMode||Object.getPrototypeOf(M)===N.prototype||(M=function(A){return N.from(A)}(M)),g?i.endEmitted?A.emit("error",new Error("stream.unshift() after end event")):y(A,i,M,!0):i.ended?A.emit("error",new Error("stream.push() after EOF")):(i.reading=!1,i.decoder&&!t?(M=i.decoder.write(M),i.objectMode||0!==M.length?y(A,i,M,!1):d(A,i)):y(A,i,M,!1))):g||(i.reading=!1));return function(A){return!A.ended&&(A.needReadable||A.length<A.highWaterMark||0===A.length)}(i)}function y(A,M,t,g){M.flowing&&0===M.length&&!M.sync?(A.emit("data",t),A.read(0)):(M.length+=M.objectMode?1:t.length,g?M.buffer.unshift(t):M.buffer.push(t),M.needReadable&&j(A)),d(A,M)}Object.defineProperty(h.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(A){this._readableState&&(this._readableState.destroyed=A)}}),h.prototype.destroy=B.destroy,h.prototype._undestroy=B.undestroy,h.prototype._destroy=function(A,M){this.push(null),M(A)},h.prototype.push=function(A,M){var t,g=this._readableState;return g.objectMode?t=!0:"string"==typeof A&&((M=M||g.defaultEncoding)!==g.encoding&&(A=N.from(A,M),M=""),t=!0),s(this,A,M,!1,t)},h.prototype.unshift=function(A){return s(this,A,null,!0,!1)},h.prototype.isPaused=function(){return!1===this._readableState.flowing},h.prototype.setEncoding=function(A){return c||(c=t(24).StringDecoder),this._readableState.decoder=new c(A),this._readableState.encoding=A,this};function w(A,M){return A<=0||0===M.length&&M.ended?0:M.objectMode?1:A!=A?M.flowing&&M.length?M.buffer.head.data.length:M.length:(A>M.highWaterMark&&(M.highWaterMark=function(A){return A>=8388608?A=8388608:(A--,A|=A>>>1,A|=A>>>2,A|=A>>>4,A|=A>>>8,A|=A>>>16,A++),A}(A)),A<=M.length?A:M.ended?M.length:(M.needReadable=!0,0))}function j(A){var M=A._readableState;M.needReadable=!1,M.emittedReadable||(r("emitReadable",M.flowing),M.emittedReadable=!0,M.sync?I.nextTick(L,A):L(A))}function L(A){r("emit readable"),A.emit("readable"),S(A)}function d(A,M){M.readingMore||(M.readingMore=!0,I.nextTick(x,A,M))}function x(A,M){for(var t=M.length;!M.reading&&!M.flowing&&!M.ended&&M.length<M.highWaterMark&&(r("maybeReadMore read 0"),A.read(0),t!==M.length);)t=M.length;M.readingMore=!1}function Y(A){r("readable nexttick read 0"),A.read(0)}function u(A,M){M.reading||(r("resume read 0"),A.read(0)),M.resumeScheduled=!1,M.awaitDrain=0,A.emit("resume"),S(A),M.flowing&&!M.reading&&A.read(0)}function S(A){var M=A._readableState;for(r("flow",M.flowing);M.flowing&&null!==A.read(););}function l(A,M){return 0===M.length?null:(M.objectMode?t=M.buffer.shift():!A||A>=M.length?(t=M.decoder?M.buffer.join(""):1===M.buffer.length?M.buffer.head.data:M.buffer.concat(M.length),M.buffer.clear()):t=function(A,M,t){var g;A<M.head.data.length?(g=M.head.data.slice(0,A),M.head.data=M.head.data.slice(A)):g=A===M.head.data.length?M.shift():t?function(A,M){var t=M.head,g=1,I=t.data;A-=I.length;for(;t=t.next;){var e=t.data,i=A>e.length?e.length:A;if(i===e.length?I+=e:I+=e.slice(0,A),0===(A-=i)){i===e.length?(++g,t.next?M.head=t.next:M.head=M.tail=null):(M.head=t,t.data=e.slice(i));break}++g}return M.length-=g,I}(A,M):function(A,M){var t=N.allocUnsafe(A),g=M.head,I=1;g.data.copy(t),A-=g.data.length;for(;g=g.next;){var e=g.data,i=A>e.length?e.length:A;if(e.copy(t,t.length-A,0,i),0===(A-=i)){i===e.length?(++I,g.next?M.head=g.next:M.head=M.tail=null):(M.head=g,g.data=e.slice(i));break}++I}return M.length-=I,t}(A,M);return g}(A,M.buffer,M.decoder),t);var t}function z(A){var M=A._readableState;if(M.length>0)throw new Error('"endReadable()" called on non-empty stream');M.endEmitted||(M.ended=!0,I.nextTick(U,M,A))}function U(A,M){A.endEmitted||0!==A.length||(A.endEmitted=!0,M.readable=!1,M.emit("end"))}function f(A,M){for(var t=0,g=A.length;t<g;t++)if(A[t]===M)return t;return-1}h.prototype.read=function(A){r("read",A),A=parseInt(A,10);var M=this._readableState,t=A;if(0!==A&&(M.emittedReadable=!1),0===A&&M.needReadable&&(M.length>=M.highWaterMark||M.ended))return r("read: emitReadable",M.length,M.ended),0===M.length&&M.ended?z(this):j(this),null;if(0===(A=w(A,M))&&M.ended)return 0===M.length&&z(this),null;var g,I=M.needReadable;return r("need readable",I),(0===M.length||M.length-A<M.highWaterMark)&&r("length less than watermark",I=!0),M.ended||M.reading?r("reading or ended",I=!1):I&&(r("do read"),M.reading=!0,M.sync=!0,0===M.length&&(M.needReadable=!0),this._read(M.highWaterMark),M.sync=!1,M.reading||(A=w(t,M))),null===(g=A>0?l(A,M):null)?(M.needReadable=!0,A=0):M.length-=A,0===M.length&&(M.ended||(M.needReadable=!0),t!==A&&M.ended&&z(this)),null!==g&&this.emit("data",g),g},h.prototype._read=function(A){this.emit("error",new Error("_read() is not implemented"))},h.prototype.pipe=function(A,M){var t=this,e=this._readableState;switch(e.pipesCount){case 0:e.pipes=A;break;case 1:e.pipes=[e.pipes,A];break;default:e.pipes.push(A)}e.pipesCount+=1,r("pipe count=%d opts=%j",e.pipesCount,M);var E=(!M||!1!==M.end)&&A!==g.stdout&&A!==g.stderr?n:h;function N(M,g){r("onunpipe"),M===t&&g&&!1===g.hasUnpiped&&(g.hasUnpiped=!0,r("cleanup"),A.removeListener("close",Q),A.removeListener("finish",a),A.removeListener("drain",D),A.removeListener("error",B),A.removeListener("unpipe",N),t.removeListener("end",n),t.removeListener("end",h),t.removeListener("data",o),C=!0,!e.awaitDrain||A._writableState&&!A._writableState.needDrain||D())}function n(){r("onend"),A.end()}e.endEmitted?I.nextTick(E):t.once("end",E),A.on("unpipe",N);var D=function(A){return function(){var M=A._readableState;r("pipeOnDrain",M.awaitDrain),M.awaitDrain&&M.awaitDrain--,0===M.awaitDrain&&T(A,"data")&&(M.flowing=!0,S(A))}}(t);A.on("drain",D);var C=!1;var c=!1;function o(M){r("ondata"),c=!1,!1!==A.write(M)||c||((1===e.pipesCount&&e.pipes===A||e.pipesCount>1&&-1!==f(e.pipes,A))&&!C&&(r("false write response, pause",t._readableState.awaitDrain),t._readableState.awaitDrain++,c=!0),t.pause())}function B(M){r("onerror",M),h(),A.removeListener("error",B),0===T(A,"error")&&A.emit("error",M)}function Q(){A.removeListener("finish",a),h()}function a(){r("onfinish"),A.removeListener("close",Q),h()}function h(){r("unpipe"),t.unpipe(A)}return t.on("data",o),function(A,M,t){if("function"==typeof A.prependListener)return A.prependListener(M,t);A._events&&A._events[M]?i(A._events[M])?A._events[M].unshift(t):A._events[M]=[t,A._events[M]]:A.on(M,t)}(A,"error",B),A.once("close",Q),A.once("finish",a),A.emit("pipe",t),e.flowing||(r("pipe resume"),t.resume()),A},h.prototype.unpipe=function(A){var M=this._readableState,t={hasUnpiped:!1};if(0===M.pipesCount)return this;if(1===M.pipesCount)return A&&A!==M.pipes||(A||(A=M.pipes),M.pipes=null,M.pipesCount=0,M.flowing=!1,A&&A.emit("unpipe",this,t)),this;if(!A){var g=M.pipes,I=M.pipesCount;M.pipes=null,M.pipesCount=0,M.flowing=!1;for(var e=0;e<I;e++)g[e].emit("unpipe",this,t);return this}var i=f(M.pipes,A);return-1===i||(M.pipes.splice(i,1),M.pipesCount-=1,1===M.pipesCount&&(M.pipes=M.pipes[0]),A.emit("unpipe",this,t)),this},h.prototype.on=function(A,M){var t=E.prototype.on.call(this,A,M);if("data"===A)!1!==this._readableState.flowing&&this.resume();else if("readable"===A){var g=this._readableState;g.endEmitted||g.readableListening||(g.readableListening=g.needReadable=!0,g.emittedReadable=!1,g.reading?g.length&&j(this):I.nextTick(Y,this))}return t},h.prototype.addListener=h.prototype.on,h.prototype.resume=function(){var A=this._readableState;return A.flowing||(r("resume"),A.flowing=!0,function(A,M){M.resumeScheduled||(M.resumeScheduled=!0,I.nextTick(u,A,M))}(this,A)),this},h.prototype.pause=function(){return r("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(r("pause"),this._readableState.flowing=!1,this.emit("pause")),this},h.prototype.wrap=function(A){var M=this,t=this._readableState,g=!1;for(var I in A.on("end",(function(){if(r("wrapped end"),t.decoder&&!t.ended){var A=t.decoder.end();A&&A.length&&M.push(A)}M.push(null)})),A.on("data",(function(I){(r("wrapped data"),t.decoder&&(I=t.decoder.write(I)),t.objectMode&&null==I)||(t.objectMode||I&&I.length)&&(M.push(I)||(g=!0,A.pause()))})),A)void 0===this[I]&&"function"==typeof A[I]&&(this[I]=function(M){return function(){return A[M].apply(A,arguments)}}(I));for(var e=0;e<Q.length;e++)A.on(Q[e],this.emit.bind(this,Q[e]));return this._read=function(M){r("wrapped _read",M),g&&(g=!1,A.resume())},this},Object.defineProperty(h.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),h._fromList=l}).call(this,t(10),t(8))},function(A,M,t){A.exports=t(7).EventEmitter},function(A,M,t){"use strict";var g=t(31);function I(A,M){A.emit("error",M)}A.exports={destroy:function(A,M){var t=this,e=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return e||i?(M?M(A):!A||this._writableState&&this._writableState.errorEmitted||g.nextTick(I,this,A),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(A||null,(function(A){!M&&A?(g.nextTick(I,t,A),t._writableState&&(t._writableState.errorEmitted=!0)):M&&M(A)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(A,M,t){"use strict";A.exports=i;var g=t(16),I=Object.create(t(25));function e(A,M){var t=this._transformState;t.transforming=!1;var g=t.writecb;if(!g)return this.emit("error",new Error("write callback called multiple times"));t.writechunk=null,t.writecb=null,null!=M&&this.push(M),g(A);var I=this._readableState;I.reading=!1,(I.needReadable||I.length<I.highWaterMark)&&this._read(I.highWaterMark)}function i(A){if(!(this instanceof i))return new i(A);g.call(this,A),this._transformState={afterTransform:e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,A&&("function"==typeof A.transform&&(this._transform=A.transform),"function"==typeof A.flush&&(this._flush=A.flush)),this.on("prefinish",T)}function T(){var A=this;"function"==typeof this._flush?this._flush((function(M,t){E(A,M,t)})):E(this,null,null)}function E(A,M,t){if(M)return A.emit("error",M);if(null!=t&&A.push(t),A._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(A._transformState.transforming)throw new Error("Calling transform done when still transforming");return A.push(null)}I.inherits=t(3),I.inherits(i,g),i.prototype.push=function(A,M){return this._transformState.needTransform=!1,g.prototype.push.call(this,A,M)},i.prototype._transform=function(A,M,t){throw new Error("_transform() is not implemented")},i.prototype._write=function(A,M,t){var g=this._transformState;if(g.writecb=t,g.writechunk=A,g.writeencoding=M,!g.transforming){var I=this._readableState;(g.needTransform||I.needReadable||I.length<I.highWaterMark)&&this._read(I.highWaterMark)}},i.prototype._read=function(A){var M=this._transformState;null!==M.writechunk&&M.writecb&&!M.transforming?(M.transforming=!0,this._transform(M.writechunk,M.writeencoding,M.afterTransform)):M.needTransform=!0},i.prototype._destroy=function(A,M){var t=this;g.prototype._destroy.call(this,A,(function(A){M(A),t.emit("close")}))}},function(A,M,t){"use strict";var g=t(3),I=t(146),e=t(15),i=t(4).Buffer,T=t(77),E=t(39),N=t(40),n=i.alloc(128);function D(A,M){e.call(this,"digest"),"string"==typeof M&&(M=i.from(M));var t="sha512"===A||"sha384"===A?128:64;(this._alg=A,this._key=M,M.length>t)?M=("rmd160"===A?new E:N(A)).update(M).digest():M.length<t&&(M=i.concat([M,n],t));for(var g=this._ipad=i.allocUnsafe(t),I=this._opad=i.allocUnsafe(t),T=0;T<t;T++)g[T]=54^M[T],I[T]=92^M[T];this._hash="rmd160"===A?new E:N(A),this._hash.update(g)}g(D,e),D.prototype._update=function(A){this._hash.update(A)},D.prototype._final=function(){var A=this._hash.digest();return("rmd160"===this._alg?new E:N(this._alg)).update(this._opad).update(A).digest()},A.exports=function(A,M){return"rmd160"===(A=A.toLowerCase())||"ripemd160"===A?new D("rmd160",M):"md5"===A?new I(T,M):new D(A,M)}},function(A,M,t){var g=t(37);A.exports=function(A){return(new g).update(A).digest()}},function(A){A.exports=JSON.parse('{"sha224WithRSAEncryption":{"sign":"rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"RSA-SHA224":{"sign":"ecdsa/rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"sha256WithRSAEncryption":{"sign":"rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"RSA-SHA256":{"sign":"ecdsa/rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"sha384WithRSAEncryption":{"sign":"rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"RSA-SHA384":{"sign":"ecdsa/rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"sha512WithRSAEncryption":{"sign":"rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA512":{"sign":"ecdsa/rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA1":{"sign":"rsa","hash":"sha1","id":"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{"sign":"ecdsa","hash":"sha1","id":""},"sha256":{"sign":"ecdsa","hash":"sha256","id":""},"sha224":{"sign":"ecdsa","hash":"sha224","id":""},"sha384":{"sign":"ecdsa","hash":"sha384","id":""},"sha512":{"sign":"ecdsa","hash":"sha512","id":""},"DSA-SHA":{"sign":"dsa","hash":"sha1","id":""},"DSA-SHA1":{"sign":"dsa","hash":"sha1","id":""},"DSA":{"sign":"dsa","hash":"sha1","id":""},"DSA-WITH-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-WITH-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-WITH-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-WITH-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-RIPEMD160":{"sign":"dsa","hash":"rmd160","id":""},"ripemd160WithRSA":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"RSA-RIPEMD160":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"md5WithRSAEncryption":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"},"RSA-MD5":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"}}')},function(A,M,t){M.pbkdf2=t(148),M.pbkdf2Sync=t(82)},function(A,M){var t=Math.pow(2,30)-1;A.exports=function(A,M){if("number"!=typeof A)throw new TypeError("Iterations not a number");if(A<0)throw new TypeError("Bad iterations");if("number"!=typeof M)throw new TypeError("Key length not a number");if(M<0||M>t||M!=M)throw new TypeError("Bad key length")}},function(A,M,t){(function(M){var t;if(M.browser)t="utf-8";else if(M.version){t=parseInt(M.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary"}else t="utf-8";A.exports=t}).call(this,t(8))},function(A,M,t){var g=t(77),I=t(39),e=t(40),i=t(4).Buffer,T=t(80),E=t(81),N=t(83),n=i.alloc(128),D={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function C(A,M,t){var T=function(A){function M(M){return e(A).update(M).digest()}return"rmd160"===A||"ripemd160"===A?function(A){return(new I).update(A).digest()}:"md5"===A?g:M}(A),E="sha512"===A||"sha384"===A?128:64;M.length>E?M=T(M):M.length<E&&(M=i.concat([M,n],E));for(var N=i.allocUnsafe(E+D[A]),C=i.allocUnsafe(E+D[A]),r=0;r<E;r++)N[r]=54^M[r],C[r]=92^M[r];var c=i.allocUnsafe(E+t+4);N.copy(c,0,0,E),this.ipad1=c,this.ipad2=N,this.opad=C,this.alg=A,this.blocksize=E,this.hash=T,this.size=D[A]}C.prototype.run=function(A,M){return A.copy(M,this.blocksize),this.hash(M).copy(this.opad,this.blocksize),this.hash(this.opad)},A.exports=function(A,M,t,g,I){T(t,g);var e=new C(I=I||"sha1",A=N(A,E,"Password"),(M=N(M,E,"Salt")).length),n=i.allocUnsafe(g),r=i.allocUnsafe(M.length+4);M.copy(r,0,0,M.length);for(var c=0,o=D[I],B=Math.ceil(g/o),Q=1;Q<=B;Q++){r.writeUInt32BE(Q,M.length);for(var a=e.run(r,e.ipad1),h=a,s=1;s<t;s++){h=e.run(h,e.ipad2);for(var y=0;y<o;y++)a[y]^=h[y]}a.copy(n,c),c+=o}return n}},function(A,M,t){var g=t(4).Buffer;A.exports=function(A,M,t){if(g.isBuffer(A))return A;if("string"==typeof A)return g.from(A,M);if(ArrayBuffer.isView(A))return g.from(A.buffer);throw new TypeError(t+" must be a string, a Buffer, a typed array or a DataView")}},function(A,M,t){"use strict";M.readUInt32BE=function(A,M){return(A[0+M]<<24|A[1+M]<<16|A[2+M]<<8|A[3+M])>>>0},M.writeUInt32BE=function(A,M,t){A[0+t]=M>>>24,A[1+t]=M>>>16&255,A[2+t]=M>>>8&255,A[3+t]=255&M},M.ip=function(A,M,t,g){for(var I=0,e=0,i=6;i>=0;i-=2){for(var T=0;T<=24;T+=8)I<<=1,I|=M>>>T+i&1;for(T=0;T<=24;T+=8)I<<=1,I|=A>>>T+i&1}for(i=6;i>=0;i-=2){for(T=1;T<=25;T+=8)e<<=1,e|=M>>>T+i&1;for(T=1;T<=25;T+=8)e<<=1,e|=A>>>T+i&1}t[g+0]=I>>>0,t[g+1]=e>>>0},M.rip=function(A,M,t,g){for(var I=0,e=0,i=0;i<4;i++)for(var T=24;T>=0;T-=8)I<<=1,I|=M>>>T+i&1,I<<=1,I|=A>>>T+i&1;for(i=4;i<8;i++)for(T=24;T>=0;T-=8)e<<=1,e|=M>>>T+i&1,e<<=1,e|=A>>>T+i&1;t[g+0]=I>>>0,t[g+1]=e>>>0},M.pc1=function(A,M,t,g){for(var I=0,e=0,i=7;i>=5;i--){for(var T=0;T<=24;T+=8)I<<=1,I|=M>>T+i&1;for(T=0;T<=24;T+=8)I<<=1,I|=A>>T+i&1}for(T=0;T<=24;T+=8)I<<=1,I|=M>>T+i&1;for(i=1;i<=3;i++){for(T=0;T<=24;T+=8)e<<=1,e|=M>>T+i&1;for(T=0;T<=24;T+=8)e<<=1,e|=A>>T+i&1}for(T=0;T<=24;T+=8)e<<=1,e|=A>>T+i&1;t[g+0]=I>>>0,t[g+1]=e>>>0},M.r28shl=function(A,M){return A<<M&268435455|A>>>28-M};var g=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];M.pc2=function(A,M,t,I){for(var e=0,i=0,T=g.length>>>1,E=0;E<T;E++)e<<=1,e|=A>>>g[E]&1;for(E=T;E<g.length;E++)i<<=1,i|=M>>>g[E]&1;t[I+0]=e>>>0,t[I+1]=i>>>0},M.expand=function(A,M,t){var g=0,I=0;g=(1&A)<<5|A>>>27;for(var e=23;e>=15;e-=4)g<<=6,g|=A>>>e&63;for(e=11;e>=3;e-=4)I|=A>>>e&63,I<<=6;I|=(31&A)<<1|A>>>31,M[t+0]=g>>>0,M[t+1]=I>>>0};var I=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];M.substitute=function(A,M){for(var t=0,g=0;g<4;g++){t<<=4,t|=I[64*g+(A>>>18-6*g&63)]}for(g=0;g<4;g++){t<<=4,t|=I[256+64*g+(M>>>18-6*g&63)]}return t>>>0};var e=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];M.permute=function(A){for(var M=0,t=0;t<e.length;t++)M<<=1,M|=A>>>e[t]&1;return M>>>0},M.padSplit=function(A,M,t){for(var g=A.toString(2);g.length<M;)g="0"+g;for(var I=[],e=0;e<M;e+=t)I.push(g.slice(e,e+t));return I.join(" ")}},function(A,M,t){"use strict";var g=t(11),I=t(3),e=t(84),i=t(44);function T(){this.tmp=new Array(2),this.keys=null}function E(A){i.call(this,A);var M=new T;this._desState=M,this.deriveKeys(M,A.key)}I(E,i),A.exports=E,E.create=function(A){return new E(A)};var N=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];E.prototype.deriveKeys=function(A,M){A.keys=new Array(32),g.equal(M.length,this.blockSize,"Invalid key length");var t=e.readUInt32BE(M,0),I=e.readUInt32BE(M,4);e.pc1(t,I,A.tmp,0),t=A.tmp[0],I=A.tmp[1];for(var i=0;i<A.keys.length;i+=2){var T=N[i>>>1];t=e.r28shl(t,T),I=e.r28shl(I,T),e.pc2(t,I,A.keys,i)}},E.prototype._update=function(A,M,t,g){var I=this._desState,i=e.readUInt32BE(A,M),T=e.readUInt32BE(A,M+4);e.ip(i,T,I.tmp,0),i=I.tmp[0],T=I.tmp[1],"encrypt"===this.type?this._encrypt(I,i,T,I.tmp,0):this._decrypt(I,i,T,I.tmp,0),i=I.tmp[0],T=I.tmp[1],e.writeUInt32BE(t,i,g),e.writeUInt32BE(t,T,g+4)},E.prototype._pad=function(A,M){for(var t=A.length-M,g=M;g<A.length;g++)A[g]=t;return!0},E.prototype._unpad=function(A){for(var M=A[A.length-1],t=A.length-M;t<A.length;t++)g.equal(A[t],M);return A.slice(0,A.length-M)},E.prototype._encrypt=function(A,M,t,g,I){for(var i=M,T=t,E=0;E<A.keys.length;E+=2){var N=A.keys[E],n=A.keys[E+1];e.expand(T,A.tmp,0),N^=A.tmp[0],n^=A.tmp[1];var D=e.substitute(N,n),C=T;T=(i^e.permute(D))>>>0,i=C}e.rip(T,i,g,I)},E.prototype._decrypt=function(A,M,t,g,I){for(var i=t,T=M,E=A.keys.length-2;E>=0;E-=2){var N=A.keys[E],n=A.keys[E+1];e.expand(i,A.tmp,0),N^=A.tmp[0],n^=A.tmp[1];var D=e.substitute(N,n),C=i;i=(T^e.permute(D))>>>0,T=C}e.rip(i,T,g,I)}},function(A,M,t){var g=t(26),I=t(4).Buffer,e=t(87);function i(A){var M=A._cipher.encryptBlockRaw(A._prev);return e(A._prev),M}M.encrypt=function(A,M){var t=Math.ceil(M.length/16),e=A._cache.length;A._cache=I.concat([A._cache,I.allocUnsafe(16*t)]);for(var T=0;T<t;T++){var E=i(A),N=e+16*T;A._cache.writeUInt32BE(E[0],N+0),A._cache.writeUInt32BE(E[1],N+4),A._cache.writeUInt32BE(E[2],N+8),A._cache.writeUInt32BE(E[3],N+12)}var n=A._cache.slice(0,M.length);return A._cache=A._cache.slice(M.length),g(M,n)}},function(A,M){A.exports=function(A){for(var M,t=A.length;t--;){if(255!==(M=A.readUInt8(t))){M++,A.writeUInt8(M,t);break}A.writeUInt8(0,t)}}},function(A){A.exports=JSON.parse('{"aes-128-ecb":{"cipher":"AES","key":128,"iv":0,"mode":"ECB","type":"block"},"aes-192-ecb":{"cipher":"AES","key":192,"iv":0,"mode":"ECB","type":"block"},"aes-256-ecb":{"cipher":"AES","key":256,"iv":0,"mode":"ECB","type":"block"},"aes-128-cbc":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes-192-cbc":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes-256-cbc":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes128":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes192":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes256":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes-128-cfb":{"cipher":"AES","key":128,"iv":16,"mode":"CFB","type":"stream"},"aes-192-cfb":{"cipher":"AES","key":192,"iv":16,"mode":"CFB","type":"stream"},"aes-256-cfb":{"cipher":"AES","key":256,"iv":16,"mode":"CFB","type":"stream"},"aes-128-cfb8":{"cipher":"AES","key":128,"iv":16,"mode":"CFB8","type":"stream"},"aes-192-cfb8":{"cipher":"AES","key":192,"iv":16,"mode":"CFB8","type":"stream"},"aes-256-cfb8":{"cipher":"AES","key":256,"iv":16,"mode":"CFB8","type":"stream"},"aes-128-cfb1":{"cipher":"AES","key":128,"iv":16,"mode":"CFB1","type":"stream"},"aes-192-cfb1":{"cipher":"AES","key":192,"iv":16,"mode":"CFB1","type":"stream"},"aes-256-cfb1":{"cipher":"AES","key":256,"iv":16,"mode":"CFB1","type":"stream"},"aes-128-ofb":{"cipher":"AES","key":128,"iv":16,"mode":"OFB","type":"stream"},"aes-192-ofb":{"cipher":"AES","key":192,"iv":16,"mode":"OFB","type":"stream"},"aes-256-ofb":{"cipher":"AES","key":256,"iv":16,"mode":"OFB","type":"stream"},"aes-128-ctr":{"cipher":"AES","key":128,"iv":16,"mode":"CTR","type":"stream"},"aes-192-ctr":{"cipher":"AES","key":192,"iv":16,"mode":"CTR","type":"stream"},"aes-256-ctr":{"cipher":"AES","key":256,"iv":16,"mode":"CTR","type":"stream"},"aes-128-gcm":{"cipher":"AES","key":128,"iv":12,"mode":"GCM","type":"auth"},"aes-192-gcm":{"cipher":"AES","key":192,"iv":12,"mode":"GCM","type":"auth"},"aes-256-gcm":{"cipher":"AES","key":256,"iv":12,"mode":"GCM","type":"auth"}}')},function(A,M,t){var g=t(32),I=t(4).Buffer,e=t(15),i=t(3),T=t(161),E=t(26),N=t(87);function n(A,M,t,i){e.call(this);var E=I.alloc(4,0);this._cipher=new g.AES(M);var n=this._cipher.encryptBlock(E);this._ghash=new T(n),t=function(A,M,t){if(12===M.length)return A._finID=I.concat([M,I.from([0,0,0,1])]),I.concat([M,I.from([0,0,0,2])]);var g=new T(t),e=M.length,i=e%16;g.update(M),i&&(i=16-i,g.update(I.alloc(i,0))),g.update(I.alloc(8,0));var E=8*e,n=I.alloc(8);n.writeUIntBE(E,0,8),g.update(n),A._finID=g.state;var D=I.from(A._finID);return N(D),D}(this,t,n),this._prev=I.from(t),this._cache=I.allocUnsafe(0),this._secCache=I.allocUnsafe(0),this._decrypt=i,this._alen=0,this._len=0,this._mode=A,this._authTag=null,this._called=!1}i(n,e),n.prototype._update=function(A){if(!this._called&&this._alen){var M=16-this._alen%16;M<16&&(M=I.alloc(M,0),this._ghash.update(M))}this._called=!0;var t=this._mode.encrypt(this,A);return this._decrypt?this._ghash.update(A):this._ghash.update(t),this._len+=A.length,t},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var A=E(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(A,M){var t=0;A.length!==M.length&&t++;for(var g=Math.min(A.length,M.length),I=0;I<g;++I)t+=A[I]^M[I];return t}(A,this._authTag))throw new Error("Unsupported state or unable to authenticate data");this._authTag=A,this._cipher.scrub()},n.prototype.getAuthTag=function(){if(this._decrypt||!I.isBuffer(this._authTag))throw new Error("Attempting to get auth tag in unsupported state");return this._authTag},n.prototype.setAuthTag=function(A){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=A},n.prototype.setAAD=function(A){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(A),this._alen+=A.length},A.exports=n},function(A,M,t){var g=t(32),I=t(4).Buffer,e=t(15);function i(A,M,t,i){e.call(this),this._cipher=new g.AES(M),this._prev=I.from(t),this._cache=I.allocUnsafe(0),this._secCache=I.allocUnsafe(0),this._decrypt=i,this._mode=A}t(3)(i,e),i.prototype._update=function(A){return this._mode.encrypt(this,A,this._decrypt)},i.prototype._final=function(){this._cipher.scrub()},A.exports=i},function(A,M,t){var g=t(18);A.exports=a,a.simpleSieve=B,a.fermatTest=Q;var I=t(6),e=new I(24),i=new(t(93)),T=new I(1),E=new I(2),N=new I(5),n=(new I(16),new I(8),new I(10)),D=new I(3),C=(new I(7),new I(11)),r=new I(4),c=(new I(12),null);function o(){if(null!==c)return c;var A=[];A[0]=2;for(var M=1,t=3;t<1048576;t+=2){for(var g=Math.ceil(Math.sqrt(t)),I=0;I<M&&A[I]<=g&&t%A[I]!=0;I++);M!==I&&A[I]<=g||(A[M++]=t)}return c=A,A}function B(A){for(var M=o(),t=0;t<M.length;t++)if(0===A.modn(M[t]))return 0===A.cmpn(M[t]);return!0}function Q(A){var M=I.mont(A);return 0===E.toRed(M).redPow(A.subn(1)).fromRed().cmpn(1)}function a(A,M){if(A<16)return new I(2===M||5===M?[140,123]:[140,39]);var t,c;for(M=new I(M);;){for(t=new I(g(Math.ceil(A/8)));t.bitLength()>A;)t.ishrn(1);if(t.isEven()&&t.iadd(T),t.testn(1)||t.iadd(E),M.cmp(E)){if(!M.cmp(N))for(;t.mod(n).cmp(D);)t.iadd(r)}else for(;t.mod(e).cmp(C);)t.iadd(r);if(B(c=t.shrn(1))&&B(t)&&Q(c)&&Q(t)&&i.test(c)&&i.test(t))return t}}},function(A,M){A.exports=function(A){return A.webpackPolyfill||(A.deprecate=function(){},A.paths=[],A.children||(A.children=[]),Object.defineProperty(A,"loaded",{enumerable:!0,get:function(){return A.l}}),Object.defineProperty(A,"id",{enumerable:!0,get:function(){return A.i}}),A.webpackPolyfill=1),A}},function(A,M,t){var g=t(6),I=t(47);function e(A){this.rand=A||new I.Rand}A.exports=e,e.create=function(A){return new e(A)},e.prototype._randbelow=function(A){var M=A.bitLength(),t=Math.ceil(M/8);do{var I=new g(this.rand.generate(t))}while(I.cmp(A)>=0);return I},e.prototype._randrange=function(A,M){var t=M.sub(A);return A.add(this._randbelow(t))},e.prototype.test=function(A,M,t){var I=A.bitLength(),e=g.mont(A),i=new g(1).toRed(e);M||(M=Math.max(1,I/48|0));for(var T=A.subn(1),E=0;!T.testn(E);E++);for(var N=A.shrn(E),n=T.toRed(e);M>0;M--){var D=this._randrange(new g(2),T);t&&t(D);var C=D.toRed(e).redPow(N);if(0!==C.cmp(i)&&0!==C.cmp(n)){for(var r=1;r<E;r++){if(0===(C=C.redSqr()).cmp(i))return!1;if(0===C.cmp(n))break}if(r===E)return!1}}return!0},e.prototype.getDivisor=function(A,M){var t=A.bitLength(),I=g.mont(A),e=new g(1).toRed(I);M||(M=Math.max(1,t/48|0));for(var i=A.subn(1),T=0;!i.testn(T);T++);for(var E=A.shrn(T),N=i.toRed(I);M>0;M--){var n=this._randrange(new g(2),i),D=A.gcd(n);if(0!==D.cmpn(1))return D;var C=n.toRed(I).redPow(E);if(0!==C.cmp(e)&&0!==C.cmp(N)){for(var r=1;r<T;r++){if(0===(C=C.redSqr()).cmp(e))return C.fromRed().subn(1).gcd(A);if(0===C.cmp(N))break}if(r===T)return(C=C.redSqr()).fromRed().subn(1).gcd(A)}}return!1}},function(A,M,t){"use strict";var g=M;function I(A){return 1===A.length?"0"+A:A}function e(A){for(var M="",t=0;t<A.length;t++)M+=I(A[t].toString(16));return M}g.toArray=function(A,M){if(Array.isArray(A))return A.slice();if(!A)return[];var t=[];if("string"!=typeof A){for(var g=0;g<A.length;g++)t[g]=0|A[g];return t}if("hex"===M){(A=A.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(A="0"+A);for(g=0;g<A.length;g+=2)t.push(parseInt(A[g]+A[g+1],16))}else for(g=0;g<A.length;g++){var I=A.charCodeAt(g),e=I>>8,i=255&I;e?t.push(e,i):t.push(i)}return t},g.zero2=I,g.toHex=e,g.encode=function(A,M){return"hex"===M?e(A):A}},function(A,M,t){"use strict";var g=M;g.base=t(34),g.short=t(172),g.mont=t(173),g.edwards=t(174)},function(A,M,t){"use strict";var g=t(14).rotr32;function I(A,M,t){return A&M^~A&t}function e(A,M,t){return A&M^A&t^M&t}function i(A,M,t){return A^M^t}M.ft_1=function(A,M,t,g){return 0===A?I(M,t,g):1===A||3===A?i(M,t,g):2===A?e(M,t,g):void 0},M.ch32=I,M.maj32=e,M.p32=i,M.s0_256=function(A){return g(A,2)^g(A,13)^g(A,22)},M.s1_256=function(A){return g(A,6)^g(A,11)^g(A,25)},M.g0_256=function(A){return g(A,7)^g(A,18)^A>>>3},M.g1_256=function(A){return g(A,17)^g(A,19)^A>>>10}},function(A,M,t){"use strict";var g=t(14),I=t(27),e=t(96),i=t(11),T=g.sum32,E=g.sum32_4,N=g.sum32_5,n=e.ch32,D=e.maj32,C=e.s0_256,r=e.s1_256,c=e.g0_256,o=e.g1_256,B=I.BlockHash,Q=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function a(){if(!(this instanceof a))return new a;B.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Q,this.W=new Array(64)}g.inherits(a,B),A.exports=a,a.blockSize=512,a.outSize=256,a.hmacStrength=192,a.padLength=64,a.prototype._update=function(A,M){for(var t=this.W,g=0;g<16;g++)t[g]=A[M+g];for(;g<t.length;g++)t[g]=E(o(t[g-2]),t[g-7],c(t[g-15]),t[g-16]);var I=this.h[0],e=this.h[1],B=this.h[2],Q=this.h[3],a=this.h[4],h=this.h[5],s=this.h[6],y=this.h[7];for(i(this.k.length===t.length),g=0;g<t.length;g++){var w=N(y,r(a),n(a,h,s),this.k[g],t[g]),j=T(C(I),D(I,e,B));y=s,s=h,h=a,a=T(Q,w),Q=B,B=e,e=I,I=T(w,j)}this.h[0]=T(this.h[0],I),this.h[1]=T(this.h[1],e),this.h[2]=T(this.h[2],B),this.h[3]=T(this.h[3],Q),this.h[4]=T(this.h[4],a),this.h[5]=T(this.h[5],h),this.h[6]=T(this.h[6],s),this.h[7]=T(this.h[7],y)},a.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h,"big"):g.split32(this.h,"big")}},function(A,M,t){"use strict";var g=t(14),I=t(27),e=t(11),i=g.rotr64_hi,T=g.rotr64_lo,E=g.shr64_hi,N=g.shr64_lo,n=g.sum64,D=g.sum64_hi,C=g.sum64_lo,r=g.sum64_4_hi,c=g.sum64_4_lo,o=g.sum64_5_hi,B=g.sum64_5_lo,Q=I.BlockHash,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function h(){if(!(this instanceof h))return new h;Q.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=a,this.W=new Array(160)}function s(A,M,t,g,I){var e=A&t^~A&I;return e<0&&(e+=4294967296),e}function y(A,M,t,g,I,e){var i=M&g^~M&e;return i<0&&(i+=4294967296),i}function w(A,M,t,g,I){var e=A&t^A&I^t&I;return e<0&&(e+=4294967296),e}function j(A,M,t,g,I,e){var i=M&g^M&e^g&e;return i<0&&(i+=4294967296),i}function L(A,M){var t=i(A,M,28)^i(M,A,2)^i(M,A,7);return t<0&&(t+=4294967296),t}function d(A,M){var t=T(A,M,28)^T(M,A,2)^T(M,A,7);return t<0&&(t+=4294967296),t}function x(A,M){var t=i(A,M,14)^i(A,M,18)^i(M,A,9);return t<0&&(t+=4294967296),t}function Y(A,M){var t=T(A,M,14)^T(A,M,18)^T(M,A,9);return t<0&&(t+=4294967296),t}function u(A,M){var t=i(A,M,1)^i(A,M,8)^E(A,M,7);return t<0&&(t+=4294967296),t}function S(A,M){var t=T(A,M,1)^T(A,M,8)^N(A,M,7);return t<0&&(t+=4294967296),t}function l(A,M){var t=i(A,M,19)^i(M,A,29)^E(A,M,6);return t<0&&(t+=4294967296),t}function z(A,M){var t=T(A,M,19)^T(M,A,29)^N(A,M,6);return t<0&&(t+=4294967296),t}g.inherits(h,Q),A.exports=h,h.blockSize=1024,h.outSize=512,h.hmacStrength=192,h.padLength=128,h.prototype._prepareBlock=function(A,M){for(var t=this.W,g=0;g<32;g++)t[g]=A[M+g];for(;g<t.length;g+=2){var I=l(t[g-4],t[g-3]),e=z(t[g-4],t[g-3]),i=t[g-14],T=t[g-13],E=u(t[g-30],t[g-29]),N=S(t[g-30],t[g-29]),n=t[g-32],D=t[g-31];t[g]=r(I,e,i,T,E,N,n,D),t[g+1]=c(I,e,i,T,E,N,n,D)}},h.prototype._update=function(A,M){this._prepareBlock(A,M);var t=this.W,g=this.h[0],I=this.h[1],i=this.h[2],T=this.h[3],E=this.h[4],N=this.h[5],r=this.h[6],c=this.h[7],Q=this.h[8],a=this.h[9],h=this.h[10],u=this.h[11],S=this.h[12],l=this.h[13],z=this.h[14],U=this.h[15];e(this.k.length===t.length);for(var f=0;f<t.length;f+=2){var O=z,F=U,m=x(Q,a),R=Y(Q,a),k=s(Q,a,h,u,S),p=y(Q,a,h,u,S,l),b=this.k[f],G=this.k[f+1],J=t[f],H=t[f+1],X=o(O,F,m,R,k,p,b,G,J,H),v=B(O,F,m,R,k,p,b,G,J,H);O=L(g,I),F=d(g,I),m=w(g,I,i,T,E),R=j(g,I,i,T,E,N);var V=D(O,F,m,R),W=C(O,F,m,R);z=S,U=l,S=h,l=u,h=Q,u=a,Q=D(r,c,X,v),a=C(c,c,X,v),r=E,c=N,E=i,N=T,i=g,T=I,g=D(X,v,V,W),I=C(X,v,V,W)}n(this.h,0,g,I),n(this.h,2,i,T),n(this.h,4,E,N),n(this.h,6,r,c),n(this.h,8,Q,a),n(this.h,10,h,u),n(this.h,12,S,l),n(this.h,14,z,U)},h.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h,"big"):g.split32(this.h,"big")}},function(A,M,t){(function(A){!function(A,M){"use strict";function g(A,M){if(!A)throw new Error(M||"Assertion failed")}function I(A,M){A.super_=M;var t=function(){};t.prototype=M.prototype,A.prototype=new t,A.prototype.constructor=A}function e(A,M,t){if(e.isBN(A))return A;this.negative=0,this.words=null,this.length=0,this.red=null,null!==A&&("le"!==M&&"be"!==M||(t=M,M=10),this._init(A||0,M||10,t||"be"))}var i;"object"==typeof A?A.exports=e:M.BN=e,e.BN=e,e.wordSize=26;try{i=t(189).Buffer}catch(A){}function T(A,M,t){for(var I=0,e=Math.min(A.length,t),i=0,T=M;T<e;T++){var E,N=A.charCodeAt(T)-48;I<<=4,I|=E=N>=49&&N<=54?N-49+10:N>=17&&N<=22?N-17+10:N,i|=E}return g(!(240&i),"Invalid character in "+A),I}function E(A,M,t,I){for(var e=0,i=0,T=Math.min(A.length,t),E=M;E<T;E++){var N=A.charCodeAt(E)-48;e*=I,i=N>=49?N-49+10:N>=17?N-17+10:N,g(N>=0&&i<I,"Invalid character"),e+=i}return e}function N(A,M){A.words=M.words,A.length=M.length,A.negative=M.negative,A.red=M.red}if(e.isBN=function(A){return A instanceof e||null!==A&&"object"==typeof A&&A.constructor.wordSize===e.wordSize&&Array.isArray(A.words)},e.max=function(A,M){return A.cmp(M)>0?A:M},e.min=function(A,M){return A.cmp(M)<0?A:M},e.prototype._init=function(A,M,t){if("number"==typeof A)return this._initNumber(A,M,t);if("object"==typeof A)return this._initArray(A,M,t);"hex"===M&&(M=16),g(M===(0|M)&&M>=2&&M<=36);var I=0;"-"===(A=A.toString().replace(/\s+/g,""))[0]&&I++,16===M?this._parseHex(A,I):this._parseBase(A,M,I),"-"===A[0]&&(this.negative=1),this._strip(),"le"===t&&this._initArray(this.toArray(),M,t)},e.prototype._initNumber=function(A,M,t){A<0&&(this.negative=1,A=-A),A<67108864?(this.words=[67108863&A],this.length=1):A<4503599627370496?(this.words=[67108863&A,A/67108864&67108863],this.length=2):(g(A<9007199254740992),this.words=[67108863&A,A/67108864&67108863,1],this.length=3),"le"===t&&this._initArray(this.toArray(),M,t)},e.prototype._initArray=function(A,M,t){if(g("number"==typeof A.length),A.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(A.length/3),this.words=new Array(this.length);for(var I=0;I<this.length;I++)this.words[I]=0;var e,i,T=0;if("be"===t)for(I=A.length-1,e=0;I>=0;I-=3)i=A[I]|A[I-1]<<8|A[I-2]<<16,this.words[e]|=i<<T&67108863,this.words[e+1]=i>>>26-T&67108863,(T+=24)>=26&&(T-=26,e++);else if("le"===t)for(I=0,e=0;I<A.length;I+=3)i=A[I]|A[I+1]<<8|A[I+2]<<16,this.words[e]|=i<<T&67108863,this.words[e+1]=i>>>26-T&67108863,(T+=24)>=26&&(T-=26,e++);return this._strip()},e.prototype._parseHex=function(A,M){this.length=Math.ceil((A.length-M)/6),this.words=new Array(this.length);for(var t=0;t<this.length;t++)this.words[t]=0;var g,I,e=0;for(t=A.length-6,g=0;t>=M;t-=6)I=T(A,t,t+6),this.words[g]|=I<<e&67108863,this.words[g+1]|=I>>>26-e&4194303,(e+=24)>=26&&(e-=26,g++);t+6!==M&&(I=T(A,M,t+6),this.words[g]|=I<<e&67108863,this.words[g+1]|=I>>>26-e&4194303),this._strip()},e.prototype._parseBase=function(A,M,t){this.words=[0],this.length=1;for(var g=0,I=1;I<=67108863;I*=M)g++;g--,I=I/M|0;for(var e=A.length-t,i=e%g,T=Math.min(e,e-i)+t,N=0,n=t;n<T;n+=g)N=E(A,n,n+g,M),this.imuln(I),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N);if(0!==i){var D=1;for(N=E(A,n,A.length,M),n=0;n<i;n++)D*=M;this.imuln(D),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N)}},e.prototype.copy=function(A){A.words=new Array(this.length);for(var M=0;M<this.length;M++)A.words[M]=this.words[M];A.length=this.length,A.negative=this.negative,A.red=this.red},e.prototype._move=function(A){N(A,this)},e.prototype.clone=function(){var A=new e(null);return this.copy(A),A},e.prototype._expand=function(A){for(;this.length<A;)this.words[this.length++]=0;return this},e.prototype._strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},e.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{e.prototype[Symbol.for("nodejs.util.inspect.custom")]=n}catch(A){e.prototype.inspect=n}else e.prototype.inspect=n;function n(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var D=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],C=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],r=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];e.prototype.toString=function(A,M){var t;if(M=0|M||1,16===(A=A||10)||"hex"===A){t="";for(var I=0,e=0,i=0;i<this.length;i++){var T=this.words[i],E=(16777215&(T<<I|e)).toString(16);t=0!==(e=T>>>24-I&16777215)||i!==this.length-1?D[6-E.length]+E+t:E+t,(I+=2)>=26&&(I-=26,i--)}for(0!==e&&(t=e.toString(16)+t);t.length%M!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(A===(0|A)&&A>=2&&A<=36){var N=C[A],n=r[A];t="";var c=this.clone();for(c.negative=0;!c.isZero();){var o=c.modrn(n).toString(A);t=(c=c.idivn(n)).isZero()?o+t:D[N-o.length]+o+t}for(this.isZero()&&(t="0"+t);t.length%M!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}g(!1,"Base should be between 2 and 36")},e.prototype.toNumber=function(){var A=this.words[0];return 2===this.length?A+=67108864*this.words[1]:3===this.length&&1===this.words[2]?A+=4503599627370496+67108864*this.words[1]:this.length>2&&g(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-A:A},e.prototype.toJSON=function(){return this.toString(16,2)},i&&(e.prototype.toBuffer=function(A,M){return this.toArrayLike(i,A,M)}),e.prototype.toArray=function(A,M){return this.toArrayLike(Array,A,M)};function c(A,M,t){t.negative=M.negative^A.negative;var g=A.length+M.length|0;t.length=g,g=g-1|0;var I=0|A.words[0],e=0|M.words[0],i=I*e,T=67108863&i,E=i/67108864|0;t.words[0]=T;for(var N=1;N<g;N++){for(var n=E>>>26,D=67108863&E,C=Math.min(N,M.length-1),r=Math.max(0,N-A.length+1);r<=C;r++){var c=N-r|0;n+=(i=(I=0|A.words[c])*(e=0|M.words[r])+D)/67108864|0,D=67108863&i}t.words[N]=0|D,E=0|n}return 0!==E?t.words[N]=0|E:t.length--,t._strip()}e.prototype.toArrayLike=function(A,M,t){this._strip();var I=this.byteLength(),e=t||Math.max(1,I);g(I<=e,"byte array longer than desired length"),g(e>0,"Requested array length <= 0");var i=function(A,M){return A.allocUnsafe?A.allocUnsafe(M):new A(M)}(A,e);return this["_toArrayLike"+("le"===M?"LE":"BE")](i,I),i},e.prototype._toArrayLikeLE=function(A,M){for(var t=0,g=0,I=0,e=0;I<this.length;I++){var i=this.words[I]<<e|g;A[t++]=255&i,t<A.length&&(A[t++]=i>>8&255),t<A.length&&(A[t++]=i>>16&255),6===e?(t<A.length&&(A[t++]=i>>24&255),g=0,e=0):(g=i>>>24,e+=2)}if(t<A.length)for(A[t++]=g;t<A.length;)A[t++]=0},e.prototype._toArrayLikeBE=function(A,M){for(var t=A.length-1,g=0,I=0,e=0;I<this.length;I++){var i=this.words[I]<<e|g;A[t--]=255&i,t>=0&&(A[t--]=i>>8&255),t>=0&&(A[t--]=i>>16&255),6===e?(t>=0&&(A[t--]=i>>24&255),g=0,e=0):(g=i>>>24,e+=2)}if(t>=0)for(A[t--]=g;t>=0;)A[t--]=0},Math.clz32?e.prototype._countBits=function(A){return 32-Math.clz32(A)}:e.prototype._countBits=function(A){var M=A,t=0;return M>=4096&&(t+=13,M>>>=13),M>=64&&(t+=7,M>>>=7),M>=8&&(t+=4,M>>>=4),M>=2&&(t+=2,M>>>=2),t+M},e.prototype._zeroBits=function(A){if(0===A)return 26;var M=A,t=0;return 0==(8191&M)&&(t+=13,M>>>=13),0==(127&M)&&(t+=7,M>>>=7),0==(15&M)&&(t+=4,M>>>=4),0==(3&M)&&(t+=2,M>>>=2),0==(1&M)&&t++,t},e.prototype.bitLength=function(){var A=this.words[this.length-1],M=this._countBits(A);return 26*(this.length-1)+M},e.prototype.zeroBits=function(){if(this.isZero())return 0;for(var A=0,M=0;M<this.length;M++){var t=this._zeroBits(this.words[M]);if(A+=t,26!==t)break}return A},e.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},e.prototype.toTwos=function(A){return 0!==this.negative?this.abs().inotn(A).iaddn(1):this.clone()},e.prototype.fromTwos=function(A){return this.testn(A-1)?this.notn(A).iaddn(1).ineg():this.clone()},e.prototype.isNeg=function(){return 0!==this.negative},e.prototype.neg=function(){return this.clone().ineg()},e.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},e.prototype.iuor=function(A){for(;this.length<A.length;)this.words[this.length++]=0;for(var M=0;M<A.length;M++)this.words[M]=this.words[M]|A.words[M];return this._strip()},e.prototype.ior=function(A){return g(0==(this.negative|A.negative)),this.iuor(A)},e.prototype.or=function(A){return this.length>A.length?this.clone().ior(A):A.clone().ior(this)},e.prototype.uor=function(A){return this.length>A.length?this.clone().iuor(A):A.clone().iuor(this)},e.prototype.iuand=function(A){var M;M=this.length>A.length?A:this;for(var t=0;t<M.length;t++)this.words[t]=this.words[t]&A.words[t];return this.length=M.length,this._strip()},e.prototype.iand=function(A){return g(0==(this.negative|A.negative)),this.iuand(A)},e.prototype.and=function(A){return this.length>A.length?this.clone().iand(A):A.clone().iand(this)},e.prototype.uand=function(A){return this.length>A.length?this.clone().iuand(A):A.clone().iuand(this)},e.prototype.iuxor=function(A){var M,t;this.length>A.length?(M=this,t=A):(M=A,t=this);for(var g=0;g<t.length;g++)this.words[g]=M.words[g]^t.words[g];if(this!==M)for(;g<M.length;g++)this.words[g]=M.words[g];return this.length=M.length,this._strip()},e.prototype.ixor=function(A){return g(0==(this.negative|A.negative)),this.iuxor(A)},e.prototype.xor=function(A){return this.length>A.length?this.clone().ixor(A):A.clone().ixor(this)},e.prototype.uxor=function(A){return this.length>A.length?this.clone().iuxor(A):A.clone().iuxor(this)},e.prototype.inotn=function(A){g("number"==typeof A&&A>=0);var M=0|Math.ceil(A/26),t=A%26;this._expand(M),t>0&&M--;for(var I=0;I<M;I++)this.words[I]=67108863&~this.words[I];return t>0&&(this.words[I]=~this.words[I]&67108863>>26-t),this._strip()},e.prototype.notn=function(A){return this.clone().inotn(A)},e.prototype.setn=function(A,M){g("number"==typeof A&&A>=0);var t=A/26|0,I=A%26;return this._expand(t+1),this.words[t]=M?this.words[t]|1<<I:this.words[t]&~(1<<I),this._strip()},e.prototype.iadd=function(A){var M,t,g;if(0!==this.negative&&0===A.negative)return this.negative=0,M=this.isub(A),this.negative^=1,this._normSign();if(0===this.negative&&0!==A.negative)return A.negative=0,M=this.isub(A),A.negative=1,M._normSign();this.length>A.length?(t=this,g=A):(t=A,g=this);for(var I=0,e=0;e<g.length;e++)M=(0|t.words[e])+(0|g.words[e])+I,this.words[e]=67108863&M,I=M>>>26;for(;0!==I&&e<t.length;e++)M=(0|t.words[e])+I,this.words[e]=67108863&M,I=M>>>26;if(this.length=t.length,0!==I)this.words[this.length]=I,this.length++;else if(t!==this)for(;e<t.length;e++)this.words[e]=t.words[e];return this},e.prototype.add=function(A){var M;return 0!==A.negative&&0===this.negative?(A.negative=0,M=this.sub(A),A.negative^=1,M):0===A.negative&&0!==this.negative?(this.negative=0,M=A.sub(this),this.negative=1,M):this.length>A.length?this.clone().iadd(A):A.clone().iadd(this)},e.prototype.isub=function(A){if(0!==A.negative){A.negative=0;var M=this.iadd(A);return A.negative=1,M._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(A),this.negative=1,this._normSign();var t,g,I=this.cmp(A);if(0===I)return this.negative=0,this.length=1,this.words[0]=0,this;I>0?(t=this,g=A):(t=A,g=this);for(var e=0,i=0;i<g.length;i++)e=(M=(0|t.words[i])-(0|g.words[i])+e)>>26,this.words[i]=67108863&M;for(;0!==e&&i<t.length;i++)e=(M=(0|t.words[i])+e)>>26,this.words[i]=67108863&M;if(0===e&&i<t.length&&t!==this)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=Math.max(this.length,i),t!==this&&(this.negative=1),this._strip()},e.prototype.sub=function(A){return this.clone().isub(A)};var o=function(A,M,t){var g,I,e,i=A.words,T=M.words,E=t.words,N=0,n=0|i[0],D=8191&n,C=n>>>13,r=0|i[1],c=8191&r,o=r>>>13,B=0|i[2],Q=8191&B,a=B>>>13,h=0|i[3],s=8191&h,y=h>>>13,w=0|i[4],j=8191&w,L=w>>>13,d=0|i[5],x=8191&d,Y=d>>>13,u=0|i[6],S=8191&u,l=u>>>13,z=0|i[7],U=8191&z,f=z>>>13,O=0|i[8],F=8191&O,m=O>>>13,R=0|i[9],k=8191&R,p=R>>>13,b=0|T[0],G=8191&b,J=b>>>13,H=0|T[1],X=8191&H,v=H>>>13,V=0|T[2],W=8191&V,P=V>>>13,Z=0|T[3],K=8191&Z,q=Z>>>13,_=0|T[4],$=8191&_,AA=_>>>13,MA=0|T[5],tA=8191&MA,gA=MA>>>13,IA=0|T[6],eA=8191&IA,iA=IA>>>13,TA=0|T[7],EA=8191&TA,NA=TA>>>13,nA=0|T[8],DA=8191&nA,CA=nA>>>13,rA=0|T[9],cA=8191&rA,oA=rA>>>13;t.negative=A.negative^M.negative,t.length=19;var BA=(N+(g=Math.imul(D,G))|0)+((8191&(I=(I=Math.imul(D,J))+Math.imul(C,G)|0))<<13)|0;N=((e=Math.imul(C,J))+(I>>>13)|0)+(BA>>>26)|0,BA&=67108863,g=Math.imul(c,G),I=(I=Math.imul(c,J))+Math.imul(o,G)|0,e=Math.imul(o,J);var QA=(N+(g=g+Math.imul(D,X)|0)|0)+((8191&(I=(I=I+Math.imul(D,v)|0)+Math.imul(C,X)|0))<<13)|0;N=((e=e+Math.imul(C,v)|0)+(I>>>13)|0)+(QA>>>26)|0,QA&=67108863,g=Math.imul(Q,G),I=(I=Math.imul(Q,J))+Math.imul(a,G)|0,e=Math.imul(a,J),g=g+Math.imul(c,X)|0,I=(I=I+Math.imul(c,v)|0)+Math.imul(o,X)|0,e=e+Math.imul(o,v)|0;var aA=(N+(g=g+Math.imul(D,W)|0)|0)+((8191&(I=(I=I+Math.imul(D,P)|0)+Math.imul(C,W)|0))<<13)|0;N=((e=e+Math.imul(C,P)|0)+(I>>>13)|0)+(aA>>>26)|0,aA&=67108863,g=Math.imul(s,G),I=(I=Math.imul(s,J))+Math.imul(y,G)|0,e=Math.imul(y,J),g=g+Math.imul(Q,X)|0,I=(I=I+Math.imul(Q,v)|0)+Math.imul(a,X)|0,e=e+Math.imul(a,v)|0,g=g+Math.imul(c,W)|0,I=(I=I+Math.imul(c,P)|0)+Math.imul(o,W)|0,e=e+Math.imul(o,P)|0;var hA=(N+(g=g+Math.imul(D,K)|0)|0)+((8191&(I=(I=I+Math.imul(D,q)|0)+Math.imul(C,K)|0))<<13)|0;N=((e=e+Math.imul(C,q)|0)+(I>>>13)|0)+(hA>>>26)|0,hA&=67108863,g=Math.imul(j,G),I=(I=Math.imul(j,J))+Math.imul(L,G)|0,e=Math.imul(L,J),g=g+Math.imul(s,X)|0,I=(I=I+Math.imul(s,v)|0)+Math.imul(y,X)|0,e=e+Math.imul(y,v)|0,g=g+Math.imul(Q,W)|0,I=(I=I+Math.imul(Q,P)|0)+Math.imul(a,W)|0,e=e+Math.imul(a,P)|0,g=g+Math.imul(c,K)|0,I=(I=I+Math.imul(c,q)|0)+Math.imul(o,K)|0,e=e+Math.imul(o,q)|0;var sA=(N+(g=g+Math.imul(D,$)|0)|0)+((8191&(I=(I=I+Math.imul(D,AA)|0)+Math.imul(C,$)|0))<<13)|0;N=((e=e+Math.imul(C,AA)|0)+(I>>>13)|0)+(sA>>>26)|0,sA&=67108863,g=Math.imul(x,G),I=(I=Math.imul(x,J))+Math.imul(Y,G)|0,e=Math.imul(Y,J),g=g+Math.imul(j,X)|0,I=(I=I+Math.imul(j,v)|0)+Math.imul(L,X)|0,e=e+Math.imul(L,v)|0,g=g+Math.imul(s,W)|0,I=(I=I+Math.imul(s,P)|0)+Math.imul(y,W)|0,e=e+Math.imul(y,P)|0,g=g+Math.imul(Q,K)|0,I=(I=I+Math.imul(Q,q)|0)+Math.imul(a,K)|0,e=e+Math.imul(a,q)|0,g=g+Math.imul(c,$)|0,I=(I=I+Math.imul(c,AA)|0)+Math.imul(o,$)|0,e=e+Math.imul(o,AA)|0;var yA=(N+(g=g+Math.imul(D,tA)|0)|0)+((8191&(I=(I=I+Math.imul(D,gA)|0)+Math.imul(C,tA)|0))<<13)|0;N=((e=e+Math.imul(C,gA)|0)+(I>>>13)|0)+(yA>>>26)|0,yA&=67108863,g=Math.imul(S,G),I=(I=Math.imul(S,J))+Math.imul(l,G)|0,e=Math.imul(l,J),g=g+Math.imul(x,X)|0,I=(I=I+Math.imul(x,v)|0)+Math.imul(Y,X)|0,e=e+Math.imul(Y,v)|0,g=g+Math.imul(j,W)|0,I=(I=I+Math.imul(j,P)|0)+Math.imul(L,W)|0,e=e+Math.imul(L,P)|0,g=g+Math.imul(s,K)|0,I=(I=I+Math.imul(s,q)|0)+Math.imul(y,K)|0,e=e+Math.imul(y,q)|0,g=g+Math.imul(Q,$)|0,I=(I=I+Math.imul(Q,AA)|0)+Math.imul(a,$)|0,e=e+Math.imul(a,AA)|0,g=g+Math.imul(c,tA)|0,I=(I=I+Math.imul(c,gA)|0)+Math.imul(o,tA)|0,e=e+Math.imul(o,gA)|0;var wA=(N+(g=g+Math.imul(D,eA)|0)|0)+((8191&(I=(I=I+Math.imul(D,iA)|0)+Math.imul(C,eA)|0))<<13)|0;N=((e=e+Math.imul(C,iA)|0)+(I>>>13)|0)+(wA>>>26)|0,wA&=67108863,g=Math.imul(U,G),I=(I=Math.imul(U,J))+Math.imul(f,G)|0,e=Math.imul(f,J),g=g+Math.imul(S,X)|0,I=(I=I+Math.imul(S,v)|0)+Math.imul(l,X)|0,e=e+Math.imul(l,v)|0,g=g+Math.imul(x,W)|0,I=(I=I+Math.imul(x,P)|0)+Math.imul(Y,W)|0,e=e+Math.imul(Y,P)|0,g=g+Math.imul(j,K)|0,I=(I=I+Math.imul(j,q)|0)+Math.imul(L,K)|0,e=e+Math.imul(L,q)|0,g=g+Math.imul(s,$)|0,I=(I=I+Math.imul(s,AA)|0)+Math.imul(y,$)|0,e=e+Math.imul(y,AA)|0,g=g+Math.imul(Q,tA)|0,I=(I=I+Math.imul(Q,gA)|0)+Math.imul(a,tA)|0,e=e+Math.imul(a,gA)|0,g=g+Math.imul(c,eA)|0,I=(I=I+Math.imul(c,iA)|0)+Math.imul(o,eA)|0,e=e+Math.imul(o,iA)|0;var jA=(N+(g=g+Math.imul(D,EA)|0)|0)+((8191&(I=(I=I+Math.imul(D,NA)|0)+Math.imul(C,EA)|0))<<13)|0;N=((e=e+Math.imul(C,NA)|0)+(I>>>13)|0)+(jA>>>26)|0,jA&=67108863,g=Math.imul(F,G),I=(I=Math.imul(F,J))+Math.imul(m,G)|0,e=Math.imul(m,J),g=g+Math.imul(U,X)|0,I=(I=I+Math.imul(U,v)|0)+Math.imul(f,X)|0,e=e+Math.imul(f,v)|0,g=g+Math.imul(S,W)|0,I=(I=I+Math.imul(S,P)|0)+Math.imul(l,W)|0,e=e+Math.imul(l,P)|0,g=g+Math.imul(x,K)|0,I=(I=I+Math.imul(x,q)|0)+Math.imul(Y,K)|0,e=e+Math.imul(Y,q)|0,g=g+Math.imul(j,$)|0,I=(I=I+Math.imul(j,AA)|0)+Math.imul(L,$)|0,e=e+Math.imul(L,AA)|0,g=g+Math.imul(s,tA)|0,I=(I=I+Math.imul(s,gA)|0)+Math.imul(y,tA)|0,e=e+Math.imul(y,gA)|0,g=g+Math.imul(Q,eA)|0,I=(I=I+Math.imul(Q,iA)|0)+Math.imul(a,eA)|0,e=e+Math.imul(a,iA)|0,g=g+Math.imul(c,EA)|0,I=(I=I+Math.imul(c,NA)|0)+Math.imul(o,EA)|0,e=e+Math.imul(o,NA)|0;var LA=(N+(g=g+Math.imul(D,DA)|0)|0)+((8191&(I=(I=I+Math.imul(D,CA)|0)+Math.imul(C,DA)|0))<<13)|0;N=((e=e+Math.imul(C,CA)|0)+(I>>>13)|0)+(LA>>>26)|0,LA&=67108863,g=Math.imul(k,G),I=(I=Math.imul(k,J))+Math.imul(p,G)|0,e=Math.imul(p,J),g=g+Math.imul(F,X)|0,I=(I=I+Math.imul(F,v)|0)+Math.imul(m,X)|0,e=e+Math.imul(m,v)|0,g=g+Math.imul(U,W)|0,I=(I=I+Math.imul(U,P)|0)+Math.imul(f,W)|0,e=e+Math.imul(f,P)|0,g=g+Math.imul(S,K)|0,I=(I=I+Math.imul(S,q)|0)+Math.imul(l,K)|0,e=e+Math.imul(l,q)|0,g=g+Math.imul(x,$)|0,I=(I=I+Math.imul(x,AA)|0)+Math.imul(Y,$)|0,e=e+Math.imul(Y,AA)|0,g=g+Math.imul(j,tA)|0,I=(I=I+Math.imul(j,gA)|0)+Math.imul(L,tA)|0,e=e+Math.imul(L,gA)|0,g=g+Math.imul(s,eA)|0,I=(I=I+Math.imul(s,iA)|0)+Math.imul(y,eA)|0,e=e+Math.imul(y,iA)|0,g=g+Math.imul(Q,EA)|0,I=(I=I+Math.imul(Q,NA)|0)+Math.imul(a,EA)|0,e=e+Math.imul(a,NA)|0,g=g+Math.imul(c,DA)|0,I=(I=I+Math.imul(c,CA)|0)+Math.imul(o,DA)|0,e=e+Math.imul(o,CA)|0;var dA=(N+(g=g+Math.imul(D,cA)|0)|0)+((8191&(I=(I=I+Math.imul(D,oA)|0)+Math.imul(C,cA)|0))<<13)|0;N=((e=e+Math.imul(C,oA)|0)+(I>>>13)|0)+(dA>>>26)|0,dA&=67108863,g=Math.imul(k,X),I=(I=Math.imul(k,v))+Math.imul(p,X)|0,e=Math.imul(p,v),g=g+Math.imul(F,W)|0,I=(I=I+Math.imul(F,P)|0)+Math.imul(m,W)|0,e=e+Math.imul(m,P)|0,g=g+Math.imul(U,K)|0,I=(I=I+Math.imul(U,q)|0)+Math.imul(f,K)|0,e=e+Math.imul(f,q)|0,g=g+Math.imul(S,$)|0,I=(I=I+Math.imul(S,AA)|0)+Math.imul(l,$)|0,e=e+Math.imul(l,AA)|0,g=g+Math.imul(x,tA)|0,I=(I=I+Math.imul(x,gA)|0)+Math.imul(Y,tA)|0,e=e+Math.imul(Y,gA)|0,g=g+Math.imul(j,eA)|0,I=(I=I+Math.imul(j,iA)|0)+Math.imul(L,eA)|0,e=e+Math.imul(L,iA)|0,g=g+Math.imul(s,EA)|0,I=(I=I+Math.imul(s,NA)|0)+Math.imul(y,EA)|0,e=e+Math.imul(y,NA)|0,g=g+Math.imul(Q,DA)|0,I=(I=I+Math.imul(Q,CA)|0)+Math.imul(a,DA)|0,e=e+Math.imul(a,CA)|0;var xA=(N+(g=g+Math.imul(c,cA)|0)|0)+((8191&(I=(I=I+Math.imul(c,oA)|0)+Math.imul(o,cA)|0))<<13)|0;N=((e=e+Math.imul(o,oA)|0)+(I>>>13)|0)+(xA>>>26)|0,xA&=67108863,g=Math.imul(k,W),I=(I=Math.imul(k,P))+Math.imul(p,W)|0,e=Math.imul(p,P),g=g+Math.imul(F,K)|0,I=(I=I+Math.imul(F,q)|0)+Math.imul(m,K)|0,e=e+Math.imul(m,q)|0,g=g+Math.imul(U,$)|0,I=(I=I+Math.imul(U,AA)|0)+Math.imul(f,$)|0,e=e+Math.imul(f,AA)|0,g=g+Math.imul(S,tA)|0,I=(I=I+Math.imul(S,gA)|0)+Math.imul(l,tA)|0,e=e+Math.imul(l,gA)|0,g=g+Math.imul(x,eA)|0,I=(I=I+Math.imul(x,iA)|0)+Math.imul(Y,eA)|0,e=e+Math.imul(Y,iA)|0,g=g+Math.imul(j,EA)|0,I=(I=I+Math.imul(j,NA)|0)+Math.imul(L,EA)|0,e=e+Math.imul(L,NA)|0,g=g+Math.imul(s,DA)|0,I=(I=I+Math.imul(s,CA)|0)+Math.imul(y,DA)|0,e=e+Math.imul(y,CA)|0;var YA=(N+(g=g+Math.imul(Q,cA)|0)|0)+((8191&(I=(I=I+Math.imul(Q,oA)|0)+Math.imul(a,cA)|0))<<13)|0;N=((e=e+Math.imul(a,oA)|0)+(I>>>13)|0)+(YA>>>26)|0,YA&=67108863,g=Math.imul(k,K),I=(I=Math.imul(k,q))+Math.imul(p,K)|0,e=Math.imul(p,q),g=g+Math.imul(F,$)|0,I=(I=I+Math.imul(F,AA)|0)+Math.imul(m,$)|0,e=e+Math.imul(m,AA)|0,g=g+Math.imul(U,tA)|0,I=(I=I+Math.imul(U,gA)|0)+Math.imul(f,tA)|0,e=e+Math.imul(f,gA)|0,g=g+Math.imul(S,eA)|0,I=(I=I+Math.imul(S,iA)|0)+Math.imul(l,eA)|0,e=e+Math.imul(l,iA)|0,g=g+Math.imul(x,EA)|0,I=(I=I+Math.imul(x,NA)|0)+Math.imul(Y,EA)|0,e=e+Math.imul(Y,NA)|0,g=g+Math.imul(j,DA)|0,I=(I=I+Math.imul(j,CA)|0)+Math.imul(L,DA)|0,e=e+Math.imul(L,CA)|0;var uA=(N+(g=g+Math.imul(s,cA)|0)|0)+((8191&(I=(I=I+Math.imul(s,oA)|0)+Math.imul(y,cA)|0))<<13)|0;N=((e=e+Math.imul(y,oA)|0)+(I>>>13)|0)+(uA>>>26)|0,uA&=67108863,g=Math.imul(k,$),I=(I=Math.imul(k,AA))+Math.imul(p,$)|0,e=Math.imul(p,AA),g=g+Math.imul(F,tA)|0,I=(I=I+Math.imul(F,gA)|0)+Math.imul(m,tA)|0,e=e+Math.imul(m,gA)|0,g=g+Math.imul(U,eA)|0,I=(I=I+Math.imul(U,iA)|0)+Math.imul(f,eA)|0,e=e+Math.imul(f,iA)|0,g=g+Math.imul(S,EA)|0,I=(I=I+Math.imul(S,NA)|0)+Math.imul(l,EA)|0,e=e+Math.imul(l,NA)|0,g=g+Math.imul(x,DA)|0,I=(I=I+Math.imul(x,CA)|0)+Math.imul(Y,DA)|0,e=e+Math.imul(Y,CA)|0;var SA=(N+(g=g+Math.imul(j,cA)|0)|0)+((8191&(I=(I=I+Math.imul(j,oA)|0)+Math.imul(L,cA)|0))<<13)|0;N=((e=e+Math.imul(L,oA)|0)+(I>>>13)|0)+(SA>>>26)|0,SA&=67108863,g=Math.imul(k,tA),I=(I=Math.imul(k,gA))+Math.imul(p,tA)|0,e=Math.imul(p,gA),g=g+Math.imul(F,eA)|0,I=(I=I+Math.imul(F,iA)|0)+Math.imul(m,eA)|0,e=e+Math.imul(m,iA)|0,g=g+Math.imul(U,EA)|0,I=(I=I+Math.imul(U,NA)|0)+Math.imul(f,EA)|0,e=e+Math.imul(f,NA)|0,g=g+Math.imul(S,DA)|0,I=(I=I+Math.imul(S,CA)|0)+Math.imul(l,DA)|0,e=e+Math.imul(l,CA)|0;var lA=(N+(g=g+Math.imul(x,cA)|0)|0)+((8191&(I=(I=I+Math.imul(x,oA)|0)+Math.imul(Y,cA)|0))<<13)|0;N=((e=e+Math.imul(Y,oA)|0)+(I>>>13)|0)+(lA>>>26)|0,lA&=67108863,g=Math.imul(k,eA),I=(I=Math.imul(k,iA))+Math.imul(p,eA)|0,e=Math.imul(p,iA),g=g+Math.imul(F,EA)|0,I=(I=I+Math.imul(F,NA)|0)+Math.imul(m,EA)|0,e=e+Math.imul(m,NA)|0,g=g+Math.imul(U,DA)|0,I=(I=I+Math.imul(U,CA)|0)+Math.imul(f,DA)|0,e=e+Math.imul(f,CA)|0;var zA=(N+(g=g+Math.imul(S,cA)|0)|0)+((8191&(I=(I=I+Math.imul(S,oA)|0)+Math.imul(l,cA)|0))<<13)|0;N=((e=e+Math.imul(l,oA)|0)+(I>>>13)|0)+(zA>>>26)|0,zA&=67108863,g=Math.imul(k,EA),I=(I=Math.imul(k,NA))+Math.imul(p,EA)|0,e=Math.imul(p,NA),g=g+Math.imul(F,DA)|0,I=(I=I+Math.imul(F,CA)|0)+Math.imul(m,DA)|0,e=e+Math.imul(m,CA)|0;var UA=(N+(g=g+Math.imul(U,cA)|0)|0)+((8191&(I=(I=I+Math.imul(U,oA)|0)+Math.imul(f,cA)|0))<<13)|0;N=((e=e+Math.imul(f,oA)|0)+(I>>>13)|0)+(UA>>>26)|0,UA&=67108863,g=Math.imul(k,DA),I=(I=Math.imul(k,CA))+Math.imul(p,DA)|0,e=Math.imul(p,CA);var fA=(N+(g=g+Math.imul(F,cA)|0)|0)+((8191&(I=(I=I+Math.imul(F,oA)|0)+Math.imul(m,cA)|0))<<13)|0;N=((e=e+Math.imul(m,oA)|0)+(I>>>13)|0)+(fA>>>26)|0,fA&=67108863;var OA=(N+(g=Math.imul(k,cA))|0)+((8191&(I=(I=Math.imul(k,oA))+Math.imul(p,cA)|0))<<13)|0;return N=((e=Math.imul(p,oA))+(I>>>13)|0)+(OA>>>26)|0,OA&=67108863,E[0]=BA,E[1]=QA,E[2]=aA,E[3]=hA,E[4]=sA,E[5]=yA,E[6]=wA,E[7]=jA,E[8]=LA,E[9]=dA,E[10]=xA,E[11]=YA,E[12]=uA,E[13]=SA,E[14]=lA,E[15]=zA,E[16]=UA,E[17]=fA,E[18]=OA,0!==N&&(E[19]=N,t.length++),t};function B(A,M,t){t.negative=M.negative^A.negative,t.length=A.length+M.length;for(var g=0,I=0,e=0;e<t.length-1;e++){var i=I;I=0;for(var T=67108863&g,E=Math.min(e,M.length-1),N=Math.max(0,e-A.length+1);N<=E;N++){var n=e-N,D=(0|A.words[n])*(0|M.words[N]),C=67108863&D;T=67108863&(C=C+T|0),I+=(i=(i=i+(D/67108864|0)|0)+(C>>>26)|0)>>>26,i&=67108863}t.words[e]=T,g=i,i=I}return 0!==g?t.words[e]=g:t.length--,t._strip()}function Q(A,M,t){return B(A,M,t)}function a(A,M){this.x=A,this.y=M}Math.imul||(o=c),e.prototype.mulTo=function(A,M){var t=this.length+A.length;return 10===this.length&&10===A.length?o(this,A,M):t<63?c(this,A,M):t<1024?B(this,A,M):Q(this,A,M)},a.prototype.makeRBT=function(A){for(var M=new Array(A),t=e.prototype._countBits(A)-1,g=0;g<A;g++)M[g]=this.revBin(g,t,A);return M},a.prototype.revBin=function(A,M,t){if(0===A||A===t-1)return A;for(var g=0,I=0;I<M;I++)g|=(1&A)<<M-I-1,A>>=1;return g},a.prototype.permute=function(A,M,t,g,I,e){for(var i=0;i<e;i++)g[i]=M[A[i]],I[i]=t[A[i]]},a.prototype.transform=function(A,M,t,g,I,e){this.permute(e,A,M,t,g,I);for(var i=1;i<I;i<<=1)for(var T=i<<1,E=Math.cos(2*Math.PI/T),N=Math.sin(2*Math.PI/T),n=0;n<I;n+=T)for(var D=E,C=N,r=0;r<i;r++){var c=t[n+r],o=g[n+r],B=t[n+r+i],Q=g[n+r+i],a=D*B-C*Q;Q=D*Q+C*B,B=a,t[n+r]=c+B,g[n+r]=o+Q,t[n+r+i]=c-B,g[n+r+i]=o-Q,r!==T&&(a=E*D-N*C,C=E*C+N*D,D=a)}},a.prototype.guessLen13b=function(A,M){var t=1|Math.max(M,A),g=1&t,I=0;for(t=t/2|0;t;t>>>=1)I++;return 1<<I+1+g},a.prototype.conjugate=function(A,M,t){if(!(t<=1))for(var g=0;g<t/2;g++){var I=A[g];A[g]=A[t-g-1],A[t-g-1]=I,I=M[g],M[g]=-M[t-g-1],M[t-g-1]=-I}},a.prototype.normalize13b=function(A,M){for(var t=0,g=0;g<M/2;g++){var I=8192*Math.round(A[2*g+1]/M)+Math.round(A[2*g]/M)+t;A[g]=67108863&I,t=I<67108864?0:I/67108864|0}return A},a.prototype.convert13b=function(A,M,t,I){for(var e=0,i=0;i<M;i++)e+=0|A[i],t[2*i]=8191&e,e>>>=13,t[2*i+1]=8191&e,e>>>=13;for(i=2*M;i<I;++i)t[i]=0;g(0===e),g(0==(-8192&e))},a.prototype.stub=function(A){for(var M=new Array(A),t=0;t<A;t++)M[t]=0;return M},a.prototype.mulp=function(A,M,t){var g=2*this.guessLen13b(A.length,M.length),I=this.makeRBT(g),e=this.stub(g),i=new Array(g),T=new Array(g),E=new Array(g),N=new Array(g),n=new Array(g),D=new Array(g),C=t.words;C.length=g,this.convert13b(A.words,A.length,i,g),this.convert13b(M.words,M.length,N,g),this.transform(i,e,T,E,g,I),this.transform(N,e,n,D,g,I);for(var r=0;r<g;r++){var c=T[r]*n[r]-E[r]*D[r];E[r]=T[r]*D[r]+E[r]*n[r],T[r]=c}return this.conjugate(T,E,g),this.transform(T,E,C,e,g,I),this.conjugate(C,e,g),this.normalize13b(C,g),t.negative=A.negative^M.negative,t.length=A.length+M.length,t._strip()},e.prototype.mul=function(A){var M=new e(null);return M.words=new Array(this.length+A.length),this.mulTo(A,M)},e.prototype.mulf=function(A){var M=new e(null);return M.words=new Array(this.length+A.length),Q(this,A,M)},e.prototype.imul=function(A){return this.clone().mulTo(A,this)},e.prototype.imuln=function(A){var M=A<0;M&&(A=-A),g("number"==typeof A),g(A<67108864);for(var t=0,I=0;I<this.length;I++){var e=(0|this.words[I])*A,i=(67108863&e)+(67108863&t);t>>=26,t+=e/67108864|0,t+=i>>>26,this.words[I]=67108863&i}return 0!==t&&(this.words[I]=t,this.length++),M?this.ineg():this},e.prototype.muln=function(A){return this.clone().imuln(A)},e.prototype.sqr=function(){return this.mul(this)},e.prototype.isqr=function(){return this.imul(this.clone())},e.prototype.pow=function(A){var M=function(A){for(var M=new Array(A.bitLength()),t=0;t<M.length;t++){var g=t/26|0,I=t%26;M[t]=A.words[g]>>>I&1}return M}(A);if(0===M.length)return new e(1);for(var t=this,g=0;g<M.length&&0===M[g];g++,t=t.sqr());if(++g<M.length)for(var I=t.sqr();g<M.length;g++,I=I.sqr())0!==M[g]&&(t=t.mul(I));return t},e.prototype.iushln=function(A){g("number"==typeof A&&A>=0);var M,t=A%26,I=(A-t)/26,e=67108863>>>26-t<<26-t;if(0!==t){var i=0;for(M=0;M<this.length;M++){var T=this.words[M]&e,E=(0|this.words[M])-T<<t;this.words[M]=E|i,i=T>>>26-t}i&&(this.words[M]=i,this.length++)}if(0!==I){for(M=this.length-1;M>=0;M--)this.words[M+I]=this.words[M];for(M=0;M<I;M++)this.words[M]=0;this.length+=I}return this._strip()},e.prototype.ishln=function(A){return g(0===this.negative),this.iushln(A)},e.prototype.iushrn=function(A,M,t){var I;g("number"==typeof A&&A>=0),I=M?(M-M%26)/26:0;var e=A%26,i=Math.min((A-e)/26,this.length),T=67108863^67108863>>>e<<e,E=t;if(I-=i,I=Math.max(0,I),E){for(var N=0;N<i;N++)E.words[N]=this.words[N];E.length=i}if(0===i);else if(this.length>i)for(this.length-=i,N=0;N<this.length;N++)this.words[N]=this.words[N+i];else this.words[0]=0,this.length=1;var n=0;for(N=this.length-1;N>=0&&(0!==n||N>=I);N--){var D=0|this.words[N];this.words[N]=n<<26-e|D>>>e,n=D&T}return E&&0!==n&&(E.words[E.length++]=n),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},e.prototype.ishrn=function(A,M,t){return g(0===this.negative),this.iushrn(A,M,t)},e.prototype.shln=function(A){return this.clone().ishln(A)},e.prototype.ushln=function(A){return this.clone().iushln(A)},e.prototype.shrn=function(A){return this.clone().ishrn(A)},e.prototype.ushrn=function(A){return this.clone().iushrn(A)},e.prototype.testn=function(A){g("number"==typeof A&&A>=0);var M=A%26,t=(A-M)/26,I=1<<M;return!(this.length<=t)&&!!(this.words[t]&I)},e.prototype.imaskn=function(A){g("number"==typeof A&&A>=0);var M=A%26,t=(A-M)/26;if(g(0===this.negative,"imaskn works only with positive numbers"),this.length<=t)return this;if(0!==M&&t++,this.length=Math.min(t,this.length),0!==M){var I=67108863^67108863>>>M<<M;this.words[this.length-1]&=I}return this._strip()},e.prototype.maskn=function(A){return this.clone().imaskn(A)},e.prototype.iaddn=function(A){return g("number"==typeof A),g(A<67108864),A<0?this.isubn(-A):0!==this.negative?1===this.length&&(0|this.words[0])<=A?(this.words[0]=A-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(A),this.negative=1,this):this._iaddn(A)},e.prototype._iaddn=function(A){this.words[0]+=A;for(var M=0;M<this.length&&this.words[M]>=67108864;M++)this.words[M]-=67108864,M===this.length-1?this.words[M+1]=1:this.words[M+1]++;return this.length=Math.max(this.length,M+1),this},e.prototype.isubn=function(A){if(g("number"==typeof A),g(A<67108864),A<0)return this.iaddn(-A);if(0!==this.negative)return this.negative=0,this.iaddn(A),this.negative=1,this;if(this.words[0]-=A,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var M=0;M<this.length&&this.words[M]<0;M++)this.words[M]+=67108864,this.words[M+1]-=1;return this._strip()},e.prototype.addn=function(A){return this.clone().iaddn(A)},e.prototype.subn=function(A){return this.clone().isubn(A)},e.prototype.iabs=function(){return this.negative=0,this},e.prototype.abs=function(){return this.clone().iabs()},e.prototype._ishlnsubmul=function(A,M,t){var I,e,i=A.length+t;this._expand(i);var T=0;for(I=0;I<A.length;I++){e=(0|this.words[I+t])+T;var E=(0|A.words[I])*M;T=((e-=67108863&E)>>26)-(E/67108864|0),this.words[I+t]=67108863&e}for(;I<this.length-t;I++)T=(e=(0|this.words[I+t])+T)>>26,this.words[I+t]=67108863&e;if(0===T)return this._strip();for(g(-1===T),T=0,I=0;I<this.length;I++)T=(e=-(0|this.words[I])+T)>>26,this.words[I]=67108863&e;return this.negative=1,this._strip()},e.prototype._wordDiv=function(A,M){var t=(this.length,A.length),g=this.clone(),I=A,i=0|I.words[I.length-1];0!==(t=26-this._countBits(i))&&(I=I.ushln(t),g.iushln(t),i=0|I.words[I.length-1]);var T,E=g.length-I.length;if("mod"!==M){(T=new e(null)).length=E+1,T.words=new Array(T.length);for(var N=0;N<T.length;N++)T.words[N]=0}var n=g.clone()._ishlnsubmul(I,1,E);0===n.negative&&(g=n,T&&(T.words[E]=1));for(var D=E-1;D>=0;D--){var C=67108864*(0|g.words[I.length+D])+(0|g.words[I.length+D-1]);for(C=Math.min(C/i|0,67108863),g._ishlnsubmul(I,C,D);0!==g.negative;)C--,g.negative=0,g._ishlnsubmul(I,1,D),g.isZero()||(g.negative^=1);T&&(T.words[D]=C)}return T&&T._strip(),g._strip(),"div"!==M&&0!==t&&g.iushrn(t),{div:T||null,mod:g}},e.prototype.divmod=function(A,M,t){return g(!A.isZero()),this.isZero()?{div:new e(0),mod:new e(0)}:0!==this.negative&&0===A.negative?(T=this.neg().divmod(A,M),"mod"!==M&&(I=T.div.neg()),"div"!==M&&(i=T.mod.neg(),t&&0!==i.negative&&i.iadd(A)),{div:I,mod:i}):0===this.negative&&0!==A.negative?(T=this.divmod(A.neg(),M),"mod"!==M&&(I=T.div.neg()),{div:I,mod:T.mod}):0!=(this.negative&A.negative)?(T=this.neg().divmod(A.neg(),M),"div"!==M&&(i=T.mod.neg(),t&&0!==i.negative&&i.isub(A)),{div:T.div,mod:i}):A.length>this.length||this.cmp(A)<0?{div:new e(0),mod:this}:1===A.length?"div"===M?{div:this.divn(A.words[0]),mod:null}:"mod"===M?{div:null,mod:new e(this.modrn(A.words[0]))}:{div:this.divn(A.words[0]),mod:new e(this.modrn(A.words[0]))}:this._wordDiv(A,M);var I,i,T},e.prototype.div=function(A){return this.divmod(A,"div",!1).div},e.prototype.mod=function(A){return this.divmod(A,"mod",!1).mod},e.prototype.umod=function(A){return this.divmod(A,"mod",!0).mod},e.prototype.divRound=function(A){var M=this.divmod(A);if(M.mod.isZero())return M.div;var t=0!==M.div.negative?M.mod.isub(A):M.mod,g=A.ushrn(1),I=A.andln(1),e=t.cmp(g);return e<0||1===I&&0===e?M.div:0!==M.div.negative?M.div.isubn(1):M.div.iaddn(1)},e.prototype.modrn=function(A){var M=A<0;M&&(A=-A),g(A<=67108863);for(var t=(1<<26)%A,I=0,e=this.length-1;e>=0;e--)I=(t*I+(0|this.words[e]))%A;return M?-I:I},e.prototype.modn=function(A){return this.modrn(A)},e.prototype.idivn=function(A){var M=A<0;M&&(A=-A),g(A<=67108863);for(var t=0,I=this.length-1;I>=0;I--){var e=(0|this.words[I])+67108864*t;this.words[I]=e/A|0,t=e%A}return this._strip(),M?this.ineg():this},e.prototype.divn=function(A){return this.clone().idivn(A)},e.prototype.egcd=function(A){g(0===A.negative),g(!A.isZero());var M=this,t=A.clone();M=0!==M.negative?M.umod(A):M.clone();for(var I=new e(1),i=new e(0),T=new e(0),E=new e(1),N=0;M.isEven()&&t.isEven();)M.iushrn(1),t.iushrn(1),++N;for(var n=t.clone(),D=M.clone();!M.isZero();){for(var C=0,r=1;0==(M.words[0]&r)&&C<26;++C,r<<=1);if(C>0)for(M.iushrn(C);C-- >0;)(I.isOdd()||i.isOdd())&&(I.iadd(n),i.isub(D)),I.iushrn(1),i.iushrn(1);for(var c=0,o=1;0==(t.words[0]&o)&&c<26;++c,o<<=1);if(c>0)for(t.iushrn(c);c-- >0;)(T.isOdd()||E.isOdd())&&(T.iadd(n),E.isub(D)),T.iushrn(1),E.iushrn(1);M.cmp(t)>=0?(M.isub(t),I.isub(T),i.isub(E)):(t.isub(M),T.isub(I),E.isub(i))}return{a:T,b:E,gcd:t.iushln(N)}},e.prototype._invmp=function(A){g(0===A.negative),g(!A.isZero());var M=this,t=A.clone();M=0!==M.negative?M.umod(A):M.clone();for(var I,i=new e(1),T=new e(0),E=t.clone();M.cmpn(1)>0&&t.cmpn(1)>0;){for(var N=0,n=1;0==(M.words[0]&n)&&N<26;++N,n<<=1);if(N>0)for(M.iushrn(N);N-- >0;)i.isOdd()&&i.iadd(E),i.iushrn(1);for(var D=0,C=1;0==(t.words[0]&C)&&D<26;++D,C<<=1);if(D>0)for(t.iushrn(D);D-- >0;)T.isOdd()&&T.iadd(E),T.iushrn(1);M.cmp(t)>=0?(M.isub(t),i.isub(T)):(t.isub(M),T.isub(i))}return(I=0===M.cmpn(1)?i:T).cmpn(0)<0&&I.iadd(A),I},e.prototype.gcd=function(A){if(this.isZero())return A.abs();if(A.isZero())return this.abs();var M=this.clone(),t=A.clone();M.negative=0,t.negative=0;for(var g=0;M.isEven()&&t.isEven();g++)M.iushrn(1),t.iushrn(1);for(;;){for(;M.isEven();)M.iushrn(1);for(;t.isEven();)t.iushrn(1);var I=M.cmp(t);if(I<0){var e=M;M=t,t=e}else if(0===I||0===t.cmpn(1))break;M.isub(t)}return t.iushln(g)},e.prototype.invm=function(A){return this.egcd(A).a.umod(A)},e.prototype.isEven=function(){return 0==(1&this.words[0])},e.prototype.isOdd=function(){return 1==(1&this.words[0])},e.prototype.andln=function(A){return this.words[0]&A},e.prototype.bincn=function(A){g("number"==typeof A);var M=A%26,t=(A-M)/26,I=1<<M;if(this.length<=t)return this._expand(t+1),this.words[t]|=I,this;for(var e=I,i=t;0!==e&&i<this.length;i++){var T=0|this.words[i];e=(T+=e)>>>26,T&=67108863,this.words[i]=T}return 0!==e&&(this.words[i]=e,this.length++),this},e.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},e.prototype.cmpn=function(A){var M,t=A<0;if(0!==this.negative&&!t)return-1;if(0===this.negative&&t)return 1;if(this._strip(),this.length>1)M=1;else{t&&(A=-A),g(A<=67108863,"Number is too big");var I=0|this.words[0];M=I===A?0:I<A?-1:1}return 0!==this.negative?0|-M:M},e.prototype.cmp=function(A){if(0!==this.negative&&0===A.negative)return-1;if(0===this.negative&&0!==A.negative)return 1;var M=this.ucmp(A);return 0!==this.negative?0|-M:M},e.prototype.ucmp=function(A){if(this.length>A.length)return 1;if(this.length<A.length)return-1;for(var M=0,t=this.length-1;t>=0;t--){var g=0|this.words[t],I=0|A.words[t];if(g!==I){g<I?M=-1:g>I&&(M=1);break}}return M},e.prototype.gtn=function(A){return 1===this.cmpn(A)},e.prototype.gt=function(A){return 1===this.cmp(A)},e.prototype.gten=function(A){return this.cmpn(A)>=0},e.prototype.gte=function(A){return this.cmp(A)>=0},e.prototype.ltn=function(A){return-1===this.cmpn(A)},e.prototype.lt=function(A){return-1===this.cmp(A)},e.prototype.lten=function(A){return this.cmpn(A)<=0},e.prototype.lte=function(A){return this.cmp(A)<=0},e.prototype.eqn=function(A){return 0===this.cmpn(A)},e.prototype.eq=function(A){return 0===this.cmp(A)},e.red=function(A){return new d(A)},e.prototype.toRed=function(A){return g(!this.red,"Already a number in reduction context"),g(0===this.negative,"red works only with positives"),A.convertTo(this)._forceRed(A)},e.prototype.fromRed=function(){return g(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},e.prototype._forceRed=function(A){return this.red=A,this},e.prototype.forceRed=function(A){return g(!this.red,"Already a number in reduction context"),this._forceRed(A)},e.prototype.redAdd=function(A){return g(this.red,"redAdd works only with red numbers"),this.red.add(this,A)},e.prototype.redIAdd=function(A){return g(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,A)},e.prototype.redSub=function(A){return g(this.red,"redSub works only with red numbers"),this.red.sub(this,A)},e.prototype.redISub=function(A){return g(this.red,"redISub works only with red numbers"),this.red.isub(this,A)},e.prototype.redShl=function(A){return g(this.red,"redShl works only with red numbers"),this.red.shl(this,A)},e.prototype.redMul=function(A){return g(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.mul(this,A)},e.prototype.redIMul=function(A){return g(this.red,"redMul works only with red numbers"),this.red._verify2(this,A),this.red.imul(this,A)},e.prototype.redSqr=function(){return g(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},e.prototype.redISqr=function(){return g(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},e.prototype.redSqrt=function(){return g(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},e.prototype.redInvm=function(){return g(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},e.prototype.redNeg=function(){return g(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},e.prototype.redPow=function(A){return g(this.red&&!A.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,A)};var h={k256:null,p224:null,p192:null,p25519:null};function s(A,M){this.name=A,this.p=new e(M,16),this.n=this.p.bitLength(),this.k=new e(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){s.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){s.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function j(){s.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function L(){s.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function d(A){if("string"==typeof A){var M=e._prime(A);this.m=M.p,this.prime=M}else g(A.gtn(1),"modulus must be greater than 1"),this.m=A,this.prime=null}function x(A){d.call(this,A),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new e(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s.prototype._tmp=function(){var A=new e(null);return A.words=new Array(Math.ceil(this.n/13)),A},s.prototype.ireduce=function(A){var M,t=A;do{this.split(t,this.tmp),M=(t=(t=this.imulK(t)).iadd(this.tmp)).bitLength()}while(M>this.n);var g=M<this.n?-1:t.ucmp(this.p);return 0===g?(t.words[0]=0,t.length=1):g>0?t.isub(this.p):void 0!==t.strip?t.strip():t._strip(),t},s.prototype.split=function(A,M){A.iushrn(this.n,0,M)},s.prototype.imulK=function(A){return A.imul(this.k)},I(y,s),y.prototype.split=function(A,M){for(var t=Math.min(A.length,9),g=0;g<t;g++)M.words[g]=A.words[g];if(M.length=t,A.length<=9)return A.words[0]=0,void(A.length=1);var I=A.words[9];for(M.words[M.length++]=4194303&I,g=10;g<A.length;g++){var e=0|A.words[g];A.words[g-10]=(4194303&e)<<4|I>>>22,I=e}I>>>=22,A.words[g-10]=I,0===I&&A.length>10?A.length-=10:A.length-=9},y.prototype.imulK=function(A){A.words[A.length]=0,A.words[A.length+1]=0,A.length+=2;for(var M=0,t=0;t<A.length;t++){var g=0|A.words[t];M+=977*g,A.words[t]=67108863&M,M=64*g+(M/67108864|0)}return 0===A.words[A.length-1]&&(A.length--,0===A.words[A.length-1]&&A.length--),A},I(w,s),I(j,s),I(L,s),L.prototype.imulK=function(A){for(var M=0,t=0;t<A.length;t++){var g=19*(0|A.words[t])+M,I=67108863&g;g>>>=26,A.words[t]=I,M=g}return 0!==M&&(A.words[A.length++]=M),A},e._prime=function(A){if(h[A])return h[A];var M;if("k256"===A)M=new y;else if("p224"===A)M=new w;else if("p192"===A)M=new j;else{if("p25519"!==A)throw new Error("Unknown prime "+A);M=new L}return h[A]=M,M},d.prototype._verify1=function(A){g(0===A.negative,"red works only with positives"),g(A.red,"red works only with red numbers")},d.prototype._verify2=function(A,M){g(0==(A.negative|M.negative),"red works only with positives"),g(A.red&&A.red===M.red,"red works only with red numbers")},d.prototype.imod=function(A){return this.prime?this.prime.ireduce(A)._forceRed(this):(N(A,A.umod(this.m)._forceRed(this)),A)},d.prototype.neg=function(A){return A.isZero()?A.clone():this.m.sub(A)._forceRed(this)},d.prototype.add=function(A,M){this._verify2(A,M);var t=A.add(M);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},d.prototype.iadd=function(A,M){this._verify2(A,M);var t=A.iadd(M);return t.cmp(this.m)>=0&&t.isub(this.m),t},d.prototype.sub=function(A,M){this._verify2(A,M);var t=A.sub(M);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},d.prototype.isub=function(A,M){this._verify2(A,M);var t=A.isub(M);return t.cmpn(0)<0&&t.iadd(this.m),t},d.prototype.shl=function(A,M){return this._verify1(A),this.imod(A.ushln(M))},d.prototype.imul=function(A,M){return this._verify2(A,M),this.imod(A.imul(M))},d.prototype.mul=function(A,M){return this._verify2(A,M),this.imod(A.mul(M))},d.prototype.isqr=function(A){return this.imul(A,A.clone())},d.prototype.sqr=function(A){return this.mul(A,A)},d.prototype.sqrt=function(A){if(A.isZero())return A.clone();var M=this.m.andln(3);if(g(M%2==1),3===M){var t=this.m.add(new e(1)).iushrn(2);return this.pow(A,t)}for(var I=this.m.subn(1),i=0;!I.isZero()&&0===I.andln(1);)i++,I.iushrn(1);g(!I.isZero());var T=new e(1).toRed(this),E=T.redNeg(),N=this.m.subn(1).iushrn(1),n=this.m.bitLength();for(n=new e(2*n*n).toRed(this);0!==this.pow(n,N).cmp(E);)n.redIAdd(E);for(var D=this.pow(n,I),C=this.pow(A,I.addn(1).iushrn(1)),r=this.pow(A,I),c=i;0!==r.cmp(T);){for(var o=r,B=0;0!==o.cmp(T);B++)o=o.redSqr();g(B<c);var Q=this.pow(D,new e(1).iushln(c-B-1));C=C.redMul(Q),D=Q.redSqr(),r=r.redMul(D),c=B}return C},d.prototype.invm=function(A){var M=A._invmp(this.m);return 0!==M.negative?(M.negative=0,this.imod(M).redNeg()):this.imod(M)},d.prototype.pow=function(A,M){if(M.isZero())return new e(1).toRed(this);if(0===M.cmpn(1))return A.clone();var t=new Array(16);t[0]=new e(1).toRed(this),t[1]=A;for(var g=2;g<t.length;g++)t[g]=this.mul(t[g-1],A);var I=t[0],i=0,T=0,E=M.bitLength()%26;for(0===E&&(E=26),g=M.length-1;g>=0;g--){for(var N=M.words[g],n=E-1;n>=0;n--){var D=N>>n&1;I!==t[0]&&(I=this.sqr(I)),0!==D||0!==i?(i<<=1,i|=D,(4===++T||0===g&&0===n)&&(I=this.mul(I,t[i]),T=0,i=0)):T=0}E=26}return I},d.prototype.convertTo=function(A){var M=A.umod(this.m);return M===A?M.clone():M},d.prototype.convertFrom=function(A){var M=A.clone();return M.red=null,M},e.mont=function(A){return new x(A)},I(x,d),x.prototype.convertTo=function(A){return this.imod(A.ushln(this.shift))},x.prototype.convertFrom=function(A){var M=this.imod(A.mul(this.rinv));return M.red=null,M},x.prototype.imul=function(A,M){if(A.isZero()||M.isZero())return A.words[0]=0,A.length=1,A;var t=A.imul(M),g=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),I=t.isub(g).iushrn(this.shift),e=I;return I.cmp(this.m)>=0?e=I.isub(this.m):I.cmpn(0)<0&&(e=I.iadd(this.m)),e._forceRed(this)},x.prototype.mul=function(A,M){if(A.isZero()||M.isZero())return new e(0)._forceRed(this);var t=A.mul(M),g=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),I=t.isub(g).iushrn(this.shift),i=I;return I.cmp(this.m)>=0?i=I.isub(this.m):I.cmpn(0)<0&&(i=I.iadd(this.m)),i._forceRed(this)},x.prototype.invm=function(A){return this.imod(A._invmp(this.m).mul(this.r2))._forceRed(this)}}(A,this)}).call(this,t(92)(A))},function(A,M,t){"use strict";var g=M;g.bignum=t(6),g.define=t(191).define,g.base=t(194),g.constants=t(195),g.decoders=t(103),g.encoders=t(101)},function(A,M,t){"use strict";var g=M;g.der=t(102),g.pem=t(192)},function(A,M,t){"use strict";var g=t(3),I=t(52).Buffer,e=t(53),i=t(55);function T(A){this.enc="der",this.name=A.name,this.entity=A,this.tree=new E,this.tree._init(A.body)}function E(A){e.call(this,"der",A)}function N(A){return A<10?"0"+A:A}A.exports=T,T.prototype.encode=function(A,M){return this.tree._encode(A,M).join()},g(E,e),E.prototype._encodeComposite=function(A,M,t,g){var e=function(A,M,t,g){var I;"seqof"===A?A="seq":"setof"===A&&(A="set");if(i.tagByName.hasOwnProperty(A))I=i.tagByName[A];else{if("number"!=typeof A||(0|A)!==A)return g.error("Unknown tag: "+A);I=A}if(I>=31)return g.error("Multi-octet tag encoding unsupported");M||(I|=32);return I|=i.tagClassByName[t||"universal"]<<6}(A,M,t,this.reporter);if(g.length<128){var T=I.alloc(2);return T[0]=e,T[1]=g.length,this._createEncoderBuffer([T,g])}for(var E=1,N=g.length;N>=256;N>>=8)E++;var n=I.alloc(2+E);n[0]=e,n[1]=128|E;for(var D=1+E,C=g.length;C>0;D--,C>>=8)n[D]=255&C;return this._createEncoderBuffer([n,g])},E.prototype._encodeStr=function(A,M){if("bitstr"===M)return this._createEncoderBuffer([0|A.unused,A.data]);if("bmpstr"===M){for(var t=I.alloc(2*A.length),g=0;g<A.length;g++)t.writeUInt16BE(A.charCodeAt(g),2*g);return this._createEncoderBuffer(t)}return"numstr"===M?this._isNumstr(A)?this._createEncoderBuffer(A):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===M?this._isPrintstr(A)?this._createEncoderBuffer(A):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(M)||"objDesc"===M?this._createEncoderBuffer(A):this.reporter.error("Encoding of string type: "+M+" unsupported")},E.prototype._encodeObjid=function(A,M,t){if("string"==typeof A){if(!M)return this.reporter.error("string objid given, but no values map found");if(!M.hasOwnProperty(A))return this.reporter.error("objid not found in values map");A=M[A].split(/[\s.]+/g);for(var g=0;g<A.length;g++)A[g]|=0}else if(Array.isArray(A)){A=A.slice();for(var e=0;e<A.length;e++)A[e]|=0}if(!Array.isArray(A))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(A));if(!t){if(A[1]>=40)return this.reporter.error("Second objid identifier OOB");A.splice(0,2,40*A[0]+A[1])}for(var i=0,T=0;T<A.length;T++){var E=A[T];for(i++;E>=128;E>>=7)i++}for(var N=I.alloc(i),n=N.length-1,D=A.length-1;D>=0;D--){var C=A[D];for(N[n--]=127&C;(C>>=7)>0;)N[n--]=128|127&C}return this._createEncoderBuffer(N)},E.prototype._encodeTime=function(A,M){var t,g=new Date(A);return"gentime"===M?t=[N(g.getUTCFullYear()),N(g.getUTCMonth()+1),N(g.getUTCDate()),N(g.getUTCHours()),N(g.getUTCMinutes()),N(g.getUTCSeconds()),"Z"].join(""):"utctime"===M?t=[N(g.getUTCFullYear()%100),N(g.getUTCMonth()+1),N(g.getUTCDate()),N(g.getUTCHours()),N(g.getUTCMinutes()),N(g.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+M+" time is not supported yet"),this._encodeStr(t,"octstr")},E.prototype._encodeNull=function(){return this._createEncoderBuffer("")},E.prototype._encodeInt=function(A,M){if("string"==typeof A){if(!M)return this.reporter.error("String int or enum given, but no values map");if(!M.hasOwnProperty(A))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(A));A=M[A]}if("number"!=typeof A&&!I.isBuffer(A)){var t=A.toArray();!A.sign&&128&t[0]&&t.unshift(0),A=I.from(t)}if(I.isBuffer(A)){var g=A.length;0===A.length&&g++;var e=I.alloc(g);return A.copy(e),0===A.length&&(e[0]=0),this._createEncoderBuffer(e)}if(A<128)return this._createEncoderBuffer(A);if(A<256)return this._createEncoderBuffer([0,A]);for(var i=1,T=A;T>=256;T>>=8)i++;for(var E=new Array(i),N=E.length-1;N>=0;N--)E[N]=255&A,A>>=8;return 128&E[0]&&E.unshift(0),this._createEncoderBuffer(I.from(E))},E.prototype._encodeBool=function(A){return this._createEncoderBuffer(A?255:0)},E.prototype._use=function(A,M){return"function"==typeof A&&(A=A(M)),A._getEncoder("der").tree},E.prototype._skipDefault=function(A,M,t){var g,I=this._baseState;if(null===I.default)return!1;var e=A.join();if(void 0===I.defaultBuffer&&(I.defaultBuffer=this._encodeValue(I.default,M,t).join()),e.length!==I.defaultBuffer.length)return!1;for(g=0;g<e.length;g++)if(e[g]!==I.defaultBuffer[g])return!1;return!0}},function(A,M,t){"use strict";var g=M;g.der=t(104),g.pem=t(193)},function(A,M,t){"use strict";var g=t(3),I=t(6),e=t(28).DecoderBuffer,i=t(53),T=t(55);function E(A){this.enc="der",this.name=A.name,this.entity=A,this.tree=new N,this.tree._init(A.body)}function N(A){i.call(this,"der",A)}function n(A,M){var t=A.readUInt8(M);if(A.isError(t))return t;var g=T.tagClass[t>>6],I=0==(32&t);if(31==(31&t)){var e=t;for(t=0;128==(128&e);){if(e=A.readUInt8(M),A.isError(e))return e;t<<=7,t|=127&e}}else t&=31;return{cls:g,primitive:I,tag:t,tagStr:T.tag[t]}}function D(A,M,t){var g=A.readUInt8(t);if(A.isError(g))return g;if(!M&&128===g)return null;if(0==(128&g))return g;var I=127&g;if(I>4)return A.error("length octect is too long");g=0;for(var e=0;e<I;e++){g<<=8;var i=A.readUInt8(t);if(A.isError(i))return i;g|=i}return g}A.exports=E,E.prototype.decode=function(A,M){return e.isDecoderBuffer(A)||(A=new e(A,M)),this.tree._decode(A,M)},g(N,i),N.prototype._peekTag=function(A,M,t){if(A.isEmpty())return!1;var g=A.save(),I=n(A,'Failed to peek tag: "'+M+'"');return A.isError(I)?I:(A.restore(g),I.tag===M||I.tagStr===M||I.tagStr+"of"===M||t)},N.prototype._decodeTag=function(A,M,t){var g=n(A,'Failed to decode tag of "'+M+'"');if(A.isError(g))return g;var I=D(A,g.primitive,'Failed to get length of "'+M+'"');if(A.isError(I))return I;if(!t&&g.tag!==M&&g.tagStr!==M&&g.tagStr+"of"!==M)return A.error('Failed to match tag: "'+M+'"');if(g.primitive||null!==I)return A.skip(I,'Failed to match body of: "'+M+'"');var e=A.save(),i=this._skipUntilEnd(A,'Failed to skip indefinite length body: "'+this.tag+'"');return A.isError(i)?i:(I=A.offset-e.offset,A.restore(e),A.skip(I,'Failed to match body of: "'+M+'"'))},N.prototype._skipUntilEnd=function(A,M){for(;;){var t=n(A,M);if(A.isError(t))return t;var g=D(A,t.primitive,M);if(A.isError(g))return g;var I=void 0;if(I=t.primitive||null!==g?A.skip(g):this._skipUntilEnd(A,M),A.isError(I))return I;if("end"===t.tagStr)break}},N.prototype._decodeList=function(A,M,t,g){for(var I=[];!A.isEmpty();){var e=this._peekTag(A,"end");if(A.isError(e))return e;var i=t.decode(A,"der",g);if(A.isError(i)&&e)break;I.push(i)}return I},N.prototype._decodeStr=function(A,M){if("bitstr"===M){var t=A.readUInt8();return A.isError(t)?t:{unused:t,data:A.raw()}}if("bmpstr"===M){var g=A.raw();if(g.length%2==1)return A.error("Decoding of string type: bmpstr length mismatch");for(var I="",e=0;e<g.length/2;e++)I+=String.fromCharCode(g.readUInt16BE(2*e));return I}if("numstr"===M){var i=A.raw().toString("ascii");return this._isNumstr(i)?i:A.error("Decoding of string type: numstr unsupported characters")}if("octstr"===M)return A.raw();if("objDesc"===M)return A.raw();if("printstr"===M){var T=A.raw().toString("ascii");return this._isPrintstr(T)?T:A.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(M)?A.raw().toString():A.error("Decoding of string type: "+M+" unsupported")},N.prototype._decodeObjid=function(A,M,t){for(var g,I=[],e=0,i=0;!A.isEmpty();)e<<=7,e|=127&(i=A.readUInt8()),0==(128&i)&&(I.push(e),e=0);128&i&&I.push(e);var T=I[0]/40|0,E=I[0]%40;if(g=t?I:[T,E].concat(I.slice(1)),M){var N=M[g.join(" ")];void 0===N&&(N=M[g.join(".")]),void 0!==N&&(g=N)}return g},N.prototype._decodeTime=function(A,M){var t,g,I,e,i,T,E=A.raw().toString();if("gentime"===M)t=0|E.slice(0,4),g=0|E.slice(4,6),I=0|E.slice(6,8),e=0|E.slice(8,10),i=0|E.slice(10,12),T=0|E.slice(12,14);else{if("utctime"!==M)return A.error("Decoding "+M+" time is not supported yet");t=0|E.slice(0,2),g=0|E.slice(2,4),I=0|E.slice(4,6),e=0|E.slice(6,8),i=0|E.slice(8,10),T=0|E.slice(10,12),t=t<70?2e3+t:1900+t}return Date.UTC(t,g-1,I,e,i,T,0)},N.prototype._decodeNull=function(){return null},N.prototype._decodeBool=function(A){var M=A.readUInt8();return A.isError(M)?M:0!==M},N.prototype._decodeInt=function(A,M){var t=A.raw(),g=new I(t);return M&&(g=M[g.toString(10)]||g),g},N.prototype._use=function(A,M){return"function"==typeof A&&(A=A(M)),A._getDecoder("der").tree}},function(A){A.exports=JSON.parse('{"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}')},function(A,M,t){var g=t(23),I=t(4).Buffer;function e(A){var M=I.allocUnsafe(4);return M.writeUInt32BE(A,0),M}A.exports=function(A,M){for(var t,i=I.alloc(0),T=0;i.length<M;)t=e(T++),i=I.concat([i,g("sha1").update(A).update(t).digest()]);return i.slice(0,M)}},function(A,M){A.exports=function(A,M){for(var t=A.length,g=-1;++g<t;)A[g]^=M[g];return A}},function(A,M,t){var g=t(6),I=t(4).Buffer;A.exports=function(A,M){return I.from(A.toRed(g.mont(M.modulus)).redPow(new g(M.publicExponent)).fromRed().toArray())}},function(A,M,t){"use strict";A.exports=function(A,M){return M||(M={}),"string"!=typeof(A=A&&A.__esModule?A.default:A)?A:(/^['"].*['"]$/.test(A)&&(A=A.slice(1,-1)),M.hash&&(A+=M.hash),/["'() \t\n]/.test(A)||M.needQuotes?'"'.concat(A.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):A)}},function(A,M,t){"use strict";(function(M){var g,I=(g=t(113))&&"object"==typeof g&&"default"in g?g.default:g;A.exports=function(A){for(var t,g=(t=A,I.atob?I.atob(t):M.from(t,"base64").toString("binary")),e=new Uint8Array(g.length),i=0;i<g.length;i++)e[i]=g.charCodeAt(i);return e}}).call(this,t(9).Buffer)},function(A,M,t){"use strict";M.byteLength=function(A){var M=N(A),t=M[0],g=M[1];return 3*(t+g)/4-g},M.toByteArray=function(A){var M,t,g=N(A),i=g[0],T=g[1],E=new e(function(A,M,t){return 3*(M+t)/4-t}(0,i,T)),n=0,D=T>0?i-4:i;for(t=0;t<D;t+=4)M=I[A.charCodeAt(t)]<<18|I[A.charCodeAt(t+1)]<<12|I[A.charCodeAt(t+2)]<<6|I[A.charCodeAt(t+3)],E[n++]=M>>16&255,E[n++]=M>>8&255,E[n++]=255&M;2===T&&(M=I[A.charCodeAt(t)]<<2|I[A.charCodeAt(t+1)]>>4,E[n++]=255&M);1===T&&(M=I[A.charCodeAt(t)]<<10|I[A.charCodeAt(t+1)]<<4|I[A.charCodeAt(t+2)]>>2,E[n++]=M>>8&255,E[n++]=255&M);return E},M.fromByteArray=function(A){for(var M,t=A.length,I=t%3,e=[],i=0,T=t-I;i<T;i+=16383)e.push(n(A,i,i+16383>T?T:i+16383));1===I?(M=A[t-1],e.push(g[M>>2]+g[M<<4&63]+"==")):2===I&&(M=(A[t-2]<<8)+A[t-1],e.push(g[M>>10]+g[M>>4&63]+g[M<<2&63]+"="));return e.join("")};for(var g=[],I=[],e="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",T=0,E=i.length;T<E;++T)g[T]=i[T],I[i.charCodeAt(T)]=T;function N(A){var M=A.length;if(M%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var t=A.indexOf("=");return-1===t&&(t=M),[t,t===M?0:4-t%4]}function n(A,M,t){for(var I,e,i=[],T=M;T<t;T+=3)I=(A[T]<<16&16711680)+(A[T+1]<<8&65280)+(255&A[T+2]),i.push(g[(e=I)>>18&63]+g[e>>12&63]+g[e>>6&63]+g[63&e]);return i.join("")}I["-".charCodeAt(0)]=62,I["_".charCodeAt(0)]=63},function(A,M){M.read=function(A,M,t,g,I){var e,i,T=8*I-g-1,E=(1<<T)-1,N=E>>1,n=-7,D=t?I-1:0,C=t?-1:1,r=A[M+D];for(D+=C,e=r&(1<<-n)-1,r>>=-n,n+=T;n>0;e=256*e+A[M+D],D+=C,n-=8);for(i=e&(1<<-n)-1,e>>=-n,n+=g;n>0;i=256*i+A[M+D],D+=C,n-=8);if(0===e)e=1-N;else{if(e===E)return i?NaN:1/0*(r?-1:1);i+=Math.pow(2,g),e-=N}return(r?-1:1)*i*Math.pow(2,e-g)},M.write=function(A,M,t,g,I,e){var i,T,E,N=8*e-I-1,n=(1<<N)-1,D=n>>1,C=23===I?Math.pow(2,-24)-Math.pow(2,-77):0,r=g?0:e-1,c=g?1:-1,o=M<0||0===M&&1/M<0?1:0;for(M=Math.abs(M),isNaN(M)||M===1/0?(T=isNaN(M)?1:0,i=n):(i=Math.floor(Math.log(M)/Math.LN2),M*(E=Math.pow(2,-i))<1&&(i--,E*=2),(M+=i+D>=1?C/E:C*Math.pow(2,1-D))*E>=2&&(i++,E/=2),i+D>=n?(T=0,i=n):i+D>=1?(T=(M*E-1)*Math.pow(2,I),i+=D):(T=M*Math.pow(2,D-1)*Math.pow(2,I),i=0));I>=8;A[t+r]=255&T,r+=c,T/=256,I-=8);for(i=i<<I|T,N+=I;N>0;A[t+r]=255&i,r+=c,i/=256,N-=8);A[t+r-c]|=128*o}},function(A,M,t){(function(M){var t;t="undefined"!=typeof window?window:void 0!==M?M:"undefined"!=typeof self?self:{},A.exports=t}).call(this,t(10))},function(A,M,t){(function(M,t){
-/*!
- * @overview es6-promise - a tiny implementation of Promises/A+.
- * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
- * @license   Licensed under MIT license
- *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
- * @version   v4.2.8+1e68dce6
- */
-var g;g=function(){"use strict";function A(A){return"function"==typeof A}var g=Array.isArray?Array.isArray:function(A){return"[object Array]"===Object.prototype.toString.call(A)},I=0,e=void 0,i=void 0,T=function(A,M){c[I]=A,c[I+1]=M,2===(I+=2)&&(i?i(o):Q())},E="undefined"!=typeof window?window:void 0,N=E||{},n=N.MutationObserver||N.WebKitMutationObserver,D="undefined"==typeof self&&void 0!==M&&"[object process]"==={}.toString.call(M),C="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function r(){var A=setTimeout;return function(){return A(o,1)}}var c=new Array(1e3);function o(){for(var A=0;A<I;A+=2)(0,c[A])(c[A+1]),c[A]=void 0,c[A+1]=void 0;I=0}var B,Q=void 0;function a(A,M){var t=this,g=new this.constructor(y);void 0===g[s]&&z(g);var I=t._state;if(I){var e=arguments[I-1];T((function(){return S(I,g,e,t._result)}))}else Y(t,g,A,M);return g}function h(A){if(A&&"object"==typeof A&&A.constructor===this)return A;var M=new this(y);return j(M,A),M}D?Q=function(){return M.nextTick(o)}:n?Q=function(){var A=0,M=new n(o),t=document.createTextNode("");return M.observe(t,{characterData:!0}),function(){t.data=A=++A%2}}():C?((B=new MessageChannel).port1.onmessage=o,Q=function(){return B.port2.postMessage(0)}):Q=void 0===E?function(){try{var A=Function("return this")().require("vertx");return void 0!==(e=A.runOnLoop||A.runOnContext)?function(){e(o)}:r()}catch(A){return r()}}():r();var s=Math.random().toString(36).substring(2);function y(){}function w(M,t,g){t.constructor===M.constructor&&g===a&&t.constructor.resolve===h?function(A,M){1===M._state?d(A,M._result):2===M._state?x(A,M._result):Y(M,void 0,(function(M){return j(A,M)}),(function(M){return x(A,M)}))}(M,t):void 0===g?d(M,t):A(g)?function(A,M,t){T((function(A){var g=!1,I=function(A,M,t,g){try{A.call(M,t,g)}catch(A){return A}}(t,M,(function(t){g||(g=!0,M!==t?j(A,t):d(A,t))}),(function(M){g||(g=!0,x(A,M))}),A._label);!g&&I&&(g=!0,x(A,I))}),A)}(M,t,g):d(M,t)}function j(A,M){if(A===M)x(A,new TypeError("You cannot resolve a promise with itself"));else if(I=typeof(g=M),null===g||"object"!==I&&"function"!==I)d(A,M);else{var t=void 0;try{t=M.then}catch(M){return void x(A,M)}w(A,M,t)}var g,I}function L(A){A._onerror&&A._onerror(A._result),u(A)}function d(A,M){void 0===A._state&&(A._result=M,A._state=1,0!==A._subscribers.length&&T(u,A))}function x(A,M){void 0===A._state&&(A._state=2,A._result=M,T(L,A))}function Y(A,M,t,g){var I=A._subscribers,e=I.length;A._onerror=null,I[e]=M,I[e+1]=t,I[e+2]=g,0===e&&A._state&&T(u,A)}function u(A){var M=A._subscribers,t=A._state;if(0!==M.length){for(var g=void 0,I=void 0,e=A._result,i=0;i<M.length;i+=3)g=M[i],I=M[i+t],g?S(t,g,I,e):I(e);A._subscribers.length=0}}function S(M,t,g,I){var e=A(g),i=void 0,T=void 0,E=!0;if(e){try{i=g(I)}catch(A){E=!1,T=A}if(t===i)return void x(t,new TypeError("A promises callback cannot return that same promise."))}else i=I;void 0!==t._state||(e&&E?j(t,i):!1===E?x(t,T):1===M?d(t,i):2===M&&x(t,i))}var l=0;function z(A){A[s]=l++,A._state=void 0,A._result=void 0,A._subscribers=[]}var U=function(){function A(A,M){this._instanceConstructor=A,this.promise=new A(y),this.promise[s]||z(this.promise),g(M)?(this.length=M.length,this._remaining=M.length,this._result=new Array(this.length),0===this.length?d(this.promise,this._result):(this.length=this.length||0,this._enumerate(M),0===this._remaining&&d(this.promise,this._result))):x(this.promise,new Error("Array Methods must be provided an Array"))}return A.prototype._enumerate=function(A){for(var M=0;void 0===this._state&&M<A.length;M++)this._eachEntry(A[M],M)},A.prototype._eachEntry=function(A,M){var t=this._instanceConstructor,g=t.resolve;if(g===h){var I=void 0,e=void 0,i=!1;try{I=A.then}catch(A){i=!0,e=A}if(I===a&&void 0!==A._state)this._settledAt(A._state,M,A._result);else if("function"!=typeof I)this._remaining--,this._result[M]=A;else if(t===f){var T=new t(y);i?x(T,e):w(T,A,I),this._willSettleAt(T,M)}else this._willSettleAt(new t((function(M){return M(A)})),M)}else this._willSettleAt(g(A),M)},A.prototype._settledAt=function(A,M,t){var g=this.promise;void 0===g._state&&(this._remaining--,2===A?x(g,t):this._result[M]=t),0===this._remaining&&d(g,this._result)},A.prototype._willSettleAt=function(A,M){var t=this;Y(A,void 0,(function(A){return t._settledAt(1,M,A)}),(function(A){return t._settledAt(2,M,A)}))},A}(),f=function(){function M(A){this[s]=l++,this._result=this._state=void 0,this._subscribers=[],y!==A&&("function"!=typeof A&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof M?function(A,M){try{M((function(M){j(A,M)}),(function(M){x(A,M)}))}catch(M){x(A,M)}}(this,A):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return M.prototype.catch=function(A){return this.then(null,A)},M.prototype.finally=function(M){var t=this.constructor;return A(M)?this.then((function(A){return t.resolve(M()).then((function(){return A}))}),(function(A){return t.resolve(M()).then((function(){throw A}))})):this.then(M,M)},M}();return f.prototype.then=a,f.all=function(A){return new U(this,A).promise},f.race=function(A){var M=this;return g(A)?new M((function(t,g){for(var I=A.length,e=0;e<I;e++)M.resolve(A[e]).then(t,g)})):new M((function(A,M){return M(new TypeError("You must pass an array to race."))}))},f.resolve=h,f.reject=function(A){var M=new this(y);return x(M,A),M},f._setScheduler=function(A){i=A},f._setAsap=function(A){T=A},f._asap=T,f.polyfill=function(){var A=void 0;if(void 0!==t)A=t;else if("undefined"!=typeof self)A=self;else try{A=Function("return this")()}catch(A){throw new Error("polyfill failed because global object is unavailable in this environment")}var M=A.Promise;if(M){var g=null;try{g=Object.prototype.toString.call(M.resolve())}catch(A){}if("[object Promise]"===g&&!M.cast)return}A.Promise=f},f.Promise=f,f},A.exports=g()}).call(this,t(8),t(10))},function(A,M){var t=arguments[3],g=arguments[4],I=arguments[5],e=JSON.stringify;A.exports=function(A,M){for(var i,T=Object.keys(I),E=0,N=T.length;E<N;E++){var n=T[E],D=I[n].exports;if(D===A||D&&D.default===A){i=n;break}}if(!i){i=Math.floor(Math.pow(16,8)*Math.random()).toString(16);var C={};for(E=0,N=T.length;E<N;E++){C[n=T[E]]=n}g[i]=["function(require,module,exports){"+A+"(self); }",C]}var r=Math.floor(Math.pow(16,8)*Math.random()).toString(16),c={};c[i]=i,g[r]=["function(require,module,exports){var f = require("+e(i)+");(f.default ? f.default : f)(self);}",c];var o={};!function A(M){for(var t in o[M]=!0,g[M][1]){var I=g[M][1][t];o[I]||A(I)}}(r);var B="("+t+")({"+Object.keys(o).map((function(A){return e(A)+":["+g[A][0]+","+e(g[A][1])+"]"})).join(",")+"},{},["+e(r)+"])",Q=window.URL||window.webkitURL||window.mozURL||window.msURL,a=new Blob([B],{type:"text/javascript"});if(M&&M.bare)return a;var h=Q.createObjectURL(a),s=new Worker(h);return s.objectURL=h,s}},function(A,M){A.exports=function(A){if(!A.webpackPolyfill){var M=Object.create(A);M.children||(M.children=[]),Object.defineProperty(M,"loaded",{enumerable:!0,get:function(){return M.l}}),Object.defineProperty(M,"id",{enumerable:!0,get:function(){return M.i}}),Object.defineProperty(M,"exports",{enumerable:!0}),M.webpackPolyfill=1}return M}},function(A,M,t){"use strict";M.__esModule=!0;var g=Object.assign||function(A){for(var M=1;M<arguments.length;M++){var t=arguments[M];for(var g in t)Object.prototype.hasOwnProperty.call(t,g)&&(A[g]=t[g])}return A};M.default=function(A){var M=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=0,T={},D=M.getImportObject,C=N(M,["getImportObject"]),r=new Worker("data:,ACTIONS="+JSON.stringify(I.default)+";getImportObject="+D+";importObject=undefined;wasmModule=null;moduleInstance=null;onmessage="+e.default,C);return r.onmessage=function(A){var M=A.data,e=M.id,i=M.result,N=M.action,D=M.payload;if(N===I.default.COMPILE_MODULE)if(0===i){var C=D.exports;T[e][0]({exports:C.reduce((function(A,M){return g({},A,E({},M,(function(){for(var A=arguments.length,g=Array(A),e=0;e<A;e++)g[e]=arguments[e];return new Promise((function(){for(var A=arguments.length,e=Array(A),i=0;i<A;i++)e[i]=arguments[i];T[++t]=e,r.postMessage({id:t,action:I.default.CALL_FUNCTION_EXPORT,payload:{func:M,params:g}},n(g))}))})))}),{}),run:function(A,M){return new Promise((function(){for(var g=arguments.length,e=Array(g),i=0;i<g;i++)e[i]=arguments[i];T[++t]=e,r.postMessage({id:t,action:I.default.RUN_FUNCTION,payload:{func:A.toString(),params:M}},n(M))}))}})}else 1===i&&T[e][1](D);else N!==I.default.CALL_FUNCTION_EXPORT&&N!==I.default.RUN_FUNCTION||T[e][i](D);T[e]=null},new Promise((function(){for(var M=arguments.length,g=Array(M),e=0;e<M;e++)g[e]=arguments[e];T[++t]=[].concat(g),r.postMessage({id:t,action:I.default.COMPILE_MODULE,payload:(0,i.getWasmSource)(A)})}))};var I=T(t(118)),e=T(t(119)),i=t(120);function T(A){return A&&A.__esModule?A:{default:A}}function E(A,M,t){return M in A?Object.defineProperty(A,M,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[M]=t,A}function N(A,M){var t={};for(var g in A)M.indexOf(g)>=0||Object.prototype.hasOwnProperty.call(A,g)&&(t[g]=A[g]);return t}var n=function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return A.filter((function(A){return A instanceof ArrayBuffer||A instanceof MessagePort||A instanceof ImageBitmap}))}},function(A,M,t){"use strict";M.__esModule=!0;M.default={COMPILE_MODULE:0,CALL_FUNCTION_EXPORT:1,RUN_FUNCTION:2}},function(A,M,t){"use strict";M.__esModule=!0,M.default=function(A){var M=A.data,t=M.id,g=M.action,I=M.payload,e=function(A,M){self.postMessage({id:t,action:g,result:A,payload:M})},i=function(A){return e(1,""+A)},T=e.bind(null,0);if(g===ACTIONS.COMPILE_MODULE)Promise.resolve().then((function(){var A=void 0;if(void 0!==getImportObject&&(importObject=getImportObject()),"string"==typeof I){if(A=fetch(I),void 0!==WebAssembly.instantiateStreaming)return WebAssembly.instantiateStreaming(A,importObject);A=A.then((function(A){return A.arrayBuffer()}))}else A=Promise.resolve(I);return A.then((function(A){return WebAssembly.compile(A)})).then((function(A){return WebAssembly.instantiate(A,importObject).then((function(M){return{module:A,instance:M}}))}))})).then((function(A){var M=A.module,t=A.instance;moduleInstance=t,wasmModule=M,T({exports:WebAssembly.Module.exports(M).filter((function(A){return"function"===A.kind})).map((function(A){return A.name}))})})).catch(i);else if(g===ACTIONS.CALL_FUNCTION_EXPORT){var E=I.func,N=I.params;Promise.resolve().then((function(){var A=moduleInstance.exports;T(A[E].apply(A,N))})).catch(i)}else if(g===ACTIONS.RUN_FUNCTION){var n=I.func,D=I.params;Promise.resolve().then((function(){var A=new Function("return "+n)();T(A({module:wasmModule,instance:moduleInstance,importObject:importObject,params:D}))})).catch(i)}}},function(A,M,t){"use strict";M.__esModule=!0;M.getWasmSource=function(A){var M=A;return"string"==typeof M&&"undefined"!=typeof location&&(0===(M=M.trim()).indexOf("/")?M=location.origin+M:0!==M.indexOf("http")&&(M=location.href+("/"===location.href[location.href.length-1]?"":"/")+M)),M}},function(A,M){},function(A,M,t){(function(A){function t(A,M){for(var t=0,g=A.length-1;g>=0;g--){var I=A[g];"."===I?A.splice(g,1):".."===I?(A.splice(g,1),t++):t&&(A.splice(g,1),t--)}if(M)for(;t--;t)A.unshift("..");return A}function g(A,M){if(A.filter)return A.filter(M);for(var t=[],g=0;g<A.length;g++)M(A[g],g,A)&&t.push(A[g]);return t}M.resolve=function(){for(var M="",I=!1,e=arguments.length-1;e>=-1&&!I;e--){var i=e>=0?arguments[e]:A.cwd();if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");i&&(M=i+"/"+M,I="/"===i.charAt(0))}return(I?"/":"")+(M=t(g(M.split("/"),(function(A){return!!A})),!I).join("/"))||"."},M.normalize=function(A){var e=M.isAbsolute(A),i="/"===I(A,-1);return(A=t(g(A.split("/"),(function(A){return!!A})),!e).join("/"))||e||(A="."),A&&i&&(A+="/"),(e?"/":"")+A},M.isAbsolute=function(A){return"/"===A.charAt(0)},M.join=function(){var A=Array.prototype.slice.call(arguments,0);return M.normalize(g(A,(function(A,M){if("string"!=typeof A)throw new TypeError("Arguments to path.join must be strings");return A})).join("/"))},M.relative=function(A,t){function g(A){for(var M=0;M<A.length&&""===A[M];M++);for(var t=A.length-1;t>=0&&""===A[t];t--);return M>t?[]:A.slice(M,t-M+1)}A=M.resolve(A).substr(1),t=M.resolve(t).substr(1);for(var I=g(A.split("/")),e=g(t.split("/")),i=Math.min(I.length,e.length),T=i,E=0;E<i;E++)if(I[E]!==e[E]){T=E;break}var N=[];for(E=T;E<I.length;E++)N.push("..");return(N=N.concat(e.slice(T))).join("/")},M.sep="/",M.delimiter=":",M.dirname=function(A){if("string"!=typeof A&&(A+=""),0===A.length)return".";for(var M=A.charCodeAt(0),t=47===M,g=-1,I=!0,e=A.length-1;e>=1;--e)if(47===(M=A.charCodeAt(e))){if(!I){g=e;break}}else I=!1;return-1===g?t?"/":".":t&&1===g?"/":A.slice(0,g)},M.basename=function(A,M){var t=function(A){"string"!=typeof A&&(A+="");var M,t=0,g=-1,I=!0;for(M=A.length-1;M>=0;--M)if(47===A.charCodeAt(M)){if(!I){t=M+1;break}}else-1===g&&(I=!1,g=M+1);return-1===g?"":A.slice(t,g)}(A);return M&&t.substr(-1*M.length)===M&&(t=t.substr(0,t.length-M.length)),t},M.extname=function(A){"string"!=typeof A&&(A+="");for(var M=-1,t=0,g=-1,I=!0,e=0,i=A.length-1;i>=0;--i){var T=A.charCodeAt(i);if(47!==T)-1===g&&(I=!1,g=i+1),46===T?-1===M?M=i:1!==e&&(e=1):-1!==M&&(e=-1);else if(!I){t=i+1;break}}return-1===M||-1===g||0===e||1===e&&M===g-1&&M===t+1?"":A.slice(M,g)};var I="b"==="ab".substr(-1)?function(A,M,t){return A.substr(M,t)}:function(A,M,t){return M<0&&(M=A.length+M),A.substr(M,t)}}).call(this,t(8))},function(A,M,t){"use strict";M.randomBytes=M.rng=M.pseudoRandomBytes=M.prng=t(18),M.createHash=M.Hash=t(23),M.createHmac=M.Hmac=t(76);var g=t(147),I=Object.keys(g),e=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(I);M.getHashes=function(){return e};var i=t(79);M.pbkdf2=i.pbkdf2,M.pbkdf2Sync=i.pbkdf2Sync;var T=t(149);M.Cipher=T.Cipher,M.createCipher=T.createCipher,M.Cipheriv=T.Cipheriv,M.createCipheriv=T.createCipheriv,M.Decipher=T.Decipher,M.createDecipher=T.createDecipher,M.Decipheriv=T.Decipheriv,M.createDecipheriv=T.createDecipheriv,M.getCiphers=T.getCiphers,M.listCiphers=T.listCiphers;var E=t(164);M.DiffieHellmanGroup=E.DiffieHellmanGroup,M.createDiffieHellmanGroup=E.createDiffieHellmanGroup,M.getDiffieHellman=E.getDiffieHellman,M.createDiffieHellman=E.createDiffieHellman,M.DiffieHellman=E.DiffieHellman;var N=t(169);M.createSign=N.createSign,M.Sign=N.Sign,M.createVerify=N.createVerify,M.Verify=N.Verify,M.createECDH=t(200);var n=t(201);M.publicEncrypt=n.publicEncrypt,M.privateEncrypt=n.privateEncrypt,M.publicDecrypt=n.publicDecrypt,M.privateDecrypt=n.privateDecrypt;var D=t(204);M.randomFill=D.randomFill,M.randomFillSync=D.randomFillSync,M.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))},M.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},function(A,M){},function(A,M,t){"use strict";function g(A,M){var t=Object.keys(A);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(A);M&&(g=g.filter((function(M){return Object.getOwnPropertyDescriptor(A,M).enumerable}))),t.push.apply(t,g)}return t}function I(A,M,t){return M in A?Object.defineProperty(A,M,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[M]=t,A}function e(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var i=t(9).Buffer,T=t(126).inspect,E=T&&T.custom||"inspect";A.exports=function(){function A(){!function(A,M){if(!(A instanceof M))throw new TypeError("Cannot call a class as a function")}(this,A),this.head=null,this.tail=null,this.length=0}var M,t,N;return M=A,(t=[{key:"push",value:function(A){var M={data:A,next:null};this.length>0?this.tail.next=M:this.head=M,this.tail=M,++this.length}},{key:"unshift",value:function(A){var M={data:A,next:this.head};0===this.length&&(this.tail=M),this.head=M,++this.length}},{key:"shift",value:function(){if(0!==this.length){var A=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,A}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(A){if(0===this.length)return"";for(var M=this.head,t=""+M.data;M=M.next;)t+=A+M.data;return t}},{key:"concat",value:function(A){if(0===this.length)return i.alloc(0);for(var M,t,g,I=i.allocUnsafe(A>>>0),e=this.head,T=0;e;)M=e.data,t=I,g=T,i.prototype.copy.call(M,t,g),T+=e.data.length,e=e.next;return I}},{key:"consume",value:function(A,M){var t;return A<this.head.data.length?(t=this.head.data.slice(0,A),this.head.data=this.head.data.slice(A)):t=A===this.head.data.length?this.shift():M?this._getString(A):this._getBuffer(A),t}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(A){var M=this.head,t=1,g=M.data;for(A-=g.length;M=M.next;){var I=M.data,e=A>I.length?I.length:A;if(e===I.length?g+=I:g+=I.slice(0,A),0==(A-=e)){e===I.length?(++t,M.next?this.head=M.next:this.head=this.tail=null):(this.head=M,M.data=I.slice(e));break}++t}return this.length-=t,g}},{key:"_getBuffer",value:function(A){var M=i.allocUnsafe(A),t=this.head,g=1;for(t.data.copy(M),A-=t.data.length;t=t.next;){var I=t.data,e=A>I.length?I.length:A;if(I.copy(M,M.length-A,0,e),0==(A-=e)){e===I.length?(++g,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=I.slice(e));break}++g}return this.length-=g,M}},{key:E,value:function(A,M){return T(this,function(A){for(var M=1;M<arguments.length;M++){var t=null!=arguments[M]?arguments[M]:{};M%2?g(Object(t),!0).forEach((function(M){I(A,M,t[M])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(t)):g(Object(t)).forEach((function(M){Object.defineProperty(A,M,Object.getOwnPropertyDescriptor(t,M))}))}return A}({},M,{depth:0,customInspect:!1}))}}])&&e(M.prototype,t),N&&e(M,N),A}()},function(A,M){},function(A,M,t){"use strict";(function(M){var g;function I(A,M,t){return M in A?Object.defineProperty(A,M,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[M]=t,A}var e=t(38),i=Symbol("lastResolve"),T=Symbol("lastReject"),E=Symbol("error"),N=Symbol("ended"),n=Symbol("lastPromise"),D=Symbol("handlePromise"),C=Symbol("stream");function r(A,M){return{value:A,done:M}}function c(A){var M=A[i];if(null!==M){var t=A[C].read();null!==t&&(A[n]=null,A[i]=null,A[T]=null,M(r(t,!1)))}}function o(A){M.nextTick(c,A)}var B=Object.getPrototypeOf((function(){})),Q=Object.setPrototypeOf((I(g={get stream(){return this[C]},next:function(){var A=this,t=this[E];if(null!==t)return Promise.reject(t);if(this[N])return Promise.resolve(r(void 0,!0));if(this[C].destroyed)return new Promise((function(t,g){M.nextTick((function(){A[E]?g(A[E]):t(r(void 0,!0))}))}));var g,I=this[n];if(I)g=new Promise(function(A,M){return function(t,g){A.then((function(){M[N]?t(r(void 0,!0)):M[D](t,g)}),g)}}(I,this));else{var e=this[C].read();if(null!==e)return Promise.resolve(r(e,!1));g=new Promise(this[D])}return this[n]=g,g}},Symbol.asyncIterator,(function(){return this})),I(g,"return",(function(){var A=this;return new Promise((function(M,t){A[C].destroy(null,(function(A){A?t(A):M(r(void 0,!0))}))}))})),g),B);A.exports=function(A){var M,t=Object.create(Q,(I(M={},C,{value:A,writable:!0}),I(M,i,{value:null,writable:!0}),I(M,T,{value:null,writable:!0}),I(M,E,{value:null,writable:!0}),I(M,N,{value:A._readableState.endEmitted,writable:!0}),I(M,D,{value:function(A,M){var g=t[C].read();g?(t[n]=null,t[i]=null,t[T]=null,A(r(g,!1))):(t[i]=A,t[T]=M)},writable:!0}),M));return t[n]=null,e(A,(function(A){if(A&&"ERR_STREAM_PREMATURE_CLOSE"!==A.code){var M=t[T];return null!==M&&(t[n]=null,t[i]=null,t[T]=null,M(A)),void(t[E]=A)}var g=t[i];null!==g&&(t[n]=null,t[i]=null,t[T]=null,g(r(void 0,!0))),t[N]=!0})),A.on("readable",o.bind(null,t)),t}}).call(this,t(8))},function(A,M){A.exports=function(){throw new Error("Readable.from is not available in the browser")}},function(A,M,t){"use strict";A.exports=I;var g=t(69);function I(A){if(!(this instanceof I))return new I(A);g.call(this,A)}t(3)(I,g),I.prototype._transform=function(A,M,t){t(null,A)}},function(A,M,t){"use strict";var g;var I=t(19).codes,e=I.ERR_MISSING_ARGS,i=I.ERR_STREAM_DESTROYED;function T(A){if(A)throw A}function E(A,M,I,e){e=function(A){var M=!1;return function(){M||(M=!0,A.apply(void 0,arguments))}}(e);var T=!1;A.on("close",(function(){T=!0})),void 0===g&&(g=t(38)),g(A,{readable:M,writable:I},(function(A){if(A)return e(A);T=!0,e()}));var E=!1;return function(M){if(!T&&!E)return E=!0,function(A){return A.setHeader&&"function"==typeof A.abort}(A)?A.abort():"function"==typeof A.destroy?A.destroy():void e(M||new i("pipe"))}}function N(A){A()}function n(A,M){return A.pipe(M)}function D(A){return A.length?"function"!=typeof A[A.length-1]?T:A.pop():T}A.exports=function(){for(var A=arguments.length,M=new Array(A),t=0;t<A;t++)M[t]=arguments[t];var g,I=D(M);if(Array.isArray(M[0])&&(M=M[0]),M.length<2)throw new e("streams");var i=M.map((function(A,t){var e=t<M.length-1;return E(A,e,t>0,(function(A){g||(g=A),A&&i.forEach(N),e||(i.forEach(N),I(g))}))}));return M.reduce(n)}},function(A,M,t){var g=t(3),I=t(21),e=t(4).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],T=new Array(80);function E(){this.init(),this._w=T,I.call(this,64,56)}function N(A){return A<<30|A>>>2}function n(A,M,t,g){return 0===A?M&t|~M&g:2===A?M&t|M&g|t&g:M^t^g}g(E,I),E.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},E.prototype._update=function(A){for(var M,t=this._w,g=0|this._a,I=0|this._b,e=0|this._c,T=0|this._d,E=0|this._e,D=0;D<16;++D)t[D]=A.readInt32BE(4*D);for(;D<80;++D)t[D]=t[D-3]^t[D-8]^t[D-14]^t[D-16];for(var C=0;C<80;++C){var r=~~(C/20),c=0|((M=g)<<5|M>>>27)+n(r,I,e,T)+E+t[C]+i[r];E=T,T=e,e=N(I),I=g,g=c}this._a=g+this._a|0,this._b=I+this._b|0,this._c=e+this._c|0,this._d=T+this._d|0,this._e=E+this._e|0},E.prototype._hash=function(){var A=e.allocUnsafe(20);return A.writeInt32BE(0|this._a,0),A.writeInt32BE(0|this._b,4),A.writeInt32BE(0|this._c,8),A.writeInt32BE(0|this._d,12),A.writeInt32BE(0|this._e,16),A},A.exports=E},function(A,M,t){var g=t(3),I=t(21),e=t(4).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],T=new Array(80);function E(){this.init(),this._w=T,I.call(this,64,56)}function N(A){return A<<5|A>>>27}function n(A){return A<<30|A>>>2}function D(A,M,t,g){return 0===A?M&t|~M&g:2===A?M&t|M&g|t&g:M^t^g}g(E,I),E.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},E.prototype._update=function(A){for(var M,t=this._w,g=0|this._a,I=0|this._b,e=0|this._c,T=0|this._d,E=0|this._e,C=0;C<16;++C)t[C]=A.readInt32BE(4*C);for(;C<80;++C)t[C]=(M=t[C-3]^t[C-8]^t[C-14]^t[C-16])<<1|M>>>31;for(var r=0;r<80;++r){var c=~~(r/20),o=N(g)+D(c,I,e,T)+E+t[r]+i[c]|0;E=T,T=e,e=n(I),I=g,g=o}this._a=g+this._a|0,this._b=I+this._b|0,this._c=e+this._c|0,this._d=T+this._d|0,this._e=E+this._e|0},E.prototype._hash=function(){var A=e.allocUnsafe(20);return A.writeInt32BE(0|this._a,0),A.writeInt32BE(0|this._b,4),A.writeInt32BE(0|this._c,8),A.writeInt32BE(0|this._d,12),A.writeInt32BE(0|this._e,16),A},A.exports=E},function(A,M,t){var g=t(3),I=t(70),e=t(21),i=t(4).Buffer,T=new Array(64);function E(){this.init(),this._w=T,e.call(this,64,56)}g(E,I),E.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},E.prototype._hash=function(){var A=i.allocUnsafe(28);return A.writeInt32BE(this._a,0),A.writeInt32BE(this._b,4),A.writeInt32BE(this._c,8),A.writeInt32BE(this._d,12),A.writeInt32BE(this._e,16),A.writeInt32BE(this._f,20),A.writeInt32BE(this._g,24),A},A.exports=E},function(A,M,t){var g=t(3),I=t(71),e=t(21),i=t(4).Buffer,T=new Array(160);function E(){this.init(),this._w=T,e.call(this,128,112)}g(E,I),E.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},E.prototype._hash=function(){var A=i.allocUnsafe(48);function M(M,t,g){A.writeInt32BE(M,g),A.writeInt32BE(t,g+4)}return M(this._ah,this._al,0),M(this._bh,this._bl,8),M(this._ch,this._cl,16),M(this._dh,this._dl,24),M(this._eh,this._el,32),M(this._fh,this._fl,40),A},A.exports=E},function(A,M,t){A.exports=I;var g=t(7).EventEmitter;function I(){g.call(this)}t(3)(I,g),I.Readable=t(41),I.Writable=t(142),I.Duplex=t(143),I.Transform=t(144),I.PassThrough=t(145),I.Stream=I,I.prototype.pipe=function(A,M){var t=this;function I(M){A.writable&&!1===A.write(M)&&t.pause&&t.pause()}function e(){t.readable&&t.resume&&t.resume()}t.on("data",I),A.on("drain",e),A._isStdio||M&&!1===M.end||(t.on("end",T),t.on("close",E));var i=!1;function T(){i||(i=!0,A.end())}function E(){i||(i=!0,"function"==typeof A.destroy&&A.destroy())}function N(A){if(n(),0===g.listenerCount(this,"error"))throw A}function n(){t.removeListener("data",I),A.removeListener("drain",e),t.removeListener("end",T),t.removeListener("close",E),t.removeListener("error",N),A.removeListener("error",N),t.removeListener("end",n),t.removeListener("close",n),A.removeListener("close",n)}return t.on("error",N),A.on("error",N),t.on("end",n),t.on("close",n),A.on("close",n),A.emit("pipe",t),A}},function(A,M){},function(A,M,t){"use strict";var g=t(42).Buffer,I=t(138);A.exports=function(){function A(){!function(A,M){if(!(A instanceof M))throw new TypeError("Cannot call a class as a function")}(this,A),this.head=null,this.tail=null,this.length=0}return A.prototype.push=function(A){var M={data:A,next:null};this.length>0?this.tail.next=M:this.head=M,this.tail=M,++this.length},A.prototype.unshift=function(A){var M={data:A,next:this.head};0===this.length&&(this.tail=M),this.head=M,++this.length},A.prototype.shift=function(){if(0!==this.length){var A=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,A}},A.prototype.clear=function(){this.head=this.tail=null,this.length=0},A.prototype.join=function(A){if(0===this.length)return"";for(var M=this.head,t=""+M.data;M=M.next;)t+=A+M.data;return t},A.prototype.concat=function(A){if(0===this.length)return g.alloc(0);if(1===this.length)return this.head.data;for(var M,t,I,e=g.allocUnsafe(A>>>0),i=this.head,T=0;i;)M=i.data,t=e,I=T,M.copy(t,I),T+=i.data.length,i=i.next;return e},A}(),I&&I.inspect&&I.inspect.custom&&(A.exports.prototype[I.inspect.custom]=function(){var A=I.inspect({length:this.length});return this.constructor.name+" "+A})},function(A,M){},function(A,M,t){(function(A){var g=void 0!==A&&A||"undefined"!=typeof self&&self||window,I=Function.prototype.apply;function e(A,M){this._id=A,this._clearFn=M}M.setTimeout=function(){return new e(I.call(setTimeout,g,arguments),clearTimeout)},M.setInterval=function(){return new e(I.call(setInterval,g,arguments),clearInterval)},M.clearTimeout=M.clearInterval=function(A){A&&A.close()},e.prototype.unref=e.prototype.ref=function(){},e.prototype.close=function(){this._clearFn.call(g,this._id)},M.enroll=function(A,M){clearTimeout(A._idleTimeoutId),A._idleTimeout=M},M.unenroll=function(A){clearTimeout(A._idleTimeoutId),A._idleTimeout=-1},M._unrefActive=M.active=function(A){clearTimeout(A._idleTimeoutId);var M=A._idleTimeout;M>=0&&(A._idleTimeoutId=setTimeout((function(){A._onTimeout&&A._onTimeout()}),M))},t(140),M.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==A&&A.setImmediate||this&&this.setImmediate,M.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==A&&A.clearImmediate||this&&this.clearImmediate}).call(this,t(10))},function(A,M,t){(function(A,M){!function(A,t){"use strict";if(!A.setImmediate){var g,I,e,i,T,E=1,N={},n=!1,D=A.document,C=Object.getPrototypeOf&&Object.getPrototypeOf(A);C=C&&C.setTimeout?C:A,"[object process]"==={}.toString.call(A.process)?g=function(A){M.nextTick((function(){c(A)}))}:!function(){if(A.postMessage&&!A.importScripts){var M=!0,t=A.onmessage;return A.onmessage=function(){M=!1},A.postMessage("","*"),A.onmessage=t,M}}()?A.MessageChannel?((e=new MessageChannel).port1.onmessage=function(A){c(A.data)},g=function(A){e.port2.postMessage(A)}):D&&"onreadystatechange"in D.createElement("script")?(I=D.documentElement,g=function(A){var M=D.createElement("script");M.onreadystatechange=function(){c(A),M.onreadystatechange=null,I.removeChild(M),M=null},I.appendChild(M)}):g=function(A){setTimeout(c,0,A)}:(i="setImmediate$"+Math.random()+"$",T=function(M){M.source===A&&"string"==typeof M.data&&0===M.data.indexOf(i)&&c(+M.data.slice(i.length))},A.addEventListener?A.addEventListener("message",T,!1):A.attachEvent("onmessage",T),g=function(M){A.postMessage(i+M,"*")}),C.setImmediate=function(A){"function"!=typeof A&&(A=new Function(""+A));for(var M=new Array(arguments.length-1),t=0;t<M.length;t++)M[t]=arguments[t+1];var I={callback:A,args:M};return N[E]=I,g(E),E++},C.clearImmediate=r}function r(A){delete N[A]}function c(A){if(n)setTimeout(c,0,A);else{var M=N[A];if(M){n=!0;try{!function(A){var M=A.callback,t=A.args;switch(t.length){case 0:M();break;case 1:M(t[0]);break;case 2:M(t[0],t[1]);break;case 3:M(t[0],t[1],t[2]);break;default:M.apply(void 0,t)}}(M)}finally{r(A),n=!1}}}}}("undefined"==typeof self?void 0===A?this:A:self)}).call(this,t(10),t(8))},function(A,M,t){"use strict";A.exports=e;var g=t(75),I=Object.create(t(25));function e(A){if(!(this instanceof e))return new e(A);g.call(this,A)}I.inherits=t(3),I.inherits(e,g),e.prototype._transform=function(A,M,t){t(null,A)}},function(A,M,t){A.exports=t(43)},function(A,M,t){A.exports=t(16)},function(A,M,t){A.exports=t(41).Transform},function(A,M,t){A.exports=t(41).PassThrough},function(A,M,t){"use strict";var g=t(3),I=t(4).Buffer,e=t(15),i=I.alloc(128);function T(A,M){e.call(this,"digest"),"string"==typeof M&&(M=I.from(M)),this._alg=A,this._key=M,M.length>64?M=A(M):M.length<64&&(M=I.concat([M,i],64));for(var t=this._ipad=I.allocUnsafe(64),g=this._opad=I.allocUnsafe(64),T=0;T<64;T++)t[T]=54^M[T],g[T]=92^M[T];this._hash=[t]}g(T,e),T.prototype._update=function(A){this._hash.push(A)},T.prototype._final=function(){var A=this._alg(I.concat(this._hash));return this._alg(I.concat([this._opad,A]))},A.exports=T},function(A,M,t){A.exports=t(78)},function(A,M,t){(function(M,g){var I,e=t(4).Buffer,i=t(80),T=t(81),E=t(82),N=t(83),n=M.crypto&&M.crypto.subtle,D={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},C=[];function r(A,M,t,g,I){return n.importKey("raw",A,{name:"PBKDF2"},!1,["deriveBits"]).then((function(A){return n.deriveBits({name:"PBKDF2",salt:M,iterations:t,hash:{name:I}},A,g<<3)})).then((function(A){return e.from(A)}))}A.exports=function(A,t,c,o,B,Q){"function"==typeof B&&(Q=B,B=void 0);var a=D[(B=B||"sha1").toLowerCase()];if(!a||"function"!=typeof M.Promise)return g.nextTick((function(){var M;try{M=E(A,t,c,o,B)}catch(A){return Q(A)}Q(null,M)}));if(i(c,o),A=N(A,T,"Password"),t=N(t,T,"Salt"),"function"!=typeof Q)throw new Error("No callback provided to pbkdf2");!function(A,M){A.then((function(A){g.nextTick((function(){M(null,A)}))}),(function(A){g.nextTick((function(){M(A)}))}))}(function(A){if(M.process&&!M.process.browser)return Promise.resolve(!1);if(!n||!n.importKey||!n.deriveBits)return Promise.resolve(!1);if(void 0!==C[A])return C[A];var t=r(I=I||e.alloc(8),I,10,128,A).then((function(){return!0})).catch((function(){return!1}));return C[A]=t,t}(a).then((function(M){return M?r(A,t,c,o,a):E(A,t,c,o,B)})),Q)}}).call(this,t(10),t(8))},function(A,M,t){var g=t(150),I=t(45),e=t(46),i=t(163),T=t(33);function E(A,M,t){if(A=A.toLowerCase(),e[A])return I.createCipheriv(A,M,t);if(i[A])return new g({key:M,iv:t,mode:A});throw new TypeError("invalid suite type")}function N(A,M,t){if(A=A.toLowerCase(),e[A])return I.createDecipheriv(A,M,t);if(i[A])return new g({key:M,iv:t,mode:A,decrypt:!0});throw new TypeError("invalid suite type")}M.createCipher=M.Cipher=function(A,M){var t,g;if(A=A.toLowerCase(),e[A])t=e[A].key,g=e[A].iv;else{if(!i[A])throw new TypeError("invalid suite type");t=8*i[A].key,g=i[A].iv}var I=T(M,!1,t,g);return E(A,I.key,I.iv)},M.createCipheriv=M.Cipheriv=E,M.createDecipher=M.Decipher=function(A,M){var t,g;if(A=A.toLowerCase(),e[A])t=e[A].key,g=e[A].iv;else{if(!i[A])throw new TypeError("invalid suite type");t=8*i[A].key,g=i[A].iv}var I=T(M,!1,t,g);return N(A,I.key,I.iv)},M.createDecipheriv=M.Decipheriv=N,M.listCiphers=M.getCiphers=function(){return Object.keys(i).concat(I.getCiphers())}},function(A,M,t){var g=t(15),I=t(151),e=t(3),i=t(4).Buffer,T={"des-ede3-cbc":I.CBC.instantiate(I.EDE),"des-ede3":I.EDE,"des-ede-cbc":I.CBC.instantiate(I.EDE),"des-ede":I.EDE,"des-cbc":I.CBC.instantiate(I.DES),"des-ecb":I.DES};function E(A){g.call(this);var M,t=A.mode.toLowerCase(),I=T[t];M=A.decrypt?"decrypt":"encrypt";var e=A.key;i.isBuffer(e)||(e=i.from(e)),"des-ede"!==t&&"des-ede-cbc"!==t||(e=i.concat([e,e.slice(0,8)]));var E=A.iv;i.isBuffer(E)||(E=i.from(E)),this._des=I.create({key:e,iv:E,type:M})}T.des=T["des-cbc"],T.des3=T["des-ede3-cbc"],A.exports=E,e(E,g),E.prototype._update=function(A){return i.from(this._des.update(A))},E.prototype._final=function(){return i.from(this._des.final())}},function(A,M,t){"use strict";M.utils=t(84),M.Cipher=t(44),M.DES=t(85),M.CBC=t(152),M.EDE=t(153)},function(A,M,t){"use strict";var g=t(11),I=t(3),e={};function i(A){g.equal(A.length,8,"Invalid IV length"),this.iv=new Array(8);for(var M=0;M<this.iv.length;M++)this.iv[M]=A[M]}M.instantiate=function(A){function M(M){A.call(this,M),this._cbcInit()}I(M,A);for(var t=Object.keys(e),g=0;g<t.length;g++){var i=t[g];M.prototype[i]=e[i]}return M.create=function(A){return new M(A)},M},e._cbcInit=function(){var A=new i(this.options.iv);this._cbcState=A},e._update=function(A,M,t,g){var I=this._cbcState,e=this.constructor.super_.prototype,i=I.iv;if("encrypt"===this.type){for(var T=0;T<this.blockSize;T++)i[T]^=A[M+T];e._update.call(this,i,0,t,g);for(T=0;T<this.blockSize;T++)i[T]=t[g+T]}else{e._update.call(this,A,M,t,g);for(T=0;T<this.blockSize;T++)t[g+T]^=i[T];for(T=0;T<this.blockSize;T++)i[T]=A[M+T]}}},function(A,M,t){"use strict";var g=t(11),I=t(3),e=t(44),i=t(85);function T(A,M){g.equal(M.length,24,"Invalid key length");var t=M.slice(0,8),I=M.slice(8,16),e=M.slice(16,24);this.ciphers="encrypt"===A?[i.create({type:"encrypt",key:t}),i.create({type:"decrypt",key:I}),i.create({type:"encrypt",key:e})]:[i.create({type:"decrypt",key:e}),i.create({type:"encrypt",key:I}),i.create({type:"decrypt",key:t})]}function E(A){e.call(this,A);var M=new T(this.type,this.options.key);this._edeState=M}I(E,e),A.exports=E,E.create=function(A){return new E(A)},E.prototype._update=function(A,M,t,g){var I=this._edeState;I.ciphers[0]._update(A,M,t,g),I.ciphers[1]._update(t,g,t,g),I.ciphers[2]._update(t,g,t,g)},E.prototype._pad=i.prototype._pad,E.prototype._unpad=i.prototype._unpad},function(A,M,t){var g=t(46),I=t(89),e=t(4).Buffer,i=t(90),T=t(15),E=t(32),N=t(33);function n(A,M,t){T.call(this),this._cache=new C,this._cipher=new E.AES(M),this._prev=e.from(t),this._mode=A,this._autopadding=!0}t(3)(n,T),n.prototype._update=function(A){var M,t;this._cache.add(A);for(var g=[];M=this._cache.get();)t=this._mode.encrypt(this,M),g.push(t);return e.concat(g)};var D=e.alloc(16,16);function C(){this.cache=e.allocUnsafe(0)}function r(A,M,t){var T=g[A.toLowerCase()];if(!T)throw new TypeError("invalid suite type");if("string"==typeof M&&(M=e.from(M)),M.length!==T.key/8)throw new TypeError("invalid key length "+M.length);if("string"==typeof t&&(t=e.from(t)),"GCM"!==T.mode&&t.length!==T.iv)throw new TypeError("invalid iv length "+t.length);return"stream"===T.type?new i(T.module,M,t):"auth"===T.type?new I(T.module,M,t):new n(T.module,M,t)}n.prototype._final=function(){var A=this._cache.flush();if(this._autopadding)return A=this._mode.encrypt(this,A),this._cipher.scrub(),A;if(!A.equals(D))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(A){return this._autopadding=!!A,this},C.prototype.add=function(A){this.cache=e.concat([this.cache,A])},C.prototype.get=function(){if(this.cache.length>15){var A=this.cache.slice(0,16);return this.cache=this.cache.slice(16),A}return null},C.prototype.flush=function(){for(var A=16-this.cache.length,M=e.allocUnsafe(A),t=-1;++t<A;)M.writeUInt8(A,t);return e.concat([this.cache,M])},M.createCipheriv=r,M.createCipher=function(A,M){var t=g[A.toLowerCase()];if(!t)throw new TypeError("invalid suite type");var I=N(M,!1,t.key,t.iv);return r(A,I.key,I.iv)}},function(A,M){M.encrypt=function(A,M){return A._cipher.encryptBlock(M)},M.decrypt=function(A,M){return A._cipher.decryptBlock(M)}},function(A,M,t){var g=t(26);M.encrypt=function(A,M){var t=g(M,A._prev);return A._prev=A._cipher.encryptBlock(t),A._prev},M.decrypt=function(A,M){var t=A._prev;A._prev=M;var I=A._cipher.decryptBlock(M);return g(I,t)}},function(A,M,t){var g=t(4).Buffer,I=t(26);function e(A,M,t){var e=M.length,i=I(M,A._cache);return A._cache=A._cache.slice(e),A._prev=g.concat([A._prev,t?M:i]),i}M.encrypt=function(A,M,t){for(var I,i=g.allocUnsafe(0);M.length;){if(0===A._cache.length&&(A._cache=A._cipher.encryptBlock(A._prev),A._prev=g.allocUnsafe(0)),!(A._cache.length<=M.length)){i=g.concat([i,e(A,M,t)]);break}I=A._cache.length,i=g.concat([i,e(A,M.slice(0,I),t)]),M=M.slice(I)}return i}},function(A,M,t){var g=t(4).Buffer;function I(A,M,t){var I=A._cipher.encryptBlock(A._prev)[0]^M;return A._prev=g.concat([A._prev.slice(1),g.from([t?M:I])]),I}M.encrypt=function(A,M,t){for(var e=M.length,i=g.allocUnsafe(e),T=-1;++T<e;)i[T]=I(A,M[T],t);return i}},function(A,M,t){var g=t(4).Buffer;function I(A,M,t){for(var g,I,i=-1,T=0;++i<8;)g=M&1<<7-i?128:0,T+=(128&(I=A._cipher.encryptBlock(A._prev)[0]^g))>>i%8,A._prev=e(A._prev,t?g:I);return T}function e(A,M){var t=A.length,I=-1,e=g.allocUnsafe(A.length);for(A=g.concat([A,g.from([M])]);++I<t;)e[I]=A[I]<<1|A[I+1]>>7;return e}M.encrypt=function(A,M,t){for(var e=M.length,i=g.allocUnsafe(e),T=-1;++T<e;)i[T]=I(A,M[T],t);return i}},function(A,M,t){(function(A){var g=t(26);function I(A){return A._prev=A._cipher.encryptBlock(A._prev),A._prev}M.encrypt=function(M,t){for(;M._cache.length<t.length;)M._cache=A.concat([M._cache,I(M)]);var e=M._cache.slice(0,t.length);return M._cache=M._cache.slice(t.length),g(t,e)}}).call(this,t(9).Buffer)},function(A,M,t){var g=t(4).Buffer,I=g.alloc(16,0);function e(A){var M=g.allocUnsafe(16);return M.writeUInt32BE(A[0]>>>0,0),M.writeUInt32BE(A[1]>>>0,4),M.writeUInt32BE(A[2]>>>0,8),M.writeUInt32BE(A[3]>>>0,12),M}function i(A){this.h=A,this.state=g.alloc(16,0),this.cache=g.allocUnsafe(0)}i.prototype.ghash=function(A){for(var M=-1;++M<A.length;)this.state[M]^=A[M];this._multiply()},i.prototype._multiply=function(){for(var A,M,t,g=[(A=this.h).readUInt32BE(0),A.readUInt32BE(4),A.readUInt32BE(8),A.readUInt32BE(12)],I=[0,0,0,0],i=-1;++i<128;){for(0!=(this.state[~~(i/8)]&1<<7-i%8)&&(I[0]^=g[0],I[1]^=g[1],I[2]^=g[2],I[3]^=g[3]),t=0!=(1&g[3]),M=3;M>0;M--)g[M]=g[M]>>>1|(1&g[M-1])<<31;g[0]=g[0]>>>1,t&&(g[0]=g[0]^225<<24)}this.state=e(I)},i.prototype.update=function(A){var M;for(this.cache=g.concat([this.cache,A]);this.cache.length>=16;)M=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(M)},i.prototype.final=function(A,M){return this.cache.length&&this.ghash(g.concat([this.cache,I],16)),this.ghash(e([0,A,0,M])),this.state},A.exports=i},function(A,M,t){var g=t(89),I=t(4).Buffer,e=t(46),i=t(90),T=t(15),E=t(32),N=t(33);function n(A,M,t){T.call(this),this._cache=new D,this._last=void 0,this._cipher=new E.AES(M),this._prev=I.from(t),this._mode=A,this._autopadding=!0}function D(){this.cache=I.allocUnsafe(0)}function C(A,M,t){var T=e[A.toLowerCase()];if(!T)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=I.from(t)),"GCM"!==T.mode&&t.length!==T.iv)throw new TypeError("invalid iv length "+t.length);if("string"==typeof M&&(M=I.from(M)),M.length!==T.key/8)throw new TypeError("invalid key length "+M.length);return"stream"===T.type?new i(T.module,M,t,!0):"auth"===T.type?new g(T.module,M,t,!0):new n(T.module,M,t)}t(3)(n,T),n.prototype._update=function(A){var M,t;this._cache.add(A);for(var g=[];M=this._cache.get(this._autopadding);)t=this._mode.decrypt(this,M),g.push(t);return I.concat(g)},n.prototype._final=function(){var A=this._cache.flush();if(this._autopadding)return function(A){var M=A[15];if(M<1||M>16)throw new Error("unable to decrypt data");var t=-1;for(;++t<M;)if(A[t+(16-M)]!==M)throw new Error("unable to decrypt data");if(16===M)return;return A.slice(0,16-M)}(this._mode.decrypt(this,A));if(A)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(A){return this._autopadding=!!A,this},D.prototype.add=function(A){this.cache=I.concat([this.cache,A])},D.prototype.get=function(A){var M;if(A){if(this.cache.length>16)return M=this.cache.slice(0,16),this.cache=this.cache.slice(16),M}else if(this.cache.length>=16)return M=this.cache.slice(0,16),this.cache=this.cache.slice(16),M;return null},D.prototype.flush=function(){if(this.cache.length)return this.cache},M.createDecipher=function(A,M){var t=e[A.toLowerCase()];if(!t)throw new TypeError("invalid suite type");var g=N(M,!1,t.key,t.iv);return C(A,g.key,g.iv)},M.createDecipheriv=C},function(A,M){M["des-ecb"]={key:8,iv:0},M["des-cbc"]=M.des={key:8,iv:8},M["des-ede3-cbc"]=M.des3={key:24,iv:8},M["des-ede3"]={key:24,iv:0},M["des-ede-cbc"]={key:16,iv:8},M["des-ede"]={key:16,iv:0}},function(A,M,t){(function(A){var g=t(91),I=t(167),e=t(168);var i={binary:!0,hex:!0,base64:!0};M.DiffieHellmanGroup=M.createDiffieHellmanGroup=M.getDiffieHellman=function(M){var t=new A(I[M].prime,"hex"),g=new A(I[M].gen,"hex");return new e(t,g)},M.createDiffieHellman=M.DiffieHellman=function M(t,I,T,E){return A.isBuffer(I)||void 0===i[I]?M(t,"binary",I,T):(I=I||"binary",E=E||"binary",T=T||new A([2]),A.isBuffer(T)||(T=new A(T,E)),"number"==typeof t?new e(g(t,T),T,!0):(A.isBuffer(t)||(t=new A(t,I)),new e(t,T,!0)))}}).call(this,t(9).Buffer)},function(A,M){},function(A,M){},function(A){A.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(A,M,t){(function(M){var g=t(6),I=new(t(93)),e=new g(24),i=new g(11),T=new g(10),E=new g(3),N=new g(7),n=t(91),D=t(18);function C(A,t){return t=t||"utf8",M.isBuffer(A)||(A=new M(A,t)),this._pub=new g(A),this}function r(A,t){return t=t||"utf8",M.isBuffer(A)||(A=new M(A,t)),this._priv=new g(A),this}A.exports=o;var c={};function o(A,M,t){this.setGenerator(M),this.__prime=new g(A),this._prime=g.mont(this.__prime),this._primeLen=A.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,t?(this.setPublicKey=C,this.setPrivateKey=r):this._primeCode=8}function B(A,t){var g=new M(A.toArray());return t?g.toString(t):g}Object.defineProperty(o.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(A,M){var t=M.toString("hex"),g=[t,A.toString(16)].join("_");if(g in c)return c[g];var D,C=0;if(A.isEven()||!n.simpleSieve||!n.fermatTest(A)||!I.test(A))return C+=1,C+="02"===t||"05"===t?8:4,c[g]=C,C;switch(I.test(A.shrn(1))||(C+=2),t){case"02":A.mod(e).cmp(i)&&(C+=8);break;case"05":(D=A.mod(T)).cmp(E)&&D.cmp(N)&&(C+=8);break;default:C+=4}return c[g]=C,C}(this.__prime,this.__gen)),this._primeCode}}),o.prototype.generateKeys=function(){return this._priv||(this._priv=new g(D(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},o.prototype.computeSecret=function(A){var t=(A=(A=new g(A)).toRed(this._prime)).redPow(this._priv).fromRed(),I=new M(t.toArray()),e=this.getPrime();if(I.length<e.length){var i=new M(e.length-I.length);i.fill(0),I=M.concat([i,I])}return I},o.prototype.getPublicKey=function(A){return B(this._pub,A)},o.prototype.getPrivateKey=function(A){return B(this._priv,A)},o.prototype.getPrime=function(A){return B(this.__prime,A)},o.prototype.getGenerator=function(A){return B(this._gen,A)},o.prototype.setGenerator=function(A,t){return t=t||"utf8",M.isBuffer(A)||(A=new M(A,t)),this.__gen=A,this._gen=new g(A),this}}).call(this,t(9).Buffer)},function(A,M,t){var g=t(4).Buffer,I=t(23),e=t(62),i=t(3),T=t(170),E=t(199),N=t(78);function n(A){e.Writable.call(this);var M=N[A];if(!M)throw new Error("Unknown message digest");this._hashType=M.hash,this._hash=I(M.hash),this._tag=M.id,this._signType=M.sign}function D(A){e.Writable.call(this);var M=N[A];if(!M)throw new Error("Unknown message digest");this._hash=I(M.hash),this._tag=M.id,this._signType=M.sign}function C(A){return new n(A)}function r(A){return new D(A)}Object.keys(N).forEach((function(A){N[A].id=g.from(N[A].id,"hex"),N[A.toLowerCase()]=N[A]})),i(n,e.Writable),n.prototype._write=function(A,M,t){this._hash.update(A),t()},n.prototype.update=function(A,M){return"string"==typeof A&&(A=g.from(A,M)),this._hash.update(A),this},n.prototype.sign=function(A,M){this.end();var t=this._hash.digest(),g=T(t,A,this._hashType,this._signType,this._tag);return M?g.toString(M):g},i(D,e.Writable),D.prototype._write=function(A,M,t){this._hash.update(A),t()},D.prototype.update=function(A,M){return"string"==typeof A&&(A=g.from(A,M)),this._hash.update(A),this},D.prototype.verify=function(A,M,t){"string"==typeof M&&(M=g.from(M,t)),this.end();var I=this._hash.digest();return E(M,I,A,this._signType,this._tag)},A.exports={Sign:C,Verify:r,createSign:C,createVerify:r}},function(A,M,t){var g=t(4).Buffer,I=t(76),e=t(48),i=t(49).ec,T=t(99),E=t(35),N=t(105);function n(A,M,t,e){if((A=g.from(A.toArray())).length<M.byteLength()){var i=g.alloc(M.byteLength()-A.length);A=g.concat([i,A])}var T=t.length,E=function(A,M){A=(A=D(A,M)).mod(M);var t=g.from(A.toArray());if(t.length<M.byteLength()){var I=g.alloc(M.byteLength()-t.length);t=g.concat([I,t])}return t}(t,M),N=g.alloc(T);N.fill(1);var n=g.alloc(T);return n=I(e,n).update(N).update(g.from([0])).update(A).update(E).digest(),N=I(e,n).update(N).digest(),{k:n=I(e,n).update(N).update(g.from([1])).update(A).update(E).digest(),v:N=I(e,n).update(N).digest()}}function D(A,M){var t=new T(A),g=(A.length<<3)-M.bitLength();return g>0&&t.ishrn(g),t}function C(A,M,t){var e,i;do{for(e=g.alloc(0);8*e.length<A.bitLength();)M.v=I(t,M.k).update(M.v).digest(),e=g.concat([e,M.v]);i=D(e,A),M.k=I(t,M.k).update(M.v).update(g.from([0])).digest(),M.v=I(t,M.k).update(M.v).digest()}while(-1!==i.cmp(A));return i}function r(A,M,t,g){return A.toRed(T.mont(t)).redPow(M).fromRed().mod(g)}A.exports=function(A,M,t,I,c){var o=E(M);if(o.curve){if("ecdsa"!==I&&"ecdsa/rsa"!==I)throw new Error("wrong private key type");return function(A,M){var t=N[M.curve.join(".")];if(!t)throw new Error("unknown curve "+M.curve.join("."));var I=new i(t).keyFromPrivate(M.privateKey).sign(A);return g.from(I.toDER())}(A,o)}if("dsa"===o.type){if("dsa"!==I)throw new Error("wrong private key type");return function(A,M,t){var I,e=M.params.priv_key,i=M.params.p,E=M.params.q,N=M.params.g,c=new T(0),o=D(A,E).mod(E),B=!1,Q=n(e,E,A,t);for(;!1===B;)I=C(E,Q,t),c=r(N,I,i,E),0===(B=I.invm(E).imul(o.add(e.mul(c))).mod(E)).cmpn(0)&&(B=!1,c=new T(0));return function(A,M){A=A.toArray(),M=M.toArray(),128&A[0]&&(A=[0].concat(A));128&M[0]&&(M=[0].concat(M));var t=[48,A.length+M.length+4,2,A.length];return t=t.concat(A,[2,M.length],M),g.from(t)}(c,B)}(A,o,t)}if("rsa"!==I&&"ecdsa/rsa"!==I)throw new Error("wrong private key type");A=g.concat([c,A]);for(var B=o.modulus.byteLength(),Q=[0,1];A.length+Q.length+1<B;)Q.push(255);Q.push(0);for(var a=-1;++a<A.length;)Q.push(A[a]);return e(Q,o)},A.exports.getKey=n,A.exports.makeKey=C},function(A){A.exports=JSON.parse('{"name":"elliptic","version":"6.5.3","description":"EC cryptography","main":"lib/elliptic.js","files":["lib"],"scripts":{"jscs":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","jshint":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","lint":"npm run jscs && npm run jshint","unit":"istanbul test _mocha --reporter=spec test/index.js","test":"npm run lint && npm run unit","version":"grunt dist && git add dist/"},"repository":{"type":"git","url":"git@github.com:indutny/elliptic"},"keywords":["EC","Elliptic","curve","Cryptography"],"author":"Fedor Indutny <fedor@indutny.com>","license":"MIT","bugs":{"url":"https://github.com/indutny/elliptic/issues"},"homepage":"https://github.com/indutny/elliptic","devDependencies":{"brfs":"^1.4.3","coveralls":"^3.0.8","grunt":"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^9.0.1","istanbul":"^0.4.2","jscs":"^3.0.7","jshint":"^2.10.3","mocha":"^6.2.2"},"dependencies":{"bn.js":"^4.4.0","brorand":"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0","inherits":"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},"__npminstall_done":"Tue Sep 15 2020 09:43:51 GMT+0800 (GMT+08:00)","_from":"elliptic@6.5.3","_resolved":"https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492864889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz"}')},function(A,M,t){"use strict";var g=t(12),I=t(6),e=t(3),i=t(34),T=g.assert;function E(A){i.call(this,"short",A),this.a=new I(A.a,16).toRed(this.red),this.b=new I(A.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(A),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function N(A,M,t,g){i.BasePoint.call(this,A,"affine"),null===M&&null===t?(this.x=null,this.y=null,this.inf=!0):(this.x=new I(M,16),this.y=new I(t,16),g&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function n(A,M,t,g){i.BasePoint.call(this,A,"jacobian"),null===M&&null===t&&null===g?(this.x=this.curve.one,this.y=this.curve.one,this.z=new I(0)):(this.x=new I(M,16),this.y=new I(t,16),this.z=new I(g,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}e(E,i),A.exports=E,E.prototype._getEndomorphism=function(A){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var M,t;if(A.beta)M=new I(A.beta,16).toRed(this.red);else{var g=this._getEndoRoots(this.p);M=(M=g[0].cmp(g[1])<0?g[0]:g[1]).toRed(this.red)}if(A.lambda)t=new I(A.lambda,16);else{var e=this._getEndoRoots(this.n);0===this.g.mul(e[0]).x.cmp(this.g.x.redMul(M))?t=e[0]:(t=e[1],T(0===this.g.mul(t).x.cmp(this.g.x.redMul(M))))}return{beta:M,lambda:t,basis:A.basis?A.basis.map((function(A){return{a:new I(A.a,16),b:new I(A.b,16)}})):this._getEndoBasis(t)}}},E.prototype._getEndoRoots=function(A){var M=A===this.p?this.red:I.mont(A),t=new I(2).toRed(M).redInvm(),g=t.redNeg(),e=new I(3).toRed(M).redNeg().redSqrt().redMul(t);return[g.redAdd(e).fromRed(),g.redSub(e).fromRed()]},E.prototype._getEndoBasis=function(A){for(var M,t,g,e,i,T,E,N,n,D=this.n.ushrn(Math.floor(this.n.bitLength()/2)),C=A,r=this.n.clone(),c=new I(1),o=new I(0),B=new I(0),Q=new I(1),a=0;0!==C.cmpn(0);){var h=r.div(C);N=r.sub(h.mul(C)),n=B.sub(h.mul(c));var s=Q.sub(h.mul(o));if(!g&&N.cmp(D)<0)M=E.neg(),t=c,g=N.neg(),e=n;else if(g&&2==++a)break;E=N,r=C,C=N,B=c,c=n,Q=o,o=s}i=N.neg(),T=n;var y=g.sqr().add(e.sqr());return i.sqr().add(T.sqr()).cmp(y)>=0&&(i=M,T=t),g.negative&&(g=g.neg(),e=e.neg()),i.negative&&(i=i.neg(),T=T.neg()),[{a:g,b:e},{a:i,b:T}]},E.prototype._endoSplit=function(A){var M=this.endo.basis,t=M[0],g=M[1],I=g.b.mul(A).divRound(this.n),e=t.b.neg().mul(A).divRound(this.n),i=I.mul(t.a),T=e.mul(g.a),E=I.mul(t.b),N=e.mul(g.b);return{k1:A.sub(i).sub(T),k2:E.add(N).neg()}},E.prototype.pointFromX=function(A,M){(A=new I(A,16)).red||(A=A.toRed(this.red));var t=A.redSqr().redMul(A).redIAdd(A.redMul(this.a)).redIAdd(this.b),g=t.redSqrt();if(0!==g.redSqr().redSub(t).cmp(this.zero))throw new Error("invalid point");var e=g.fromRed().isOdd();return(M&&!e||!M&&e)&&(g=g.redNeg()),this.point(A,g)},E.prototype.validate=function(A){if(A.inf)return!0;var M=A.x,t=A.y,g=this.a.redMul(M),I=M.redSqr().redMul(M).redIAdd(g).redIAdd(this.b);return 0===t.redSqr().redISub(I).cmpn(0)},E.prototype._endoWnafMulAdd=function(A,M,t){for(var g=this._endoWnafT1,I=this._endoWnafT2,e=0;e<A.length;e++){var i=this._endoSplit(M[e]),T=A[e],E=T._getBeta();i.k1.negative&&(i.k1.ineg(),T=T.neg(!0)),i.k2.negative&&(i.k2.ineg(),E=E.neg(!0)),g[2*e]=T,g[2*e+1]=E,I[2*e]=i.k1,I[2*e+1]=i.k2}for(var N=this._wnafMulAdd(1,g,I,2*e,t),n=0;n<2*e;n++)g[n]=null,I[n]=null;return N},e(N,i.BasePoint),E.prototype.point=function(A,M,t){return new N(this,A,M,t)},E.prototype.pointFromJSON=function(A,M){return N.fromJSON(this,A,M)},N.prototype._getBeta=function(){if(this.curve.endo){var A=this.precomputed;if(A&&A.beta)return A.beta;var M=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(A){var t=this.curve,g=function(A){return t.point(A.x.redMul(t.endo.beta),A.y)};A.beta=M,M.precomputed={beta:null,naf:A.naf&&{wnd:A.naf.wnd,points:A.naf.points.map(g)},doubles:A.doubles&&{step:A.doubles.step,points:A.doubles.points.map(g)}}}return M}},N.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},N.fromJSON=function(A,M,t){"string"==typeof M&&(M=JSON.parse(M));var g=A.point(M[0],M[1],t);if(!M[2])return g;function I(M){return A.point(M[0],M[1],t)}var e=M[2];return g.precomputed={beta:null,doubles:e.doubles&&{step:e.doubles.step,points:[g].concat(e.doubles.points.map(I))},naf:e.naf&&{wnd:e.naf.wnd,points:[g].concat(e.naf.points.map(I))}},g},N.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},N.prototype.isInfinity=function(){return this.inf},N.prototype.add=function(A){if(this.inf)return A;if(A.inf)return this;if(this.eq(A))return this.dbl();if(this.neg().eq(A))return this.curve.point(null,null);if(0===this.x.cmp(A.x))return this.curve.point(null,null);var M=this.y.redSub(A.y);0!==M.cmpn(0)&&(M=M.redMul(this.x.redSub(A.x).redInvm()));var t=M.redSqr().redISub(this.x).redISub(A.x),g=M.redMul(this.x.redSub(t)).redISub(this.y);return this.curve.point(t,g)},N.prototype.dbl=function(){if(this.inf)return this;var A=this.y.redAdd(this.y);if(0===A.cmpn(0))return this.curve.point(null,null);var M=this.curve.a,t=this.x.redSqr(),g=A.redInvm(),I=t.redAdd(t).redIAdd(t).redIAdd(M).redMul(g),e=I.redSqr().redISub(this.x.redAdd(this.x)),i=I.redMul(this.x.redSub(e)).redISub(this.y);return this.curve.point(e,i)},N.prototype.getX=function(){return this.x.fromRed()},N.prototype.getY=function(){return this.y.fromRed()},N.prototype.mul=function(A){return A=new I(A,16),this.isInfinity()?this:this._hasDoubles(A)?this.curve._fixedNafMul(this,A):this.curve.endo?this.curve._endoWnafMulAdd([this],[A]):this.curve._wnafMul(this,A)},N.prototype.mulAdd=function(A,M,t){var g=[this,M],I=[A,t];return this.curve.endo?this.curve._endoWnafMulAdd(g,I):this.curve._wnafMulAdd(1,g,I,2)},N.prototype.jmulAdd=function(A,M,t){var g=[this,M],I=[A,t];return this.curve.endo?this.curve._endoWnafMulAdd(g,I,!0):this.curve._wnafMulAdd(1,g,I,2,!0)},N.prototype.eq=function(A){return this===A||this.inf===A.inf&&(this.inf||0===this.x.cmp(A.x)&&0===this.y.cmp(A.y))},N.prototype.neg=function(A){if(this.inf)return this;var M=this.curve.point(this.x,this.y.redNeg());if(A&&this.precomputed){var t=this.precomputed,g=function(A){return A.neg()};M.precomputed={naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(g)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(g)}}}return M},N.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},e(n,i.BasePoint),E.prototype.jpoint=function(A,M,t){return new n(this,A,M,t)},n.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var A=this.z.redInvm(),M=A.redSqr(),t=this.x.redMul(M),g=this.y.redMul(M).redMul(A);return this.curve.point(t,g)},n.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},n.prototype.add=function(A){if(this.isInfinity())return A;if(A.isInfinity())return this;var M=A.z.redSqr(),t=this.z.redSqr(),g=this.x.redMul(M),I=A.x.redMul(t),e=this.y.redMul(M.redMul(A.z)),i=A.y.redMul(t.redMul(this.z)),T=g.redSub(I),E=e.redSub(i);if(0===T.cmpn(0))return 0!==E.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var N=T.redSqr(),n=N.redMul(T),D=g.redMul(N),C=E.redSqr().redIAdd(n).redISub(D).redISub(D),r=E.redMul(D.redISub(C)).redISub(e.redMul(n)),c=this.z.redMul(A.z).redMul(T);return this.curve.jpoint(C,r,c)},n.prototype.mixedAdd=function(A){if(this.isInfinity())return A.toJ();if(A.isInfinity())return this;var M=this.z.redSqr(),t=this.x,g=A.x.redMul(M),I=this.y,e=A.y.redMul(M).redMul(this.z),i=t.redSub(g),T=I.redSub(e);if(0===i.cmpn(0))return 0!==T.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var E=i.redSqr(),N=E.redMul(i),n=t.redMul(E),D=T.redSqr().redIAdd(N).redISub(n).redISub(n),C=T.redMul(n.redISub(D)).redISub(I.redMul(N)),r=this.z.redMul(i);return this.curve.jpoint(D,C,r)},n.prototype.dblp=function(A){if(0===A)return this;if(this.isInfinity())return this;if(!A)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var M=this,t=0;t<A;t++)M=M.dbl();return M}var g=this.curve.a,I=this.curve.tinv,e=this.x,i=this.y,T=this.z,E=T.redSqr().redSqr(),N=i.redAdd(i);for(t=0;t<A;t++){var n=e.redSqr(),D=N.redSqr(),C=D.redSqr(),r=n.redAdd(n).redIAdd(n).redIAdd(g.redMul(E)),c=e.redMul(D),o=r.redSqr().redISub(c.redAdd(c)),B=c.redISub(o),Q=r.redMul(B);Q=Q.redIAdd(Q).redISub(C);var a=N.redMul(T);t+1<A&&(E=E.redMul(C)),e=o,T=a,N=Q}return this.curve.jpoint(e,N.redMul(I),T)},n.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},n.prototype._zeroDbl=function(){var A,M,t;if(this.zOne){var g=this.x.redSqr(),I=this.y.redSqr(),e=I.redSqr(),i=this.x.redAdd(I).redSqr().redISub(g).redISub(e);i=i.redIAdd(i);var T=g.redAdd(g).redIAdd(g),E=T.redSqr().redISub(i).redISub(i),N=e.redIAdd(e);N=(N=N.redIAdd(N)).redIAdd(N),A=E,M=T.redMul(i.redISub(E)).redISub(N),t=this.y.redAdd(this.y)}else{var n=this.x.redSqr(),D=this.y.redSqr(),C=D.redSqr(),r=this.x.redAdd(D).redSqr().redISub(n).redISub(C);r=r.redIAdd(r);var c=n.redAdd(n).redIAdd(n),o=c.redSqr(),B=C.redIAdd(C);B=(B=B.redIAdd(B)).redIAdd(B),A=o.redISub(r).redISub(r),M=c.redMul(r.redISub(A)).redISub(B),t=(t=this.y.redMul(this.z)).redIAdd(t)}return this.curve.jpoint(A,M,t)},n.prototype._threeDbl=function(){var A,M,t;if(this.zOne){var g=this.x.redSqr(),I=this.y.redSqr(),e=I.redSqr(),i=this.x.redAdd(I).redSqr().redISub(g).redISub(e);i=i.redIAdd(i);var T=g.redAdd(g).redIAdd(g).redIAdd(this.curve.a),E=T.redSqr().redISub(i).redISub(i);A=E;var N=e.redIAdd(e);N=(N=N.redIAdd(N)).redIAdd(N),M=T.redMul(i.redISub(E)).redISub(N),t=this.y.redAdd(this.y)}else{var n=this.z.redSqr(),D=this.y.redSqr(),C=this.x.redMul(D),r=this.x.redSub(n).redMul(this.x.redAdd(n));r=r.redAdd(r).redIAdd(r);var c=C.redIAdd(C),o=(c=c.redIAdd(c)).redAdd(c);A=r.redSqr().redISub(o),t=this.y.redAdd(this.z).redSqr().redISub(D).redISub(n);var B=D.redSqr();B=(B=(B=B.redIAdd(B)).redIAdd(B)).redIAdd(B),M=r.redMul(c.redISub(A)).redISub(B)}return this.curve.jpoint(A,M,t)},n.prototype._dbl=function(){var A=this.curve.a,M=this.x,t=this.y,g=this.z,I=g.redSqr().redSqr(),e=M.redSqr(),i=t.redSqr(),T=e.redAdd(e).redIAdd(e).redIAdd(A.redMul(I)),E=M.redAdd(M),N=(E=E.redIAdd(E)).redMul(i),n=T.redSqr().redISub(N.redAdd(N)),D=N.redISub(n),C=i.redSqr();C=(C=(C=C.redIAdd(C)).redIAdd(C)).redIAdd(C);var r=T.redMul(D).redISub(C),c=t.redAdd(t).redMul(g);return this.curve.jpoint(n,r,c)},n.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var A=this.x.redSqr(),M=this.y.redSqr(),t=this.z.redSqr(),g=M.redSqr(),I=A.redAdd(A).redIAdd(A),e=I.redSqr(),i=this.x.redAdd(M).redSqr().redISub(A).redISub(g),T=(i=(i=(i=i.redIAdd(i)).redAdd(i).redIAdd(i)).redISub(e)).redSqr(),E=g.redIAdd(g);E=(E=(E=E.redIAdd(E)).redIAdd(E)).redIAdd(E);var N=I.redIAdd(i).redSqr().redISub(e).redISub(T).redISub(E),n=M.redMul(N);n=(n=n.redIAdd(n)).redIAdd(n);var D=this.x.redMul(T).redISub(n);D=(D=D.redIAdd(D)).redIAdd(D);var C=this.y.redMul(N.redMul(E.redISub(N)).redISub(i.redMul(T)));C=(C=(C=C.redIAdd(C)).redIAdd(C)).redIAdd(C);var r=this.z.redAdd(i).redSqr().redISub(t).redISub(T);return this.curve.jpoint(D,C,r)},n.prototype.mul=function(A,M){return A=new I(A,M),this.curve._wnafMul(this,A)},n.prototype.eq=function(A){if("affine"===A.type)return this.eq(A.toJ());if(this===A)return!0;var M=this.z.redSqr(),t=A.z.redSqr();if(0!==this.x.redMul(t).redISub(A.x.redMul(M)).cmpn(0))return!1;var g=M.redMul(this.z),I=t.redMul(A.z);return 0===this.y.redMul(I).redISub(A.y.redMul(g)).cmpn(0)},n.prototype.eqXToP=function(A){var M=this.z.redSqr(),t=A.toRed(this.curve.red).redMul(M);if(0===this.x.cmp(t))return!0;for(var g=A.clone(),I=this.curve.redN.redMul(M);;){if(g.iadd(this.curve.n),g.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(I),0===this.x.cmp(t))return!0}},n.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},n.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(A,M,t){"use strict";var g=t(6),I=t(3),e=t(34),i=t(12);function T(A){e.call(this,"mont",A),this.a=new g(A.a,16).toRed(this.red),this.b=new g(A.b,16).toRed(this.red),this.i4=new g(4).toRed(this.red).redInvm(),this.two=new g(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function E(A,M,t){e.BasePoint.call(this,A,"projective"),null===M&&null===t?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new g(M,16),this.z=new g(t,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}I(T,e),A.exports=T,T.prototype.validate=function(A){var M=A.normalize().x,t=M.redSqr(),g=t.redMul(M).redAdd(t.redMul(this.a)).redAdd(M);return 0===g.redSqrt().redSqr().cmp(g)},I(E,e.BasePoint),T.prototype.decodePoint=function(A,M){return this.point(i.toArray(A,M),1)},T.prototype.point=function(A,M){return new E(this,A,M)},T.prototype.pointFromJSON=function(A){return E.fromJSON(this,A)},E.prototype.precompute=function(){},E.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},E.fromJSON=function(A,M){return new E(A,M[0],M[1]||A.one)},E.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},E.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},E.prototype.dbl=function(){var A=this.x.redAdd(this.z).redSqr(),M=this.x.redSub(this.z).redSqr(),t=A.redSub(M),g=A.redMul(M),I=t.redMul(M.redAdd(this.curve.a24.redMul(t)));return this.curve.point(g,I)},E.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},E.prototype.diffAdd=function(A,M){var t=this.x.redAdd(this.z),g=this.x.redSub(this.z),I=A.x.redAdd(A.z),e=A.x.redSub(A.z).redMul(t),i=I.redMul(g),T=M.z.redMul(e.redAdd(i).redSqr()),E=M.x.redMul(e.redISub(i).redSqr());return this.curve.point(T,E)},E.prototype.mul=function(A){for(var M=A.clone(),t=this,g=this.curve.point(null,null),I=[];0!==M.cmpn(0);M.iushrn(1))I.push(M.andln(1));for(var e=I.length-1;e>=0;e--)0===I[e]?(t=t.diffAdd(g,this),g=g.dbl()):(g=t.diffAdd(g,this),t=t.dbl());return g},E.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},E.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},E.prototype.eq=function(A){return 0===this.getX().cmp(A.getX())},E.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},E.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(A,M,t){"use strict";var g=t(12),I=t(6),e=t(3),i=t(34),T=g.assert;function E(A){this.twisted=1!=(0|A.a),this.mOneA=this.twisted&&-1==(0|A.a),this.extended=this.mOneA,i.call(this,"edwards",A),this.a=new I(A.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new I(A.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new I(A.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),T(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|A.c)}function N(A,M,t,g,e){i.BasePoint.call(this,A,"projective"),null===M&&null===t&&null===g?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new I(M,16),this.y=new I(t,16),this.z=g?new I(g,16):this.curve.one,this.t=e&&new I(e,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}e(E,i),A.exports=E,E.prototype._mulA=function(A){return this.mOneA?A.redNeg():this.a.redMul(A)},E.prototype._mulC=function(A){return this.oneC?A:this.c.redMul(A)},E.prototype.jpoint=function(A,M,t,g){return this.point(A,M,t,g)},E.prototype.pointFromX=function(A,M){(A=new I(A,16)).red||(A=A.toRed(this.red));var t=A.redSqr(),g=this.c2.redSub(this.a.redMul(t)),e=this.one.redSub(this.c2.redMul(this.d).redMul(t)),i=g.redMul(e.redInvm()),T=i.redSqrt();if(0!==T.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var E=T.fromRed().isOdd();return(M&&!E||!M&&E)&&(T=T.redNeg()),this.point(A,T)},E.prototype.pointFromY=function(A,M){(A=new I(A,16)).red||(A=A.toRed(this.red));var t=A.redSqr(),g=t.redSub(this.c2),e=t.redMul(this.d).redMul(this.c2).redSub(this.a),i=g.redMul(e.redInvm());if(0===i.cmp(this.zero)){if(M)throw new Error("invalid point");return this.point(this.zero,A)}var T=i.redSqrt();if(0!==T.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");return T.fromRed().isOdd()!==M&&(T=T.redNeg()),this.point(T,A)},E.prototype.validate=function(A){if(A.isInfinity())return!0;A.normalize();var M=A.x.redSqr(),t=A.y.redSqr(),g=M.redMul(this.a).redAdd(t),I=this.c2.redMul(this.one.redAdd(this.d.redMul(M).redMul(t)));return 0===g.cmp(I)},e(N,i.BasePoint),E.prototype.pointFromJSON=function(A){return N.fromJSON(this,A)},E.prototype.point=function(A,M,t,g){return new N(this,A,M,t,g)},N.fromJSON=function(A,M){return new N(A,M[0],M[1],M[2])},N.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},N.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},N.prototype._extDbl=function(){var A=this.x.redSqr(),M=this.y.redSqr(),t=this.z.redSqr();t=t.redIAdd(t);var g=this.curve._mulA(A),I=this.x.redAdd(this.y).redSqr().redISub(A).redISub(M),e=g.redAdd(M),i=e.redSub(t),T=g.redSub(M),E=I.redMul(i),N=e.redMul(T),n=I.redMul(T),D=i.redMul(e);return this.curve.point(E,N,D,n)},N.prototype._projDbl=function(){var A,M,t,g=this.x.redAdd(this.y).redSqr(),I=this.x.redSqr(),e=this.y.redSqr();if(this.curve.twisted){var i=(N=this.curve._mulA(I)).redAdd(e);if(this.zOne)A=g.redSub(I).redSub(e).redMul(i.redSub(this.curve.two)),M=i.redMul(N.redSub(e)),t=i.redSqr().redSub(i).redSub(i);else{var T=this.z.redSqr(),E=i.redSub(T).redISub(T);A=g.redSub(I).redISub(e).redMul(E),M=i.redMul(N.redSub(e)),t=i.redMul(E)}}else{var N=I.redAdd(e);T=this.curve._mulC(this.z).redSqr(),E=N.redSub(T).redSub(T);A=this.curve._mulC(g.redISub(N)).redMul(E),M=this.curve._mulC(N).redMul(I.redISub(e)),t=N.redMul(E)}return this.curve.point(A,M,t)},N.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},N.prototype._extAdd=function(A){var M=this.y.redSub(this.x).redMul(A.y.redSub(A.x)),t=this.y.redAdd(this.x).redMul(A.y.redAdd(A.x)),g=this.t.redMul(this.curve.dd).redMul(A.t),I=this.z.redMul(A.z.redAdd(A.z)),e=t.redSub(M),i=I.redSub(g),T=I.redAdd(g),E=t.redAdd(M),N=e.redMul(i),n=T.redMul(E),D=e.redMul(E),C=i.redMul(T);return this.curve.point(N,n,C,D)},N.prototype._projAdd=function(A){var M,t,g=this.z.redMul(A.z),I=g.redSqr(),e=this.x.redMul(A.x),i=this.y.redMul(A.y),T=this.curve.d.redMul(e).redMul(i),E=I.redSub(T),N=I.redAdd(T),n=this.x.redAdd(this.y).redMul(A.x.redAdd(A.y)).redISub(e).redISub(i),D=g.redMul(E).redMul(n);return this.curve.twisted?(M=g.redMul(N).redMul(i.redSub(this.curve._mulA(e))),t=E.redMul(N)):(M=g.redMul(N).redMul(i.redSub(e)),t=this.curve._mulC(E).redMul(N)),this.curve.point(D,M,t)},N.prototype.add=function(A){return this.isInfinity()?A:A.isInfinity()?this:this.curve.extended?this._extAdd(A):this._projAdd(A)},N.prototype.mul=function(A){return this._hasDoubles(A)?this.curve._fixedNafMul(this,A):this.curve._wnafMul(this,A)},N.prototype.mulAdd=function(A,M,t){return this.curve._wnafMulAdd(1,[this,M],[A,t],2,!1)},N.prototype.jmulAdd=function(A,M,t){return this.curve._wnafMulAdd(1,[this,M],[A,t],2,!0)},N.prototype.normalize=function(){if(this.zOne)return this;var A=this.z.redInvm();return this.x=this.x.redMul(A),this.y=this.y.redMul(A),this.t&&(this.t=this.t.redMul(A)),this.z=this.curve.one,this.zOne=!0,this},N.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},N.prototype.getX=function(){return this.normalize(),this.x.fromRed()},N.prototype.getY=function(){return this.normalize(),this.y.fromRed()},N.prototype.eq=function(A){return this===A||0===this.getX().cmp(A.getX())&&0===this.getY().cmp(A.getY())},N.prototype.eqXToP=function(A){var M=A.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(M))return!0;for(var t=A.clone(),g=this.curve.redN.redMul(this.z);;){if(t.iadd(this.curve.n),t.cmp(this.curve.p)>=0)return!1;if(M.redIAdd(g),0===this.x.cmp(M))return!0}},N.prototype.toP=N.prototype.normalize,N.prototype.mixedAdd=N.prototype.add},function(A,M,t){"use strict";M.sha1=t(176),M.sha224=t(177),M.sha256=t(97),M.sha384=t(178),M.sha512=t(98)},function(A,M,t){"use strict";var g=t(14),I=t(27),e=t(96),i=g.rotl32,T=g.sum32,E=g.sum32_5,N=e.ft_1,n=I.BlockHash,D=[1518500249,1859775393,2400959708,3395469782];function C(){if(!(this instanceof C))return new C;n.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}g.inherits(C,n),A.exports=C,C.blockSize=512,C.outSize=160,C.hmacStrength=80,C.padLength=64,C.prototype._update=function(A,M){for(var t=this.W,g=0;g<16;g++)t[g]=A[M+g];for(;g<t.length;g++)t[g]=i(t[g-3]^t[g-8]^t[g-14]^t[g-16],1);var I=this.h[0],e=this.h[1],n=this.h[2],C=this.h[3],r=this.h[4];for(g=0;g<t.length;g++){var c=~~(g/20),o=E(i(I,5),N(c,e,n,C),r,t[g],D[c]);r=C,C=n,n=i(e,30),e=I,I=o}this.h[0]=T(this.h[0],I),this.h[1]=T(this.h[1],e),this.h[2]=T(this.h[2],n),this.h[3]=T(this.h[3],C),this.h[4]=T(this.h[4],r)},C.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h,"big"):g.split32(this.h,"big")}},function(A,M,t){"use strict";var g=t(14),I=t(97);function e(){if(!(this instanceof e))return new e;I.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}g.inherits(e,I),A.exports=e,e.blockSize=512,e.outSize=224,e.hmacStrength=192,e.padLength=64,e.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h.slice(0,7),"big"):g.split32(this.h.slice(0,7),"big")}},function(A,M,t){"use strict";var g=t(14),I=t(98);function e(){if(!(this instanceof e))return new e;I.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}g.inherits(e,I),A.exports=e,e.blockSize=1024,e.outSize=384,e.hmacStrength=192,e.padLength=128,e.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h.slice(0,12),"big"):g.split32(this.h.slice(0,12),"big")}},function(A,M,t){"use strict";var g=t(14),I=t(27),e=g.rotl32,i=g.sum32,T=g.sum32_3,E=g.sum32_4,N=I.BlockHash;function n(){if(!(this instanceof n))return new n;N.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function D(A,M,t,g){return A<=15?M^t^g:A<=31?M&t|~M&g:A<=47?(M|~t)^g:A<=63?M&g|t&~g:M^(t|~g)}function C(A){return A<=15?0:A<=31?1518500249:A<=47?1859775393:A<=63?2400959708:2840853838}function r(A){return A<=15?1352829926:A<=31?1548603684:A<=47?1836072691:A<=63?2053994217:0}g.inherits(n,N),M.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(A,M){for(var t=this.h[0],g=this.h[1],I=this.h[2],N=this.h[3],n=this.h[4],a=t,h=g,s=I,y=N,w=n,j=0;j<80;j++){var L=i(e(E(t,D(j,g,I,N),A[c[j]+M],C(j)),B[j]),n);t=n,n=N,N=e(I,10),I=g,g=L,L=i(e(E(a,D(79-j,h,s,y),A[o[j]+M],r(j)),Q[j]),w),a=w,w=y,y=e(s,10),s=h,h=L}L=T(this.h[1],I,y),this.h[1]=T(this.h[2],N,w),this.h[2]=T(this.h[3],n,a),this.h[3]=T(this.h[4],t,h),this.h[4]=T(this.h[0],g,s),this.h[0]=L},n.prototype._digest=function(A){return"hex"===A?g.toHex32(this.h,"little"):g.split32(this.h,"little")};var c=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],o=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],B=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],Q=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(A,M,t){"use strict";var g=t(14),I=t(11);function e(A,M,t){if(!(this instanceof e))return new e(A,M,t);this.Hash=A,this.blockSize=A.blockSize/8,this.outSize=A.outSize/8,this.inner=null,this.outer=null,this._init(g.toArray(M,t))}A.exports=e,e.prototype._init=function(A){A.length>this.blockSize&&(A=(new this.Hash).update(A).digest()),I(A.length<=this.blockSize);for(var M=A.length;M<this.blockSize;M++)A.push(0);for(M=0;M<A.length;M++)A[M]^=54;for(this.inner=(new this.Hash).update(A),M=0;M<A.length;M++)A[M]^=106;this.outer=(new this.Hash).update(A)},e.prototype.update=function(A,M){return this.inner.update(A,M),this},e.prototype.digest=function(A){return this.outer.update(this.inner.digest()),this.outer.digest(A)}},function(A,M){A.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},function(A,M,t){"use strict";var g=t(6),I=t(183),e=t(12),i=t(50),T=t(47),E=e.assert,N=t(184),n=t(185);function D(A){if(!(this instanceof D))return new D(A);"string"==typeof A&&(E(i.hasOwnProperty(A),"Unknown curve "+A),A=i[A]),A instanceof i.PresetCurve&&(A={curve:A}),this.curve=A.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=A.curve.g,this.g.precompute(A.curve.n.bitLength()+1),this.hash=A.hash||A.curve.hash}A.exports=D,D.prototype.keyPair=function(A){return new N(this,A)},D.prototype.keyFromPrivate=function(A,M){return N.fromPrivate(this,A,M)},D.prototype.keyFromPublic=function(A,M){return N.fromPublic(this,A,M)},D.prototype.genKeyPair=function(A){A||(A={});for(var M=new I({hash:this.hash,pers:A.pers,persEnc:A.persEnc||"utf8",entropy:A.entropy||T(this.hash.hmacStrength),entropyEnc:A.entropy&&A.entropyEnc||"utf8",nonce:this.n.toArray()}),t=this.n.byteLength(),e=this.n.sub(new g(2));;){var i=new g(M.generate(t));if(!(i.cmp(e)>0))return i.iaddn(1),this.keyFromPrivate(i)}},D.prototype._truncateToN=function(A,M){var t=8*A.byteLength()-this.n.bitLength();return t>0&&(A=A.ushrn(t)),!M&&A.cmp(this.n)>=0?A.sub(this.n):A},D.prototype.sign=function(A,M,t,e){"object"==typeof t&&(e=t,t=null),e||(e={}),M=this.keyFromPrivate(M,t),A=this._truncateToN(new g(A,16));for(var i=this.n.byteLength(),T=M.getPrivate().toArray("be",i),E=A.toArray("be",i),N=new I({hash:this.hash,entropy:T,nonce:E,pers:e.pers,persEnc:e.persEnc||"utf8"}),D=this.n.sub(new g(1)),C=0;;C++){var r=e.k?e.k(C):new g(N.generate(this.n.byteLength()));if(!((r=this._truncateToN(r,!0)).cmpn(1)<=0||r.cmp(D)>=0)){var c=this.g.mul(r);if(!c.isInfinity()){var o=c.getX(),B=o.umod(this.n);if(0!==B.cmpn(0)){var Q=r.invm(this.n).mul(B.mul(M.getPrivate()).iadd(A));if(0!==(Q=Q.umod(this.n)).cmpn(0)){var a=(c.getY().isOdd()?1:0)|(0!==o.cmp(B)?2:0);return e.canonical&&Q.cmp(this.nh)>0&&(Q=this.n.sub(Q),a^=1),new n({r:B,s:Q,recoveryParam:a})}}}}}},D.prototype.verify=function(A,M,t,I){A=this._truncateToN(new g(A,16)),t=this.keyFromPublic(t,I);var e=(M=new n(M,"hex")).r,i=M.s;if(e.cmpn(1)<0||e.cmp(this.n)>=0)return!1;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;var T,E=i.invm(this.n),N=E.mul(A).umod(this.n),D=E.mul(e).umod(this.n);return this.curve._maxwellTrick?!(T=this.g.jmulAdd(N,t.getPublic(),D)).isInfinity()&&T.eqXToP(e):!(T=this.g.mulAdd(N,t.getPublic(),D)).isInfinity()&&0===T.getX().umod(this.n).cmp(e)},D.prototype.recoverPubKey=function(A,M,t,I){E((3&t)===t,"The recovery param is more than two bits"),M=new n(M,I);var e=this.n,i=new g(A),T=M.r,N=M.s,D=1&t,C=t>>1;if(T.cmp(this.curve.p.umod(this.curve.n))>=0&&C)throw new Error("Unable to find sencond key candinate");T=C?this.curve.pointFromX(T.add(this.curve.n),D):this.curve.pointFromX(T,D);var r=M.r.invm(e),c=e.sub(i).mul(r).umod(e),o=N.mul(r).umod(e);return this.g.mulAdd(c,T,o)},D.prototype.getKeyRecoveryParam=function(A,M,t,g){if(null!==(M=new n(M,g)).recoveryParam)return M.recoveryParam;for(var I=0;I<4;I++){var e;try{e=this.recoverPubKey(A,M,I)}catch(A){continue}if(e.eq(t))return I}throw new Error("Unable to find valid recovery factor")}},function(A,M,t){"use strict";var g=t(51),I=t(94),e=t(11);function i(A){if(!(this instanceof i))return new i(A);this.hash=A.hash,this.predResist=!!A.predResist,this.outLen=this.hash.outSize,this.minEntropy=A.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var M=I.toArray(A.entropy,A.entropyEnc||"hex"),t=I.toArray(A.nonce,A.nonceEnc||"hex"),g=I.toArray(A.pers,A.persEnc||"hex");e(M.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(M,t,g)}A.exports=i,i.prototype._init=function(A,M,t){var g=A.concat(M).concat(t);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var I=0;I<this.V.length;I++)this.K[I]=0,this.V[I]=1;this._update(g),this._reseed=1,this.reseedInterval=281474976710656},i.prototype._hmac=function(){return new g.hmac(this.hash,this.K)},i.prototype._update=function(A){var M=this._hmac().update(this.V).update([0]);A&&(M=M.update(A)),this.K=M.digest(),this.V=this._hmac().update(this.V).digest(),A&&(this.K=this._hmac().update(this.V).update([1]).update(A).digest(),this.V=this._hmac().update(this.V).digest())},i.prototype.reseed=function(A,M,t,g){"string"!=typeof M&&(g=t,t=M,M=null),A=I.toArray(A,M),t=I.toArray(t,g),e(A.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(A.concat(t||[])),this._reseed=1},i.prototype.generate=function(A,M,t,g){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof M&&(g=t,t=M,M=null),t&&(t=I.toArray(t,g||"hex"),this._update(t));for(var e=[];e.length<A;)this.V=this._hmac().update(this.V).digest(),e=e.concat(this.V);var i=e.slice(0,A);return this._update(t),this._reseed++,I.encode(i,M)}},function(A,M,t){"use strict";var g=t(6),I=t(12).assert;function e(A,M){this.ec=A,this.priv=null,this.pub=null,M.priv&&this._importPrivate(M.priv,M.privEnc),M.pub&&this._importPublic(M.pub,M.pubEnc)}A.exports=e,e.fromPublic=function(A,M,t){return M instanceof e?M:new e(A,{pub:M,pubEnc:t})},e.fromPrivate=function(A,M,t){return M instanceof e?M:new e(A,{priv:M,privEnc:t})},e.prototype.validate=function(){var A=this.getPublic();return A.isInfinity()?{result:!1,reason:"Invalid public key"}:A.validate()?A.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},e.prototype.getPublic=function(A,M){return"string"==typeof A&&(M=A,A=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),M?this.pub.encode(M,A):this.pub},e.prototype.getPrivate=function(A){return"hex"===A?this.priv.toString(16,2):this.priv},e.prototype._importPrivate=function(A,M){this.priv=new g(A,M||16),this.priv=this.priv.umod(this.ec.curve.n)},e.prototype._importPublic=function(A,M){if(A.x||A.y)return"mont"===this.ec.curve.type?I(A.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||I(A.x&&A.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(A.x,A.y));this.pub=this.ec.curve.decodePoint(A,M)},e.prototype.derive=function(A){return A.mul(this.priv).getX()},e.prototype.sign=function(A,M,t){return this.ec.sign(A,this,M,t)},e.prototype.verify=function(A,M){return this.ec.verify(A,M,this)},e.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(A,M,t){"use strict";var g=t(6),I=t(12),e=I.assert;function i(A,M){if(A instanceof i)return A;this._importDER(A,M)||(e(A.r&&A.s,"Signature without r or s"),this.r=new g(A.r,16),this.s=new g(A.s,16),void 0===A.recoveryParam?this.recoveryParam=null:this.recoveryParam=A.recoveryParam)}function T(){this.place=0}function E(A,M){var t=A[M.place++];if(!(128&t))return t;var g=15&t;if(0===g||g>4)return!1;for(var I=0,e=0,i=M.place;e<g;e++,i++)I<<=8,I|=A[i],I>>>=0;return!(I<=127)&&(M.place=i,I)}function N(A){for(var M=0,t=A.length-1;!A[M]&&!(128&A[M+1])&&M<t;)M++;return 0===M?A:A.slice(M)}function n(A,M){if(M<128)A.push(M);else{var t=1+(Math.log(M)/Math.LN2>>>3);for(A.push(128|t);--t;)A.push(M>>>(t<<3)&255);A.push(M)}}A.exports=i,i.prototype._importDER=function(A,M){A=I.toArray(A,M);var t=new T;if(48!==A[t.place++])return!1;var e=E(A,t);if(!1===e)return!1;if(e+t.place!==A.length)return!1;if(2!==A[t.place++])return!1;var i=E(A,t);if(!1===i)return!1;var N=A.slice(t.place,i+t.place);if(t.place+=i,2!==A[t.place++])return!1;var n=E(A,t);if(!1===n)return!1;if(A.length!==n+t.place)return!1;var D=A.slice(t.place,n+t.place);if(0===N[0]){if(!(128&N[1]))return!1;N=N.slice(1)}if(0===D[0]){if(!(128&D[1]))return!1;D=D.slice(1)}return this.r=new g(N),this.s=new g(D),this.recoveryParam=null,!0},i.prototype.toDER=function(A){var M=this.r.toArray(),t=this.s.toArray();for(128&M[0]&&(M=[0].concat(M)),128&t[0]&&(t=[0].concat(t)),M=N(M),t=N(t);!(t[0]||128&t[1]);)t=t.slice(1);var g=[2];n(g,M.length),(g=g.concat(M)).push(2),n(g,t.length);var e=g.concat(t),i=[48];return n(i,e.length),i=i.concat(e),I.encode(i,A)}},function(A,M,t){"use strict";var g=t(51),I=t(50),e=t(12),i=e.assert,T=e.parseBytes,E=t(187),N=t(188);function n(A){if(i("ed25519"===A,"only tested with ed25519 so far"),!(this instanceof n))return new n(A);A=I[A].curve;this.curve=A,this.g=A.g,this.g.precompute(A.n.bitLength()+1),this.pointClass=A.point().constructor,this.encodingLength=Math.ceil(A.n.bitLength()/8),this.hash=g.sha512}A.exports=n,n.prototype.sign=function(A,M){A=T(A);var t=this.keyFromSecret(M),g=this.hashInt(t.messagePrefix(),A),I=this.g.mul(g),e=this.encodePoint(I),i=this.hashInt(e,t.pubBytes(),A).mul(t.priv()),E=g.add(i).umod(this.curve.n);return this.makeSignature({R:I,S:E,Rencoded:e})},n.prototype.verify=function(A,M,t){A=T(A),M=this.makeSignature(M);var g=this.keyFromPublic(t),I=this.hashInt(M.Rencoded(),g.pubBytes(),A),e=this.g.mul(M.S());return M.R().add(g.pub().mul(I)).eq(e)},n.prototype.hashInt=function(){for(var A=this.hash(),M=0;M<arguments.length;M++)A.update(arguments[M]);return e.intFromLE(A.digest()).umod(this.curve.n)},n.prototype.keyFromPublic=function(A){return E.fromPublic(this,A)},n.prototype.keyFromSecret=function(A){return E.fromSecret(this,A)},n.prototype.makeSignature=function(A){return A instanceof N?A:new N(this,A)},n.prototype.encodePoint=function(A){var M=A.getY().toArray("le",this.encodingLength);return M[this.encodingLength-1]|=A.getX().isOdd()?128:0,M},n.prototype.decodePoint=function(A){var M=(A=e.parseBytes(A)).length-1,t=A.slice(0,M).concat(-129&A[M]),g=0!=(128&A[M]),I=e.intFromLE(t);return this.curve.pointFromY(I,g)},n.prototype.encodeInt=function(A){return A.toArray("le",this.encodingLength)},n.prototype.decodeInt=function(A){return e.intFromLE(A)},n.prototype.isPoint=function(A){return A instanceof this.pointClass}},function(A,M,t){"use strict";var g=t(12),I=g.assert,e=g.parseBytes,i=g.cachedProperty;function T(A,M){this.eddsa=A,this._secret=e(M.secret),A.isPoint(M.pub)?this._pub=M.pub:this._pubBytes=e(M.pub)}T.fromPublic=function(A,M){return M instanceof T?M:new T(A,{pub:M})},T.fromSecret=function(A,M){return M instanceof T?M:new T(A,{secret:M})},T.prototype.secret=function(){return this._secret},i(T,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),i(T,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),i(T,"privBytes",(function(){var A=this.eddsa,M=this.hash(),t=A.encodingLength-1,g=M.slice(0,A.encodingLength);return g[0]&=248,g[t]&=127,g[t]|=64,g})),i(T,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),i(T,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),i(T,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),T.prototype.sign=function(A){return I(this._secret,"KeyPair can only verify"),this.eddsa.sign(A,this)},T.prototype.verify=function(A,M){return this.eddsa.verify(A,M,this)},T.prototype.getSecret=function(A){return I(this._secret,"KeyPair is public only"),g.encode(this.secret(),A)},T.prototype.getPublic=function(A){return g.encode(this.pubBytes(),A)},A.exports=T},function(A,M,t){"use strict";var g=t(6),I=t(12),e=I.assert,i=I.cachedProperty,T=I.parseBytes;function E(A,M){this.eddsa=A,"object"!=typeof M&&(M=T(M)),Array.isArray(M)&&(M={R:M.slice(0,A.encodingLength),S:M.slice(A.encodingLength)}),e(M.R&&M.S,"Signature without R or S"),A.isPoint(M.R)&&(this._R=M.R),M.S instanceof g&&(this._S=M.S),this._Rencoded=Array.isArray(M.R)?M.R:M.Rencoded,this._Sencoded=Array.isArray(M.S)?M.S:M.Sencoded}i(E,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),i(E,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),i(E,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),i(E,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),E.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},E.prototype.toHex=function(){return I.encode(this.toBytes(),"hex").toUpperCase()},A.exports=E},function(A,M){},function(A,M,t){"use strict";var g=t(100);M.certificate=t(196);var I=g.define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())}));M.RSAPrivateKey=I;var e=g.define("RSAPublicKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())}));M.RSAPublicKey=e;var i=g.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(T),this.key("subjectPublicKey").bitstr())}));M.PublicKey=i;var T=g.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())})),E=g.define("PrivateKeyInfo",(function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(T),this.key("subjectPrivateKey").octstr())}));M.PrivateKey=E;var N=g.define("EncryptedPrivateKeyInfo",(function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())}));M.EncryptedPrivateKey=N;var n=g.define("DSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())}));M.DSAPrivateKey=n,M.DSAparam=g.define("DSAparam",(function(){this.int()}));var D=g.define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(C),this.key("publicKey").optional().explicit(1).bitstr())}));M.ECPrivateKey=D;var C=g.define("ECParameters",(function(){this.choice({namedCurve:this.objid()})}));M.signature=g.define("signature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())}))},function(A,M,t){"use strict";var g=t(101),I=t(103),e=t(3);function i(A,M){this.name=A,this.body=M,this.decoders={},this.encoders={}}M.define=function(A,M){return new i(A,M)},i.prototype._createNamed=function(A){var M=this.name;function t(A){this._initNamed(A,M)}return e(t,A),t.prototype._initNamed=function(M,t){A.call(this,M,t)},new t(this)},i.prototype._getDecoder=function(A){return A=A||"der",this.decoders.hasOwnProperty(A)||(this.decoders[A]=this._createNamed(I[A])),this.decoders[A]},i.prototype.decode=function(A,M,t){return this._getDecoder(M).decode(A,t)},i.prototype._getEncoder=function(A){return A=A||"der",this.encoders.hasOwnProperty(A)||(this.encoders[A]=this._createNamed(g[A])),this.encoders[A]},i.prototype.encode=function(A,M,t){return this._getEncoder(M).encode(A,t)}},function(A,M,t){"use strict";var g=t(3),I=t(102);function e(A){I.call(this,A),this.enc="pem"}g(e,I),A.exports=e,e.prototype.encode=function(A,M){for(var t=I.prototype.encode.call(this,A).toString("base64"),g=["-----BEGIN "+M.label+"-----"],e=0;e<t.length;e+=64)g.push(t.slice(e,e+64));return g.push("-----END "+M.label+"-----"),g.join("\n")}},function(A,M,t){"use strict";var g=t(3),I=t(52).Buffer,e=t(104);function i(A){e.call(this,A),this.enc="pem"}g(i,e),A.exports=i,i.prototype.decode=function(A,M){for(var t=A.toString().split(/[\r\n]+/g),g=M.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,T=-1,E=-1,N=0;N<t.length;N++){var n=t[N].match(i);if(null!==n&&n[2]===g){if(-1!==T){if("END"!==n[1])break;E=N;break}if("BEGIN"!==n[1])break;T=N}}if(-1===T||-1===E)throw new Error("PEM section not found for: "+g);var D=t.slice(T+1,E).join("");D.replace(/[^a-z0-9+/=]+/gi,"");var C=I.from(D,"base64");return e.prototype.decode.call(this,C,M)}},function(A,M,t){"use strict";var g=M;g.Reporter=t(54).Reporter,g.DecoderBuffer=t(28).DecoderBuffer,g.EncoderBuffer=t(28).EncoderBuffer,g.Node=t(53)},function(A,M,t){"use strict";var g=M;g._reverse=function(A){var M={};return Object.keys(A).forEach((function(t){(0|t)==t&&(t|=0);var g=A[t];M[g]=t})),M},g.der=t(55)},function(A,M,t){"use strict";var g=t(100),I=g.define("Time",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),e=g.define("AttributeTypeValue",(function(){this.seq().obj(this.key("type").objid(),this.key("value").any())})),i=g.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional(),this.key("curve").objid().optional())})),T=g.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(i),this.key("subjectPublicKey").bitstr())})),E=g.define("RelativeDistinguishedName",(function(){this.setof(e)})),N=g.define("RDNSequence",(function(){this.seqof(E)})),n=g.define("Name",(function(){this.choice({rdnSequence:this.use(N)})})),D=g.define("Validity",(function(){this.seq().obj(this.key("notBefore").use(I),this.key("notAfter").use(I))})),C=g.define("Extension",(function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())})),r=g.define("TBSCertificate",(function(){this.seq().obj(this.key("version").explicit(0).int().optional(),this.key("serialNumber").int(),this.key("signature").use(i),this.key("issuer").use(n),this.key("validity").use(D),this.key("subject").use(n),this.key("subjectPublicKeyInfo").use(T),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(C).optional())})),c=g.define("X509Certificate",(function(){this.seq().obj(this.key("tbsCertificate").use(r),this.key("signatureAlgorithm").use(i),this.key("signatureValue").bitstr())}));A.exports=c},function(A){A.exports=JSON.parse('{"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}')},function(A,M,t){var g=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m,I=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,e=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m,i=t(33),T=t(45),E=t(4).Buffer;A.exports=function(A,M){var t,N=A.toString(),n=N.match(g);if(n){var D="aes"+n[1],C=E.from(n[2],"hex"),r=E.from(n[3].replace(/[\r\n]/g,""),"base64"),c=i(M,C.slice(0,8),parseInt(n[1],10)).key,o=[],B=T.createDecipheriv(D,c,C);o.push(B.update(r)),o.push(B.final()),t=E.concat(o)}else{var Q=N.match(e);t=E.from(Q[2].replace(/[\r\n]/g,""),"base64")}return{tag:N.match(I)[1],data:t}}},function(A,M,t){var g=t(4).Buffer,I=t(99),e=t(49).ec,i=t(35),T=t(105);function E(A,M){if(A.cmpn(0)<=0)throw new Error("invalid sig");if(A.cmp(M)>=M)throw new Error("invalid sig")}A.exports=function(A,M,t,N,n){var D=i(t);if("ec"===D.type){if("ecdsa"!==N&&"ecdsa/rsa"!==N)throw new Error("wrong public key type");return function(A,M,t){var g=T[t.data.algorithm.curve.join(".")];if(!g)throw new Error("unknown curve "+t.data.algorithm.curve.join("."));var I=new e(g),i=t.data.subjectPrivateKey.data;return I.verify(M,A,i)}(A,M,D)}if("dsa"===D.type){if("dsa"!==N)throw new Error("wrong public key type");return function(A,M,t){var g=t.data.p,e=t.data.q,T=t.data.g,N=t.data.pub_key,n=i.signature.decode(A,"der"),D=n.s,C=n.r;E(D,e),E(C,e);var r=I.mont(g),c=D.invm(e);return 0===T.toRed(r).redPow(new I(M).mul(c).mod(e)).fromRed().mul(N.toRed(r).redPow(C.mul(c).mod(e)).fromRed()).mod(g).mod(e).cmp(C)}(A,M,D)}if("rsa"!==N&&"ecdsa/rsa"!==N)throw new Error("wrong public key type");M=g.concat([n,M]);for(var C=D.modulus.byteLength(),r=[1],c=0;M.length+r.length+2<C;)r.push(255),c++;r.push(0);for(var o=-1;++o<M.length;)r.push(M[o]);r=g.from(r);var B=I.mont(D.modulus);A=(A=new I(A).toRed(B)).redPow(new I(D.publicExponent)),A=g.from(A.fromRed().toArray());var Q=c<8?1:0;for(C=Math.min(A.length,r.length),A.length!==r.length&&(Q=1),o=-1;++o<C;)Q|=A[o]^r[o];return 0===Q}},function(A,M,t){(function(M){var g=t(49),I=t(6);A.exports=function(A){return new i(A)};var e={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};function i(A){this.curveType=e[A],this.curveType||(this.curveType={name:A}),this.curve=new g.ec(this.curveType.name),this.keys=void 0}function T(A,t,g){Array.isArray(A)||(A=A.toArray());var I=new M(A);if(g&&I.length<g){var e=new M(g-I.length);e.fill(0),I=M.concat([e,I])}return t?I.toString(t):I}e.p224=e.secp224r1,e.p256=e.secp256r1=e.prime256v1,e.p192=e.secp192r1=e.prime192v1,e.p384=e.secp384r1,e.p521=e.secp521r1,i.prototype.generateKeys=function(A,M){return this.keys=this.curve.genKeyPair(),this.getPublicKey(A,M)},i.prototype.computeSecret=function(A,t,g){return t=t||"utf8",M.isBuffer(A)||(A=new M(A,t)),T(this.curve.keyFromPublic(A).getPublic().mul(this.keys.getPrivate()).getX(),g,this.curveType.byteLength)},i.prototype.getPublicKey=function(A,M){var t=this.keys.getPublic("compressed"===M,!0);return"hybrid"===M&&(t[t.length-1]%2?t[0]=7:t[0]=6),T(t,A)},i.prototype.getPrivateKey=function(A){return T(this.keys.getPrivate(),A)},i.prototype.setPublicKey=function(A,t){return t=t||"utf8",M.isBuffer(A)||(A=new M(A,t)),this.keys._importPublic(A),this},i.prototype.setPrivateKey=function(A,t){t=t||"utf8",M.isBuffer(A)||(A=new M(A,t));var g=new I(A);return g=g.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(g),this}}).call(this,t(9).Buffer)},function(A,M,t){M.publicEncrypt=t(202),M.privateDecrypt=t(203),M.privateEncrypt=function(A,t){return M.publicEncrypt(A,t,!0)},M.publicDecrypt=function(A,t){return M.privateDecrypt(A,t,!0)}},function(A,M,t){var g=t(35),I=t(18),e=t(23),i=t(106),T=t(107),E=t(6),N=t(108),n=t(48),D=t(4).Buffer;A.exports=function(A,M,t){var C;C=A.padding?A.padding:t?1:4;var r,c=g(A);if(4===C)r=function(A,M){var t=A.modulus.byteLength(),g=M.length,N=e("sha1").update(D.alloc(0)).digest(),n=N.length,C=2*n;if(g>t-C-2)throw new Error("message too long");var r=D.alloc(t-g-C-2),c=t-n-1,o=I(n),B=T(D.concat([N,r,D.alloc(1,1),M],c),i(o,c)),Q=T(o,i(B,n));return new E(D.concat([D.alloc(1),Q,B],t))}(c,M);else if(1===C)r=function(A,M,t){var g,e=M.length,i=A.modulus.byteLength();if(e>i-11)throw new Error("message too long");g=t?D.alloc(i-e-3,255):function(A){var M,t=D.allocUnsafe(A),g=0,e=I(2*A),i=0;for(;g<A;)i===e.length&&(e=I(2*A),i=0),(M=e[i++])&&(t[g++]=M);return t}(i-e-3);return new E(D.concat([D.from([0,t?1:2]),g,D.alloc(1),M],i))}(c,M,t);else{if(3!==C)throw new Error("unknown padding");if((r=new E(M)).cmp(c.modulus)>=0)throw new Error("data too long for modulus")}return t?n(r,c):N(r,c)}},function(A,M,t){var g=t(35),I=t(106),e=t(107),i=t(6),T=t(48),E=t(23),N=t(108),n=t(4).Buffer;A.exports=function(A,M,t){var D;D=A.padding?A.padding:t?1:4;var C,r=g(A),c=r.modulus.byteLength();if(M.length>c||new i(M).cmp(r.modulus)>=0)throw new Error("decryption error");C=t?N(new i(M),r):T(M,r);var o=n.alloc(c-C.length);if(C=n.concat([o,C],c),4===D)return function(A,M){var t=A.modulus.byteLength(),g=E("sha1").update(n.alloc(0)).digest(),i=g.length;if(0!==M[0])throw new Error("decryption error");var T=M.slice(1,i+1),N=M.slice(i+1),D=e(T,I(N,i)),C=e(N,I(D,t-i-1));if(function(A,M){A=n.from(A),M=n.from(M);var t=0,g=A.length;A.length!==M.length&&(t++,g=Math.min(A.length,M.length));var I=-1;for(;++I<g;)t+=A[I]^M[I];return t}(g,C.slice(0,i)))throw new Error("decryption error");var r=i;for(;0===C[r];)r++;if(1!==C[r++])throw new Error("decryption error");return C.slice(r)}(r,C);if(1===D)return function(A,M,t){var g=M.slice(0,2),I=2,e=0;for(;0!==M[I++];)if(I>=M.length){e++;break}var i=M.slice(2,I-1);("0002"!==g.toString("hex")&&!t||"0001"!==g.toString("hex")&&t)&&e++;i.length<8&&e++;if(e)throw new Error("decryption error");return M.slice(I)}(0,C,t);if(3===D)return C;throw new Error("unknown padding")}},function(A,M,t){"use strict";(function(A,g){function I(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var e=t(4),i=t(18),T=e.Buffer,E=e.kMaxLength,N=A.crypto||A.msCrypto,n=Math.pow(2,32)-1;function D(A,M){if("number"!=typeof A||A!=A)throw new TypeError("offset must be a number");if(A>n||A<0)throw new TypeError("offset must be a uint32");if(A>E||A>M)throw new RangeError("offset out of range")}function C(A,M,t){if("number"!=typeof A||A!=A)throw new TypeError("size must be a number");if(A>n||A<0)throw new TypeError("size must be a uint32");if(A+M>t||A>E)throw new RangeError("buffer too small")}function r(A,M,t,I){if(g.browser){var e=A.buffer,T=new Uint8Array(e,M,t);return N.getRandomValues(T),I?void g.nextTick((function(){I(null,A)})):A}if(!I)return i(t).copy(A,M),A;i(t,(function(t,g){if(t)return I(t);g.copy(A,M),I(null,A)}))}N&&N.getRandomValues||!g.browser?(M.randomFill=function(M,t,g,I){if(!(T.isBuffer(M)||M instanceof A.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof t)I=t,t=0,g=M.length;else if("function"==typeof g)I=g,g=M.length-t;else if("function"!=typeof I)throw new TypeError('"cb" argument must be a function');return D(t,M.length),C(g,t,M.length),r(M,t,g,I)},M.randomFillSync=function(M,t,g){void 0===t&&(t=0);if(!(T.isBuffer(M)||M instanceof A.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');D(t,M.length),void 0===g&&(g=M.length-t);return C(g,t,M.length),r(M,t,g)}):(M.randomFill=I,M.randomFillSync=I)}).call(this,t(10),t(8))},function(A,M,t){"use strict";t.r(M);var g=t(0),I=t(29);M.default=function(A){console.log("new AudioWorker.js"),A._requestAbort=!1,A.soundPlayer=null,A.audioSampleQueue=[];A.addEventListener("message",(function(M){var t=M.data;switch(console.log("AudioWorker:  recv data."),t.cmd){case g.u:console.log("init audio player."),function(M,t,g){if(null==A.soundPlayer){var e="16bitInt";switch(M){case 0:e="8bitInt";break;case 1:e="16bitInt";break;case 2:e="32bitInt";break;case 3:e="32bitFloat";break;default:this.logger.logError("Unsupported audio sampleFmt "+M+"!")}A.soundPlayer=new I.a,A.soundPlayer.init({encoding:e,channels:t,sampleRate:g,flushingTime:5e3})}}(1,2,8e3);break;case g.o:console.log("recv audio data...");break;case g.k:A._requestAbort=!0}}))}},function(A,M,t){var g=t(56),I=t(207);"string"==typeof(I=I.__esModule?I.default:I)&&(I=[[A.i,I,""]]);var e={insert:"head",singleton:!1};g(I,e);A.exports=I.locals||{}},function(A,M,t){var g=t(57),I=t(109),e=t(208),i=t(209),T=t(210),E=t(211),N=t(212),n=t(213);M=g(!1);var D=I(e),C=I(i,{hash:"?#iefix&v=4.7.0"}),r=I(T),c=I(E),o=I(N),B=I(n,{hash:"#fontawesomeregular"});M.push([A.i,"/*!\r\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\r\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\r\n */\r\n/* FONT PATH\r\n * -------------------------- */\r\n@font-face {\r\n  font-family: 'FontAwesome';\r\n  src: url("+D+");\r\n  src: url("+C+") format('embedded-opentype'), \r\n  url("+r+") format('woff2'), \r\n  url("+c+") format('woff'), url("+o+") format('truetype'), url("+B+') format(\'svg\');\r\n  font-weight: normal;\r\n  font-style: normal;\r\n}\r\n.fa {\r\n  display: inline-block;\r\n  font: normal normal normal 14px/1 FontAwesome;\r\n  font-size: inherit;\r\n  text-rendering: auto;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n/* makes the font 33% larger relative to the icon container */\r\n.fa-lg {\r\n  font-size: 1.33333333em;\r\n  line-height: 0.75em;\r\n  vertical-align: -15%;\r\n}\r\n.fa-2x {\r\n  font-size: 2em;\r\n}\r\n.fa-3x {\r\n  font-size: 3em;\r\n}\r\n.fa-4x {\r\n  font-size: 4em;\r\n}\r\n.fa-5x {\r\n  font-size: 5em;\r\n}\r\n.fa-fw {\r\n  width: 1.28571429em;\r\n  text-align: center;\r\n}\r\n.fa-ul {\r\n  padding-left: 0;\r\n  margin-left: 2.14285714em;\r\n  list-style-type: none;\r\n}\r\n.fa-ul > li {\r\n  position: relative;\r\n}\r\n.fa-li {\r\n  position: absolute;\r\n  left: -2.14285714em;\r\n  width: 2.14285714em;\r\n  top: 0.14285714em;\r\n  text-align: center;\r\n}\r\n.fa-li.fa-lg {\r\n  left: -1.85714286em;\r\n}\r\n.fa-border {\r\n  padding: .2em .25em .15em;\r\n  border: solid 0.08em #eee;\r\n  border-radius: .1em;\r\n}\r\n.fa-pull-left {\r\n  float: left;\r\n}\r\n.fa-pull-right {\r\n  float: right;\r\n}\r\n.fa.fa-pull-left {\r\n  margin-right: .3em;\r\n}\r\n.fa.fa-pull-right {\r\n  margin-left: .3em;\r\n}\r\n/* Deprecated as of 4.4.0 */\r\n.pull-right {\r\n  float: right;\r\n}\r\n.pull-left {\r\n  float: left;\r\n}\r\n.fa.pull-left {\r\n  margin-right: .3em;\r\n}\r\n.fa.pull-right {\r\n  margin-left: .3em;\r\n}\r\n.fa-spin {\r\n  -webkit-animation: fa-spin 2s infinite linear;\r\n  animation: fa-spin 2s infinite linear;\r\n}\r\n.fa-pulse {\r\n  -webkit-animation: fa-spin 1s infinite steps(8);\r\n  animation: fa-spin 1s infinite steps(8);\r\n}\r\n@-webkit-keyframes fa-spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n@keyframes fa-spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n.fa-rotate-90 {\r\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\r\n  -webkit-transform: rotate(90deg);\r\n  -ms-transform: rotate(90deg);\r\n  transform: rotate(90deg);\r\n}\r\n.fa-rotate-180 {\r\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\r\n  -webkit-transform: rotate(180deg);\r\n  -ms-transform: rotate(180deg);\r\n  transform: rotate(180deg);\r\n}\r\n.fa-rotate-270 {\r\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\r\n  -webkit-transform: rotate(270deg);\r\n  -ms-transform: rotate(270deg);\r\n  transform: rotate(270deg);\r\n}\r\n.fa-flip-horizontal {\r\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\r\n  -webkit-transform: scale(-1, 1);\r\n  -ms-transform: scale(-1, 1);\r\n  transform: scale(-1, 1);\r\n}\r\n.fa-flip-vertical {\r\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\r\n  -webkit-transform: scale(1, -1);\r\n  -ms-transform: scale(1, -1);\r\n  transform: scale(1, -1);\r\n}\r\n:root .fa-rotate-90,\r\n:root .fa-rotate-180,\r\n:root .fa-rotate-270,\r\n:root .fa-flip-horizontal,\r\n:root .fa-flip-vertical {\r\n  filter: none;\r\n}\r\n.fa-stack {\r\n  position: relative;\r\n  display: inline-block;\r\n  width: 2em;\r\n  height: 2em;\r\n  line-height: 2em;\r\n  vertical-align: middle;\r\n}\r\n.fa-stack-1x,\r\n.fa-stack-2x {\r\n  position: absolute;\r\n  left: 0;\r\n  width: 100%;\r\n  text-align: center;\r\n}\r\n.fa-stack-1x {\r\n  line-height: inherit;\r\n}\r\n.fa-stack-2x {\r\n  font-size: 2em;\r\n}\r\n.fa-inverse {\r\n  color: #fff;\r\n}\r\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\r\n   readers do not read off random characters that represent icons */\r\n.fa-glass:before {\r\n  content: "\\f000";\r\n}\r\n.fa-music:before {\r\n  content: "\\f001";\r\n}\r\n.fa-search:before {\r\n  content: "\\f002";\r\n}\r\n.fa-envelope-o:before {\r\n  content: "\\f003";\r\n}\r\n.fa-heart:before {\r\n  content: "\\f004";\r\n}\r\n.fa-star:before {\r\n  content: "\\f005";\r\n}\r\n.fa-star-o:before {\r\n  content: "\\f006";\r\n}\r\n.fa-user:before {\r\n  content: "\\f007";\r\n}\r\n.fa-film:before {\r\n  content: "\\f008";\r\n}\r\n.fa-th-large:before {\r\n  content: "\\f009";\r\n}\r\n.fa-th:before {\r\n  content: "\\f00a";\r\n}\r\n.fa-th-list:before {\r\n  content: "\\f00b";\r\n}\r\n.fa-check:before {\r\n  content: "\\f00c";\r\n}\r\n.fa-remove:before,\r\n.fa-close:before,\r\n.fa-times:before {\r\n  content: "\\f00d";\r\n}\r\n.fa-search-plus:before {\r\n  content: "\\f00e";\r\n}\r\n.fa-search-minus:before {\r\n  content: "\\f010";\r\n}\r\n.fa-power-off:before {\r\n  content: "\\f011";\r\n}\r\n.fa-signal:before {\r\n  content: "\\f012";\r\n}\r\n.fa-gear:before,\r\n.fa-cog:before {\r\n  content: "\\f013";\r\n}\r\n.fa-trash-o:before {\r\n  content: "\\f014";\r\n}\r\n.fa-home:before {\r\n  content: "\\f015";\r\n}\r\n.fa-file-o:before {\r\n  content: "\\f016";\r\n}\r\n.fa-clock-o:before {\r\n  content: "\\f017";\r\n}\r\n.fa-road:before {\r\n  content: "\\f018";\r\n}\r\n.fa-download:before {\r\n  content: "\\f019";\r\n}\r\n.fa-arrow-circle-o-down:before {\r\n  content: "\\f01a";\r\n}\r\n.fa-arrow-circle-o-up:before {\r\n  content: "\\f01b";\r\n}\r\n.fa-inbox:before {\r\n  content: "\\f01c";\r\n}\r\n.fa-play-circle-o:before {\r\n  content: "\\f01d";\r\n}\r\n.fa-rotate-right:before,\r\n.fa-repeat:before {\r\n  content: "\\f01e";\r\n}\r\n.fa-refresh:before {\r\n  content: "\\f021";\r\n}\r\n.fa-list-alt:before {\r\n  content: "\\f022";\r\n}\r\n.fa-lock:before {\r\n  content: "\\f023";\r\n}\r\n.fa-flag:before {\r\n  content: "\\f024";\r\n}\r\n.fa-headphones:before {\r\n  content: "\\f025";\r\n}\r\n.fa-volume-off:before {\r\n  content: "\\f026";\r\n}\r\n.fa-volume-down:before {\r\n  content: "\\f027";\r\n}\r\n.fa-volume-up:before {\r\n  content: "\\f028";\r\n}\r\n.fa-qrcode:before {\r\n  content: "\\f029";\r\n}\r\n.fa-barcode:before {\r\n  content: "\\f02a";\r\n}\r\n.fa-tag:before {\r\n  content: "\\f02b";\r\n}\r\n.fa-tags:before {\r\n  content: "\\f02c";\r\n}\r\n.fa-book:before {\r\n  content: "\\f02d";\r\n}\r\n.fa-bookmark:before {\r\n  content: "\\f02e";\r\n}\r\n.fa-print:before {\r\n  content: "\\f02f";\r\n}\r\n.fa-camera:before {\r\n  content: "\\f030";\r\n}\r\n.fa-font:before {\r\n  content: "\\f031";\r\n}\r\n.fa-bold:before {\r\n  content: "\\f032";\r\n}\r\n.fa-italic:before {\r\n  content: "\\f033";\r\n}\r\n.fa-text-height:before {\r\n  content: "\\f034";\r\n}\r\n.fa-text-width:before {\r\n  content: "\\f035";\r\n}\r\n.fa-align-left:before {\r\n  content: "\\f036";\r\n}\r\n.fa-align-center:before {\r\n  content: "\\f037";\r\n}\r\n.fa-align-right:before {\r\n  content: "\\f038";\r\n}\r\n.fa-align-justify:before {\r\n  content: "\\f039";\r\n}\r\n.fa-list:before {\r\n  content: "\\f03a";\r\n}\r\n.fa-dedent:before,\r\n.fa-outdent:before {\r\n  content: "\\f03b";\r\n}\r\n.fa-indent:before {\r\n  content: "\\f03c";\r\n}\r\n.fa-video-camera:before {\r\n  content: "\\f03d";\r\n}\r\n.fa-photo:before,\r\n.fa-image:before,\r\n.fa-picture-o:before {\r\n  content: "\\f03e";\r\n}\r\n.fa-pencil:before {\r\n  content: "\\f040";\r\n}\r\n.fa-map-marker:before {\r\n  content: "\\f041";\r\n}\r\n.fa-adjust:before {\r\n  content: "\\f042";\r\n}\r\n.fa-tint:before {\r\n  content: "\\f043";\r\n}\r\n.fa-edit:before,\r\n.fa-pencil-square-o:before {\r\n  content: "\\f044";\r\n}\r\n.fa-share-square-o:before {\r\n  content: "\\f045";\r\n}\r\n.fa-check-square-o:before {\r\n  content: "\\f046";\r\n}\r\n.fa-arrows:before {\r\n  content: "\\f047";\r\n}\r\n.fa-step-backward:before {\r\n  content: "\\f048";\r\n}\r\n.fa-fast-backward:before {\r\n  content: "\\f049";\r\n}\r\n.fa-backward:before {\r\n  content: "\\f04a";\r\n}\r\n.fa-play:before {\r\n  content: "\\f04b";\r\n}\r\n.fa-pause:before {\r\n  content: "\\f04c";\r\n}\r\n.fa-stop:before {\r\n  content: "\\f04d";\r\n}\r\n.fa-forward:before {\r\n  content: "\\f04e";\r\n}\r\n.fa-fast-forward:before {\r\n  content: "\\f050";\r\n}\r\n.fa-step-forward:before {\r\n  content: "\\f051";\r\n}\r\n.fa-eject:before {\r\n  content: "\\f052";\r\n}\r\n.fa-chevron-left:before {\r\n  content: "\\f053";\r\n}\r\n.fa-chevron-right:before {\r\n  content: "\\f054";\r\n}\r\n.fa-plus-circle:before {\r\n  content: "\\f055";\r\n}\r\n.fa-minus-circle:before {\r\n  content: "\\f056";\r\n}\r\n.fa-times-circle:before {\r\n  content: "\\f057";\r\n}\r\n.fa-check-circle:before {\r\n  content: "\\f058";\r\n}\r\n.fa-question-circle:before {\r\n  content: "\\f059";\r\n}\r\n.fa-info-circle:before {\r\n  content: "\\f05a";\r\n}\r\n.fa-crosshairs:before {\r\n  content: "\\f05b";\r\n}\r\n.fa-times-circle-o:before {\r\n  content: "\\f05c";\r\n}\r\n.fa-check-circle-o:before {\r\n  content: "\\f05d";\r\n}\r\n.fa-ban:before {\r\n  content: "\\f05e";\r\n}\r\n.fa-arrow-left:before {\r\n  content: "\\f060";\r\n}\r\n.fa-arrow-right:before {\r\n  content: "\\f061";\r\n}\r\n.fa-arrow-up:before {\r\n  content: "\\f062";\r\n}\r\n.fa-arrow-down:before {\r\n  content: "\\f063";\r\n}\r\n.fa-mail-forward:before,\r\n.fa-share:before {\r\n  content: "\\f064";\r\n}\r\n.fa-expand:before {\r\n  content: "\\f065";\r\n}\r\n.fa-compress:before {\r\n  content: "\\f066";\r\n}\r\n.fa-plus:before {\r\n  content: "\\f067";\r\n}\r\n.fa-minus:before {\r\n  content: "\\f068";\r\n}\r\n.fa-asterisk:before {\r\n  content: "\\f069";\r\n}\r\n.fa-exclamation-circle:before {\r\n  content: "\\f06a";\r\n}\r\n.fa-gift:before {\r\n  content: "\\f06b";\r\n}\r\n.fa-leaf:before {\r\n  content: "\\f06c";\r\n}\r\n.fa-fire:before {\r\n  content: "\\f06d";\r\n}\r\n.fa-eye:before {\r\n  content: "\\f06e";\r\n}\r\n.fa-eye-slash:before {\r\n  content: "\\f070";\r\n}\r\n.fa-warning:before,\r\n.fa-exclamation-triangle:before {\r\n  content: "\\f071";\r\n}\r\n.fa-plane:before {\r\n  content: "\\f072";\r\n}\r\n.fa-calendar:before {\r\n  content: "\\f073";\r\n}\r\n.fa-random:before {\r\n  content: "\\f074";\r\n}\r\n.fa-comment:before {\r\n  content: "\\f075";\r\n}\r\n.fa-magnet:before {\r\n  content: "\\f076";\r\n}\r\n.fa-chevron-up:before {\r\n  content: "\\f077";\r\n}\r\n.fa-chevron-down:before {\r\n  content: "\\f078";\r\n}\r\n.fa-retweet:before {\r\n  content: "\\f079";\r\n}\r\n.fa-shopping-cart:before {\r\n  content: "\\f07a";\r\n}\r\n.fa-folder:before {\r\n  content: "\\f07b";\r\n}\r\n.fa-folder-open:before {\r\n  content: "\\f07c";\r\n}\r\n.fa-arrows-v:before {\r\n  content: "\\f07d";\r\n}\r\n.fa-arrows-h:before {\r\n  content: "\\f07e";\r\n}\r\n.fa-bar-chart-o:before,\r\n.fa-bar-chart:before {\r\n  content: "\\f080";\r\n}\r\n.fa-twitter-square:before {\r\n  content: "\\f081";\r\n}\r\n.fa-facebook-square:before {\r\n  content: "\\f082";\r\n}\r\n.fa-camera-retro:before {\r\n  content: "\\f083";\r\n}\r\n.fa-key:before {\r\n  content: "\\f084";\r\n}\r\n.fa-gears:before,\r\n.fa-cogs:before {\r\n  content: "\\f085";\r\n}\r\n.fa-comments:before {\r\n  content: "\\f086";\r\n}\r\n.fa-thumbs-o-up:before {\r\n  content: "\\f087";\r\n}\r\n.fa-thumbs-o-down:before {\r\n  content: "\\f088";\r\n}\r\n.fa-star-half:before {\r\n  content: "\\f089";\r\n}\r\n.fa-heart-o:before {\r\n  content: "\\f08a";\r\n}\r\n.fa-sign-out:before {\r\n  content: "\\f08b";\r\n}\r\n.fa-linkedin-square:before {\r\n  content: "\\f08c";\r\n}\r\n.fa-thumb-tack:before {\r\n  content: "\\f08d";\r\n}\r\n.fa-external-link:before {\r\n  content: "\\f08e";\r\n}\r\n.fa-sign-in:before {\r\n  content: "\\f090";\r\n}\r\n.fa-trophy:before {\r\n  content: "\\f091";\r\n}\r\n.fa-github-square:before {\r\n  content: "\\f092";\r\n}\r\n.fa-upload:before {\r\n  content: "\\f093";\r\n}\r\n.fa-lemon-o:before {\r\n  content: "\\f094";\r\n}\r\n.fa-phone:before {\r\n  content: "\\f095";\r\n}\r\n.fa-square-o:before {\r\n  content: "\\f096";\r\n}\r\n.fa-bookmark-o:before {\r\n  content: "\\f097";\r\n}\r\n.fa-phone-square:before {\r\n  content: "\\f098";\r\n}\r\n.fa-twitter:before {\r\n  content: "\\f099";\r\n}\r\n.fa-facebook-f:before,\r\n.fa-facebook:before {\r\n  content: "\\f09a";\r\n}\r\n.fa-github:before {\r\n  content: "\\f09b";\r\n}\r\n.fa-unlock:before {\r\n  content: "\\f09c";\r\n}\r\n.fa-credit-card:before {\r\n  content: "\\f09d";\r\n}\r\n.fa-feed:before,\r\n.fa-rss:before {\r\n  content: "\\f09e";\r\n}\r\n.fa-hdd-o:before {\r\n  content: "\\f0a0";\r\n}\r\n.fa-bullhorn:before {\r\n  content: "\\f0a1";\r\n}\r\n.fa-bell:before {\r\n  content: "\\f0f3";\r\n}\r\n.fa-certificate:before {\r\n  content: "\\f0a3";\r\n}\r\n.fa-hand-o-right:before {\r\n  content: "\\f0a4";\r\n}\r\n.fa-hand-o-left:before {\r\n  content: "\\f0a5";\r\n}\r\n.fa-hand-o-up:before {\r\n  content: "\\f0a6";\r\n}\r\n.fa-hand-o-down:before {\r\n  content: "\\f0a7";\r\n}\r\n.fa-arrow-circle-left:before {\r\n  content: "\\f0a8";\r\n}\r\n.fa-arrow-circle-right:before {\r\n  content: "\\f0a9";\r\n}\r\n.fa-arrow-circle-up:before {\r\n  content: "\\f0aa";\r\n}\r\n.fa-arrow-circle-down:before {\r\n  content: "\\f0ab";\r\n}\r\n.fa-globe:before {\r\n  content: "\\f0ac";\r\n}\r\n.fa-wrench:before {\r\n  content: "\\f0ad";\r\n}\r\n.fa-tasks:before {\r\n  content: "\\f0ae";\r\n}\r\n.fa-filter:before {\r\n  content: "\\f0b0";\r\n}\r\n.fa-briefcase:before {\r\n  content: "\\f0b1";\r\n}\r\n.fa-arrows-alt:before {\r\n  content: "\\f0b2";\r\n}\r\n.fa-group:before,\r\n.fa-users:before {\r\n  content: "\\f0c0";\r\n}\r\n.fa-chain:before,\r\n.fa-link:before {\r\n  content: "\\f0c1";\r\n}\r\n.fa-cloud:before {\r\n  content: "\\f0c2";\r\n}\r\n.fa-flask:before {\r\n  content: "\\f0c3";\r\n}\r\n.fa-cut:before,\r\n.fa-scissors:before {\r\n  content: "\\f0c4";\r\n}\r\n.fa-copy:before,\r\n.fa-files-o:before {\r\n  content: "\\f0c5";\r\n}\r\n.fa-paperclip:before {\r\n  content: "\\f0c6";\r\n}\r\n.fa-save:before,\r\n.fa-floppy-o:before {\r\n  content: "\\f0c7";\r\n}\r\n.fa-square:before {\r\n  content: "\\f0c8";\r\n}\r\n.fa-navicon:before,\r\n.fa-reorder:before,\r\n.fa-bars:before {\r\n  content: "\\f0c9";\r\n}\r\n.fa-list-ul:before {\r\n  content: "\\f0ca";\r\n}\r\n.fa-list-ol:before {\r\n  content: "\\f0cb";\r\n}\r\n.fa-strikethrough:before {\r\n  content: "\\f0cc";\r\n}\r\n.fa-underline:before {\r\n  content: "\\f0cd";\r\n}\r\n.fa-table:before {\r\n  content: "\\f0ce";\r\n}\r\n.fa-magic:before {\r\n  content: "\\f0d0";\r\n}\r\n.fa-truck:before {\r\n  content: "\\f0d1";\r\n}\r\n.fa-pinterest:before {\r\n  content: "\\f0d2";\r\n}\r\n.fa-pinterest-square:before {\r\n  content: "\\f0d3";\r\n}\r\n.fa-google-plus-square:before {\r\n  content: "\\f0d4";\r\n}\r\n.fa-google-plus:before {\r\n  content: "\\f0d5";\r\n}\r\n.fa-money:before {\r\n  content: "\\f0d6";\r\n}\r\n.fa-caret-down:before {\r\n  content: "\\f0d7";\r\n}\r\n.fa-caret-up:before {\r\n  content: "\\f0d8";\r\n}\r\n.fa-caret-left:before {\r\n  content: "\\f0d9";\r\n}\r\n.fa-caret-right:before {\r\n  content: "\\f0da";\r\n}\r\n.fa-columns:before {\r\n  content: "\\f0db";\r\n}\r\n.fa-unsorted:before,\r\n.fa-sort:before {\r\n  content: "\\f0dc";\r\n}\r\n.fa-sort-down:before,\r\n.fa-sort-desc:before {\r\n  content: "\\f0dd";\r\n}\r\n.fa-sort-up:before,\r\n.fa-sort-asc:before {\r\n  content: "\\f0de";\r\n}\r\n.fa-envelope:before {\r\n  content: "\\f0e0";\r\n}\r\n.fa-linkedin:before {\r\n  content: "\\f0e1";\r\n}\r\n.fa-rotate-left:before,\r\n.fa-undo:before {\r\n  content: "\\f0e2";\r\n}\r\n.fa-legal:before,\r\n.fa-gavel:before {\r\n  content: "\\f0e3";\r\n}\r\n.fa-dashboard:before,\r\n.fa-tachometer:before {\r\n  content: "\\f0e4";\r\n}\r\n.fa-comment-o:before {\r\n  content: "\\f0e5";\r\n}\r\n.fa-comments-o:before {\r\n  content: "\\f0e6";\r\n}\r\n.fa-flash:before,\r\n.fa-bolt:before {\r\n  content: "\\f0e7";\r\n}\r\n.fa-sitemap:before {\r\n  content: "\\f0e8";\r\n}\r\n.fa-umbrella:before {\r\n  content: "\\f0e9";\r\n}\r\n.fa-paste:before,\r\n.fa-clipboard:before {\r\n  content: "\\f0ea";\r\n}\r\n.fa-lightbulb-o:before {\r\n  content: "\\f0eb";\r\n}\r\n.fa-exchange:before {\r\n  content: "\\f0ec";\r\n}\r\n.fa-cloud-download:before {\r\n  content: "\\f0ed";\r\n}\r\n.fa-cloud-upload:before {\r\n  content: "\\f0ee";\r\n}\r\n.fa-user-md:before {\r\n  content: "\\f0f0";\r\n}\r\n.fa-stethoscope:before {\r\n  content: "\\f0f1";\r\n}\r\n.fa-suitcase:before {\r\n  content: "\\f0f2";\r\n}\r\n.fa-bell-o:before {\r\n  content: "\\f0a2";\r\n}\r\n.fa-coffee:before {\r\n  content: "\\f0f4";\r\n}\r\n.fa-cutlery:before {\r\n  content: "\\f0f5";\r\n}\r\n.fa-file-text-o:before {\r\n  content: "\\f0f6";\r\n}\r\n.fa-building-o:before {\r\n  content: "\\f0f7";\r\n}\r\n.fa-hospital-o:before {\r\n  content: "\\f0f8";\r\n}\r\n.fa-ambulance:before {\r\n  content: "\\f0f9";\r\n}\r\n.fa-medkit:before {\r\n  content: "\\f0fa";\r\n}\r\n.fa-fighter-jet:before {\r\n  content: "\\f0fb";\r\n}\r\n.fa-beer:before {\r\n  content: "\\f0fc";\r\n}\r\n.fa-h-square:before {\r\n  content: "\\f0fd";\r\n}\r\n.fa-plus-square:before {\r\n  content: "\\f0fe";\r\n}\r\n.fa-angle-double-left:before {\r\n  content: "\\f100";\r\n}\r\n.fa-angle-double-right:before {\r\n  content: "\\f101";\r\n}\r\n.fa-angle-double-up:before {\r\n  content: "\\f102";\r\n}\r\n.fa-angle-double-down:before {\r\n  content: "\\f103";\r\n}\r\n.fa-angle-left:before {\r\n  content: "\\f104";\r\n}\r\n.fa-angle-right:before {\r\n  content: "\\f105";\r\n}\r\n.fa-angle-up:before {\r\n  content: "\\f106";\r\n}\r\n.fa-angle-down:before {\r\n  content: "\\f107";\r\n}\r\n.fa-desktop:before {\r\n  content: "\\f108";\r\n}\r\n.fa-laptop:before {\r\n  content: "\\f109";\r\n}\r\n.fa-tablet:before {\r\n  content: "\\f10a";\r\n}\r\n.fa-mobile-phone:before,\r\n.fa-mobile:before {\r\n  content: "\\f10b";\r\n}\r\n.fa-circle-o:before {\r\n  content: "\\f10c";\r\n}\r\n.fa-quote-left:before {\r\n  content: "\\f10d";\r\n}\r\n.fa-quote-right:before {\r\n  content: "\\f10e";\r\n}\r\n.fa-spinner:before {\r\n  content: "\\f110";\r\n}\r\n.fa-circle:before {\r\n  content: "\\f111";\r\n}\r\n.fa-mail-reply:before,\r\n.fa-reply:before {\r\n  content: "\\f112";\r\n}\r\n.fa-github-alt:before {\r\n  content: "\\f113";\r\n}\r\n.fa-folder-o:before {\r\n  content: "\\f114";\r\n}\r\n.fa-folder-open-o:before {\r\n  content: "\\f115";\r\n}\r\n.fa-smile-o:before {\r\n  content: "\\f118";\r\n}\r\n.fa-frown-o:before {\r\n  content: "\\f119";\r\n}\r\n.fa-meh-o:before {\r\n  content: "\\f11a";\r\n}\r\n.fa-gamepad:before {\r\n  content: "\\f11b";\r\n}\r\n.fa-keyboard-o:before {\r\n  content: "\\f11c";\r\n}\r\n.fa-flag-o:before {\r\n  content: "\\f11d";\r\n}\r\n.fa-flag-checkered:before {\r\n  content: "\\f11e";\r\n}\r\n.fa-terminal:before {\r\n  content: "\\f120";\r\n}\r\n.fa-code:before {\r\n  content: "\\f121";\r\n}\r\n.fa-mail-reply-all:before,\r\n.fa-reply-all:before {\r\n  content: "\\f122";\r\n}\r\n.fa-star-half-empty:before,\r\n.fa-star-half-full:before,\r\n.fa-star-half-o:before {\r\n  content: "\\f123";\r\n}\r\n.fa-location-arrow:before {\r\n  content: "\\f124";\r\n}\r\n.fa-crop:before {\r\n  content: "\\f125";\r\n}\r\n.fa-code-fork:before {\r\n  content: "\\f126";\r\n}\r\n.fa-unlink:before,\r\n.fa-chain-broken:before {\r\n  content: "\\f127";\r\n}\r\n.fa-question:before {\r\n  content: "\\f128";\r\n}\r\n.fa-info:before {\r\n  content: "\\f129";\r\n}\r\n.fa-exclamation:before {\r\n  content: "\\f12a";\r\n}\r\n.fa-superscript:before {\r\n  content: "\\f12b";\r\n}\r\n.fa-subscript:before {\r\n  content: "\\f12c";\r\n}\r\n.fa-eraser:before {\r\n  content: "\\f12d";\r\n}\r\n.fa-puzzle-piece:before {\r\n  content: "\\f12e";\r\n}\r\n.fa-microphone:before {\r\n  content: "\\f130";\r\n}\r\n.fa-microphone-slash:before {\r\n  content: "\\f131";\r\n}\r\n.fa-shield:before {\r\n  content: "\\f132";\r\n}\r\n.fa-calendar-o:before {\r\n  content: "\\f133";\r\n}\r\n.fa-fire-extinguisher:before {\r\n  content: "\\f134";\r\n}\r\n.fa-rocket:before {\r\n  content: "\\f135";\r\n}\r\n.fa-maxcdn:before {\r\n  content: "\\f136";\r\n}\r\n.fa-chevron-circle-left:before {\r\n  content: "\\f137";\r\n}\r\n.fa-chevron-circle-right:before {\r\n  content: "\\f138";\r\n}\r\n.fa-chevron-circle-up:before {\r\n  content: "\\f139";\r\n}\r\n.fa-chevron-circle-down:before {\r\n  content: "\\f13a";\r\n}\r\n.fa-html5:before {\r\n  content: "\\f13b";\r\n}\r\n.fa-css3:before {\r\n  content: "\\f13c";\r\n}\r\n.fa-anchor:before {\r\n  content: "\\f13d";\r\n}\r\n.fa-unlock-alt:before {\r\n  content: "\\f13e";\r\n}\r\n.fa-bullseye:before {\r\n  content: "\\f140";\r\n}\r\n.fa-ellipsis-h:before {\r\n  content: "\\f141";\r\n}\r\n.fa-ellipsis-v:before {\r\n  content: "\\f142";\r\n}\r\n.fa-rss-square:before {\r\n  content: "\\f143";\r\n}\r\n.fa-play-circle:before {\r\n  content: "\\f144";\r\n}\r\n.fa-ticket:before {\r\n  content: "\\f145";\r\n}\r\n.fa-minus-square:before {\r\n  content: "\\f146";\r\n}\r\n.fa-minus-square-o:before {\r\n  content: "\\f147";\r\n}\r\n.fa-level-up:before {\r\n  content: "\\f148";\r\n}\r\n.fa-level-down:before {\r\n  content: "\\f149";\r\n}\r\n.fa-check-square:before {\r\n  content: "\\f14a";\r\n}\r\n.fa-pencil-square:before {\r\n  content: "\\f14b";\r\n}\r\n.fa-external-link-square:before {\r\n  content: "\\f14c";\r\n}\r\n.fa-share-square:before {\r\n  content: "\\f14d";\r\n}\r\n.fa-compass:before {\r\n  content: "\\f14e";\r\n}\r\n.fa-toggle-down:before,\r\n.fa-caret-square-o-down:before {\r\n  content: "\\f150";\r\n}\r\n.fa-toggle-up:before,\r\n.fa-caret-square-o-up:before {\r\n  content: "\\f151";\r\n}\r\n.fa-toggle-right:before,\r\n.fa-caret-square-o-right:before {\r\n  content: "\\f152";\r\n}\r\n.fa-euro:before,\r\n.fa-eur:before {\r\n  content: "\\f153";\r\n}\r\n.fa-gbp:before {\r\n  content: "\\f154";\r\n}\r\n.fa-dollar:before,\r\n.fa-usd:before {\r\n  content: "\\f155";\r\n}\r\n.fa-rupee:before,\r\n.fa-inr:before {\r\n  content: "\\f156";\r\n}\r\n.fa-cny:before,\r\n.fa-rmb:before,\r\n.fa-yen:before,\r\n.fa-jpy:before {\r\n  content: "\\f157";\r\n}\r\n.fa-ruble:before,\r\n.fa-rouble:before,\r\n.fa-rub:before {\r\n  content: "\\f158";\r\n}\r\n.fa-won:before,\r\n.fa-krw:before {\r\n  content: "\\f159";\r\n}\r\n.fa-bitcoin:before,\r\n.fa-btc:before {\r\n  content: "\\f15a";\r\n}\r\n.fa-file:before {\r\n  content: "\\f15b";\r\n}\r\n.fa-file-text:before {\r\n  content: "\\f15c";\r\n}\r\n.fa-sort-alpha-asc:before {\r\n  content: "\\f15d";\r\n}\r\n.fa-sort-alpha-desc:before {\r\n  content: "\\f15e";\r\n}\r\n.fa-sort-amount-asc:before {\r\n  content: "\\f160";\r\n}\r\n.fa-sort-amount-desc:before {\r\n  content: "\\f161";\r\n}\r\n.fa-sort-numeric-asc:before {\r\n  content: "\\f162";\r\n}\r\n.fa-sort-numeric-desc:before {\r\n  content: "\\f163";\r\n}\r\n.fa-thumbs-up:before {\r\n  content: "\\f164";\r\n}\r\n.fa-thumbs-down:before {\r\n  content: "\\f165";\r\n}\r\n.fa-youtube-square:before {\r\n  content: "\\f166";\r\n}\r\n.fa-youtube:before {\r\n  content: "\\f167";\r\n}\r\n.fa-xing:before {\r\n  content: "\\f168";\r\n}\r\n.fa-xing-square:before {\r\n  content: "\\f169";\r\n}\r\n.fa-youtube-play:before {\r\n  content: "\\f16a";\r\n}\r\n.fa-dropbox:before {\r\n  content: "\\f16b";\r\n}\r\n.fa-stack-overflow:before {\r\n  content: "\\f16c";\r\n}\r\n.fa-instagram:before {\r\n  content: "\\f16d";\r\n}\r\n.fa-flickr:before {\r\n  content: "\\f16e";\r\n}\r\n.fa-adn:before {\r\n  content: "\\f170";\r\n}\r\n.fa-bitbucket:before {\r\n  content: "\\f171";\r\n}\r\n.fa-bitbucket-square:before {\r\n  content: "\\f172";\r\n}\r\n.fa-tumblr:before {\r\n  content: "\\f173";\r\n}\r\n.fa-tumblr-square:before {\r\n  content: "\\f174";\r\n}\r\n.fa-long-arrow-down:before {\r\n  content: "\\f175";\r\n}\r\n.fa-long-arrow-up:before {\r\n  content: "\\f176";\r\n}\r\n.fa-long-arrow-left:before {\r\n  content: "\\f177";\r\n}\r\n.fa-long-arrow-right:before {\r\n  content: "\\f178";\r\n}\r\n.fa-apple:before {\r\n  content: "\\f179";\r\n}\r\n.fa-windows:before {\r\n  content: "\\f17a";\r\n}\r\n.fa-android:before {\r\n  content: "\\f17b";\r\n}\r\n.fa-linux:before {\r\n  content: "\\f17c";\r\n}\r\n.fa-dribbble:before {\r\n  content: "\\f17d";\r\n}\r\n.fa-skype:before {\r\n  content: "\\f17e";\r\n}\r\n.fa-foursquare:before {\r\n  content: "\\f180";\r\n}\r\n.fa-trello:before {\r\n  content: "\\f181";\r\n}\r\n.fa-female:before {\r\n  content: "\\f182";\r\n}\r\n.fa-male:before {\r\n  content: "\\f183";\r\n}\r\n.fa-gittip:before,\r\n.fa-gratipay:before {\r\n  content: "\\f184";\r\n}\r\n.fa-sun-o:before {\r\n  content: "\\f185";\r\n}\r\n.fa-moon-o:before {\r\n  content: "\\f186";\r\n}\r\n.fa-archive:before {\r\n  content: "\\f187";\r\n}\r\n.fa-bug:before {\r\n  content: "\\f188";\r\n}\r\n.fa-vk:before {\r\n  content: "\\f189";\r\n}\r\n.fa-weibo:before {\r\n  content: "\\f18a";\r\n}\r\n.fa-renren:before {\r\n  content: "\\f18b";\r\n}\r\n.fa-pagelines:before {\r\n  content: "\\f18c";\r\n}\r\n.fa-stack-exchange:before {\r\n  content: "\\f18d";\r\n}\r\n.fa-arrow-circle-o-right:before {\r\n  content: "\\f18e";\r\n}\r\n.fa-arrow-circle-o-left:before {\r\n  content: "\\f190";\r\n}\r\n.fa-toggle-left:before,\r\n.fa-caret-square-o-left:before {\r\n  content: "\\f191";\r\n}\r\n.fa-dot-circle-o:before {\r\n  content: "\\f192";\r\n}\r\n.fa-wheelchair:before {\r\n  content: "\\f193";\r\n}\r\n.fa-vimeo-square:before {\r\n  content: "\\f194";\r\n}\r\n.fa-turkish-lira:before,\r\n.fa-try:before {\r\n  content: "\\f195";\r\n}\r\n.fa-plus-square-o:before {\r\n  content: "\\f196";\r\n}\r\n.fa-space-shuttle:before {\r\n  content: "\\f197";\r\n}\r\n.fa-slack:before {\r\n  content: "\\f198";\r\n}\r\n.fa-envelope-square:before {\r\n  content: "\\f199";\r\n}\r\n.fa-wordpress:before {\r\n  content: "\\f19a";\r\n}\r\n.fa-openid:before {\r\n  content: "\\f19b";\r\n}\r\n.fa-institution:before,\r\n.fa-bank:before,\r\n.fa-university:before {\r\n  content: "\\f19c";\r\n}\r\n.fa-mortar-board:before,\r\n.fa-graduation-cap:before {\r\n  content: "\\f19d";\r\n}\r\n.fa-yahoo:before {\r\n  content: "\\f19e";\r\n}\r\n.fa-google:before {\r\n  content: "\\f1a0";\r\n}\r\n.fa-reddit:before {\r\n  content: "\\f1a1";\r\n}\r\n.fa-reddit-square:before {\r\n  content: "\\f1a2";\r\n}\r\n.fa-stumbleupon-circle:before {\r\n  content: "\\f1a3";\r\n}\r\n.fa-stumbleupon:before {\r\n  content: "\\f1a4";\r\n}\r\n.fa-delicious:before {\r\n  content: "\\f1a5";\r\n}\r\n.fa-digg:before {\r\n  content: "\\f1a6";\r\n}\r\n.fa-pied-piper-pp:before {\r\n  content: "\\f1a7";\r\n}\r\n.fa-pied-piper-alt:before {\r\n  content: "\\f1a8";\r\n}\r\n.fa-drupal:before {\r\n  content: "\\f1a9";\r\n}\r\n.fa-joomla:before {\r\n  content: "\\f1aa";\r\n}\r\n.fa-language:before {\r\n  content: "\\f1ab";\r\n}\r\n.fa-fax:before {\r\n  content: "\\f1ac";\r\n}\r\n.fa-building:before {\r\n  content: "\\f1ad";\r\n}\r\n.fa-child:before {\r\n  content: "\\f1ae";\r\n}\r\n.fa-paw:before {\r\n  content: "\\f1b0";\r\n}\r\n.fa-spoon:before {\r\n  content: "\\f1b1";\r\n}\r\n.fa-cube:before {\r\n  content: "\\f1b2";\r\n}\r\n.fa-cubes:before {\r\n  content: "\\f1b3";\r\n}\r\n.fa-behance:before {\r\n  content: "\\f1b4";\r\n}\r\n.fa-behance-square:before {\r\n  content: "\\f1b5";\r\n}\r\n.fa-steam:before {\r\n  content: "\\f1b6";\r\n}\r\n.fa-steam-square:before {\r\n  content: "\\f1b7";\r\n}\r\n.fa-recycle:before {\r\n  content: "\\f1b8";\r\n}\r\n.fa-automobile:before,\r\n.fa-car:before {\r\n  content: "\\f1b9";\r\n}\r\n.fa-cab:before,\r\n.fa-taxi:before {\r\n  content: "\\f1ba";\r\n}\r\n.fa-tree:before {\r\n  content: "\\f1bb";\r\n}\r\n.fa-spotify:before {\r\n  content: "\\f1bc";\r\n}\r\n.fa-deviantart:before {\r\n  content: "\\f1bd";\r\n}\r\n.fa-soundcloud:before {\r\n  content: "\\f1be";\r\n}\r\n.fa-database:before {\r\n  content: "\\f1c0";\r\n}\r\n.fa-file-pdf-o:before {\r\n  content: "\\f1c1";\r\n}\r\n.fa-file-word-o:before {\r\n  content: "\\f1c2";\r\n}\r\n.fa-file-excel-o:before {\r\n  content: "\\f1c3";\r\n}\r\n.fa-file-powerpoint-o:before {\r\n  content: "\\f1c4";\r\n}\r\n.fa-file-photo-o:before,\r\n.fa-file-picture-o:before,\r\n.fa-file-image-o:before {\r\n  content: "\\f1c5";\r\n}\r\n.fa-file-zip-o:before,\r\n.fa-file-archive-o:before {\r\n  content: "\\f1c6";\r\n}\r\n.fa-file-sound-o:before,\r\n.fa-file-audio-o:before {\r\n  content: "\\f1c7";\r\n}\r\n.fa-file-movie-o:before,\r\n.fa-file-video-o:before {\r\n  content: "\\f1c8";\r\n}\r\n.fa-file-code-o:before {\r\n  content: "\\f1c9";\r\n}\r\n.fa-vine:before {\r\n  content: "\\f1ca";\r\n}\r\n.fa-codepen:before {\r\n  content: "\\f1cb";\r\n}\r\n.fa-jsfiddle:before {\r\n  content: "\\f1cc";\r\n}\r\n.fa-life-bouy:before,\r\n.fa-life-buoy:before,\r\n.fa-life-saver:before,\r\n.fa-support:before,\r\n.fa-life-ring:before {\r\n  content: "\\f1cd";\r\n}\r\n.fa-circle-o-notch:before {\r\n  content: "\\f1ce";\r\n}\r\n.fa-ra:before,\r\n.fa-resistance:before,\r\n.fa-rebel:before {\r\n  content: "\\f1d0";\r\n}\r\n.fa-ge:before,\r\n.fa-empire:before {\r\n  content: "\\f1d1";\r\n}\r\n.fa-git-square:before {\r\n  content: "\\f1d2";\r\n}\r\n.fa-git:before {\r\n  content: "\\f1d3";\r\n}\r\n.fa-y-combinator-square:before,\r\n.fa-yc-square:before,\r\n.fa-hacker-news:before {\r\n  content: "\\f1d4";\r\n}\r\n.fa-tencent-weibo:before {\r\n  content: "\\f1d5";\r\n}\r\n.fa-qq:before {\r\n  content: "\\f1d6";\r\n}\r\n.fa-wechat:before,\r\n.fa-weixin:before {\r\n  content: "\\f1d7";\r\n}\r\n.fa-send:before,\r\n.fa-paper-plane:before {\r\n  content: "\\f1d8";\r\n}\r\n.fa-send-o:before,\r\n.fa-paper-plane-o:before {\r\n  content: "\\f1d9";\r\n}\r\n.fa-history:before {\r\n  content: "\\f1da";\r\n}\r\n.fa-circle-thin:before {\r\n  content: "\\f1db";\r\n}\r\n.fa-header:before {\r\n  content: "\\f1dc";\r\n}\r\n.fa-paragraph:before {\r\n  content: "\\f1dd";\r\n}\r\n.fa-sliders:before {\r\n  content: "\\f1de";\r\n}\r\n.fa-share-alt:before {\r\n  content: "\\f1e0";\r\n}\r\n.fa-share-alt-square:before {\r\n  content: "\\f1e1";\r\n}\r\n.fa-bomb:before {\r\n  content: "\\f1e2";\r\n}\r\n.fa-soccer-ball-o:before,\r\n.fa-futbol-o:before {\r\n  content: "\\f1e3";\r\n}\r\n.fa-tty:before {\r\n  content: "\\f1e4";\r\n}\r\n.fa-binoculars:before {\r\n  content: "\\f1e5";\r\n}\r\n.fa-plug:before {\r\n  content: "\\f1e6";\r\n}\r\n.fa-slideshare:before {\r\n  content: "\\f1e7";\r\n}\r\n.fa-twitch:before {\r\n  content: "\\f1e8";\r\n}\r\n.fa-yelp:before {\r\n  content: "\\f1e9";\r\n}\r\n.fa-newspaper-o:before {\r\n  content: "\\f1ea";\r\n}\r\n.fa-wifi:before {\r\n  content: "\\f1eb";\r\n}\r\n.fa-calculator:before {\r\n  content: "\\f1ec";\r\n}\r\n.fa-paypal:before {\r\n  content: "\\f1ed";\r\n}\r\n.fa-google-wallet:before {\r\n  content: "\\f1ee";\r\n}\r\n.fa-cc-visa:before {\r\n  content: "\\f1f0";\r\n}\r\n.fa-cc-mastercard:before {\r\n  content: "\\f1f1";\r\n}\r\n.fa-cc-discover:before {\r\n  content: "\\f1f2";\r\n}\r\n.fa-cc-amex:before {\r\n  content: "\\f1f3";\r\n}\r\n.fa-cc-paypal:before {\r\n  content: "\\f1f4";\r\n}\r\n.fa-cc-stripe:before {\r\n  content: "\\f1f5";\r\n}\r\n.fa-bell-slash:before {\r\n  content: "\\f1f6";\r\n}\r\n.fa-bell-slash-o:before {\r\n  content: "\\f1f7";\r\n}\r\n.fa-trash:before {\r\n  content: "\\f1f8";\r\n}\r\n.fa-copyright:before {\r\n  content: "\\f1f9";\r\n}\r\n.fa-at:before {\r\n  content: "\\f1fa";\r\n}\r\n.fa-eyedropper:before {\r\n  content: "\\f1fb";\r\n}\r\n.fa-paint-brush:before {\r\n  content: "\\f1fc";\r\n}\r\n.fa-birthday-cake:before {\r\n  content: "\\f1fd";\r\n}\r\n.fa-area-chart:before {\r\n  content: "\\f1fe";\r\n}\r\n.fa-pie-chart:before {\r\n  content: "\\f200";\r\n}\r\n.fa-line-chart:before {\r\n  content: "\\f201";\r\n}\r\n.fa-lastfm:before {\r\n  content: "\\f202";\r\n}\r\n.fa-lastfm-square:before {\r\n  content: "\\f203";\r\n}\r\n.fa-toggle-off:before {\r\n  content: "\\f204";\r\n}\r\n.fa-toggle-on:before {\r\n  content: "\\f205";\r\n}\r\n.fa-bicycle:before {\r\n  content: "\\f206";\r\n}\r\n.fa-bus:before {\r\n  content: "\\f207";\r\n}\r\n.fa-ioxhost:before {\r\n  content: "\\f208";\r\n}\r\n.fa-angellist:before {\r\n  content: "\\f209";\r\n}\r\n.fa-cc:before {\r\n  content: "\\f20a";\r\n}\r\n.fa-shekel:before,\r\n.fa-sheqel:before,\r\n.fa-ils:before {\r\n  content: "\\f20b";\r\n}\r\n.fa-meanpath:before {\r\n  content: "\\f20c";\r\n}\r\n.fa-buysellads:before {\r\n  content: "\\f20d";\r\n}\r\n.fa-connectdevelop:before {\r\n  content: "\\f20e";\r\n}\r\n.fa-dashcube:before {\r\n  content: "\\f210";\r\n}\r\n.fa-forumbee:before {\r\n  content: "\\f211";\r\n}\r\n.fa-leanpub:before {\r\n  content: "\\f212";\r\n}\r\n.fa-sellsy:before {\r\n  content: "\\f213";\r\n}\r\n.fa-shirtsinbulk:before {\r\n  content: "\\f214";\r\n}\r\n.fa-simplybuilt:before {\r\n  content: "\\f215";\r\n}\r\n.fa-skyatlas:before {\r\n  content: "\\f216";\r\n}\r\n.fa-cart-plus:before {\r\n  content: "\\f217";\r\n}\r\n.fa-cart-arrow-down:before {\r\n  content: "\\f218";\r\n}\r\n.fa-diamond:before {\r\n  content: "\\f219";\r\n}\r\n.fa-ship:before {\r\n  content: "\\f21a";\r\n}\r\n.fa-user-secret:before {\r\n  content: "\\f21b";\r\n}\r\n.fa-motorcycle:before {\r\n  content: "\\f21c";\r\n}\r\n.fa-street-view:before {\r\n  content: "\\f21d";\r\n}\r\n.fa-heartbeat:before {\r\n  content: "\\f21e";\r\n}\r\n.fa-venus:before {\r\n  content: "\\f221";\r\n}\r\n.fa-mars:before {\r\n  content: "\\f222";\r\n}\r\n.fa-mercury:before {\r\n  content: "\\f223";\r\n}\r\n.fa-intersex:before,\r\n.fa-transgender:before {\r\n  content: "\\f224";\r\n}\r\n.fa-transgender-alt:before {\r\n  content: "\\f225";\r\n}\r\n.fa-venus-double:before {\r\n  content: "\\f226";\r\n}\r\n.fa-mars-double:before {\r\n  content: "\\f227";\r\n}\r\n.fa-venus-mars:before {\r\n  content: "\\f228";\r\n}\r\n.fa-mars-stroke:before {\r\n  content: "\\f229";\r\n}\r\n.fa-mars-stroke-v:before {\r\n  content: "\\f22a";\r\n}\r\n.fa-mars-stroke-h:before {\r\n  content: "\\f22b";\r\n}\r\n.fa-neuter:before {\r\n  content: "\\f22c";\r\n}\r\n.fa-genderless:before {\r\n  content: "\\f22d";\r\n}\r\n.fa-facebook-official:before {\r\n  content: "\\f230";\r\n}\r\n.fa-pinterest-p:before {\r\n  content: "\\f231";\r\n}\r\n.fa-whatsapp:before {\r\n  content: "\\f232";\r\n}\r\n.fa-server:before {\r\n  content: "\\f233";\r\n}\r\n.fa-user-plus:before {\r\n  content: "\\f234";\r\n}\r\n.fa-user-times:before {\r\n  content: "\\f235";\r\n}\r\n.fa-hotel:before,\r\n.fa-bed:before {\r\n  content: "\\f236";\r\n}\r\n.fa-viacoin:before {\r\n  content: "\\f237";\r\n}\r\n.fa-train:before {\r\n  content: "\\f238";\r\n}\r\n.fa-subway:before {\r\n  content: "\\f239";\r\n}\r\n.fa-medium:before {\r\n  content: "\\f23a";\r\n}\r\n.fa-yc:before,\r\n.fa-y-combinator:before {\r\n  content: "\\f23b";\r\n}\r\n.fa-optin-monster:before {\r\n  content: "\\f23c";\r\n}\r\n.fa-opencart:before {\r\n  content: "\\f23d";\r\n}\r\n.fa-expeditedssl:before {\r\n  content: "\\f23e";\r\n}\r\n.fa-battery-4:before,\r\n.fa-battery:before,\r\n.fa-battery-full:before {\r\n  content: "\\f240";\r\n}\r\n.fa-battery-3:before,\r\n.fa-battery-three-quarters:before {\r\n  content: "\\f241";\r\n}\r\n.fa-battery-2:before,\r\n.fa-battery-half:before {\r\n  content: "\\f242";\r\n}\r\n.fa-battery-1:before,\r\n.fa-battery-quarter:before {\r\n  content: "\\f243";\r\n}\r\n.fa-battery-0:before,\r\n.fa-battery-empty:before {\r\n  content: "\\f244";\r\n}\r\n.fa-mouse-pointer:before {\r\n  content: "\\f245";\r\n}\r\n.fa-i-cursor:before {\r\n  content: "\\f246";\r\n}\r\n.fa-object-group:before {\r\n  content: "\\f247";\r\n}\r\n.fa-object-ungroup:before {\r\n  content: "\\f248";\r\n}\r\n.fa-sticky-note:before {\r\n  content: "\\f249";\r\n}\r\n.fa-sticky-note-o:before {\r\n  content: "\\f24a";\r\n}\r\n.fa-cc-jcb:before {\r\n  content: "\\f24b";\r\n}\r\n.fa-cc-diners-club:before {\r\n  content: "\\f24c";\r\n}\r\n.fa-clone:before {\r\n  content: "\\f24d";\r\n}\r\n.fa-balance-scale:before {\r\n  content: "\\f24e";\r\n}\r\n.fa-hourglass-o:before {\r\n  content: "\\f250";\r\n}\r\n.fa-hourglass-1:before,\r\n.fa-hourglass-start:before {\r\n  content: "\\f251";\r\n}\r\n.fa-hourglass-2:before,\r\n.fa-hourglass-half:before {\r\n  content: "\\f252";\r\n}\r\n.fa-hourglass-3:before,\r\n.fa-hourglass-end:before {\r\n  content: "\\f253";\r\n}\r\n.fa-hourglass:before {\r\n  content: "\\f254";\r\n}\r\n.fa-hand-grab-o:before,\r\n.fa-hand-rock-o:before {\r\n  content: "\\f255";\r\n}\r\n.fa-hand-stop-o:before,\r\n.fa-hand-paper-o:before {\r\n  content: "\\f256";\r\n}\r\n.fa-hand-scissors-o:before {\r\n  content: "\\f257";\r\n}\r\n.fa-hand-lizard-o:before {\r\n  content: "\\f258";\r\n}\r\n.fa-hand-spock-o:before {\r\n  content: "\\f259";\r\n}\r\n.fa-hand-pointer-o:before {\r\n  content: "\\f25a";\r\n}\r\n.fa-hand-peace-o:before {\r\n  content: "\\f25b";\r\n}\r\n.fa-trademark:before {\r\n  content: "\\f25c";\r\n}\r\n.fa-registered:before {\r\n  content: "\\f25d";\r\n}\r\n.fa-creative-commons:before {\r\n  content: "\\f25e";\r\n}\r\n.fa-gg:before {\r\n  content: "\\f260";\r\n}\r\n.fa-gg-circle:before {\r\n  content: "\\f261";\r\n}\r\n.fa-tripadvisor:before {\r\n  content: "\\f262";\r\n}\r\n.fa-odnoklassniki:before {\r\n  content: "\\f263";\r\n}\r\n.fa-odnoklassniki-square:before {\r\n  content: "\\f264";\r\n}\r\n.fa-get-pocket:before {\r\n  content: "\\f265";\r\n}\r\n.fa-wikipedia-w:before {\r\n  content: "\\f266";\r\n}\r\n.fa-safari:before {\r\n  content: "\\f267";\r\n}\r\n.fa-chrome:before {\r\n  content: "\\f268";\r\n}\r\n.fa-firefox:before {\r\n  content: "\\f269";\r\n}\r\n.fa-opera:before {\r\n  content: "\\f26a";\r\n}\r\n.fa-internet-explorer:before {\r\n  content: "\\f26b";\r\n}\r\n.fa-tv:before,\r\n.fa-television:before {\r\n  content: "\\f26c";\r\n}\r\n.fa-contao:before {\r\n  content: "\\f26d";\r\n}\r\n.fa-500px:before {\r\n  content: "\\f26e";\r\n}\r\n.fa-amazon:before {\r\n  content: "\\f270";\r\n}\r\n.fa-calendar-plus-o:before {\r\n  content: "\\f271";\r\n}\r\n.fa-calendar-minus-o:before {\r\n  content: "\\f272";\r\n}\r\n.fa-calendar-times-o:before {\r\n  content: "\\f273";\r\n}\r\n.fa-calendar-check-o:before {\r\n  content: "\\f274";\r\n}\r\n.fa-industry:before {\r\n  content: "\\f275";\r\n}\r\n.fa-map-pin:before {\r\n  content: "\\f276";\r\n}\r\n.fa-map-signs:before {\r\n  content: "\\f277";\r\n}\r\n.fa-map-o:before {\r\n  content: "\\f278";\r\n}\r\n.fa-map:before {\r\n  content: "\\f279";\r\n}\r\n.fa-commenting:before {\r\n  content: "\\f27a";\r\n}\r\n.fa-commenting-o:before {\r\n  content: "\\f27b";\r\n}\r\n.fa-houzz:before {\r\n  content: "\\f27c";\r\n}\r\n.fa-vimeo:before {\r\n  content: "\\f27d";\r\n}\r\n.fa-black-tie:before {\r\n  content: "\\f27e";\r\n}\r\n.fa-fonticons:before {\r\n  content: "\\f280";\r\n}\r\n.fa-reddit-alien:before {\r\n  content: "\\f281";\r\n}\r\n.fa-edge:before {\r\n  content: "\\f282";\r\n}\r\n.fa-credit-card-alt:before {\r\n  content: "\\f283";\r\n}\r\n.fa-codiepie:before {\r\n  content: "\\f284";\r\n}\r\n.fa-modx:before {\r\n  content: "\\f285";\r\n}\r\n.fa-fort-awesome:before {\r\n  content: "\\f286";\r\n}\r\n.fa-usb:before {\r\n  content: "\\f287";\r\n}\r\n.fa-product-hunt:before {\r\n  content: "\\f288";\r\n}\r\n.fa-mixcloud:before {\r\n  content: "\\f289";\r\n}\r\n.fa-scribd:before {\r\n  content: "\\f28a";\r\n}\r\n.fa-pause-circle:before {\r\n  content: "\\f28b";\r\n}\r\n.fa-pause-circle-o:before {\r\n  content: "\\f28c";\r\n}\r\n.fa-stop-circle:before {\r\n  content: "\\f28d";\r\n}\r\n.fa-stop-circle-o:before {\r\n  content: "\\f28e";\r\n}\r\n.fa-shopping-bag:before {\r\n  content: "\\f290";\r\n}\r\n.fa-shopping-basket:before {\r\n  content: "\\f291";\r\n}\r\n.fa-hashtag:before {\r\n  content: "\\f292";\r\n}\r\n.fa-bluetooth:before {\r\n  content: "\\f293";\r\n}\r\n.fa-bluetooth-b:before {\r\n  content: "\\f294";\r\n}\r\n.fa-percent:before {\r\n  content: "\\f295";\r\n}\r\n.fa-gitlab:before {\r\n  content: "\\f296";\r\n}\r\n.fa-wpbeginner:before {\r\n  content: "\\f297";\r\n}\r\n.fa-wpforms:before {\r\n  content: "\\f298";\r\n}\r\n.fa-envira:before {\r\n  content: "\\f299";\r\n}\r\n.fa-universal-access:before {\r\n  content: "\\f29a";\r\n}\r\n.fa-wheelchair-alt:before {\r\n  content: "\\f29b";\r\n}\r\n.fa-question-circle-o:before {\r\n  content: "\\f29c";\r\n}\r\n.fa-blind:before {\r\n  content: "\\f29d";\r\n}\r\n.fa-audio-description:before {\r\n  content: "\\f29e";\r\n}\r\n.fa-volume-control-phone:before {\r\n  content: "\\f2a0";\r\n}\r\n.fa-braille:before {\r\n  content: "\\f2a1";\r\n}\r\n.fa-assistive-listening-systems:before {\r\n  content: "\\f2a2";\r\n}\r\n.fa-asl-interpreting:before,\r\n.fa-american-sign-language-interpreting:before {\r\n  content: "\\f2a3";\r\n}\r\n.fa-deafness:before,\r\n.fa-hard-of-hearing:before,\r\n.fa-deaf:before {\r\n  content: "\\f2a4";\r\n}\r\n.fa-glide:before {\r\n  content: "\\f2a5";\r\n}\r\n.fa-glide-g:before {\r\n  content: "\\f2a6";\r\n}\r\n.fa-signing:before,\r\n.fa-sign-language:before {\r\n  content: "\\f2a7";\r\n}\r\n.fa-low-vision:before {\r\n  content: "\\f2a8";\r\n}\r\n.fa-viadeo:before {\r\n  content: "\\f2a9";\r\n}\r\n.fa-viadeo-square:before {\r\n  content: "\\f2aa";\r\n}\r\n.fa-snapchat:before {\r\n  content: "\\f2ab";\r\n}\r\n.fa-snapchat-ghost:before {\r\n  content: "\\f2ac";\r\n}\r\n.fa-snapchat-square:before {\r\n  content: "\\f2ad";\r\n}\r\n.fa-pied-piper:before {\r\n  content: "\\f2ae";\r\n}\r\n.fa-first-order:before {\r\n  content: "\\f2b0";\r\n}\r\n.fa-yoast:before {\r\n  content: "\\f2b1";\r\n}\r\n.fa-themeisle:before {\r\n  content: "\\f2b2";\r\n}\r\n.fa-google-plus-circle:before,\r\n.fa-google-plus-official:before {\r\n  content: "\\f2b3";\r\n}\r\n.fa-fa:before,\r\n.fa-font-awesome:before {\r\n  content: "\\f2b4";\r\n}\r\n.fa-handshake-o:before {\r\n  content: "\\f2b5";\r\n}\r\n.fa-envelope-open:before {\r\n  content: "\\f2b6";\r\n}\r\n.fa-envelope-open-o:before {\r\n  content: "\\f2b7";\r\n}\r\n.fa-linode:before {\r\n  content: "\\f2b8";\r\n}\r\n.fa-address-book:before {\r\n  content: "\\f2b9";\r\n}\r\n.fa-address-book-o:before {\r\n  content: "\\f2ba";\r\n}\r\n.fa-vcard:before,\r\n.fa-address-card:before {\r\n  content: "\\f2bb";\r\n}\r\n.fa-vcard-o:before,\r\n.fa-address-card-o:before {\r\n  content: "\\f2bc";\r\n}\r\n.fa-user-circle:before {\r\n  content: "\\f2bd";\r\n}\r\n.fa-user-circle-o:before {\r\n  content: "\\f2be";\r\n}\r\n.fa-user-o:before {\r\n  content: "\\f2c0";\r\n}\r\n.fa-id-badge:before {\r\n  content: "\\f2c1";\r\n}\r\n.fa-drivers-license:before,\r\n.fa-id-card:before {\r\n  content: "\\f2c2";\r\n}\r\n.fa-drivers-license-o:before,\r\n.fa-id-card-o:before {\r\n  content: "\\f2c3";\r\n}\r\n.fa-quora:before {\r\n  content: "\\f2c4";\r\n}\r\n.fa-free-code-camp:before {\r\n  content: "\\f2c5";\r\n}\r\n.fa-telegram:before {\r\n  content: "\\f2c6";\r\n}\r\n.fa-thermometer-4:before,\r\n.fa-thermometer:before,\r\n.fa-thermometer-full:before {\r\n  content: "\\f2c7";\r\n}\r\n.fa-thermometer-3:before,\r\n.fa-thermometer-three-quarters:before {\r\n  content: "\\f2c8";\r\n}\r\n.fa-thermometer-2:before,\r\n.fa-thermometer-half:before {\r\n  content: "\\f2c9";\r\n}\r\n.fa-thermometer-1:before,\r\n.fa-thermometer-quarter:before {\r\n  content: "\\f2ca";\r\n}\r\n.fa-thermometer-0:before,\r\n.fa-thermometer-empty:before {\r\n  content: "\\f2cb";\r\n}\r\n.fa-shower:before {\r\n  content: "\\f2cc";\r\n}\r\n.fa-bathtub:before,\r\n.fa-s15:before,\r\n.fa-bath:before {\r\n  content: "\\f2cd";\r\n}\r\n.fa-podcast:before {\r\n  content: "\\f2ce";\r\n}\r\n.fa-window-maximize:before {\r\n  content: "\\f2d0";\r\n}\r\n.fa-window-minimize:before {\r\n  content: "\\f2d1";\r\n}\r\n.fa-window-restore:before {\r\n  content: "\\f2d2";\r\n}\r\n.fa-times-rectangle:before,\r\n.fa-window-close:before {\r\n  content: "\\f2d3";\r\n}\r\n.fa-times-rectangle-o:before,\r\n.fa-window-close-o:before {\r\n  content: "\\f2d4";\r\n}\r\n.fa-bandcamp:before {\r\n  content: "\\f2d5";\r\n}\r\n.fa-grav:before {\r\n  content: "\\f2d6";\r\n}\r\n.fa-etsy:before {\r\n  content: "\\f2d7";\r\n}\r\n.fa-imdb:before {\r\n  content: "\\f2d8";\r\n}\r\n.fa-ravelry:before {\r\n  content: "\\f2d9";\r\n}\r\n.fa-eercast:before {\r\n  content: "\\f2da";\r\n}\r\n.fa-microchip:before {\r\n  content: "\\f2db";\r\n}\r\n.fa-snowflake-o:before {\r\n  content: "\\f2dc";\r\n}\r\n.fa-superpowers:before {\r\n  content: "\\f2dd";\r\n}\r\n.fa-wpexplorer:before {\r\n  content: "\\f2de";\r\n}\r\n.fa-meetup:before {\r\n  content: "\\f2e0";\r\n}\r\n.sr-only {\r\n  position: absolute;\r\n  width: 1px;\r\n  height: 1px;\r\n  padding: 0;\r\n  margin: -1px;\r\n  overflow: hidden;\r\n  clip: rect(0, 0, 0, 0);\r\n  border: 0;\r\n}\r\n.sr-only-focusable:active,\r\n.sr-only-focusable:focus {\r\n  position: static;\r\n  width: auto;\r\n  height: auto;\r\n  margin: 0;\r\n  overflow: visible;\r\n  clip: auto;\r\n}\r\n',""]),A.exports=M},function(A,M,t){"use strict";t.r(M),M.default="data:application/vnd.ms-fontobject;base64,bocCAKyGAgABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAWXjPkAAAAAAAAAAAAAAAAAAAAAAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAADgBSAGUAZwB1AGwAYQByAAAAJABWAGUAcgBzAGkAbwBuACAANAAuADcALgAwACAAMgAwADEANgAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAAAAAAAQAAAA0AgAADAFBGRlRNa75HuQAChpAAAAAcR0RFRgLwAAQAAoZwAAAAIE9TLzKIMnpAAAABWAAAAGBjbWFwCr86fwAADKgAAALyZ2FzcP//AAMAAoZoAAAACGdseWaP965NAAAarAACTLxoZWFkEInlLQAAANwAAAA2aGhlYQ8DCrUAAAEUAAAAJGhtdHhFeRiFAAABuAAACvBsb2NhAvWiXAAAD5wAAAsQbWF4cAMsAhwAAAE4AAAAIG5hbWXjl4usAAJnaAAABIZwb3N0r4+boQACa/AAABp1AAEAAAAEAcuQz3hZXw889QALBwAAAAAA1DPNMgAAAADUM80y////AAkBBgAAAAAIAAIAAQAAAAAAAQAABgD/AAAACQD/////CQEAAQAAAAAAAAAAAAAAAAAAArUAAQAAAsMCGQAnAAAAAAACAAAAAQABAAAAQAAAAAAAAAADBmkBkAAFAAAEjAQzAAAAhgSMBDMAAAJzAAABigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXJzAEAAIPUABgD/AAAABgABAAAAAAEAAAAAAAAAAAAAACAAAQOAAHAAAAAAAlUAAAHAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAABdBgAAAAaAAAAHAAAABwAAAAaAAAAGgAAABQAAAAeAAAAGgAAABwAAAAcAAAAHAAB5BYAAbgaAAAAGgAAABgAAAAcAAAAGAAAABYAAAAaAABoGAAAABgAAAAeAADIGgAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAASAAAAHAABABoAAAAMAAAAEgAAABoAAAAWAAAAHAAAABgAAAAeAAAAGgAAKBQAAAAaAAAAHgAAABoAAAAWAAAAEAAAABwAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAGAAAABAAAAAYAAAAEAAAABwAAAAaAAAAGgAAABwAAAAQAAAAHAAAABoAAegWAAAAGAAAABgAAAAaAAAAHAAAABAAAAAYCAAEFAACaBQAAWgYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAABABgAAAAaAADUGgAA1BwAAAAYAAAAGAAANBYAAAAWAAAAGgAB6BgAAAAYAAAAHAAAABYAAAAcAAAAHAAAABwAAEAWAAAAGgAAABwAAAAcAAAAGAAAABwAAWgcAAFoHgAAABoAAAAaAAAAHgAAAAwAAQAcAAAAIAAAABgAAAAYAAAAHAAAABwAAAAeAAAAHAAAABgAAAAYAAAADgAAABwAAAAaAAAAGAAAABIAAAAcAAAAGAAAABoAAAAYAAAAGgAAABgAAAAWAAAAFgAAABQAAAAYAAAAGgAAsBAAAXwYAAAAGgAAAB4AAAAWAAAAGAAAABwAAAAcAAEAGAAACBwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABoAAFQcAAAAFgAAFBwAAAAYAAAAHgAAABoAAEAeAAAAGgABzBwAAAQcAAAAFgAAEBgAAAAYAAAAGAAAABwAAAAcAAA8HAAAABgAAAAaAAAAGgAAbBwAAQAYAAAAGAAAABgAAAAkAAAAHgAAABAAAAAQAAAACgABAAoAAAAaAAAAEAAAABAAAAAQAAAAHAAAABgAAAAYAAAAHAAAoBwAAAAcAAAAHAAAAA4AAAQcAAAAGgAAABwAAAAQAAAAHAAAAB4AAAAeAAAAFgAAABYAAAAcAAAAHAABAB4AAAAWAAAAGAAAABYAAAAWAAAAHgABABwAAAAeAAAAGgABABgAAAAYAAAAEAAAtBAAADQSAAE0EgABNAoAALQKAAA0EgABNBIAATQeAAAAHgAAABIAAAAMAAAAGAAAABoAAAAaAAAAHAABABgAAAAcAAAAGgAAABoAAAAeAAAAHAAAABwAAAAYAAAAGAAAABgAAAAeAAAAHgAAABwAAQAcAAEAGgAANB4AALQcAAAAGgAACBYAAAgaAAAAEAAAABoAAAAQAAGACgAAAAoAAYgYAAAUGAAAFB4AAAQaAAAAEgAAABYAADQUAAAAGgAAABYAAAwaAACQHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADYGAAAABYAAAAQAAAMEAAADBgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAADQDggAABAMABAUAAAAHAAAABQAAOAYAAAAGAAAABoAAIgaAACIHAAAiBwAAIgYAACIGAAAiBoAAAAaAAAAGAAAABgAAGwWAAAUGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAMDAAADBwAAQAcAAAAFgAAABoAAAAWAAAAGAAALBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACwGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAATBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAAAABgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAGQcAAGQGAABZCAAAAAgAACoHAAAABgAACQcAACcJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAACBgAAAAUAAAAGAAACBwAAAAcA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AaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAAiAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTANICVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxAJQFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkHdW5pRjJBMAd1bmlGMkExB3VuaUYyQTIHdW5pRjJBMwd1bmlGMkE0B3VuaUYyQTUHdW5pRjJBNgd1bmlGMkE3B3VuaUYyQTgHdW5pRjJBOQd1bmlGMkFBB3VuaUYyQUIHdW5pRjJBQwd1bmlGMkFEB3VuaUYyQUUHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJDMAd1bmlGMkMxB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJEMAd1bmlGMkQxB3VuaUYyRDIHdW5pRjJEMwd1bmlGMkQ0B3VuaUYyRDUHdW5pRjJENgd1bmlGMkQ3B3VuaUYyRDgHdW5pRjJEOQd1bmlGMkRBB3VuaUYyREIHdW5pRjJEQwd1bmlGMkREB3VuaUYyREUHdW5pRjJFMAd1bmlGMkUxB3VuaUYyRTIHdW5pRjJFMwd1bmlGMkU0B3VuaUYyRTUHdW5pRjJFNgd1bmlGMkU3BF82OTgHdW5pRjJFOQd1bmlGMkVBB3VuaUYyRUIHdW5pRjJFQwd1bmlGMkVEB3VuaUYyRUUAAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQABAsIAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAMtPPDAAAAAA1DFouQ=="},function(A,M,t){"use strict";t.r(M),M.default="data:application/vnd.ms-fontobject;base64,bocCAKyGAgABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAWXjPkAAAAAAAAAAAAAAAAAAAAAAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAADgBSAGUAZwB1AGwAYQByAAAAJABWAGUAcgBzAGkAbwBuACAANAAuADcALgAwACAAMgAwADEANgAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAAAAAAAQAAAA0AgAADAFBGRlRNa75HuQAChpAAAAAcR0RFRgLwAAQAAoZwAAAAIE9TLzKIMnpAAAABWAAAAGBjbWFwCr86fwAADKgAAALyZ2FzcP//AAMAAoZoAAAACGdseWaP965NAAAarAACTLxoZWFkEInlLQAAANwAAAA2aGhlYQ8DCrUAAAEUAAAAJGhtdHhFeRiFAAABuAAACvBsb2NhAvWiXAAAD5wAAAsQbWF4cAMsAhwAAAE4AAAAIG5hbWXjl4usAAJnaAAABIZwb3N0r4+boQACa/AAABp1AAEAAAAEAcuQz3hZXw889QALBwAAAAAA1DPNMgAAAADUM80y////AAkBBgAAAAAIAAIAAQAAAAAAAQAABgD/AAAACQD/////CQEAAQAAAAAAAAAAAAAAAAAAArUAAQAAAsMCGQAnAAAAAAACAAAAAQABAAAAQAAAAAAAAAADBmkBkAAFAAAEjAQzAAAAhgSMBDMAAAJzAAABigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXJzAEAAIPUABgD/AAAABgABAAAAAAEAAAAAAAAAAAAAACAAAQOAAHAAAAAAAlUAAAHAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAABdBgAAAAaAAAAHAAAABwAAAAaAAAAGgAAABQAAAAeAAAAGgAAABwAAAAcAAAAHAAB5BYAAbgaAAAAGgAAABgAAAAcAAAAGAAAABYAAAAaAABoGAAAABgAAAAeAADIGgAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAASAAAAHAABABoAAAAMAAAAEgAAABoAAAAWAAAAHAAAABgAAAAeAAAAGgAAKBQAAAAaAAAAHgAAABoAAAAWAAAAEAAAABwAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAGAAAABAAAAAYAAAAEAAAABwAAAAaAAAAGgAAABwAAAAQAAAAHAAAABoAAegWAAAAGAAAABgAAAAaAAAAHAAAABAAAAAYCAAEFAACaBQAAWgYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAABABgAAAAaAADUGgAA1BwAAAAYAAAAGAAANBYAAAAWAAAAGgAB6BgAAAAYAAAAHAAAABYAAAAcAAAAHAAAABwAAEAWAAAAGgAAABwAAAAcAAAAGAAAABwAAWgcAAFoHgAAABoAAAAaAAAAHgAAAAwAAQAcAAAAIAAAABgAAAAYAAAAHAAAABwAAAAeAAAAHAAAABgAAAAYAAAADgAAABwAAAAaAAAAGAAAABIAAAAcAAAAGAAAABoAAAAYAAAAGgAAABgAAAAWAAAAFgAAABQAAAAYAAAAGgAAsBAAAXwYAAAAGgAAAB4AAAAWAAAAGAAAABwAAAAcAAEAGAAACBwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABoAAFQcAAAAFgAAFBwAAAAYAAAAHgAAABoAAEAeAAAAGgABzBwAAAQcAAAAFgAAEBgAAAAYAAAAGAAAABwAAAAcAAA8HAAAABgAAAAaAAAAGgAAbBwAAQAYAAAAGAAAABgAAAAkAAAAHgAAABAAAAAQAAAACgABAAoAAAAaAAAAEAAAABAAAAAQAAAAHAAAABgAAAAYAAAAHAAAoBwAAAAcAAAAHAAAAA4AAAQcAAAAGgAAABwAAAAQAAAAHAAAAB4AAAAeAAAAFgAAABYAAAAcAAAAHAABAB4AAAAWAAAAGAAAABYAAAAWAAAAHgABABwAAAAeAAAAGgABABgAAAAYAAAAEAAAtBAAADQSAAE0EgABNAoAALQKAAA0EgABNBIAATQeAAAAHgAAABIAAAAMAAAAGAAAABoAAAAaAAAAHAABABgAAAAcAAAAGgAAABoAAAAeAAAAHAAAABwAAAAYAAAAGAAAABgAAAAeAAAAHgAAABwAAQAcAAEAGgAANB4AALQcAAAAGgAACBYAAAgaAAAAEAAAABoAAAAQAAGACgAAAAoAAYgYAAAUGAAAFB4AAAQaAAAAEgAAABYAADQUAAAAGgAAABYAAAwaAACQHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADYGAAAABYAAAAQAAAMEAAADBgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAADQDggAABAMABAUAAAAHAAAABQAAOAYAAAAGAAAABoAAIgaAACIHAAAiBwAAIgYAACIGAAAiBoAAAAaAAAAGAAAABgAAGwWAAAUGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAMDAAADBwAAQAcAAAAFgAAABoAAAAWAAAAGAAALBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACwGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAATBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAAAABgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAGQcAAGQGAABZCAAAAAgAACoHAAAABgAACQcAACcJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAACBgAAAAUAAAAGAAACBwAAAAcA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AaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAAiAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTANICVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxAJQFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkHdW5pRjJBMAd1bmlGMkExB3VuaUYyQTIHdW5pRjJBMwd1bmlGMkE0B3VuaUYyQTUHdW5pRjJBNgd1bmlGMkE3B3VuaUYyQTgHdW5pRjJBOQd1bmlGMkFBB3VuaUYyQUIHdW5pRjJBQwd1bmlGMkFEB3VuaUYyQUUHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJDMAd1bmlGMkMxB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJEMAd1bmlGMkQxB3VuaUYyRDIHdW5pRjJEMwd1bmlGMkQ0B3VuaUYyRDUHdW5pRjJENgd1bmlGMkQ3B3VuaUYyRDgHdW5pRjJEOQd1bmlGMkRBB3VuaUYyREIHdW5pRjJEQwd1bmlGMkREB3VuaUYyREUHdW5pRjJFMAd1bmlGMkUxB3VuaUYyRTIHdW5pRjJFMwd1bmlGMkU0B3VuaUYyRTUHdW5pRjJFNgd1bmlGMkU3BF82OTgHdW5pRjJFOQd1bmlGMkVBB3VuaUYyRUIHdW5pRjJFQwd1bmlGMkVEB3VuaUYyRUUAAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQABAsIAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAMtPPDAAAAAA1DFouQ=="},function(A,M,t){"use strict";t.r(M),M.default="data:font/woff2;base64,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"},function(A,M,t){"use strict";t.r(M),M.default="data:font/woff;base64,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"},function(A,M,t){"use strict";t.r(M),M.default="data:font/ttf;base64,AAEAAAANAIAAAwBQRkZUTWu+R7kAAoaQAAAAHEdERUYC8AAEAAKGcAAAACBPUy8yiDJ6QAAAAVgAAABgY21hcAq/On8AAAyoAAAC8mdhc3D//wADAAKGaAAAAAhnbHlmj/euTQAAGqwAAky8aGVhZBCJ5S0AAADcAAAANmhoZWEPAwq1AAABFAAAACRobXR4RXkYhQAAAbgAAArwbG9jYQL1olwAAA+cAAALEG1heHADLAIcAAABOAAAACBuYW1l45eLrAACZ2gAAASGcG9zdK+Pm6EAAmvwAAAadQABAAAABAHLkM94WV8PPPUACwcAAAAAANQzzTIAAAAA1DPNMv///wAJAQYAAAAACAACAAEAAAAAAAEAAAYA/wAAAAkA/////wkBAAEAAAAAAAAAAAAAAAAAAAK1AAEAAALDAhkAJwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAwZpAZAABQAABIwEMwAAAIYEjAQzAAACcwAAAYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHlycwBAACD1AAYA/wAAAAYAAQAAAAABAAAAAAAAAAAAAAAgAAEDgABwAAAAAAJVAAABwAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAXQYAAAAGgAAABwAAAAcAAAAGgAAABoAAAAUAAAAHgAAABoAAAAcAAAAHAAAABwAAeQWAAG4GgAAABoAAAAYAAAAHAAAABgAAAAWAAAAGgAAaBgAAAAYAAAAHgAAyBoAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAEgAAABwAAQAaAAAADAAAABIAAAAaAAAAFgAAABwAAAAYAAAAHgAAABoAACgUAAAAGgAAAB4AAAAaAAAAFgAAABAAAAAcAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAgABBQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQWAAAAFgAAABoAAegYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAABAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgAAAgcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAABQcAAAAGAAAAB4AAAAaAABAHgAAABoAAcwcAAAEHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAEHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAgWAAAIGgAAABAAAAAaAAAAEAABgAoAAAAKAAGIGAAAFBgAABQeAAAEGgAAABIAAAAWAAA0FAAAABoAAAAWAAAMGgAAkBwAAAAYAAAAGAAAABgAAAAYAAAAFgAAABwAADAcAAAAEgAAABgAAAAWAAAABgAAABgAAAAYAAAAHAAA2BgAAAAWAAAAEAAADBAAAAwYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABAAAAAQAAAAEAAA0A4IAAAQDAAQFAAAABwAAAAUAADgGAAAABgAAAAaAACIGgAAiBwAAIgcAACIGAAAiBgAAIgaAAAAGgAAABgAAAAYAABsFgAAFBgAAAAcAAAAHAABABgAACwYAAAAGAAAABgAAAAWAAAAGAAAABAAARAYAAAADAAADAwAAAwcAAEAHAAAABYAAAAaAAAAFgAAABgAACwYAAAAGAAAABQAALAYAAAAFAAAABAAAAAYAAAAHAAAsBgAAAAcAAEAGgAAgB4D//wcAAAAGAAAABYAAAAUAABUGAAAABgAAAAYAAAAGAAAABoAAAAYAAAAEgAAABYAAAAiAAAAGgAAABgAAAAcAAAAHAAAACAAAAAkAAAAGAABtBgAAAAcAAAAGAAAABgAAAAeAAAAGAAAACAAAAAYAAAAH9gApBgAAAAYAAAAGAAAABwAAAAYAAAAFAABABoAAAAMAAEAHAAAACQAAAAgAAAAGAAAABwAAAAYAAAAHAAAQCAAAAAgAAAAGAAAgBgAAAAQAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAACcHAAAACAAAAAcAAAAHAAAgBwAAEwcAAAAGAAAABwAARAYAAAAFAAA5BwAAEggAAAAHAAAABwAAAAYAAAAGAAAABwAAPgUAABgGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAABkHAABkBgAAWQgAAAAIAAAqBwAAAAYAAAkHAAAnCQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAADggAAA4FgAAABgAAAAYAAAAHAAAABwAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAACQAAAAYAAAAIAAAABQAACwgAAAAGAAAABgAAAAYAAAAIAAAABgAAAAYAAAAIAAAACAAAAAYAAAAIAAAACAAAAAaAAAAGgAAACAAAAAgAABMGAAAACQAAAAYAAAAHAAAABQAAAgYAAAAFAAAABgAAAgcAAAAHAAACB4AAAQgAAAYGAAAABQAAAggAAAQFAAAABQAAAAcAAAAHAAAABgAAAAUAAAAGAAAABwAAAAgAAAAIAAAACAAAAAYAAAAGAAAABgAAAAcAAAAGAAAACPgAVAkAAAAHAAAACQAAAAkAAAAJAAAACQAAAAkAAAAFAAAABAAAAAgAAAAJAAAABgAAAAYAAAAJAAAACQAAAAcAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAcAAAAIAAAA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AAD8uAAA/QwAAP1gAAD9tAAA/ggAAP64AAD/CAABABQAAQW0AAEG9AABB/gAAQjQAAEJZAABChAAAQqYAAELGAABDAQAAQykAAENLAABDgAAAQ+IAAERLAABEaAAARLMAAETOAABE+QAARSQAAEVKAABFaQAARZYAAEW/AABF8AAARiEAAEZeAABGnwAARtUAAEc1AABHUAAAR3UAAEekAABHwQAAR98AAEgpAABIcAAASJ4AAEjCAABI2wAASQEAAEkzAABJ2gAASjoAAEqTAABLFQAAS5MAAExdAABMfQAATLgAAEzMAABM7AAATSoAAE1dAABNlQAATckAAE4DAABOUgAAToQAAE68AABO5AAATyEAAE82AABP1gAAUAcAAFBwAABQsgAAUPIAAFEnAABRUgAAUZIAAFHcAABSEgAAUl4AAFKIAABSuQAAUvUAAFMoAABTRgAAU5AAAFQQAABUaAAAVLgAAFTRAABVCAAAVVMAAFWYAABVtQAAVdYAAFYNAABWKAAAVoEAAFaiAABW2QAAVvgAAFcfAABXdgAAV6gAAFglAABYUgAAWG8AAFi8AABY1gAAWSsAAFldAABZmgAAWfcAAFotAABaVwAAWp4AAFuhAABcEAAAXPgAAF2EAABd8gAAXiQAAF5iAABeowAAXtoAAF8jAABfRwAAX2kAAF/XAABf5gAAX/4AAGAbAABgXQAAYKQAAGDNAABg6QAAYTIAAGFsAABhqQAAYh0AAGJjAABijgAAYs4AAGLoAABjkwAAY6oAAGPVAABkBAAAZEUAAGTkAABlBQAAZUEAAGV/AABlvgAAZegAAGZfAABmsgAAZwQAAGdCAABndgAAZ58AAGfGAABn+gAAaDEAAGiDAABozQAAaR4AAGlsAABpoAAAadMAAGoHAABqJAAAajsAAGo7AABqOwAAalYAAGqKAABqyAAAavMAAGsrAABragAAa4gAAGuiAABrwQAAa+oAAGwQAABsIgAAba8AAG3bAABuOAAAbl0AAG6BAABupQAAbskAAG7pAABvAgAAbx4AAG9TAABvkwAAb6kAAG/IAABwEgAAcEYAAHBxAABwwQAAcPkAAHEoAABxVQAAcYoAAHG7AAByAwAAckMAAHKiAABy6AAAcz4AAHOHAABz5QAAdBsAAHRZAAB0twAAdNQAAHT+AAB1YQAAdZ4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AgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwDSAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQCUBWdsYXNzBW11c2ljBnNlYXJjaAhlbnZlbG9wZQVoZWFydARzdGFyCnN0YXJfZW1wdHkEdXNlcgRmaWxtCHRoX2xhcmdlAnRoB3RoX2xpc3QCb2sGcmVtb3ZlB3pvb21faW4Iem9vbV9vdXQDb2ZmBnNpZ25hbANjb2cFdHJhc2gEaG9tZQhmaWxlX2FsdAR0aW1lBHJvYWQMZG93bmxvYWRfYWx0CGRvd25sb2FkBnVwbG9hZAVpbmJveAtwbGF5X2NpcmNsZQZyZXBlYXQHcmVmcmVzaAhsaXN0X2FsdARsb2NrBGZsYWcKaGVhZHBob25lcwp2b2x1bWVfb2ZmC3ZvbHVtZV9kb3duCXZvbHVtZV91cAZxcmNvZGUHYmFyY29kZQN0YWcEdGFncwRib29rCGJvb2ttYXJrBXByaW50BmNhbWVyYQRmb250BGJvbGQGaXRhbGljC3RleHRfaGVpZ2h0CnRleHRfd2lkdGgKYWxpZ25fbGVmdAxhbGlnbl9jZW50ZXILYWxpZ25fcmlnaHQNYWxpZ25fanVzdGlmeQRsaXN0C2luZGVudF9sZWZ0DGluZGVudF9yaWdodA5mYWNldGltZV92aWRlbwdwaWN0dXJlBnBlbmNpbAptYXBfbWFya2VyBmFkanVzdAR0aW50BGVkaXQFc2hhcmUFY2hlY2sEbW92ZQ1zdGVwX2JhY2t3YXJkDWZhc3RfYmFja3dhcmQIYmFja3dhcmQEcGxheQVwYXVzZQRzdG9wB2ZvcndhcmQMZmFzdF9mb3J3YXJkDHN0ZXBfZm9yd2FyZAVlamVjdAxjaGV2cm9uX2xlZnQNY2hldnJvbl9yaWdodAlwbHVzX3NpZ24KbWludXNfc2lnbgtyZW1vdmVfc2lnbgdva19zaWduDXF1ZXN0aW9uX3NpZ24JaW5mb19zaWduCnNjcmVlbnNob3QNcmVtb3ZlX2NpcmNsZQlva19jaXJjbGUKYmFuX2NpcmNsZQphcnJvd19sZWZ0C2Fycm93X3JpZ2h0CGFycm93X3VwCmFycm93X2Rvd24Jc2hhcmVfYWx0C3Jlc2l6ZV9mdWxsDHJlc2l6ZV9zbWFsbBBleGNsYW1hdGlvbl9zaWduBGdpZnQEbGVhZgRmaXJlCGV5ZV9vcGVuCWV5ZV9jbG9zZQx3YXJuaW5nX3NpZ24FcGxhbmUIY2FsZW5kYXIGcmFuZG9tB2NvbW1lbnQGbWFnbmV0CmNoZXZyb25fdXAMY2hldnJvbl9kb3duB3JldHdlZXQNc2hvcHBpbmdfY2FydAxmb2xkZXJfY2xvc2ULZm9sZGVyX29wZW4PcmVzaXplX3ZlcnRpY2FsEXJlc2l6ZV9ob3Jpem9udGFsCWJhcl9jaGFydAx0d2l0dGVyX3NpZ24NZmFjZWJvb2tfc2lnbgxjYW1lcmFfcmV0cm8Da2V5BGNvZ3MIY29tbWVudHMNdGh1bWJzX3VwX2FsdA90aHVtYnNfZG93bl9hbHQJc3Rhcl9oYWxmC2hlYXJ0X2VtcHR5B3NpZ25vdXQNbGlua2VkaW5fc2lnbgdwdXNocGluDWV4dGVybmFsX2xpbmsGc2lnbmluBnRyb3BoeQtnaXRodWJfc2lnbgp1cGxvYWRfYWx0BWxlbW9uBXBob25lC2NoZWNrX2VtcHR5DmJvb2ttYXJrX2VtcHR5CnBob25lX3NpZ24HdHdpdHRlcghmYWNlYm9vawZnaXRodWIGdW5sb2NrC2NyZWRpdF9jYXJkA3JzcwNoZGQIYnVsbGhvcm4EYmVsbAtjZXJ0aWZpY2F0ZQpoYW5kX3JpZ2h0CWhhbmRfbGVmdAdoYW5kX3VwCWhhbmRfZG93bhFjaXJjbGVfYXJyb3dfbGVmdBJjaXJjbGVfYXJyb3dfcmlnaHQPY2lyY2xlX2Fycm93X3VwEWNpcmNsZV9hcnJvd19kb3duBWdsb2JlBndyZW5jaAV0YXNrcwZmaWx0ZXIJYnJpZWZjYXNlCmZ1bGxzY3JlZW4FZ3JvdXAEbGluawVjbG91ZAZiZWFrZXIDY3V0BGNvcHkKcGFwZXJfY2xpcARzYXZlCnNpZ25fYmxhbmsHcmVvcmRlcgJ1bAJvbA1zdHJpa2V0aHJvdWdoCXVuZGVybGluZQV0YWJsZQVtYWdpYwV0cnVjawlwaW50ZXJlc3QOcGludGVyZXN0X3NpZ24QZ29vZ2xlX3BsdXNfc2lnbgtnb29nbGVfcGx1cwVtb25leQpjYXJldF9kb3duCGNhcmV0X3VwCmNhcmV0X2xlZnQLY2FyZXRfcmlnaHQHY29sdW1ucwRzb3J0CXNvcnRfZG93bgdzb3J0X3VwDGVudmVsb3BlX2FsdAhsaW5rZWRpbgR1bmRvBWxlZ2FsCWRhc2hib2FyZAtjb21tZW50X2FsdAxjb21tZW50c19hbHQEYm9sdAdzaXRlbWFwCHVtYnJlbGxhBXBhc3RlCmxpZ2h0X2J1bGIIZXhjaGFuZ2UOY2xvdWRfZG93bmxvYWQMY2xvdWRfdXBsb2FkB3VzZXJfbWQLc3RldGhvc2NvcGUIc3VpdGNhc2UIYmVsbF9hbHQGY29mZmVlBGZvb2QNZmlsZV90ZXh0X2FsdAhidWlsZGluZwhob3NwaXRhbAlhbWJ1bGFuY2UGbWVka2l0C2ZpZ2h0ZXJfamV0BGJlZXIGaF9zaWduBGYwZmURZG91YmxlX2FuZ2xlX2xlZnQSZG91YmxlX2FuZ2xlX3JpZ2h0D2RvdWJsZV9hbmdsZV91cBFkb3VibGVfYW5nbGVfZG93bgphbmdsZV9sZWZ0C2FuZ2xlX3JpZ2h0CGFuZ2xlX3VwCmFuZ2xlX2Rvd24HZGVza3RvcAZsYXB0b3AGdGFibGV0DG1vYmlsZV9waG9uZQxjaXJjbGVfYmxhbmsKcXVvdGVfbGVmdAtxdW90ZV9yaWdodAdzcGlubmVyBmNpcmNsZQVyZXBseQpnaXRodWJfYWx0EGZvbGRlcl9jbG9zZV9hbHQPZm9sZGVyX29wZW5fYWx0CmV4cGFuZF9hbHQMY29sbGFwc2VfYWx0BXNtaWxlBWZyb3duA21laAdnYW1lcGFkCGtleWJvYXJkCGZsYWdfYWx0DmZsYWdfY2hlY2tlcmVkCHRlcm1pbmFsBGNvZGUJcmVwbHlfYWxsD3N0YXJfaGFsZl9lbXB0eQ5sb2NhdGlvbl9hcnJvdwRjcm9wCWNvZGVfZm9yawZ1bmxpbmsEXzI3OQtleGNsYW1hdGlvbgtzdXBlcnNjcmlwdAlzdWJzY3JpcHQEXzI4MwxwdXp6bGVfcGllY2UKbWljcm9waG9uZQ5taWNyb3Bob25lX29mZgZzaGllbGQOY2FsZW5kYXJfZW1wdHkRZmlyZV9leHRpbmd1aXNoZXIGcm9ja2V0Bm1heGNkbhFjaGV2cm9uX3NpZ25fbGVmdBJjaGV2cm9uX3NpZ25fcmlnaHQPY2hldnJvbl9zaWduX3VwEWNoZXZyb25fc2lnbl9kb3duBWh0bWw1BGNzczMGYW5jaG9yCnVubG9ja19hbHQIYnVsbHNleWUTZWxsaXBzaXNfaG9yaXpvbnRhbBFlbGxpcHNpc192ZXJ0aWNhbARfMzAzCXBsYXlfc2lnbgZ0aWNrZXQObWludXNfc2lnbl9hbHQLY2hlY2tfbWludXMIbGV2ZWxfdXAKbGV2ZWxfZG93bgpjaGVja19zaWduCWVkaXRfc2lnbgRfMzEyCnNoYXJlX3NpZ24HY29tcGFzcwhjb2xsYXBzZQxjb2xsYXBzZV90b3AEXzMxNwNldXIDZ2JwA3VzZANpbnIDanB5A3J1YgNrcncDYnRjBGZpbGUJZmlsZV90ZXh0EHNvcnRfYnlfYWxwaGFiZXQEXzMyORJzb3J0X2J5X2F0dHJpYnV0ZXMWc29ydF9ieV9hdHRyaWJ1dGVzX2FsdA1zb3J0X2J5X29yZGVyEXNvcnRfYnlfb3JkZXJfYWx0BF8zMzQEXzMzNQx5b3V0dWJlX3NpZ24HeW91dHViZQR4aW5nCXhpbmdfc2lnbgx5b3V0dWJlX3BsYXkHZHJvcGJveA1zdGFja2V4Y2hhbmdlCWluc3RhZ3JhbQZmbGlja3IDYWRuBGYxNzEOYml0YnVja2V0X3NpZ24GdHVtYmxyC3R1bWJscl9zaWduD2xvbmdfYXJyb3dfZG93bg1sb25nX2Fycm93X3VwD2xvbmdfYXJyb3dfbGVmdBBsb25nX2Fycm93X3JpZ2h0B3dpbmRvd3MHYW5kcm9pZAVsaW51eAdkcmliYmxlBXNreXBlCmZvdXJzcXVhcmUGdHJlbGxvBmZlbWFsZQRtYWxlBmdpdHRpcANzdW4EXzM2NgdhcmNoaXZlA2J1ZwJ2awV3ZWlibwZyZW5yZW4EXzM3Mg5zdGFja19leGNoYW5nZQRfMzc0FWFycm93X2NpcmNsZV9hbHRfbGVmdARfMzc2DmRvdF9jaXJjbGVfYWx0BF8zNzgMdmltZW9fc3F1YXJlBF8zODANcGx1c19zcXVhcmVfbwRfMzgyBF8zODMEXzM4NARfMzg1BF8zODYEXzM4NwRfMzg4BF8zODkHdW5pRjFBMARmMWExBF8zOTIEXzM5MwRmMWE0BF8zOTUEXzM5NgRfMzk3BF8zOTgEXzM5OQRfNDAwBGYxYWIEXzQwMgRfNDAzBF80MDQHdW5pRjFCMQRfNDA2BF80MDcEXzQwOARfNDA5BF80MTAEXzQxMQRfNDEyBF80MTMEXzQxNARfNDE1BF80MTYEXzQxNwRfNDE4BF80MTkHdW5pRjFDMAd1bmlGMUMxBF80MjIEXzQyMwRfNDI0BF80MjUEXzQyNgRfNDI3BF80MjgEXzQyOQRfNDMwBF80MzEEXzQzMgRfNDMzBF80MzQHdW5pRjFEMAd1bmlGMUQxB3VuaUYxRDIEXzQzOARfNDM5B3VuaUYxRDUHdW5pRjFENgd1bmlGMUQ3BF80NDMEXzQ0NARfNDQ1BF80NDYEXzQ0NwRfNDQ4BF80NDkHdW5pRjFFMARfNDUxBF80NTIEXzQ1MwRfNDU0BF80NTUEXzQ1NgRfNDU3BF80NTgEXzQ1OQRfNDYwBF80NjEEXzQ2MgRfNDYzBF80NjQHdW5pRjFGMARfNDY2BF80NjcEZjFmMwRfNDY5BF80NzAEXzQ3MQRfNDcyBF80NzMEXzQ3NARfNDc1BF80NzYEZjFmYwRfNDc4BF80NzkEXzQ4MARfNDgxBF80ODIEXzQ4MwRfNDg0BF80ODUEXzQ4NgRfNDg3BF80ODgEXzQ4OQRfNDkwBF80OTEEXzQ5MgRfNDkzBF80OTQEZjIxMARfNDk2BGYyMTIEXzQ5OARfNDk5BF81MDAEXzUwMQRfNTAyBF81MDMEXzUwNARfNTA1BF81MDYEXzUwNwRfNTA4BF81MDkFdmVudXMEXzUxMQRfNTEyBF81MTMEXzUxNARfNTE1BF81MTYEXzUxNwRfNTE4BF81MTkEXzUyMARfNTIxBF81MjIEXzUyMwRfNTI0BF81MjUEXzUyNgRfNTI3BF81MjgEXzUyOQRfNTMwBF81MzEEXzUzMgRfNTMzBF81MzQEXzUzNQRfNTM2BF81MzcEXzUzOARfNTM5BF81NDAEXzU0MQRfNTQyBF81NDMEXzU0NARfNTQ1BF81NDYEXzU0NwRfNTQ4BF81NDkEXzU1MARfNTUxBF81NTIEXzU1MwRfNTU0BF81NTUEXzU1NgRfNTU3BF81NTgEXzU1OQRfNTYwBF81NjEEXzU2MgRfNTYzBF81NjQEXzU2NQRfNTY2BF81NjcEXzU2OARfNTY5BGYyNjAEZjI2MQRfNTcyBGYyNjMEXzU3NARfNTc1BF81NzYEXzU3NwRfNTc4BF81NzkEXzU4MARfNTgxBF81ODIEXzU4MwRfNTg0BF81ODUEXzU4NgRfNTg3BF81ODgEXzU4OQRfNTkwBF81OTEEXzU5MgRfNTkzBF81OTQEXzU5NQRfNTk2BF81OTcEXzU5OARmMjdlB3VuaUYyODAHdW5pRjI4MQRfNjAyBF82MDMEXzYwNAd1bmlGMjg1B3VuaUYyODYEXzYwNwRfNjA4BF82MDkEXzYxMARfNjExBF82MTIEXzYxMwRfNjE0BF82MTUEXzYxNgRfNjE3BF82MTgEXzYxOQRfNjIwBF82MjEEXzYyMgRfNjIzBF82MjQEXzYyNQRfNjI2BF82MjcEXzYyOARfNjI5B3VuaUYyQTAHdW5pRjJBMQd1bmlGMkEyB3VuaUYyQTMHdW5pRjJBNAd1bmlGMkE1B3VuaUYyQTYHdW5pRjJBNwd1bmlGMkE4B3VuaUYyQTkHdW5pRjJBQQd1bmlGMkFCB3VuaUYyQUMHdW5pRjJBRAd1bmlGMkFFB3VuaUYyQjAHdW5pRjJCMQd1bmlGMkIyB3VuaUYyQjMHdW5pRjJCNAd1bmlGMkI1B3VuaUYyQjYHdW5pRjJCNwd1bmlGMkI4B3VuaUYyQjkHdW5pRjJCQQd1bmlGMkJCB3VuaUYyQkMHdW5pRjJCRAd1bmlGMkJFB3VuaUYyQzAHdW5pRjJDMQd1bmlGMkMyB3VuaUYyQzMHdW5pRjJDNAd1bmlGMkM1B3VuaUYyQzYHdW5pRjJDNwd1bmlGMkM4B3VuaUYyQzkHdW5pRjJDQQd1bmlGMkNCB3VuaUYyQ0MHdW5pRjJDRAd1bmlGMkNFB3VuaUYyRDAHdW5pRjJEMQd1bmlGMkQyB3VuaUYyRDMHdW5pRjJENAd1bmlGMkQ1B3VuaUYyRDYHdW5pRjJENwd1bmlGMkQ4B3VuaUYyRDkHdW5pRjJEQQd1bmlGMkRCB3VuaUYyREMHdW5pRjJERAd1bmlGMkRFB3VuaUYyRTAHdW5pRjJFMQd1bmlGMkUyB3VuaUYyRTMHdW5pRjJFNAd1bmlGMkU1B3VuaUYyRTYHdW5pRjJFNwRfNjk4B3VuaUYyRTkHdW5pRjJFQQd1bmlGMkVCB3VuaUYyRUMHdW5pRjJFRAd1bmlGMkVFAAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAQLCAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADLTzwwAAAAANQxaLk="},function(A,M,t){"use strict";t.r(M),M.default="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnPg0KPG1ldGFkYXRhPg0KQ3JlYXRlZCBieSBGb250Rm9yZ2UgMjAxMjA3MzEgYXQgTW9uIE9jdCAyNCAxNzozNzo0MCAyMDE2DQogQnkgLCwsDQpDb3B5cmlnaHQgRGF2ZSBHYW5keSAyMDE2LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPC9tZXRhZGF0YT4NCjxkZWZzPg0KPGZvbnQgaWQ9IkZvbnRBd2Vzb21lIiBob3Jpei1hZHYteD0iMTUzNiIgPg0KICA8Zm9udC1mYWNlIA0KICAgIGZvbnQtZmFtaWx5PSJGb250QXdlc29tZSINCiAgICBmb250LXdlaWdodD0iNDAwIg0KICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIg0KICAgIHVuaXRzLXBlci1lbT0iMTc5MiINCiAgICBwYW5vc2UtMT0iMCAwIDAgMCAwIDAgMCAwIDAgMCINCiAgICBhc2NlbnQ9IjE1MzYiDQogICAgZGVzY2VudD0iLTI1NiINCiAgICBiYm94PSItMS4wMjA4MyAtMjU2Ljk2MiAyMzA0LjYgMTUzNy4wMiINCiAgICB1bmRlcmxpbmUtdGhpY2tuZXNzPSIwIg0KICAgIHVuZGVybGluZS1wb3NpdGlvbj0iMCINCiAgICB1bmljb2RlLXJhbmdlPSJVKzAwMjAtRjUwMCINCiAgLz4NCjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSI4OTYiIA0KZD0iTTIyNCAxMTJoNDQ4djEzMTJoLTQ0OHYtMTMxMnpNMTEyIDB2MTUzNmg2NzJ2LTE1MzZoLTY3MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5ub3RkZWYiIGhvcml6LWFkdi14PSI4OTYiIA0KZD0iTTIyNCAxMTJoNDQ4djEzMTJoLTQ0OHYtMTMxMnpNMTEyIDB2MTUzNmg2NzJ2LTE1MzZoLTY3MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5udWxsIiBob3Jpei1hZHYteD0iMCIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibm9ubWFya2luZ3JldHVybiIgaG9yaXotYWR2LXg9IjU5NyIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3BhY2UiIHVuaWNvZGU9IiAiIGhvcml6LWFkdi14PSI0NDgiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImRpZXJlc2lzIiB1bmljb2RlPSImI3hhODsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb3B5cmlnaHQiIHVuaWNvZGU9IiYjeGE5OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJlZ2lzdGVyZWQiIHVuaWNvZGU9IiYjeGFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFjdXRlIiB1bmljb2RlPSImI3hiNDsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJBRSIgdW5pY29kZT0iJiN4YzY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iT3NsYXNoIiB1bmljb2RlPSImI3hkODsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmFkZW1hcmsiIHVuaWNvZGU9IiYjeDIxMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW5maW5pdHkiIHVuaWNvZGU9IiYjeDIyMWU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibm90ZXF1YWwiIHVuaWNvZGU9IiYjeDIyNjA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2xhc3MiIHVuaWNvZGU9IiYjeGYwMDA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTY5OSAxMzUwcTAgLTM1IC00MyAtNzhsLTYzMiAtNjMydi03NjhoMzIwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDMyMHY3NjhsLTYzMiA2MzJxLTQzIDQzIC00MyA3OHEwIDIzIDE4IDM2LjV0MzggMTcuNXQ0MyA0aDE0MDhxMjMgMCA0MyAtNHQzOCAtMTcuNXQxOCAtMzYuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im11c2ljIiB1bmljb2RlPSImI3hmMDAxOyIgDQpkPSJNMTUzNiAxMzEydi0xMTIwcTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5dDM0IDg5dDg2IDYwLjV0MTAzLjUgMzJ0OTYuNSAxMC41cTEwNSAwIDE5MiAtMzl2NTM3bC03NjggLTIzN3YtNzA5cTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5DQp0MzQgODl0ODYgNjAuNXQxMDMuNSAzMnQ5Ni41IDEwLjVxMTA1IDAgMTkyIC0zOXY5NjdxMCAzMSAxOSA1Ni41dDQ5IDM1LjVsODMyIDI1NnExMiA0IDI4IDRxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VhcmNoIiB1bmljb2RlPSImI3hmMDAyOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41DQp0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXEwIC0yMjAgLTEyNCAtMzk5bDM0MyAtMzQzcTM3IC0zNyAzNyAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbnZlbG9wZSIgdW5pY29kZT0iJiN4ZjAwMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjY0IDMydjc2OHEtMzIgLTM2IC02OSAtNjZxLTI2OCAtMjA2IC00MjYgLTMzOHEtNTEgLTQzIC04MyAtNjd0LTg2LjUgLTQ4LjV0LTEwMi41IC0yNC41aC0xaC0xcS00OCAwIC0xMDIuNSAyNC41dC04Ni41IDQ4LjV0LTgzIDY3cS0xNTggMTMyIC00MjYgMzM4cS0zNyAzMCAtNjkgNjZ2LTc2OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMDgzdjExdjEzLjV0LTAuNSAxMw0KdC0zIDEyLjV0LTUuNSA5dC05IDcuNXQtMTQgMi41aC0xNDcycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNjggMTQ3IC0yODRxMTkzIC0xNTIgNDAxIC0zMTdxNiAtNSAzNSAtMjkuNXQ0NiAtMzcuNXQ0NC41IC0zMS41dDUwLjUgLTI3LjV0NDMgLTloMWgxcTIwIDAgNDMgOXQ1MC41IDI3LjV0NDQuNSAzMS41dDQ2IDM3LjV0MzUgMjkuNXEyMDggMTY1IDQwMSAzMTdxNTQgNDMgMTAwLjUgMTE1LjV0NDYuNSAxMzEuNXoNCk0xNzkyIDExMjB2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoZWFydCIgdW5pY29kZT0iJiN4ZjAwNDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik04OTYgLTEyOHEtMjYgMCAtNDQgMThsLTYyNCA2MDJxLTEwIDggLTI3LjUgMjZ0LTU1LjUgNjUuNXQtNjggOTcuNXQtNTMuNSAxMjF0LTIzLjUgMTM4cTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41IC0yMS41dDEyMCAtNTh0OTUuNSAtNjguNXQ3NiAtNjhxMzYgMzYgNzYgNjh0OTUuNSA2OC41dDEyMCA1OHQxMjYuNSAyMS41cTIyNCAwIDM1MSAtMTI0dDEyNyAtMzQ0cTAgLTIyMSAtMjI5IC00NTBsLTYyMyAtNjAwDQpxLTE4IC0xOCAtNDQgLTE4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhciIgdW5pY29kZT0iJiN4ZjAwNTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtMjEgLTEwLjUgLTM1LjV0LTMwLjUgLTE0LjVxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1DQpsNTAyIC03M3E1NiAtOSA1NiAtNDZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFyX2VtcHR5IiB1bmljb2RlPSImI3hmMDA2OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTExMzcgNTMybDMwNiAyOTdsLTQyMiA2MmwtMTg5IDM4MmwtMTg5IC0zODJsLTQyMiAtNjJsMzA2IC0yOTdsLTczIC00MjFsMzc4IDE5OWwzNzcgLTE5OXpNMTY2NCA4ODlxMCAtMjIgLTI2IC00OGwtMzYzIC0zNTRsODYgLTUwMHExIC03IDEgLTIwcTAgLTUwIC00MSAtNTBxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMA0KbC0zNjQgMzU0cS0yNSAyNyAtMjUgNDhxMCAzNyA1NiA0Nmw1MDIgNzNsMjI1IDQ1NXExOSA0MSA0OSA0MXQ0OSAtNDFsMjI1IC00NTVsNTAyIC03M3E1NiAtOSA1NiAtNDZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1c2VyIiB1bmljb2RlPSImI3hmMDA3OyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTEyODAgMTM3cTAgLTEwOSAtNjIuNSAtMTg3dC0xNTAuNSAtNzhoLTg1NHEtODggMCAtMTUwLjUgNzh0LTYyLjUgMTg3cTAgODUgOC41IDE2MC41dDMxLjUgMTUydDU4LjUgMTMxdDk0IDg5dDEzNC41IDM0LjVxMTMxIC0xMjggMzEzIC0xMjh0MzEzIDEyOHE3NiAwIDEzNC41IC0zNC41dDk0IC04OXQ1OC41IC0xMzF0MzEuNSAtMTUydDguNSAtMTYwLjV6TTEwMjQgMTAyNHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41DQp0LTI3MS41IDExMi41dC0xMTIuNSAyNzEuNXQxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNXQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsbSIgdW5pY29kZT0iJiN4ZjAwODsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0zODQgLTY0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgMzIwdjEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgNzA0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOA0KcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE0MDggLTY0djUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTc2OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDc2OHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1DQp0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTQwOCA3MDR2NTEycTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtNTEycTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMzIwdjEyOA0KcTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgNzA0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDEwODh2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTkNCnQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTkyMCAxMjQ4di0xMzQ0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMzQ0cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGhfbGFyZ2UiIHVuaWNvZGU9IiYjeGYwMDk7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNNzY4IDUxMnYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNNzY4IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6TTE2NjQgNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4DQpoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6TTE2NjQgMTI4MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRoIiB1bmljb2RlPSImI3hmMDBhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjANCnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xMTUyIDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjgNCmgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTE1MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDgwMHYtMTkyDQpxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0aF9saXN0IiB1bmljb2RlPSImI3hmMDBiOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjANCnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDk2MHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjgNCmg5NjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDk2MHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJvayIgdW5pY29kZT0iJiN4ZjAwYzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjcxIDk3MHEwIC00MCAtMjggLTY4bC03MjQgLTcyNGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNmwtMzYyIDM2MnEtMjggMjggLTI4IDY4dDI4IDY4bDEzNiAxMzZxMjggMjggNjggMjh0NjggLTI4bDI5NCAtMjk1bDY1NiA2NTdxMjggMjggNjggMjh0NjggLTI4bDEzNiAtMTM2cTI4IC0yOCAyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZW1vdmUiIHVuaWNvZGU9IiYjeGYwMGQ7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMTI5OCAyMTRxMCAtNDAgLTI4IC02OGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMjk0IDI5NGwtMjk0IC0yOTRxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNnEtMjggMjggLTI4IDY4dDI4IDY4bDI5NCAyOTRsLTI5NCAyOTRxLTI4IDI4IC0yOCA2OHQyOCA2OGwxMzYgMTM2cTI4IDI4IDY4IDI4dDY4IC0yOGwyOTQgLTI5NGwyOTQgMjk0cTI4IDI4IDY4IDI4dDY4IC0yOGwxMzYgLTEzNnEyOCAtMjggMjggLTY4DQp0LTI4IC02OGwtMjk0IC0yOTRsMjk0IC0yOTRxMjggLTI4IDI4IC02OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Inpvb21faW4iIHVuaWNvZGU9IiYjeGYwMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0yMjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djIyNGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMjR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjRoMjI0DQpxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDcwNHEwIDE4NSAtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41dDMxNi41IDEzMS41dDEzMS41IDMxNi41ek0xNjY0IC0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41DQp0LTIyNSAxNTB0LTE1MCAyMjV0LTU1LjUgMjczLjV0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXEwIC0yMjAgLTEyNCAtMzk5bDM0MyAtMzQzcTM3IC0zNyAzNyAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ6b29tX291dCIgdW5pY29kZT0iJiN4ZjAxMDsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xMDI0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC01NzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDU3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6DQpNMTY2NCAtMTI4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41cS01NCAwIC05MCAzOGwtMzQzIDM0MnEtMTc5IC0xMjQgLTM5OSAtMTI0cS0xNDMgMCAtMjczLjUgNTUuNXQtMjI1IDE1MHQtMTUwIDIyNXQtNTUuNSAyNzMuNXQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoNCiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ib2ZmIiB1bmljb2RlPSImI3hmMDExOyIgDQpkPSJNMTUzNiA2NDBxMCAtMTU2IC02MSAtMjk4dC0xNjQgLTI0NXQtMjQ1IC0xNjR0LTI5OCAtNjF0LTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4cTAgMTgyIDgwLjUgMzQzdDIyNi41IDI3MHE0MyAzMiA5NS41IDI1dDgzLjUgLTUwcTMyIC00MiAyNC41IC05NC41dC00OS41IC04NC41cS05OCAtNzQgLTE1MS41IC0xODF0LTUzLjUgLTIyOHEwIC0xMDQgNDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNQ0KdDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXEwIDEyMSAtNTMuNSAyMjh0LTE1MS41IDE4MXEtNDIgMzIgLTQ5LjUgODQuNXQyNC41IDk0LjVxMzEgNDMgODQgNTB0OTUgLTI1cTE0NiAtMTA5IDIyNi41IC0yNzB0ODAuNSAtMzQzek04OTYgMTQwOHYtNjQwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOHQtOTAgMzh0LTM4IDkwdjY0MHEwIDUyIDM4IDkwdDkwIDM4dDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzaWduYWwiIHVuaWNvZGU9IiYjeGYwMTI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMjU2IDk2di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNNjQwIDIyNHYtMzIwcTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNDgwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzDQp2NTc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNDA4IDg2NHYtOTYwcTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3Y5NjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTM3NnYtMTQ3MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTQ3MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvZyIgdW5pY29kZT0iJiN4ZjAxMzsiIA0KZD0iTTEwMjQgNjQwcTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTUzNiA3NDl2LTIyMnEwIC0xMiAtOCAtMjN0LTIwIC0xM2wtMTg1IC0yOHEtMTkgLTU0IC0zOSAtOTFxMzUgLTUwIDEwNyAtMTM4cTEwIC0xMiAxMCAtMjV0LTkgLTIzcS0yNyAtMzcgLTk5IC0xMDh0LTk0IC03MXEtMTIgMCAtMjYgOWwtMTM4IDEwOHEtNDQgLTIzIC05MSAtMzgNCnEtMTYgLTEzNiAtMjkgLTE4NnEtNyAtMjggLTM2IC0yOGgtMjIycS0xNCAwIC0yNC41IDguNXQtMTEuNSAyMS41bC0yOCAxODRxLTQ5IDE2IC05MCAzN2wtMTQxIC0xMDdxLTEwIC05IC0yNSAtOXEtMTQgMCAtMjUgMTFxLTEyNiAxMTQgLTE2NSAxNjhxLTcgMTAgLTcgMjNxMCAxMiA4IDIzcTE1IDIxIDUxIDY2LjV0NTQgNzAuNXEtMjcgNTAgLTQxIDk5bC0xODMgMjdxLTEzIDIgLTIxIDEyLjV0LTggMjMuNXYyMjJxMCAxMiA4IDIzdDE5IDEzDQpsMTg2IDI4cTE0IDQ2IDM5IDkycS00MCA1NyAtMTA3IDEzOHEtMTAgMTIgLTEwIDI0cTAgMTAgOSAyM3EyNiAzNiA5OC41IDEwNy41dDk0LjUgNzEuNXExMyAwIDI2IC0xMGwxMzggLTEwN3E0NCAyMyA5MSAzOHExNiAxMzYgMjkgMTg2cTcgMjggMzYgMjhoMjIycTE0IDAgMjQuNSAtOC41dDExLjUgLTIxLjVsMjggLTE4NHE0OSAtMTYgOTAgLTM3bDE0MiAxMDdxOSA5IDI0IDlxMTMgMCAyNSAtMTBxMTI5IC0xMTkgMTY1IC0xNzBxNyAtOCA3IC0yMg0KcTAgLTEyIC04IC0yM3EtMTUgLTIxIC01MSAtNjYuNXQtNTQgLTcwLjVxMjYgLTUwIDQxIC05OGwxODMgLTI4cTEzIC0yIDIxIC0xMi41dDggLTIzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmFzaCIgdW5pY29kZT0iJiN4ZjAxNDsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik01MTIgODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTc2OCA4MDB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3pNMTAyNCA4MDB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzYNCnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMTUyIDc2djk0OGgtODk2di05NDhxMCAtMjIgNyAtNDAuNXQxNC41IC0yN3QxMC41IC04LjVoODMycTMgMCAxMC41IDguNXQxNC41IDI3dDcgNDAuNXpNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMyDQpxLTY2IDAgLTExMyA1OC41dC00NyAxNDEuNXY5NTJoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDMwOWw3MCAxNjdxMTUgMzcgNTQgNjN0NzkgMjZoMzIwcTQwIDAgNzkgLTI2dDU0IC02M2w3MCAtMTY3aDMwOXExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaG9tZSIgdW5pY29kZT0iJiN4ZjAxNTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNDA4IDU0NHYtNDgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0djM4NGgtMjU2di0zODRoLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MHEwIDEgMC41IDN0MC41IDNsNTc1IDQ3NGw1NzUgLTQ3NHExIC0yIDEgLTZ6TTE2MzEgNjEzbC02MiAtNzRxLTggLTkgLTIxIC0xMWgtM3EtMTMgMCAtMjEgN2wtNjkyIDU3N2wtNjkyIC01NzdxLTEyIC04IC0yNCAtN3EtMTMgMiAtMjEgMTFsLTYyIDc0cS04IDEwIC03IDIzLjV0MTEgMjEuNQ0KbDcxOSA1OTlxMzIgMjYgNzYgMjZ0NzYgLTI2bDI0NCAtMjA0djE5NXEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtNDA4bDIxOSAtMTgycTEwIC04IDExIC0yMS41dC03IC0yMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsZV9hbHQiIHVuaWNvZGU9IiYjeGYwMTY7IiANCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgweg0KIiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0aW1lIiB1bmljb2RlPSImI3hmMDE3OyIgDQpkPSJNODk2IDk5MnYtNDQ4cTAgLTE0IC05IC0yM3QtMjMgLTloLTMyMHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyMjR2MzUycTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTEzMTIgNjQwcTAgMTQ4IC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3QtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDANCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJvYWQiIHVuaWNvZGU9IiYjeGYwMTg7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNMTExMSA1NDB2NGwtMjQgMzIwcS0xIDEzIC0xMSAyMi41dC0yMyA5LjVoLTE4NnEtMTMgMCAtMjMgLTkuNXQtMTEgLTIyLjVsLTI0IC0zMjB2LTRxLTEgLTEyIDggLTIwdDIxIC04aDI0NHExMiAwIDIxIDh0OCAyMHpNMTg3MCA3M3EwIC03MyAtNDYgLTczaC03MDRxMTMgMCAyMiA5LjV0OCAyMi41bC0yMCAyNTZxLTEgMTMgLTExIDIyLjV0LTIzIDkuNWgtMjcycS0xMyAwIC0yMyAtOS41dC0xMSAtMjIuNWwtMjAgLTI1Ng0KcS0xIC0xMyA4IC0yMi41dDIyIC05LjVoLTcwNHEtNDYgMCAtNDYgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0xNSAtMTkycS0xIC0xNCA4IC0yM3QyMiAtOWgxNjZxMTMgMCAyMiA5dDggMjNsLTE1IDE5MnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aDMzOXEyMCAwIDM4IC0xNHQyNiAtMzNsNDE3IC0xMDQ0cTI2IC02MiAyNiAtMTE2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZG93bmxvYWRfYWx0IiB1bmljb2RlPSImI3hmMDE5OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTEyODAgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTUzNiAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDQxNnYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTQ3MnEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDQ2NWwxMzUgLTEzNg0KcTU4IC01NiAxMzYgLTU2dDEzNiA1NmwxMzYgMTM2aDQ2NHE0MCAwIDY4IC0yOHQyOCAtNjh6TTEzMzkgOTg1cTE3IC00MSAtMTQgLTcwbC00NDggLTQ0OHEtMTggLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMjU2djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQ0OGgyNTZxNDIgMCA1OSAtMzl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3dubG9hZCIgdW5pY29kZT0iJiN4ZjAxYTsiIA0KZD0iTTExMjAgNjA4cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS0xMSAtOSAtMjMgLTl0LTIzIDlsLTMyMCAzMjBxLTE1IDE2IC03IDM1cTggMjAgMzAgMjBoMTkydjM1MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMzUyaDE5MnExNCAwIDIzIC05dDkgLTIzek03NjggMTE4NHEtMTQ4IDAgLTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3QyNzMgNzN0MTk4IDE5OHQ3MyAyNzMNCnQtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXBsb2FkIiB1bmljb2RlPSImI3hmMDFiOyIgDQpkPSJNMTExOCA2NjBxLTggLTIwIC0zMCAtMjBoLTE5MnYtMzUycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YzNTJoLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3EwIDEyIDEwIDI0bDMxOSAzMTlxMTEgOSAyMyA5dDIzIC05bDMyMCAtMzIwcTE1IC0xNiA3IC0zNXpNNzY4IDExODRxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTgNCnQ3MyAyNzN0LTczIDI3M3QtMTk4IDE5OHQtMjczIDczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImluYm94IiB1bmljb2RlPSImI3hmMDFjOyIgDQpkPSJNMTAyMyA1NzZoMzE2cS0xIDMgLTIuNSA4LjV0LTIuNSA3LjVsLTIxMiA0OTZoLTcwOGwtMjEyIC00OTZxLTEgLTMgLTIuNSAtOC41dC0yLjUgLTcuNWgzMTZsOTUgLTE5MmgzMjB6TTE1MzYgNTQ2di00ODJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDgycTAgNjIgMjUgMTIzbDIzOCA1NTJxMTAgMjUgMzYuNSA0MnQ1Mi41IDE3aDgzMnEyNiAwIDUyLjUgLTE3dDM2LjUgLTQybDIzOCAtNTUyDQpxMjUgLTYxIDI1IC0xMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbGF5X2NpcmNsZSIgdW5pY29kZT0iJiN4ZjAxZDsiIA0KZD0iTTExODQgNjQwcTAgLTM3IC0zMiAtNTVsLTU0NCAtMzIwcS0xNSAtOSAtMzIgLTlxLTE2IDAgLTMyIDhxLTMyIDE5IC0zMiA1NnY2NDBxMCAzNyAzMiA1NnEzMyAxOCA2NCAtMWw1NDQgLTMyMHEzMiAtMTggMzIgLTU1ek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3QyNzMgNzN0MTk4IDE5OHQ3MyAyNzN6TTE1MzYgNjQwDQpxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXBlYXQiIHVuaWNvZGU9IiYjeGYwMWU7IiANCmQ9Ik0xNTM2IDEyODB2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtNDIgMCAtNTkgNDBxLTE3IDM5IDE0IDY5bDEzOCAxMzhxLTE0OCAxMzcgLTM0OSAxMzdxLTEwNCAwIC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjVxMTE5IDAgMjI1IDUydDE3OSAxNDdxNyAxMCAyMyAxMnExNSAwIDI1IC05DQpsMTM3IC0xMzhxOSAtOCA5LjUgLTIwLjV0LTcuNSAtMjIuNXEtMTA5IC0xMzIgLTI2NCAtMjA0LjV0LTMyNyAtNzIuNXEtMTU2IDAgLTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4dDYxIDI5OHQxNjQgMjQ1dDI0NSAxNjR0Mjk4IDYxcTE0NyAwIDI4NC41IC01NS41dDI0NC41IC0xNTYuNWwxMzAgMTI5cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZWZyZXNoIiB1bmljb2RlPSImI3hmMDIxOyIgDQpkPSJNMTUxMSA0ODBxMCAtNSAtMSAtN3EtNjQgLTI2OCAtMjY4IC00MzQuNXQtNDc4IC0xNjYuNXEtMTQ2IDAgLTI4Mi41IDU1dC0yNDMuNSAxNTdsLTEyOSAtMTI5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMTM3IC0xMzdxNzEgLTY2IDE2MSAtMTAydDE4NyAtMzZxMTM0IDAgMjUwIDY1dDE4NiAxNzlxMTEgMTcgNTMgMTE3DQpxOCAyMyAzMCAyM2gxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDEyODB2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDEzOCAxMzhxLTE0OCAxMzcgLTM0OSAxMzdxLTEzNCAwIC0yNTAgLTY1dC0xODYgLTE3OXEtMTEgLTE3IC01MyAtMTE3cS04IC0yMyAtMzAgLTIzaC0xOTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY3cTY1IDI2OCAyNzAgNDM0LjV0NDgwIDE2Ni41DQpxMTQ2IDAgMjg0IC01NS41dDI0NSAtMTU2LjVsMTMwIDEyOXExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlzdF9hbHQiIHVuaWNvZGU9IiYjeGYwMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMzg0IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNMzg0IDg2NHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNMTUzNiA2MDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDg2NHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHExMyAwIDIyLjUgLTkuNQ0KdDkuNSAtMjIuNXpNMTY2NCAxNjB2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc5MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00Nw0KdDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb2NrIiB1bmljb2RlPSImI3hmMDIzOyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTMyMCA3NjhoNTEydjE5MnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF2LTE5MnpNMTE1MiA2NzJ2LTU3NnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djU3NnEwIDQwIDI4IDY4dDY4IDI4aDMydjE5MnEwIDE4NCAxMzIgMzE2dDMxNiAxMzJ0MzE2IC0xMzJ0MTMyIC0zMTZ2LTE5MmgzMnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmbGFnIiB1bmljb2RlPSImI3hmMDI0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTMyMCAxMjgwcTAgLTcyIC02NCAtMTEwdi0xMjY2cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxMjY2cS02NCAzOCAtNjQgMTEwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE3OTIgMTIxNnYtNzYzcTAgLTI1IC0xMi41IC0zOC41dC0zOS41IC0yNy41cS0yMTUgLTExNiAtMzY5IC0xMTZxLTYxIDAgLTEyMy41IDIydC0xMDguNSA0OA0KdC0xMTUuNSA0OHQtMTQyLjUgMjJxLTE5MiAwIC00NjQgLTE0NnEtMTcgLTkgLTMzIC05cS0yNiAwIC00NSAxOXQtMTkgNDV2NzQycTAgMzIgMzEgNTVxMjEgMTQgNzkgNDNxMjM2IDEyMCA0MjEgMTIwcTEwNyAwIDIwMCAtMjl0MjE5IC04OHEzOCAtMTkgODggLTE5cTU0IDAgMTE3LjUgMjF0MTEwIDQ3dDg4IDQ3dDU0LjUgMjFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhZHBob25lcyIgdW5pY29kZT0iJiN4ZjAyNTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjY0IDY1MHEwIC0xNjYgLTYwIC0zMTRsLTIwIC00OWwtMTg1IC0zM3EtMjIgLTgzIC05MC41IC0xMzYuNXQtMTU2LjUgLTUzLjV2LTMycTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi0zMnE3MSAwIDEzMCAtMzUuNXQ5MyAtOTUuNWw2OCAxMnEyOSA5NSAyOSAxOTNxMCAxNDggLTg4IDI3OXQtMjM2LjUgMjA5dC0zMTUuNSA3OA0KdC0zMTUuNSAtNzh0LTIzNi41IC0yMDl0LTg4IC0yNzlxMCAtOTggMjkgLTE5M2w2OCAtMTJxMzQgNjAgOTMgOTUuNXQxMzAgMzUuNXYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzJxLTg4IDAgLTE1Ni41IDUzLjV0LTkwLjUgMTM2LjVsLTE4NSAzM2wtMjAgNDlxLTYwIDE0OCAtNjAgMzE0cTAgMTUxIDY3IDI5MXQxNzkgMjQyLjUNCnQyNjYgMTYzLjV0MzIwIDYxdDMyMCAtNjF0MjY2IC0xNjMuNXQxNzkgLTI0Mi41dDY3IC0yOTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ2b2x1bWVfb2ZmIiB1bmljb2RlPSImI3hmMDI2OyIgaG9yaXotYWR2LXg9Ijc2OCIgDQpkPSJNNzY4IDExODR2LTEwODhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMzMzIDMzM2gtMjYycS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InZvbHVtZV9kb3duIiB1bmljb2RlPSImI3hmMDI3OyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTc2OCAxMTg0di0xMDg4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTMzMyAzMzNoLTI2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDI2MmwzMzMgMzMzcTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExNTIgNjQwcTAgLTc2IC00Mi41IC0xNDEuNXQtMTEyLjUgLTkzLjVxLTEwIC01IC0yNSAtNXEtMjYgMCAtNDUgMTguNXQtMTkgNDUuNXEwIDIxIDEyIDM1LjV0MjkgMjV0MzQgMjN0MjkgMzYNCnQxMiA1Ni41dC0xMiA1Ni41dC0yOSAzNnQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ2b2x1bWVfdXAiIHVuaWNvZGU9IiYjeGYwMjg7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNNzY4IDExODR2LTEwODhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMzMzIDMzM2gtMjYycS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXpNMTE1MiA2NDBxMCAtNzYgLTQyLjUgLTE0MS41dC0xMTIuNSAtOTMuNXEtMTAgLTUgLTI1IC01cS0yNiAwIC00NSAxOC41dC0xOSA0NS41cTAgMjEgMTIgMzUuNXQyOSAyNXQzNCAyM3QyOSAzNg0KdDEyIDU2LjV0LTEyIDU2LjV0LTI5IDM2dC0zNCAyM3QtMjkgMjV0LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNSAtNXE3MCAtMjcgMTEyLjUgLTkzdDQyLjUgLTE0MnpNMTQwOCA2NDBxMCAtMTUzIC04NSAtMjgyLjV0LTIyNSAtMTg4LjVxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTlxNTYgMjkgNzYgNDRxNzQgNTQgMTE1LjUgMTM1LjV0NDEuNSAxNzMuNXQtNDEuNSAxNzMuNQ0KdC0xMTUuNSAxMzUuNXEtMjAgMTUgLTc2IDQ0cS0zOSAyMCAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTE0MCAtNTkgMjI1IC0xODguNXQ4NSAtMjgyLjV6TTE2NjQgNjQwcTAgLTIzMCAtMTI3IC00MjIuNXQtMzM4IC0yODMuNXEtMTMgLTUgLTI2IC01cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAzNiAzOSA1OXE3IDQgMjIuNSAxMC41dDIyLjUgMTAuNXE0NiAyNSA4MiA1MXExMjMgOTEgMTkyIDIyN3Q2OSAyODl0LTY5IDI4OQ0KdC0xOTIgMjI3cS0zNiAyNiAtODIgNTFxLTcgNCAtMjIuNSAxMC41dC0yMi41IDEwLjVxLTM5IDIzIC0zOSA1OXEwIDI2IDE5IDQ1dDQ1IDE5cTEzIDAgMjYgLTVxMjExIC05MSAzMzggLTI4My41dDEyNyAtNDIyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxcmNvZGUiIHVuaWNvZGU9IiYjeGYwMjk7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMzg0IDM4NHYtMTI4aC0xMjh2MTI4aDEyOHpNMzg0IDExNTJ2LTEyOGgtMTI4djEyOGgxMjh6TTExNTIgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTI4IDEyOWgzODR2MzgzaC0zODR2LTM4M3pNMTI4IDg5NmgzODR2Mzg0aC0zODR2LTM4NHpNODk2IDg5NmgzODR2Mzg0aC0zODR2LTM4NHpNNjQwIDY0MHYtNjQwaC02NDB2NjQwaDY0MHpNMTE1MiAxMjh2LTEyOGgtMTI4djEyOGgxMjh6TTE0MDggMTI4di0xMjhoLTEyOHYxMjhoMTI4eg0KTTE0MDggNjQwdi0zODRoLTM4NHYxMjhoLTEyOHYtMzg0aC0xMjh2NjQwaDM4NHYtMTI4aDEyOHYxMjhoMTI4ek02NDAgMTQwOHYtNjQwaC02NDB2NjQwaDY0MHpNMTQwOCAxNDA4di02NDBoLTY0MHY2NDBoNjQweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmFyY29kZSIgdW5pY29kZT0iJiN4ZjAyYTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik02MyAwaC02M3YxNDA4aDYzdi0xNDA4ek0xMjYgMWgtMzJ2MTQwN2gzMnYtMTQwN3pNMjIwIDFoLTMxdjE0MDdoMzF2LTE0MDd6TTM3NyAxaC0zMXYxNDA3aDMxdi0xNDA3ek01MzQgMWgtNjJ2MTQwN2g2MnYtMTQwN3pNNjYwIDFoLTMxdjE0MDdoMzF2LTE0MDd6TTcyMyAxaC0zMXYxNDA3aDMxdi0xNDA3ek03ODYgMWgtMzF2MTQwN2gzMXYtMTQwN3pNOTQzIDFoLTYzdjE0MDdoNjN2LTE0MDd6TTExMDAgMWgtNjN2MTQwN2g2M3YtMTQwN3oNCk0xMjI2IDFoLTYzdjE0MDdoNjN2LTE0MDd6TTEzNTIgMWgtNjN2MTQwN2g2M3YtMTQwN3pNMTQ0NiAxaC02M3YxNDA3aDYzdi0xNDA3ek0xNjM1IDFoLTk0djE0MDdoOTR2LTE0MDd6TTE2OTggMWgtMzJ2MTQwN2gzMnYtMTQwN3pNMTc5MiAwaC02M3YxNDA4aDYzdi0xNDA4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGFnIiB1bmljb2RlPSImI3hmMDJiOyIgDQpkPSJNNDQ4IDEwODhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE1MTUgNTEycTAgLTUzIC0zNyAtOTBsLTQ5MSAtNDkycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTcxNSA3MTZxLTM4IDM3IC02NC41IDEwMXQtMjYuNSAxMTd2NDE2cTAgNTIgMzggOTB0OTAgMzhoNDE2cTUzIDAgMTE3IC0yNi41dDEwMiAtNjQuNQ0KbDcxNSAtNzE0cTM3IC0zOSAzNyAtOTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0YWdzIiB1bmljb2RlPSImI3hmMDJjOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTQ0OCAxMDg4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNTE1IDUxMnEwIC01MyAtMzcgLTkwbC00OTEgLTQ5MnEtMzkgLTM3IC05MSAtMzdxLTUzIDAgLTkwIDM3bC03MTUgNzE2cS0zOCAzNyAtNjQuNSAxMDF0LTI2LjUgMTE3djQxNnEwIDUyIDM4IDkwdDkwIDM4aDQxNnE1MyAwIDExNyAtMjYuNXQxMDIgLTY0LjUNCmw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxek0xODk5IDUxMnEwIC01MyAtMzcgLTkwbC00OTEgLTQ5MnEtMzkgLTM3IC05MSAtMzdxLTM2IDAgLTU5IDE0dC01MyA0NWw0NzAgNDcwcTM3IDM3IDM3IDkwcTAgNTIgLTM3IDkxbC03MTUgNzE0cS0zOCAzOCAtMTAyIDY0LjV0LTExNyAyNi41aDIyNHE1MyAwIDExNyAtMjYuNXQxMDIgLTY0LjVsNzE1IC03MTRxMzcgLTM5IDM3IC05MXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJvb2siIHVuaWNvZGU9IiYjeGYwMmQ7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTYzOSAxMDU4cTQwIC01NyAxOCAtMTI5bC0yNzUgLTkwNnEtMTkgLTY0IC03Ni41IC0xMDcuNXQtMTIyLjUgLTQzLjVoLTkyM3EtNzcgMCAtMTQ4LjUgNTMuNXQtOTkuNSAxMzEuNXEtMjQgNjcgLTIgMTI3cTAgNCAzIDI3dDQgMzdxMSA4IC0zIDIxLjV0LTMgMTkuNXEyIDExIDggMjF0MTYuNSAyMy41dDE2LjUgMjMuNXEyMyAzOCA0NSA5MS41dDMwIDkxLjVxMyAxMCAwLjUgMzB0LTAuNSAyOHEzIDExIDE3IDI4dDE3IDIzDQpxMjEgMzYgNDIgOTJ0MjUgOTBxMSA5IC0yLjUgMzJ0MC41IDI4cTQgMTMgMjIgMzAuNXQyMiAyMi41cTE5IDI2IDQyLjUgODQuNXQyNy41IDk2LjVxMSA4IC0zIDI1LjV0LTIgMjYuNXEyIDggOSAxOHQxOCAyM3QxNyAyMXE4IDEyIDE2LjUgMzAuNXQxNSAzNXQxNiAzNnQxOS41IDMydDI2LjUgMjMuNXQzNiAxMS41dDQ3LjUgLTUuNWwtMSAtM3EzOCA5IDUxIDloNzYxcTc0IDAgMTE0IC01NnQxOCAtMTMwbC0yNzQgLTkwNg0KcS0zNiAtMTE5IC03MS41IC0xNTMuNXQtMTI4LjUgLTM0LjVoLTg2OXEtMjcgMCAtMzggLTE1cS0xMSAtMTYgLTEgLTQzcTI0IC03MCAxNDQgLTcwaDkyM3EyOSAwIDU2IDE1LjV0MzUgNDEuNWwzMDAgOTg3cTcgMjIgNSA1N3EzOCAtMTUgNTkgLTQzek01NzUgMTA1NnEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjUNCnQtMTYuNSAtMjIuNXpNNDkyIDgwMHEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjV0LTE2LjUgLTIyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJib29rbWFyayIgdW5pY29kZT0iJiN4ZjAyZTsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5cTAgMzQgMTkuNSA2MnQ1Mi41IDQxcTIxIDkgNDQgOWgxMDQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icHJpbnQiIHVuaWNvZGU9IiYjeGYwMmY7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMzg0IDBoODk2djI1NmgtODk2di0yNTZ6TTM4NCA2NDBoODk2djM4NGgtMTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTYwaC02NDB2LTY0MHpNMTUzNiA1NzZxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDU3NnYtNDE2cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0xNjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OA0KdjE2MGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NDE2cTAgNzkgNTYuNSAxMzUuNXQxMzUuNSA1Ni41aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4IC0yMHQ3NiAtNDhsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTI1Nmg2NHE3OSAwIDEzNS41IC01Ni41dDU2LjUgLTEzNS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2FtZXJhIiB1bmljb2RlPSImI3hmMDMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTk2MCA4NjRxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV0LTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNXQtMjAzLjUgODQuNXQtODQuNSAyMDMuNXQ4NC41IDIwMy41dDIwMy41IDg0LjV6TTE2NjQgMTI4MHExMDYgMCAxODEgLTc1dDc1IC0xODF2LTg5NnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTE0MDhxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXY4OTZxMCAxMDYgNzUgMTgxdDE4MSA3NWgyMjRsNTEgMTM2DQpxMTkgNDkgNjkuNSA4NC41dDEwMy41IDM1LjVoNTEycTUzIDAgMTAzLjUgLTM1LjV0NjkuNSAtODQuNWw1MSAtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9udCIgdW5pY29kZT0iJiN4ZjAzMTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik03MjUgOTc3bC0xNzAgLTQ1MHEzMyAwIDEzNi41IC0ydDE2MC41IC0ycTE5IDAgNTcgMnEtODcgMjUzIC0xODQgNDUyek0wIC0xMjhsMiA3OXEyMyA3IDU2IDEyLjV0NTcgMTAuNXQ0OS41IDE0LjV0NDQuNSAyOXQzMSA1MC41bDIzNyA2MTZsMjgwIDcyNGg3NWg1M3E4IC0xNCAxMSAtMjFsMjA1IC00ODBxMzMgLTc4IDEwNiAtMjU3LjV0MTE0IC0yNzQuNXExNSAtMzQgNTggLTE0NC41dDcyIC0xNjguNXEyMCAtNDUgMzUgLTU3DQpxMTkgLTE1IDg4IC0yOS41dDg0IC0yMC41cTYgLTM4IDYgLTU3cTAgLTUgLTAuNSAtMTMuNXQtMC41IC0xMi41cS02MyAwIC0xOTAgOHQtMTkxIDhxLTc2IDAgLTIxNSAtN3QtMTc4IC04cTAgNDMgNCA3OGwxMzEgMjhxMSAwIDEyLjUgMi41dDE1LjUgMy41dDE0LjUgNC41dDE1IDYuNXQxMSA4dDkgMTF0Mi41IDE0cTAgMTYgLTMxIDk2LjV0LTcyIDE3Ny41dC00MiAxMDBsLTQ1MCAycS0yNiAtNTggLTc2LjUgLTE5NS41dC01MC41IC0xNjIuNQ0KcTAgLTIyIDE0IC0zNy41dDQzLjUgLTI0LjV0NDguNSAtMTMuNXQ1NyAtOC41dDQxIC00cTEgLTE5IDEgLTU4cTAgLTkgLTIgLTI3cS01OCAwIC0xNzQuNSAxMHQtMTc0LjUgMTBxLTggMCAtMjYuNSAtNHQtMjEuNSAtNHEtODAgLTE0IC0xODggLTE0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm9sZCIgdW5pY29kZT0iJiN4ZjAzMjsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik01NTUgMTVxNzQgLTMyIDE0MCAtMzJxMzc2IDAgMzc2IDMzNXEwIDExNCAtNDEgMTgwcS0yNyA0NCAtNjEuNSA3NHQtNjcuNSA0Ni41dC04MC41IDI1dC04NCAxMC41dC05NC41IDJxLTczIDAgLTEwMSAtMTBxMCAtNTMgLTAuNSAtMTU5dC0wLjUgLTE1OHEwIC04IC0xIC02Ny41dC0wLjUgLTk2LjV0NC41IC04My41dDEyIC02Ni41ek01NDEgNzYxcTQyIC03IDEwOSAtN3E4MiAwIDE0MyAxM3QxMTAgNDQuNXQ3NC41IDg5LjV0MjUuNSAxNDINCnEwIDcwIC0yOSAxMjIuNXQtNzkgODJ0LTEwOCA0My41dC0xMjQgMTRxLTUwIDAgLTEzMCAtMTNxMCAtNTAgNCAtMTUxdDQgLTE1MnEwIC0yNyAtMC41IC04MHQtMC41IC03OXEwIC00NiAxIC02OXpNMCAtMTI4bDIgOTRxMTUgNCA4NSAxNnQxMDYgMjdxNyAxMiAxMi41IDI3dDguNSAzMy41dDUuNSAzMi41dDMgMzcuNXQwLjUgMzR2MzUuNXYzMHEwIDk4MiAtMjIgMTAyNXEtNCA4IC0yMiAxNC41dC00NC41IDExdC00OS41IDd0LTQ4LjUgNC41DQp0LTMwLjUgM2wtNCA4M3E5OCAyIDM0MCAxMS41dDM3MyA5LjVxMjMgMCA2OCAtMC41dDY4IC0wLjVxNzAgMCAxMzYuNSAtMTN0MTI4LjUgLTQydDEwOCAtNzF0NzQgLTEwNC41dDI4IC0xMzcuNXEwIC01MiAtMTYuNSAtOTUuNXQtMzkgLTcydC02NC41IC01Ny41dC03MyAtNDV0LTg0IC00MHExNTQgLTM1IDI1Ni41IC0xMzR0MTAyLjUgLTI0OHEwIC0xMDAgLTM1IC0xNzkuNXQtOTMuNSAtMTMwLjV0LTEzOCAtODUuNXQtMTYzLjUgLTQ4LjUNCnQtMTc2IC0xNHEtNDQgMCAtMTMyIDN0LTEzMiAzcS0xMDYgMCAtMzA3IC0xMXQtMjMxIC0xMnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Iml0YWxpYyIgdW5pY29kZT0iJiN4ZjAzMzsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik0wIC0xMjZsMTcgODVxMjIgNyA2MS41IDE2LjV0NzIgMTl0NTkuNSAyMy41cTI4IDM1IDQxIDEwMXExIDcgNjIgMjg5dDExNCA1NDMuNXQ1MiAyOTYuNXYyNXEtMjQgMTMgLTU0LjUgMTguNXQtNjkuNSA4dC01OCA1LjVsMTkgMTAzcTMzIC0yIDEyMCAtNi41dDE0OS41IC03dDEyMC41IC0yLjVxNDggMCA5OC41IDIuNXQxMjEgN3Q5OC41IDYuNXEtNSAtMzkgLTE5IC04OXEtMzAgLTEwIC0xMDEuNSAtMjguNXQtMTA4LjUgLTMzLjUNCnEtOCAtMTkgLTE0IC00Mi41dC05IC00MHQtNy41IC00NS41dC02LjUgLTQycS0yNyAtMTQ4IC04Ny41IC00MTkuNXQtNzcuNSAtMzU1LjVxLTIgLTkgLTEzIC01OHQtMjAgLTkwdC0xNiAtODMuNXQtNiAtNTcuNWwxIC0xOHExNyAtNCAxODUgLTMxcS0zIC00NCAtMTYgLTk5cS0xMSAwIC0zMi41IC0xLjV0LTMyLjUgLTEuNXEtMjkgMCAtODcgMTB0LTg2IDEwcS0xMzggMiAtMjA2IDJxLTUxIDAgLTE0MyAtOXQtMTIxIC0xMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRleHRfaGVpZ2h0IiB1bmljb2RlPSImI3hmMDM0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NDQgMTI4cTMzIDAgNDIgLTE4LjV0LTExIC00NC41bC0xMjYgLTE2MnEtMjAgLTI2IC00OSAtMjZ0LTQ5IDI2bC0xMjYgMTYycS0yMCAyNiAtMTEgNDQuNXQ0MiAxOC41aDgwdjEwMjRoLTgwcS0zMyAwIC00MiAxOC41dDExIDQ0LjVsMTI2IDE2MnEyMCAyNiA0OSAyNnQ0OSAtMjZsMTI2IC0xNjJxMjAgLTI2IDExIC00NC41dC00MiAtMTguNWgtODB2LTEwMjRoODB6TTgxIDE0MDdsNTQgLTI3cTEyIC01IDIxMSAtNXE0NCAwIDEzMiAyDQp0MTMyIDJxMzYgMCAxMDcuNSAtMC41dDEwNy41IC0wLjVoMjkzcTYgMCAyMSAtMC41dDIwLjUgMHQxNiAzdDE3LjUgOXQxNSAxNy41bDQyIDFxNCAwIDE0IC0wLjV0MTQgLTAuNXEyIC0xMTIgMiAtMzM2cTAgLTgwIC01IC0xMDlxLTM5IC0xNCAtNjggLTE4cS0yNSA0NCAtNTQgMTI4cS0zIDkgLTExIDQ4dC0xNC41IDczLjV0LTcuNSAzNS41cS02IDggLTEyIDEyLjV0LTE1LjUgNnQtMTMgMi41dC0xOCAwLjV0LTE2LjUgLTAuNQ0KcS0xNyAwIC02Ni41IDAuNXQtNzQuNSAwLjV0LTY0IC0ydC03MSAtNnEtOSAtODEgLTggLTEzNnEwIC05NCAyIC0zODh0MiAtNDU1cTAgLTE2IC0yLjUgLTcxLjV0MCAtOTEuNXQxMi41IC02OXE0MCAtMjEgMTI0IC00Mi41dDEyMCAtMzcuNXE1IC00MCA1IC01MHEwIC0xNCAtMyAtMjlsLTM0IC0xcS03NiAtMiAtMjE4IDh0LTIwNyAxMHEtNTAgMCAtMTUxIC05dC0xNTIgLTlxLTMgNTEgLTMgNTJ2OXExNyAyNyA2MS41IDQzdDk4LjUgMjl0NzggMjcNCnExOSA0MiAxOSAzODNxMCAxMDEgLTMgMzAzdC0zIDMwM3YxMTdxMCAyIDAuNSAxNS41dDAuNSAyNXQtMSAyNS41dC0zIDI0dC01IDE0cS0xMSAxMiAtMTYyIDEycS0zMyAwIC05MyAtMTJ0LTgwIC0yNnEtMTkgLTEzIC0zNCAtNzIuNXQtMzEuNSAtMTExdC00Mi41IC01My41cS00MiAyNiAtNTYgNDR2MzgzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGV4dF93aWR0aCIgdW5pY29kZT0iJiN4ZjAzNTsiIA0KZD0iTTgxIDE0MDdsNTQgLTI3cTEyIC01IDIxMSAtNXE0NCAwIDEzMiAydDEzMiAycTcwIDAgMjQ2LjUgMXQzMDQuNSAwLjV0MjQ3IC00LjVxMzMgLTEgNTYgMzFsNDIgMXE0IDAgMTQgLTAuNXQxNCAtMC41cTIgLTExMiAyIC0zMzZxMCAtODAgLTUgLTEwOXEtMzkgLTE0IC02OCAtMThxLTI1IDQ0IC01NCAxMjhxLTMgOSAtMTEgNDcuNXQtMTUgNzMuNXQtNyAzNnEtMTAgMTMgLTI3IDE5cS01IDIgLTY2IDJxLTMwIDAgLTkzIDF0LTEwMyAxDQp0LTk0IC0ydC05NiAtN3EtOSAtODEgLTggLTEzNmwxIC0xNTJ2NTJxMCAtNTUgMSAtMTU0dDEuNSAtMTgwdDAuNSAtMTUzcTAgLTE2IC0yLjUgLTcxLjV0MCAtOTEuNXQxMi41IC02OXE0MCAtMjEgMTI0IC00Mi41dDEyMCAtMzcuNXE1IC00MCA1IC01MHEwIC0xNCAtMyAtMjlsLTM0IC0xcS03NiAtMiAtMjE4IDh0LTIwNyAxMHEtNTAgMCAtMTUxIC05dC0xNTIgLTlxLTMgNTEgLTMgNTJ2OXExNyAyNyA2MS41IDQzdDk4LjUgMjl0NzggMjcNCnE3IDE2IDExLjUgNzR0NiAxNDUuNXQxLjUgMTU1dC0wLjUgMTUzLjV0LTAuNSA4OXEwIDcgLTIuNSAyMS41dC0yLjUgMjIuNXEwIDcgMC41IDQ0dDEgNzN0MCA3Ni41dC0zIDY3LjV0LTYuNSAzMnEtMTEgMTIgLTE2MiAxMnEtNDEgMCAtMTYzIC0xMy41dC0xMzggLTI0LjVxLTE5IC0xMiAtMzQgLTcxLjV0LTMxLjUgLTExMS41dC00Mi41IC01NHEtNDIgMjYgLTU2IDQ0djM4M3pNMTMxMCAxMjVxMTIgMCA0MiAtMTkuNXQ1Ny41IC00MS41DQp0NTkuNSAtNDl0MzYgLTMwcTI2IC0yMSAyNiAtNDl0LTI2IC00OXEtNCAtMyAtMzYgLTMwdC01OS41IC00OXQtNTcuNSAtNDEuNXQtNDIgLTE5LjVxLTEzIDAgLTIwLjUgMTAuNXQtMTAgMjguNXQtMi41IDMzLjV0MS41IDMzdDEuNSAxOS41aC0xMDI0cTAgLTIgMS41IC0xOS41dDEuNSAtMzN0LTIuNSAtMzMuNXQtMTAgLTI4LjV0LTIwLjUgLTEwLjVxLTEyIDAgLTQyIDE5LjV0LTU3LjUgNDEuNXQtNTkuNSA0OXQtMzYgMzBxLTI2IDIxIC0yNiA0OQ0KdDI2IDQ5cTQgMyAzNiAzMHQ1OS41IDQ5dDU3LjUgNDEuNXQ0MiAxOS41cTEzIDAgMjAuNSAtMTAuNXQxMCAtMjguNXQyLjUgLTMzLjV0LTEuNSAtMzN0LTEuNSAtMTkuNWgxMDI0cTAgMiAtMS41IDE5LjV0LTEuNSAzM3QyLjUgMzMuNXQxMCAyOC41dDIwLjUgMTAuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2xlZnQiIHVuaWNvZGU9IiYjeGYwMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTQwOCA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMjgwcTI2IDAgNDUgLTE5dDE5IC00NXpNMTY2NCA5NjB2LTEyOHEwIC0yNiAtMTkgLTQ1DQp0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2NlbnRlciIgdW5pY29kZT0iJiN4ZjAzNzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNDA4IDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtODk2cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTY2NCA5NjB2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTkNCmgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbGlnbl9yaWdodCIgdW5pY29kZT0iJiN4ZjAzODsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDk2MHYtMTI4cTAgLTI2IC0xOSAtNDUNCnQtNDUgLTE5aC0xNTM2cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTUzNnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTE1MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWxpZ25fanVzdGlmeSIgdW5pY29kZT0iJiN4ZjAzOTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDk2MHYtMTI4cTAgLTI2IC0xOSAtNDUNCnQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlzdCIgdW5pY29kZT0iJiN4ZjAzYTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0yNTYgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0yNTYgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjUNCnQ5LjUgLTIyLjV6TTI1NiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM0NA0KcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMjU2IDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjUNCnQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkyDQpxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZGVudF9sZWZ0IiB1bmljb2RlPSImI3hmMDNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTM4NCA5OTJ2LTU3NnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTE0IDAgLTIzIDlsLTI4OCAyODhxLTkgOSAtOSAyM3Q5IDIzbDI4OCAyODhxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDIyNHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTcyOHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE3MjhxMTMgMCAyMi41IC05LjUNCnQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OA0KcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbmRlbnRfcmlnaHQiIHVuaWNvZGU9IiYjeGYwM2M7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMzUyIDcwNHEwIC0xNCAtOSAtMjNsLTI4OCAtMjg4cS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djU3NnEwIDEzIDkuNSAyMi41dDIyLjUgOS41cTE0IDAgMjMgLTlsMjg4IC0yODhxOSAtOSA5IC0yM3pNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41DQp0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODgNCnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTM3NnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTcyOHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE3MjhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmFjZXRpbWVfdmlkZW8iIHVuaWNvZGU9IiYjeGYwM2Q7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc5MiAxMTg0di0xMDg4cTAgLTQyIC0zOSAtNTlxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDUgMTlsLTQwMyA0MDN2LTE2NnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNzA0cS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY3MDRxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtMTY1bDQwMyA0MDJxMTggMTkgNDUgMTlxMTIgMCAyNSAtNQ0KcTM5IC0xNyAzOSAtNTl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwaWN0dXJlIiB1bmljb2RlPSImI3hmMDNlOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTY0MCA5NjBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjY0IDU3NnYtNDQ4aC0xNDA4djE5MmwzMjAgMzIwbDE2MCAtMTYwbDUxMiA1MTJ6TTE3NjAgMTI4MGgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEyMTZxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MTIxNg0KcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXpNMTkyMCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGVuY2lsIiB1bmljb2RlPSImI3hmMDQwOyIgDQpkPSJNMzYzIDBsOTEgOTFsLTIzNSAyMzVsLTkxIC05MXYtMTA3aDEyOHYtMTI4aDEwN3pNODg2IDkyOHEwIDIyIC0yMiAyMnEtMTAgMCAtMTcgLTdsLTU0MiAtNTQycS03IC03IC03IC0xN3EwIC0yMiAyMiAtMjJxMTAgMCAxNyA3bDU0MiA1NDJxNyA3IDcgMTd6TTgzMiAxMTIwbDQxNiAtNDE2bC04MzIgLTgzMmgtNDE2djQxNnpNMTUxNSAxMDI0cTAgLTUzIC0zNyAtOTBsLTE2NiAtMTY2bC00MTYgNDE2bDE2NiAxNjVxMzYgMzggOTAgMzgNCnE1MyAwIDkxIC0zOGwyMzUgLTIzNHEzNyAtMzkgMzcgLTkxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWFwX21hcmtlciIgdW5pY29kZT0iJiN4ZjA0MTsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik03NjggODk2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTAyNCA4OTZxMCAtMTA5IC0zMyAtMTc5bC0zNjQgLTc3NHEtMTYgLTMzIC00Ny41IC01MnQtNjcuNSAtMTl0LTY3LjUgMTl0LTQ2LjUgNTJsLTM2NSA3NzRxLTMzIDcwIC0zMyAxNzlxMCAyMTIgMTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWRqdXN0IiB1bmljb2RlPSImI3hmMDQyOyIgDQpkPSJNNzY4IDk2djEwODhxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGludCIgdW5pY29kZT0iJiN4ZjA0MzsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik01MTIgMzg0cTAgMzYgLTIwIDY5cS0xIDEgLTE1LjUgMjIuNXQtMjUuNSAzOHQtMjUgNDR0LTIxIDUwLjVxLTQgMTYgLTIxIDE2dC0yMSAtMTZxLTcgLTIzIC0yMSAtNTAuNXQtMjUgLTQ0dC0yNS41IC0zOHQtMTUuNSAtMjIuNXEtMjAgLTMzIC0yMCAtNjlxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNTEycTAgLTIxMiAtMTUwIC0zNjJ0LTM2MiAtMTUwdC0zNjIgMTUwdC0xNTAgMzYyDQpxMCAxNDUgODEgMjc1cTYgOSA2Mi41IDkwLjV0MTAxIDE1MXQ5OS41IDE3OHQ4MyAyMDEuNXE5IDMwIDM0IDQ3dDUxIDE3dDUxLjUgLTE3dDMzLjUgLTQ3cTI4IC05MyA4MyAtMjAxLjV0OTkuNSAtMTc4dDEwMSAtMTUxdDYyLjUgLTkwLjVxODEgLTEyNyA4MSAtMjc1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZWRpdCIgdW5pY29kZT0iJiN4ZjA0NDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik04ODggMzUybDExNiAxMTZsLTE1MiAxNTJsLTExNiAtMTE2di01Nmg5NnYtOTZoNTZ6TTEzMjggMTA3MnEtMTYgMTYgLTMzIC0xbC0zNTAgLTM1MHEtMTcgLTE3IC0xIC0zM3QzMyAxbDM1MCAzNTBxMTcgMTcgMSAzM3pNMTQwOCA0Nzh2LTE5MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMg0KcTYzIDAgMTE3IC0yNXExNSAtNyAxOCAtMjNxMyAtMTcgLTkgLTI5bC00OSAtNDlxLTE0IC0xNCAtMzIgLThxLTIzIDYgLTQ1IDZoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjEyNnEwIDEzIDkgMjJsNjQgNjRxMTUgMTUgMzUgN3QyMCAtMjl6TTEzMTIgMTIxNmwyODggLTI4OGwtNjcyIC02NzJoLTI4OHYyODh6TTE3NTYgMTA4NGwtOTIgLTkyDQpsLTI4OCAyODhsOTIgOTJxMjggMjggNjggMjh0NjggLTI4bDE1MiAtMTUycTI4IC0yOCAyOCAtNjh0LTI4IC02OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNoYXJlIiB1bmljb2RlPSImI3hmMDQ1OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE0MDggNTQ3di0yNTlxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgyNTV2MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjVxMCAtMjcgLTI2IC0zMnEtNzcgLTI2IC0xMzMgLTYwcS0xMCAtNCAtMTYgLTRoLTExMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzINCnE2NiAwIDExMyA0N3Q0NyAxMTN2MjE0cTAgMTkgMTggMjlxMjggMTMgNTQgMzdxMTYgMTYgMzUgOHEyMSAtOSAyMSAtMjl6TTE2NDUgMTA0M2wtMzg0IC0zODRxLTE4IC0xOSAtNDUgLTE5cS0xMiAwIC0yNSA1cS0zOSAxNyAtMzkgNTl2MTkyaC0xNjBxLTMyMyAwIC00MzggLTEzMXEtMTE5IC0xMzcgLTc0IC00NzNxMyAtMjMgLTIwIC0zNHEtOCAtMiAtMTIgLTJxLTE2IDAgLTI2IDEzcS0xMCAxNCAtMjEgMzF0LTM5LjUgNjguNXQtNDkuNSA5OS41DQp0LTM4LjUgMTE0dC0xNy41IDEyMnEwIDQ5IDMuNSA5MXQxNCA5MHQyOCA4OHQ0NyA4MS41dDY4LjUgNzR0OTQuNSA2MS41dDEyNC41IDQ4LjV0MTU5LjUgMzAuNXQxOTYuNSAxMWgxNjB2MTkycTAgNDIgMzkgNTlxMTMgNSAyNSA1cTI2IDAgNDUgLTE5bDM4NCAtMzg0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrIiB1bmljb2RlPSImI3hmMDQ2OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE0MDggNjA2di0zMThxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzJxNjMgMCAxMTcgLTI1cTE1IC03IDE4IC0yM3EzIC0xNyAtOSAtMjlsLTQ5IC00OXEtMTAgLTEwIC0yMyAtMTBxLTMgMCAtOSAycS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMg0KcTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjI1NHEwIDEzIDkgMjJsNjQgNjRxMTAgMTAgMjMgMTBxNiAwIDEyIC0zcTIwIC04IDIwIC0yOXpNMTYzOSAxMDk1bC04MTQgLTgxNHEtMjQgLTI0IC01NyAtMjR0LTU3IDI0bC00MzAgNDMwcS0yNCAyNCAtMjQgNTd0MjQgNTdsMTEwIDExMHEyNCAyNCA1NyAyNHQ1NyAtMjRsMjYzIC0yNjNsNjQ3IDY0N3EyNCAyNCA1NyAyNHQ1NyAtMjRsMTEwIC0xMTANCnEyNCAtMjQgMjQgLTU3dC0yNCAtNTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtb3ZlIiB1bmljb2RlPSImI3hmMDQ3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgNjQwcTAgLTI2IC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djEyOGgtMzg0di0zODRoMTI4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloMTI4djM4NGgtMzg0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1DQp0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMzg0djM4NGgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEyOHYtMzg0aDM4NHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN0ZXBfYmFja3dhcmQiIHVuaWNvZGU9IiYjeGYwNDg7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNOTc5IDEzOTVxMTkgMTkgMzIgMTN0MTMgLTMydi0xNDcycTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS05IDkgLTEzIDE5di02NzhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNjc4cTQgMTAgMTMgMTl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmYXN0X2JhY2t3YXJkIiB1bmljb2RlPSImI3hmMDQ5OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NDcgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTcxMHEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNjc4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTY3OHE0IDEwIDEzIDE5bDcxMCA3MTANCnExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE0IDEwIDEzIDE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmFja3dhcmQiIHVuaWNvZGU9IiYjeGYwNGE7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS0xOSAxOSAtMTkgNDV0MTkgNDVsNzEwIDcxMHExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE0IDEwIDEzIDE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGxheSIgdW5pY29kZT0iJiN4ZjA0YjsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xMzg0IDYwOWwtMTMyOCAtNzM4cS0yMyAtMTMgLTM5LjUgLTN0LTE2LjUgMzZ2MTQ3MnEwIDI2IDE2LjUgMzZ0MzkuNSAtM2wxMzI4IC03MzhxMjMgLTEzIDIzIC0zMXQtMjMgLTMxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGF1c2UiIHVuaWNvZGU9IiYjeGYwNGM7IiANCmQ9Ik0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXpNNjQwIDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN0b3AiIHVuaWNvZGU9IiYjeGYwNGQ7IiANCmQ9Ik0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9yd2FyZCIgdW5pY29kZT0iJiN4ZjA0ZTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE5IC05IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxMTkgLTE5IDE5IC00NXQtMTkgLTQ1bC03MTAgLTcxMHEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjcxMHEtNCAtMTAgLTEzIC0xOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZhc3RfZm9yd2FyZCIgdW5pY29kZT0iJiN4ZjA1MDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE5IC05IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOSAtOSAxMyAtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3OHEtNCAtMTAgLTEzIC0xOWwtNzEwIC03MTANCnEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjcxMHEtNCAtMTAgLTEzIC0xOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN0ZXBfZm9yd2FyZCIgdW5pY29kZT0iJiN4ZjA1MTsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE5IC05IDEzIC0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDA4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2Njc4cS00IC0xMCAtMTMgLTE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZWplY3QiIHVuaWNvZGU9IiYjeGYwNTI7IiBob3Jpei1hZHYteD0iMTUzOCIgDQpkPSJNMTQgNTU3bDcxMCA3MTBxMTkgMTkgNDUgMTl0NDUgLTE5bDcxMCAtNzEwcTE5IC0xOSAxMyAtMzJ0LTMyIC0xM2gtMTQ3MnEtMjYgMCAtMzIgMTN0MTMgMzJ6TTE0NzMgMGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9sZWZ0IiB1bmljb2RlPSImI3hmMDUzOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTExNzEgMTIzNWwtNTMxIC01MzFsNTMxIC01MzFxMTkgLTE5IDE5IC00NXQtMTkgLTQ1bC0xNjYgLTE2NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC03NDIgNzQycS0xOSAxOSAtMTkgNDV0MTkgNDVsNzQyIDc0MnExOSAxOSA0NSAxOXQ0NSAtMTlsMTY2IC0xNjZxMTkgLTE5IDE5IC00NXQtMTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9yaWdodCIgdW5pY29kZT0iJiN4ZjA1NDsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMTA3IDY1OWwtNzQyIC03NDJxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMTY2IDE2NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDUzMSA1MzFsLTUzMSA1MzFxLTE5IDE5IC0xOSA0NXQxOSA0NWwxNjYgMTY2cTE5IDE5IDQ1IDE5dDQ1IC0xOWw3NDIgLTc0MnExOSAtMTkgMTkgLTQ1dC0xOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbHVzX3NpZ24iIHVuaWNvZGU9IiYjeGYwNTU7IiANCmQ9Ik0xMjE2IDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0yNTZ2MjU2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMjU2aC0yNTZxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgyNTZ2LTI1NnEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1djI1NmgyNTZxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41DQp0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im1pbnVzX3NpZ24iIHVuaWNvZGU9IiYjeGYwNTY7IiANCmQ9Ik0xMjE2IDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41DQp0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJlbW92ZV9zaWduIiB1bmljb2RlPSImI3hmMDU3OyIgDQpkPSJNMTE0OSA0MTRxMCAyNiAtMTkgNDVsLTE4MSAxODFsMTgxIDE4MXExOSAxOSAxOSA0NXEwIDI3IC0xOSA0NmwtOTAgOTBxLTE5IDE5IC00NiAxOXEtMjYgMCAtNDUgLTE5bC0xODEgLTE4MWwtMTgxIDE4MXEtMTkgMTkgLTQ1IDE5cS0yNyAwIC00NiAtMTlsLTkwIC05MHEtMTkgLTE5IC0xOSAtNDZxMCAtMjYgMTkgLTQ1bDE4MSAtMTgxbC0xODEgLTE4MXEtMTkgLTE5IC0xOSAtNDVxMCAtMjcgMTkgLTQ2bDkwIC05MHExOSAtMTkgNDYgLTE5DQpxMjYgMCA0NSAxOWwxODEgMTgxbDE4MSAtMTgxcTE5IC0xOSA0NSAtMTlxMjcgMCA0NiAxOWw5MCA5MHExOSAxOSAxOSA0NnpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJva19zaWduIiB1bmljb2RlPSImI3hmMDU4OyIgDQpkPSJNMTI4NCA4MDJxMCAyOCAtMTggNDZsLTkxIDkwcS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtNDA4IC00MDdsLTIyNiAyMjZxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC05MSAtOTBxLTE4IC0xOCAtMTggLTQ2cTAgLTI3IDE4IC00NWwzNjIgLTM2MnExOSAtMTkgNDUgLTE5cTI3IDAgNDYgMTlsNTQzIDU0M3ExOCAxOCAxOCA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwMw0KdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InF1ZXN0aW9uX3NpZ24iIHVuaWNvZGU9IiYjeGYwNTk7IiANCmQ9Ik04OTYgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3pNMTE1MiA4MzJxMCA4OCAtNTUuNSAxNjN0LTEzOC41IDExNnQtMTcwIDQxcS0yNDMgMCAtMzcxIC0yMTNxLTE1IC0yNCA4IC00MmwxMzIgLTEwMHE3IC02IDE5IC02cTE2IDAgMjUgMTJxNTMgNjggODYgOTJxMzQgMjQgODYgMjRxNDggMCA4NS41IC0yNnQzNy41IC01OQ0KcTAgLTM4IC0yMCAtNjF0LTY4IC00NXEtNjMgLTI4IC0xMTUuNSAtODYuNXQtNTIuNSAtMTI1LjV2LTM2cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3EwIDE5IDIxLjUgNDkuNXQ1NC41IDQ5LjVxMzIgMTggNDkgMjguNXQ0NiAzNXQ0NC41IDQ4dDI4IDYwLjV0MTIuNSA4MXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjUNCnQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZm9fc2lnbiIgdW5pY29kZT0iJiN4ZjA1YTsiIA0KZD0iTTEwMjQgMTYwdjE2MHEwIDE0IC05IDIzdC0yMyA5aC05NnY1MTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE2MHEwIC0xNCA5IC0yM3QyMyAtOWg5NnYtMzIwaC05NnEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xNjBxMCAtMTQgOSAtMjN0MjMgLTloNDQ4cTE0IDAgMjMgOXQ5IDIzek04OTYgMTA1NnYxNjBxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE2MHEwIC0xNCA5IC0yMw0KdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzY3JlZW5zaG90IiB1bmljb2RlPSImI3hmMDViOyIgDQpkPSJNMTE5NyA1MTJoLTEwOXEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEwOXEtMzIgMTA4IC0xMTIuNSAxODguNXQtMTg4LjUgMTEyLjV2LTEwOXEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEwOXEtMTA4IC0zMiAtMTg4LjUgLTExMi41dC0xMTIuNSAtMTg4LjVoMTA5cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTA5DQpxMzIgLTEwOCAxMTIuNSAtMTg4LjV0MTg4LjUgLTExMi41djEwOXEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEwOXExMDggMzIgMTg4LjUgMTEyLjV0MTEyLjUgMTg4LjV6TTE1MzYgNzA0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDNxLTM3IC0xNjEgLTE1NC41IC0yNzguNXQtMjc4LjUgLTE1NC41di0xNDNxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDMNCnEtMTYxIDM3IC0yNzguNSAxNTQuNXQtMTU0LjUgMjc4LjVoLTE0M3EtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0M3EzNyAxNjEgMTU0LjUgMjc4LjV0Mjc4LjUgMTU0LjV2MTQzcTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQzcTE2MSAtMzcgMjc4LjUgLTE1NC41dDE1NC41IC0yNzguNWgxNDNxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVtb3ZlX2NpcmNsZSIgdW5pY29kZT0iJiN4ZjA1YzsiIA0KZD0iTTEwOTcgNDU3bC0xNDYgLTE0NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMzcgMTM3bC0xMzcgLTEzN3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xNDYgMTQ2cS0xMCAxMCAtMTAgMjN0MTAgMjNsMTM3IDEzN2wtMTM3IDEzN3EtMTAgMTAgLTEwIDIzdDEwIDIzbDE0NiAxNDZxMTAgMTAgMjMgMTB0MjMgLTEwbDEzNyAtMTM3bDEzNyAxMzdxMTAgMTAgMjMgMTB0MjMgLTEwbDE0NiAtMTQ2cTEwIC0xMCAxMCAtMjN0LTEwIC0yMw0KbC0xMzcgLTEzN2wxMzcgLTEzN3ExMCAtMTAgMTAgLTIzdC0xMCAtMjN6TTEzMTIgNjQwcTAgMTQ4IC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3QtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNQ0KdDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im9rX2NpcmNsZSIgdW5pY29kZT0iJiN4ZjA1ZDsiIA0KZD0iTTExNzEgNzIzbC00MjIgLTQyMnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yOTQgMjk0cS0xOSAxOSAtMTkgNDV0MTkgNDVsMTAyIDEwMnExOSAxOSA0NSAxOXQ0NSAtMTlsMTQ3IC0xNDdsMjc1IDI3NXExOSAxOSA0NSAxOXQ0NSAtMTlsMTAyIC0xMDJxMTkgLTE5IDE5IC00NXQtMTkgLTQ1ek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTgNCnQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJiYW5fY2lyY2xlIiB1bmljb2RlPSImI3hmMDVlOyIgDQpkPSJNMTMxMiA2NDNxMCAxNjEgLTg3IDI5NWwtNzU0IC03NTNxMTM3IC04OSAyOTcgLTg5cTExMSAwIDIxMS41IDQzLjV0MTczLjUgMTE2LjV0MTE2IDE3NC41dDQzIDIxMi41ek0zMTMgMzQ0bDc1NSA3NTRxLTEzNSA5MSAtMzAwIDkxcS0xNDggMCAtMjczIC03M3QtMTk4IC0xOTl0LTczIC0yNzRxMCAtMTYyIDg5IC0yOTl6TTE1MzYgNjQzcTAgLTE1NyAtNjEgLTMwMHQtMTYzLjUgLTI0NnQtMjQ1IC0xNjR0LTI5OC41IC02MXQtMjk4LjUgNjENCnQtMjQ1IDE2NHQtMTYzLjUgMjQ2dC02MSAzMDB0NjEgMjk5LjV0MTYzLjUgMjQ1LjV0MjQ1IDE2NHQyOTguNSA2MXQyOTguNSAtNjF0MjQ1IC0xNjR0MTYzLjUgLTI0NS41dDYxIC0yOTkuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFycm93X2xlZnQiIHVuaWNvZGU9IiYjeGYwNjA7IiANCmQ9Ik0xNTM2IDY0MHYtMTI4cTAgLTUzIC0zMi41IC05MC41dC04NC41IC0zNy41aC03MDRsMjkzIC0yOTRxMzggLTM2IDM4IC05MHQtMzggLTkwbC03NSAtNzZxLTM3IC0zNyAtOTAgLTM3cS01MiAwIC05MSAzN2wtNjUxIDY1MnEtMzcgMzcgLTM3IDkwcTAgNTIgMzcgOTFsNjUxIDY1MHEzOCAzOCA5MSAzOHE1MiAwIDkwIC0zOGw3NSAtNzRxMzggLTM4IDM4IC05MXQtMzggLTkxbC0yOTMgLTI5M2g3MDRxNTIgMCA4NC41IC0zNy41DQp0MzIuNSAtOTAuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFycm93X3JpZ2h0IiB1bmljb2RlPSImI3hmMDYxOyIgDQpkPSJNMTQ3MiA1NzZxMCAtNTQgLTM3IC05MWwtNjUxIC02NTFxLTM5IC0zNyAtOTEgLTM3cS01MSAwIC05MCAzN2wtNzUgNzVxLTM4IDM4IC0zOCA5MXQzOCA5MWwyOTMgMjkzaC03MDRxLTUyIDAgLTg0LjUgMzcuNXQtMzIuNSA5MC41djEyOHEwIDUzIDMyLjUgOTAuNXQ4NC41IDM3LjVoNzA0bC0yOTMgMjk0cS0zOCAzNiAtMzggOTB0MzggOTBsNzUgNzVxMzggMzggOTAgMzhxNTMgMCA5MSAtMzhsNjUxIC02NTFxMzcgLTM1IDM3IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFycm93X3VwIiB1bmljb2RlPSImI3hmMDYyOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE2MTEgNTY1cTAgLTUxIC0zNyAtOTBsLTc1IC03NXEtMzggLTM4IC05MSAtMzhxLTU0IDAgLTkwIDM4bC0yOTQgMjkzdi03MDRxMCAtNTIgLTM3LjUgLTg0LjV0LTkwLjUgLTMyLjVoLTEyOHEtNTMgMCAtOTAuNSAzMi41dC0zNy41IDg0LjV2NzA0bC0yOTQgLTI5M3EtMzYgLTM4IC05MCAtMzh0LTkwIDM4bC03NSA3NXEtMzggMzggLTM4IDkwcTAgNTMgMzggOTFsNjUxIDY1MXEzNSAzNyA5MCAzN3E1NCAwIDkxIC0zN2w2NTEgLTY1MQ0KcTM3IC0zOSAzNyAtOTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19kb3duIiB1bmljb2RlPSImI3hmMDYzOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE2MTEgNzA0cTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTY1MSA2NTJxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDI5NCAtMjk0djcwNHEwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTcwNGwyOTQgMjk0cTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDc1IC03NXEzNyAtMzkgMzcgLTkxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hhcmVfYWx0IiB1bmljb2RlPSImI3hmMDY0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgODk2cTAgLTI2IC0xOSAtNDVsLTUxMiAtNTEycS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI1NmgtMjI0cS05OCAwIC0xNzUuNSAtNnQtMTU0IC0yMS41dC0xMzMgLTQyLjV0LTEwNS41IC02OS41dC04MCAtMTAxdC00OC41IC0xMzguNXQtMTcuNSAtMTgxcTAgLTU1IDUgLTEyM3EwIC02IDIuNSAtMjMuNXQyLjUgLTI2LjVxMCAtMTUgLTguNSAtMjV0LTIzLjUgLTEwcS0xNiAwIC0yOCAxN3EtNyA5IC0xMyAyMg0KdC0xMy41IDMwdC0xMC41IDI0cS0xMjcgMjg1IC0xMjcgNDUxcTAgMTk5IDUzIDMzM3ExNjIgNDAzIDg3NSA0MDNoMjI0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1MTIgLTUxMnExOSAtMTkgMTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVzaXplX2Z1bGwiIHVuaWNvZGU9IiYjeGYwNjU7IiANCmQ9Ik03NTUgNDgwcTAgLTEzIC0xMCAtMjNsLTMzMiAtMzMybDE0NCAtMTQ0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMTQ0IC0xNDRsMzMyIDMzMnExMCAxMCAyMyAxMHQyMyAtMTBsMTE0IC0xMTRxMTAgLTEwIDEwIC0yM3pNMTUzNiAxMzQ0di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMTQ0IDE0NGwtMzMyIC0zMzINCnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsMzMyIDMzMmwtMTQ0IDE0NHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXNpemVfc21hbGwiIHVuaWNvZGU9IiYjeGYwNjY7IiANCmQ9Ik03NjggNTc2di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMTQ0IDE0NGwtMzMyIC0zMzJxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTIzIDEyNDhxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1DQp0LTQ1IC0xOWgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDE0NCAtMTQ0bDMzMiAzMzJxMTAgMTAgMjMgMTB0MjMgLTEwbDExNCAtMTE0cTEwIC0xMCAxMCAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbHVzIiB1bmljb2RlPSImI3hmMDY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTE0MDggODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC00MTZ2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoNDE2djQxNnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh2LTQxNmg0MTZxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWludXMiIHVuaWNvZGU9IiYjeGYwNjg7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEyMTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFzdGVyaXNrIiB1bmljb2RlPSImI3hmMDY5OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE0ODIgNDg2cTQ2IC0yNiA1OS41IC03Ny41dC0xMi41IC05Ny41bC02NCAtMTEwcS0yNiAtNDYgLTc3LjUgLTU5LjV0LTk3LjUgMTIuNWwtMjY2IDE1M3YtMzA3cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTI4cS01MiAwIC05MCAzOHQtMzggOTB2MzA3bC0yNjYgLTE1M3EtNDYgLTI2IC05Ny41IC0xMi41dC03Ny41IDU5LjVsLTY0IDExMHEtMjYgNDYgLTEyLjUgOTcuNXQ1OS41IDc3LjVsMjY2IDE1NGwtMjY2IDE1NA0KcS00NiAyNiAtNTkuNSA3Ny41dDEyLjUgOTcuNWw2NCAxMTBxMjYgNDYgNzcuNSA1OS41dDk3LjUgLTEyLjVsMjY2IC0xNTN2MzA3cTAgNTIgMzggOTB0OTAgMzhoMTI4cTUyIDAgOTAgLTM4dDM4IC05MHYtMzA3bDI2NiAxNTNxNDYgMjYgOTcuNSAxMi41dDc3LjUgLTU5LjVsNjQgLTExMHEyNiAtNDYgMTIuNSAtOTcuNXQtNTkuNSAtNzcuNWwtMjY2IC0xNTR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJleGNsYW1hdGlvbl9zaWduIiB1bmljb2RlPSImI3hmMDZhOyIgDQpkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNODk2IDE2MXYxOTBxMCAxNCAtOSAyMy41dC0yMiA5LjVoLTE5MnEtMTMgMCAtMjMgLTEwdC0xMCAtMjN2LTE5MHEwIC0xMyAxMCAtMjN0MjMgLTEwaDE5Mg0KcTEzIDAgMjIgOS41dDkgMjMuNXpNODk0IDUwNWwxOCA2MjFxMCAxMiAtMTAgMThxLTEwIDggLTI0IDhoLTIyMHEtMTQgMCAtMjQgLThxLTEwIC02IC0xMCAtMThsMTcgLTYyMXEwIC0xMCAxMCAtMTcuNXQyNCAtNy41aDE4NXExNCAwIDIzLjUgNy41dDEwLjUgMTcuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImdpZnQiIHVuaWNvZGU9IiYjeGYwNmI7IiANCmQ9Ik05MjggMTgwdjU2djQ2OHYxOTJoLTMyMHYtMTkydi00Njh2LTU2cTAgLTI1IDE4IC0zOC41dDQ2IC0xMy41aDE5MnEyOCAwIDQ2IDEzLjV0MTggMzguNXpNNDcyIDEwMjRoMTk1bC0xMjYgMTYxcS0yNiAzMSAtNjkgMzFxLTQwIDAgLTY4IC0yOHQtMjggLTY4dDI4IC02OHQ2OCAtMjh6TTExNjAgMTEyMHEwIDQwIC0yOCA2OHQtNjggMjhxLTQzIDAgLTY5IC0zMWwtMTI1IC0xNjFoMTk0cTQwIDAgNjggMjh0MjggNjh6TTE1MzYgODY0di0zMjANCnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2MzIwcTAgMTQgOSAyM3QyMyA5aDQ0MHEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjVxMTA3IDAgMTY4IC03N2wxMjggLTE2NWwxMjggMTY1cTYxIDc3IDE2OCA3N3E5MyAwIDE1OC41IC02NS41dDY1LjUgLTE1OC41DQp0LTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNWg0NDBxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImxlYWYiIHVuaWNvZGU9IiYjeGYwNmM7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5cS0xNzIgMCAtMzE4IC00OS41dC0yNTkuNSAtMTM0dC0yMzUuNSAtMjE5LjVxLTE5IC0yMSAtMTkgLTQ1cTAgLTI2IDE5IC00NXQ0NSAtMTlxMjQgMCA0NSAxOXEyNyAyNCA3NCA3MXQ2NyA2NnExMzcgMTI0IDI2OC41IDE3NnQzMTMuNSA1MnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDEwMzBxMCAtOTUgLTIwIC0xOTNxLTQ2IC0yMjQgLTE4NC41IC0zODN0LTM1Ny41IC0yNjgNCnEtMjE0IC0xMDggLTQzOCAtMTA4cS0xNDggMCAtMjg2IDQ3cS0xNSA1IC04OCA0MnQtOTYgMzdxLTE2IDAgLTM5LjUgLTMydC00NSAtNzB0LTUyLjUgLTcwdC02MCAtMzJxLTQzIDAgLTYzLjUgMTcuNXQtNDUuNSA1OS41cS0yIDQgLTYgMTF0LTUuNSAxMHQtMyA5LjV0LTEuNSAxMy41cTAgMzUgMzEgNzMuNXQ2OCA2NS41dDY4IDU2dDMxIDQ4cTAgNCAtMTQgMzh0LTE2IDQ0cS05IDUxIC05IDEwNHEwIDExNSA0My41IDIyMHQxMTkgMTg0LjUNCnQxNzAuNSAxMzl0MjA0IDk1LjVxNTUgMTggMTQ1IDI1LjV0MTc5LjUgOXQxNzguNSA2dDE2My41IDI0dDExMy41IDU2LjVsMjkuNSAyOS41dDI5LjUgMjh0MjcgMjB0MzYuNSAxNnQ0My41IDQuNXEzOSAwIDcwLjUgLTQ2dDQ3LjUgLTExMnQyNCAtMTI0dDggLTk2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlyZSIgdW5pY29kZT0iJiN4ZjA2ZDsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xNDA4IC0xNjB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM0NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgODk2cTAgLTc4IC0yNC41IC0xNDR0LTY0IC0xMTIuNXQtODcuNSAtODh0LTk2IC03Ny41dC04Ny41IC03MnQtNjQgLTgxLjV0LTI0LjUgLTk2LjVxMCAtOTYgNjcgLTIyNGwtNCAxbDEgLTENCnEtOTAgNDEgLTE2MCA4M3QtMTM4LjUgMTAwdC0xMTMuNSAxMjIuNXQtNzIuNSAxNTAuNXQtMjcuNSAxODRxMCA3OCAyNC41IDE0NHQ2NCAxMTIuNXQ4Ny41IDg4dDk2IDc3LjV0ODcuNSA3MnQ2NCA4MS41dDI0LjUgOTYuNXEwIDk0IC02NiAyMjRsMyAtMWwtMSAxcTkwIC00MSAxNjAgLTgzdDEzOC41IC0xMDB0MTEzLjUgLTEyMi41dDcyLjUgLTE1MC41dDI3LjUgLTE4NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImV5ZV9vcGVuIiB1bmljb2RlPSImI3hmMDZlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE2NjQgNTc2cS0xNTIgMjM2IC0zODEgMzUzcTYxIC0xMDQgNjEgLTIyNXEwIC0xODUgLTEzMS41IC0zMTYuNXQtMzE2LjUgLTEzMS41dC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTMzIC0yMDUgMzMzLjUgLTMyNi41dDQzNC41IC0xMjEuNXQ0MzQuNSAxMjEuNXQzMzMuNSAzMjYuNXpNOTQ0IDk2MHEwIDIwIC0xNCAzNHQtMzQgMTRxLTEyNSAwIC0yMTQuNSAtODkuNQ0KdC04OS41IC0yMTQuNXEwIC0yMCAxNCAtMzR0MzQgLTE0dDM0IDE0dDE0IDM0cTAgODYgNjEgMTQ3dDE0NyA2MXEyMCAwIDM0IDE0dDE0IDM0ek0xNzkyIDU3NnEwIC0zNCAtMjAgLTY5cS0xNDAgLTIzMCAtMzc2LjUgLTM2OC41dC00OTkuNSAtMTM4LjV0LTQ5OS41IDEzOXQtMzc2LjUgMzY4cS0yMCAzNSAtMjAgNjl0MjAgNjlxMTQwIDIyOSAzNzYuNSAzNjh0NDk5LjUgMTM5dDQ5OS41IC0xMzl0Mzc2LjUgLTM2OHEyMCAtMzUgMjAgLTY5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXllX2Nsb3NlIiB1bmljb2RlPSImI3hmMDcwOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTU1NSAyMDFsNzggMTQxcS04NyA2MyAtMTM2IDE1OXQtNDkgMjAzcTAgMTIxIDYxIDIyNXEtMjI5IC0xMTcgLTM4MSAtMzUzcTE2NyAtMjU4IDQyNyAtMzc1ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41dC04OS41IC0yMTQuNXEwIC0yMCAxNCAtMzR0MzQgLTE0dDM0IDE0dDE0IDM0cTAgODYgNjEgMTQ3dDE0NyA2MXEyMCAwIDM0IDE0dDE0IDM0ek0xMzA3IDExNTFxMCAtNyAtMSAtOQ0KcS0xMDYgLTE4OSAtMzE2IC01Njd0LTMxNSAtNTY2bC00OSAtODlxLTEwIC0xNiAtMjggLTE2cS0xMiAwIC0xMzQgNzBxLTE2IDEwIC0xNiAyOHEwIDEyIDQ0IDg3cS0xNDMgNjUgLTI2My41IDE3M3QtMjA4LjUgMjQ1cS0yMCAzMSAtMjAgNjl0MjAgNjlxMTUzIDIzNSAzODAgMzcxdDQ5NiAxMzZxODkgMCAxODAgLTE3bDU0IDk3cTEwIDE2IDI4IDE2cTUgMCAxOCAtNnQzMSAtMTUuNXQzMyAtMTguNXQzMS41IC0xOC41dDE5LjUgLTExLjUNCnExNiAtMTAgMTYgLTI3ek0xMzQ0IDcwNHEwIC0xMzkgLTc5IC0yNTMuNXQtMjA5IC0xNjQuNWwyODAgNTAycTggLTQ1IDggLTg0ek0xNzkyIDU3NnEwIC0zNSAtMjAgLTY5cS0zOSAtNjQgLTEwOSAtMTQ1cS0xNTAgLTE3MiAtMzQ3LjUgLTI2N3QtNDE5LjUgLTk1bDc0IDEzMnEyMTIgMTggMzkyLjUgMTM3dDMwMS41IDMwN3EtMTE1IDE3OSAtMjgyIDI5NGw2MyAxMTJxOTUgLTY0IDE4Mi41IC0xNTN0MTQ0LjUgLTE4NHEyMCAtMzQgMjAgLTY5eg0KIiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ3YXJuaW5nX3NpZ24iIHVuaWNvZGU9IiYjeGYwNzE7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTAyNCAxNjF2MTkwcTAgMTQgLTkuNSAyMy41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjMuNXYtMTkwcTAgLTE0IDkuNSAtMjMuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIzLjV6TTEwMjIgNTM1bDE4IDQ1OXEwIDEyIC0xMCAxOXEtMTMgMTEgLTI0IDExaC0yMjBxLTExIDAgLTI0IC0xMXEtMTAgLTcgLTEwIC0yMWwxNyAtNDU3cTAgLTEwIDEwIC0xNi41dDI0IC02LjVoMTg1DQpxMTQgMCAyMy41IDYuNXQxMC41IDE2LjV6TTEwMDggMTQ2OWw3NjggLTE0MDhxMzUgLTYzIC0yIC0xMjZxLTE3IC0yOSAtNDYuNSAtNDZ0LTYzLjUgLTE3aC0xNTM2cS0zNCAwIC02My41IDE3dC00Ni41IDQ2cS0zNyA2MyAtMiAxMjZsNzY4IDE0MDhxMTcgMzEgNDcgNDl0NjUgMTh0NjUgLTE4dDQ3IC00OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InBsYW5lIiB1bmljb2RlPSImI3hmMDcyOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTEzNzYgMTM3NnE0NCAtNTIgMTIgLTE0OHQtMTA4IC0xNzJsLTE2MSAtMTYxbDE2MCAtNjk2cTUgLTE5IC0xMiAtMzNsLTEyOCAtOTZxLTcgLTYgLTE5IC02cS00IDAgLTcgMXEtMTUgMyAtMjEgMTZsLTI3OSA1MDhsLTI1OSAtMjU5bDUzIC0xOTRxNSAtMTcgLTggLTMxbC05NiAtOTZxLTkgLTkgLTIzIC05aC0ycS0xNSAyIC0yNCAxM2wtMTg5IDI1MmwtMjUyIDE4OXEtMTEgNyAtMTMgMjNxLTEgMTMgOSAyNWw5NiA5N3E5IDkgMjMgOQ0KcTYgMCA4IC0xbDE5NCAtNTNsMjU5IDI1OWwtNTA4IDI3OXEtMTQgOCAtMTcgMjRxLTIgMTYgOSAyN2wxMjggMTI4cTE0IDEzIDMwIDhsNjY1IC0xNTlsMTYwIDE2MHE3NiA3NiAxNzIgMTA4dDE0OCAtMTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYWxlbmRhciIgdW5pY29kZT0iJiN4ZjA3MzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xMjggLTEyOGgyODh2Mjg4aC0yODh2LTI4OHpNNDgwIC0xMjhoMzIwdjI4OGgtMzIwdi0yODh6TTEyOCAyMjRoMjg4djMyMGgtMjg4di0zMjB6TTQ4MCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6TTEyOCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek00ODAgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6DQpNNTEyIDEwODh2Mjg4cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yODhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjQ4IDIyNGgyODh2MzIwaC0yODh2LTMyMHpNODY0IDYwOGgzMjB2Mjg4aC0zMjB2LTI4OHpNMTI0OCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTEyODAgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NA0KcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMjg4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMTUydi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3DQpoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyYW5kb20iIHVuaWNvZGU9IiYjeGYwNzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNjY2IDEwNTVxLTYwIC05MiAtMTM3IC0yNzNxLTIyIDQ1IC0zNyA3Mi41dC00MC41IDYzLjV0LTUxIDU2LjV0LTYzIDM1dC04MS41IDE0LjVoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTI1MCAwIDQxMCAtMjI1ek0xNzkyIDI1NnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEtMzIgMCAtODUgLTAuNXQtODEgLTF0LTczIDENCnQtNzEgNXQtNjQgMTAuNXQtNjMgMTguNXQtNTggMjguNXQtNTkgNDB0LTU1IDUzLjV0LTU2IDY5LjVxNTkgOTMgMTM2IDI3M3EyMiAtNDUgMzcgLTcyLjV0NDAuNSAtNjMuNXQ1MSAtNTYuNXQ2MyAtMzV0ODEuNSAtMTQuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6TTE3OTIgMTE1MnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41DQp2MTkyaC0yNTZxLTQ4IDAgLTg3IC0xNXQtNjkgLTQ1dC01MSAtNjEuNXQtNDUgLTc3LjVxLTMyIC02MiAtNzggLTE3MXEtMjkgLTY2IC00OS41IC0xMTF0LTU0IC0xMDV0LTY0IC0xMDB0LTc0IC04M3QtOTAgLTY4LjV0LTEwNi41IC00MnQtMTI4IC0xNi41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHE0OCAwIDg3IDE1dDY5IDQ1dDUxIDYxLjV0NDUgNzcuNXEzMiA2MiA3OCAxNzFxMjkgNjYgNDkuNSAxMTENCnQ1NCAxMDV0NjQgMTAwdDc0IDgzdDkwIDY4LjV0MTA2LjUgNDJ0MTI4IDE2LjVoMjU2djE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudCIgdW5pY29kZT0iJiN4ZjA3NTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDY0MHEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTcwIDAgLTE0NSA4cS0xOTggLTE3NSAtNDYwIC0yNDJxLTQ5IC0xNCAtMTE0IC0yMnEtMTcgLTIgLTMwLjUgOXQtMTcuNSAyOXYxcS0zIDQgLTAuNSAxMnQyIDEwdDQuNSA5LjVsNiA5dDcgOC41dDggOXE3IDggMzEgMzQuNXQzNC41IDM4dDMxIDM5LjV0MzIuNSA1MXQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxDQpxMCAxMzAgNzEgMjQ4LjV0MTkxIDIwNC41dDI4NiAxMzYuNXQzNDggNTAuNXEyNDQgMCA0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im1hZ25ldCIgdW5pY29kZT0iJiN4ZjA3NjsiIA0KZD0iTTE1MzYgNzA0di0xMjhxMCAtMjAxIC05OC41IC0zNjJ0LTI3NCAtMjUxLjV0LTM5NS41IC05MC41dC0zOTUuNSA5MC41dC0yNzQgMjUxLjV0LTk4LjUgMzYydjEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC01MiAyMy41IC05MHQ1My41IC01N3Q3MSAtMzB0NjQgLTEzdDQ0IC0ydDQ0IDJ0NjQgMTN0NzEgMzB0NTMuNSA1N3QyMy41IDkwdjEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NA0KcTI2IDAgNDUgLTE5dDE5IC00NXpNNTEyIDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgMTM0NHYtMzg0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fdXAiIHVuaWNvZGU9IiYjeGYwNzc7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTY4MyAyMDVsLTE2NiAtMTY1cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTUzMSA1MzFsLTUzMSAtNTMxcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTE2NiAxNjVxLTE5IDE5IC0xOSA0NS41dDE5IDQ1LjVsNzQyIDc0MXExOSAxOSA0NSAxOXQ0NSAtMTlsNzQyIC03NDFxMTkgLTE5IDE5IC00NS41dC0xOSAtNDUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fZG93biIgdW5pY29kZT0iJiN4ZjA3ODsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjgzIDcyOGwtNzQyIC03NDFxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNzQyIDc0MXEtMTkgMTkgLTE5IDQ1LjV0MTkgNDUuNWwxNjYgMTY1cTE5IDE5IDQ1IDE5dDQ1IC0xOWw1MzEgLTUzMWw1MzEgNTMxcTE5IDE5IDQ1IDE5dDQ1IC0xOWwxNjYgLTE2NXExOSAtMTkgMTkgLTQ1LjV0LTE5IC00NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmV0d2VldCIgdW5pY29kZT0iJiN4ZjA3OTsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xMjgwIDMycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS04IDAgLTEzLjUgMnQtOSA3dC01LjUgOHQtMyAxMS41dC0xIDExLjV2MTN2MTF2MTYwdjQxNmgtMTkycS0yNiAwIC00NSAxOXQtMTkgNDVxMCAyNCAxNSA0MWwzMjAgMzg0cTE5IDIyIDQ5IDIydDQ5IC0yMmwzMjAgLTM4NHExNSAtMTcgMTUgLTQxcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkydi0zODRoNTc2cTE2IDAgMjUgLTExbDE2MCAtMTkycTcgLTEwIDcgLTIxDQp6TTE5MjAgNDQ4cTAgLTI0IC0xNSAtNDFsLTMyMCAtMzg0cS0yMCAtMjMgLTQ5IC0yM3QtNDkgMjNsLTMyMCAzODRxLTE1IDE3IC0xNSA0MXEwIDI2IDE5IDQ1dDQ1IDE5aDE5MnYzODRoLTU3NnEtMTYgMCAtMjUgMTJsLTE2MCAxOTJxLTcgOSAtNyAyMHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHE4IDAgMTMuNSAtMnQ5IC03dDUuNSAtOHQzIC0xMS41dDEgLTExLjV2LTEzdi0xMXYtMTYwdi00MTZoMTkycTI2IDAgNDUgLTE5dDE5IC00NXoNCiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hvcHBpbmdfY2FydCIgdW5pY29kZT0iJiN4ZjA3YTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik02NDAgMHEwIC01MiAtMzggLTkwdC05MCAtMzh0LTkwIDM4dC0zOCA5MHQzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwek0xNTM2IDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4dC05MCAzOHQtMzggOTB0MzggOTB0OTAgMzh0OTAgLTM4dDM4IC05MHpNMTY2NCAxMDg4di01MTJxMCAtMjQgLTE2LjUgLTQyLjV0LTQwLjUgLTIxLjVsLTEwNDQgLTEyMnExMyAtNjAgMTMgLTcwcTAgLTE2IC0yNCAtNjRoOTIwcTI2IDAgNDUgLTE5dDE5IC00NQ0KdC0xOSAtNDV0LTQ1IC0xOWgtMTAyNHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTEgOCAzMS41dDE2IDM2dDIxLjUgNDB0MTUuNSAyOS41bC0xNzcgODIzaC0yMDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZxMTYgMCAyOC41IC02LjV0MTkuNSAtMTUuNXQxMyAtMjQuNXQ4IC0yNnQ1LjUgLTI5LjV0NC41IC0yNmgxMjAxcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZvbGRlcl9jbG9zZSIgdW5pY29kZT0iJiN4ZjA3YjsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjY0IDkyOHYtNzA0cTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0xMjE2cS05MiAwIC0xNTggNjZ0LTY2IDE1OHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9sZGVyX29wZW4iIHVuaWNvZGU9IiYjeGYwN2M7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNMTg3OSA1ODRxMCAtMzEgLTMxIC02NmwtMzM2IC0zOTZxLTQzIC01MSAtMTIwLjUgLTg2LjV0LTE0My41IC0zNS41aC0xMDg4cS0zNCAwIC02MC41IDEzdC0yNi41IDQzcTAgMzEgMzEgNjZsMzM2IDM5NnE0MyA1MSAxMjAuNSA4Ni41dDE0My41IDM1LjVoMTA4OHEzNCAwIDYwLjUgLTEzdDI2LjUgLTQzek0xNTM2IDkyOHYtMTYwaC04MzJxLTk0IDAgLTE5NyAtNDcuNXQtMTY0IC0xMTkuNWwtMzM3IC0zOTZsLTUgLTZxMCA0IC0wLjUgMTIuNQ0KdC0wLjUgMTIuNXY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNTQ0cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVzaXplX3ZlcnRpY2FsIiB1bmljb2RlPSImI3hmMDdkOyIgaG9yaXotYWR2LXg9Ijc2OCIgDQpkPSJNNzA0IDEyMTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjh2LTEwMjRoMTI4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloMTI4djEwMjRoLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDI1NiAyNTZxMTkgMTkgNDUgMTl0NDUgLTE5bDI1NiAtMjU2cTE5IC0xOSAxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXNpemVfaG9yaXpvbnRhbCIgdW5pY29kZT0iJiN4ZjA3ZTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDY0MHEwIC0yNiAtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYxMjhoLTEwMjR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMTAyNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJhcl9jaGFydCIgdW5pY29kZT0iJiN4ZjA4MDsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik02NDAgNjQwdi01MTJoLTI1NnY1MTJoMjU2ek0xMDI0IDExNTJ2LTEwMjRoLTI1NnYxMDI0aDI1NnpNMjA0OCAwdi0xMjhoLTIwNDh2MTUzNmgxMjh2LTE0MDhoMTkyMHpNMTQwOCA4OTZ2LTc2OGgtMjU2djc2OGgyNTZ6TTE3OTIgMTI4MHYtMTE1MmgtMjU2djExNTJoMjU2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHdpdHRlcl9zaWduIiB1bmljb2RlPSImI3hmMDgxOyIgDQpkPSJNMTI4MCA5MjZxLTU2IC0yNSAtMTIxIC0zNHE2OCA0MCA5MyAxMTdxLTY1IC0zOCAtMTM0IC01MXEtNjEgNjYgLTE1MyA2NnEtODcgMCAtMTQ4LjUgLTYxLjV0LTYxLjUgLTE0OC41cTAgLTI5IDUgLTQ4cS0xMjkgNyAtMjQyIDY1dC0xOTIgMTU1cS0yOSAtNTAgLTI5IC0xMDZxMCAtMTE0IDkxIC0xNzVxLTQ3IDEgLTEwMCAyNnYtMnEwIC03NSA1MCAtMTMzLjV0MTIzIC03Mi41cS0yOSAtOCAtNTEgLThxLTEzIDAgLTM5IDQNCnEyMSAtNjMgNzQuNSAtMTA0dDEyMS41IC00MnEtMTE2IC05MCAtMjYxIC05MHEtMjYgMCAtNTAgM3ExNDggLTk0IDMyMiAtOTRxMTEyIDAgMjEwIDM1LjV0MTY4IDk1dDEyMC41IDEzN3Q3NSAxNjJ0MjQuNSAxNjguNXEwIDE4IC0xIDI3cTYzIDQ1IDEwNSAxMDl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41DQp0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmYWNlYm9va19zaWduIiB1bmljb2RlPSImI3hmMDgyOyIgDQpkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTE4OHY1OTVoMTk5bDMwIDIzMmgtMjI5djE0OHEwIDU2IDIzLjUgODR0OTEuNSAyOGwxMjIgMXYyMDdxLTYzIDkgLTE3OCA5cS0xMzYgMCAtMjE3LjUgLTgwdC04MS41IC0yMjZ2LTE3MWgtMjAwdi0yMzJoMjAwdi01OTVoLTUzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwDQpxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhbWVyYV9yZXRybyIgdW5pY29kZT0iJiN4ZjA4MzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik05MjggNzA0cTAgMTQgLTkgMjN0LTIzIDlxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTNxMCAtMTQgOSAtMjN0MjMgLTl0MjMgOXQ5IDIzcTAgNDAgMjggNjh0NjggMjhxMTQgMCAyMyA5dDkgMjN6TTExNTIgNTc0cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6TTEyOCAwaDE1MzZ2MTI4aC0xNTM2di0xMjh6TTEyODAgNTc0cTAgMTU5IC0xMTIuNSAyNzEuNQ0KdC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXpNMjU2IDEyMTZoMzg0djEyOGgtMzg0di0xMjh6TTEyOCAxMDI0aDE1MzZ2MTE4djEzOGgtODI4bC02NCAtMTI4aC02NDR2LTEyOHpNMTc5MiAxMjgwdi0xMjgwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNTM2cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXYxMjgwDQpxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDE1MzZxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJrZXkiIHVuaWNvZGU9IiYjeGYwODQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODMyIDEwMjRxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZxMCAtNDIgMTkgLTgzcS00MSAxOSAtODMgMTlxLTgwIDAgLTEzNiAtNTZ0LTU2IC0xMzZ0NTYgLTEzNnQxMzYgLTU2dDEzNiA1NnQ1NiAxMzZxMCA0MiAtMTkgODNxNDEgLTE5IDgzIC0xOXE4MCAwIDEzNiA1NnQ1NiAxMzZ6TTE2ODMgMzIwcTAgLTE3IC00OSAtNjZ0LTY2IC00OXEtOSAwIC0yOC41IDE2dC0zNi41IDMzdC0zOC41IDQwdC0yNC41IDI2DQpsLTk2IC05NmwyMjAgLTIyMHEyOCAtMjggMjggLTY4cTAgLTQyIC0zOSAtODF0LTgxIC0zOXEtNDAgMCAtNjggMjhsLTY3MSA2NzFxLTE3NiAtMTMxIC0zNjUgLTEzMXEtMTYzIDAgLTI2NS41IDEwMi41dC0xMDIuNSAyNjUuNXEwIDE2MCA5NSAzMTN0MjQ4IDI0OHQzMTMgOTVxMTYzIDAgMjY1LjUgLTEwMi41dDEwMi41IC0yNjUuNXEwIC0xODkgLTEzMSAtMzY1bDM1NSAtMzU1bDk2IDk2cS0zIDMgLTI2IDI0LjV0LTQwIDM4LjV0LTMzIDM2LjUNCnQtMTYgMjguNXEwIDE3IDQ5IDY2dDY2IDQ5cTEzIDAgMjMgLTEwcTYgLTYgNDYgLTQ0LjV0ODIgLTc5LjV0ODYuNSAtODZ0NzMgLTc4dDI4LjUgLTQxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29ncyIgdW5pY29kZT0iJiN4ZjA4NTsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik04OTYgNjQwcTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTY2NCAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTY2NCAxMTUycTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTBxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41DQp0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTI4MCA3MzF2LTE4NXEwIC0xMCAtNyAtMTkuNXQtMTYgLTEwLjVsLTE1NSAtMjRxLTExIC0zNSAtMzIgLTc2cTM0IC00OCA5MCAtMTE1cTcgLTExIDcgLTIwcTAgLTEyIC03IC0xOXEtMjMgLTMwIC04Mi41IC04OS41dC03OC41IC01OS41cS0xMSAwIC0yMSA3bC0xMTUgOTBxLTM3IC0xOSAtNzcgLTMxcS0xMSAtMTA4IC0yMyAtMTU1cS03IC0yNCAtMzAgLTI0aC0xODZxLTExIDAgLTIwIDcuNXQtMTAgMTcuNQ0KbC0yMyAxNTNxLTM0IDEwIC03NSAzMWwtMTE4IC04OXEtNyAtNyAtMjAgLTdxLTExIDAgLTIxIDhxLTE0NCAxMzMgLTE0NCAxNjBxMCA5IDcgMTlxMTAgMTQgNDEgNTN0NDcgNjFxLTIzIDQ0IC0zNSA4MmwtMTUyIDI0cS0xMCAxIC0xNyA5LjV0LTcgMTkuNXYxODVxMCAxMCA3IDE5LjV0MTYgMTAuNWwxNTUgMjRxMTEgMzUgMzIgNzZxLTM0IDQ4IC05MCAxMTVxLTcgMTEgLTcgMjBxMCAxMiA3IDIwcTIyIDMwIDgyIDg5dDc5IDU5cTExIDAgMjEgLTcNCmwxMTUgLTkwcTM0IDE4IDc3IDMycTExIDEwOCAyMyAxNTRxNyAyNCAzMCAyNGgxODZxMTEgMCAyMCAtNy41dDEwIC0xNy41bDIzIC0xNTNxMzQgLTEwIDc1IC0zMWwxMTggODlxOCA3IDIwIDdxMTEgMCAyMSAtOHExNDQgLTEzMyAxNDQgLTE2MHEwIC04IC03IC0xOXEtMTIgLTE2IC00MiAtNTR0LTQ1IC02MHEyMyAtNDggMzQgLTgybDE1MiAtMjNxMTAgLTIgMTcgLTEwLjV0NyAtMTkuNXpNMTkyMCAxOTh2LTE0MHEwIC0xNiAtMTQ5IC0zMQ0KcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjhxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjANCnQ1OSAzNHQzMCAxNnE4IDAgNDYgLTQ2LjV0NTIgLTY3LjVxMjAgMiAzMCAydDMwIC0ycTUxIDcxIDkyIDExMmw2IDJxNCAwIDEyNCAtNzBxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxek0xOTIwIDEyMjJ2LTE0MHEwIC0xNiAtMTQ5IC0zMXEtMTIgLTI3IC0zMCAtNTJxNTEgLTExMyA1MSAtMTM4cTAgLTQgLTQgLTdxLTEyMiAtNzEgLTEyNCAtNzFxLTggMCAtNDYgNDd0LTUyIDY4DQpxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjB0NTkgMzR0MzAgMTZxOCAwIDQ2IC00Ni41dDUyIC02Ny41cTIwIDIgMzAgMnQzMCAtMnE1MSA3MSA5MiAxMTJsNiAycTQgMCAxMjQgLTcwDQpxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudHMiIHVuaWNvZGU9IiYjeGYwODY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTQwOCA3NjhxMCAtMTM5IC05NCAtMjU3dC0yNTYuNSAtMTg2LjV0LTM1My41IC02OC41cS04NiAwIC0xNzYgMTZxLTEyNCAtODggLTI3OCAtMTI4cS0zNiAtOSAtODYgLTE2aC0zcS0xMSAwIC0yMC41IDh0LTExLjUgMjFxLTEgMyAtMSA2LjV0MC41IDYuNXQyIDZsMi41IDV0My41IDUuNXQ0IDV0NC41IDV0NCA0LjVxNSA2IDIzIDI1dDI2IDI5LjV0MjIuNSAyOXQyNSAzOC41dDIwLjUgNDRxLTEyNCA3MiAtMTk1IDE3N3QtNzEgMjI0DQpxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41dDM1My41IDY4LjV0MzUzLjUgLTY4LjV0MjU2LjUgLTE4Ni41dDk0IC0yNTd6TTE3OTIgNTEycTAgLTEyMCAtNzEgLTIyNC41dC0xOTUgLTE3Ni41cTEwIC0yNCAyMC41IC00NHQyNSAtMzguNXQyMi41IC0yOXQyNiAtMjkuNXQyMyAtMjVxMSAtMSA0IC00LjV0NC41IC01dDQgLTV0My41IC01LjVsMi41IC01dDIgLTZ0MC41IC02LjV0LTEgLTYuNXEtMyAtMTQgLTEzIC0yMnQtMjIgLTcNCnEtNTAgNyAtODYgMTZxLTE1NCA0MCAtMjc4IDEyOHEtOTAgLTE2IC0xNzYgLTE2cS0yNzEgMCAtNDcyIDEzMnE1OCAtNCA4OCAtNHExNjEgMCAzMDkgNDV0MjY0IDEyOXExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRodW1ic191cF9hbHQiIHVuaWNvZGU9IiYjeGYwODc7IiANCmQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtMzUycTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OCAtMzIgMTQ1dC0xMjggNDdxLTI2IC0yNiAtMzggLTg1dC0zMC41IC0xMjUuNXQtNTkuNSAtMTA5LjVxLTIyIC0yMyAtNzcgLTkxcS00IC01IC0yMyAtMzB0LTMxLjUgLTQxdC0zNC41IC00Mi41DQp0LTQwIC00NHQtMzguNSAtMzUuNXQtNDAgLTI3dC0zNS41IC05aC0zMnYtNjQwaDMycTEzIDAgMzEuNSAtM3QzMyAtNi41dDM4IC0xMXQzNSAtMTEuNXQzNS41IC0xMi41dDI5IC0xMC41cTIxMSAtNzMgMzQyIC03M2gxMjFxMTkyIDAgMTkyIDE2N3EwIDI2IC01IDU2cTMwIDE2IDQ3LjUgNTIuNXQxNy41IDczLjV0LTE4IDY5cTUzIDUwIDUzIDExOXEwIDI1IC0xMCA1NS41dC0yNSA0Ny41cTMyIDEgNTMuNSA0N3QyMS41IDgxek0xNTM2IDc2OQ0KcTAgLTg5IC00OSAtMTYzcTkgLTMzIDkgLTY5cTAgLTc3IC0zOCAtMTQ0cTMgLTIxIDMgLTQzcTAgLTEwMSAtNjAgLTE3OHExIC0xMzkgLTg1IC0yMTkuNXQtMjI3IC04MC41aC0zNmgtOTNxLTk2IDAgLTE4OS41IDIyLjV0LTIxNi41IDY1LjVxLTExNiA0MCAtMTM4IDQwaC0yODhxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djY0MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoMjc0cTM2IDI0IDEzNyAxNTVxNTggNzUgMTA3IDEyOA0KcTI0IDI1IDM1LjUgODUuNXQzMC41IDEyNi41dDYyIDEwOHEzOSAzNyA5MCAzN3E4NCAwIDE1MSAtMzIuNXQxMDIgLTEwMS41dDM1IC0xODZxMCAtOTMgLTQ4IC0xOTJoMTc2cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRodW1ic19kb3duX2FsdCIgdW5pY29kZT0iJiN4ZjA4ODsiIA0KZD0iTTI1NiAxMDg4cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA1MTJxMCAzNSAtMjEuNSA4MXQtNTMuNSA0N3ExNSAxNyAyNSA0Ny41dDEwIDU1LjVxMCA2OSAtNTMgMTE5cTE4IDMxIDE4IDY5cTAgMzcgLTE3LjUgNzMuNXQtNDcuNSA1Mi41cTUgMzAgNSA1NnEwIDg1IC00OSAxMjZ0LTEzNiA0MWgtMTI4cS0xMzEgMCAtMzQyIC03M3EtNSAtMiAtMjkgLTEwLjUNCnQtMzUuNSAtMTIuNXQtMzUgLTExLjV0LTM4IC0xMXQtMzMgLTYuNXQtMzEuNSAtM2gtMzJ2LTY0MGgzMnExNiAwIDM1LjUgLTl0NDAgLTI3dDM4LjUgLTM1LjV0NDAgLTQ0dDM0LjUgLTQyLjV0MzEuNSAtNDF0MjMgLTMwcTU1IC02OCA3NyAtOTFxNDEgLTQzIDU5LjUgLTEwOS41dDMwLjUgLTEyNS41dDM4IC04NXE5NiAwIDEyOCA0N3QzMiAxNDVxMCA1OSAtNDggMTYwLjV0LTQ4IDE1OS41aDM1MnE1MCAwIDg5IDM4LjV0MzkgODkuNXoNCk0xNTM2IDUxMXEwIC0xMDMgLTc2IC0xNzl0LTE4MCAtNzZoLTE3NnE0OCAtOTkgNDggLTE5MnEwIC0xMTggLTM1IC0xODZxLTM1IC02OSAtMTAyIC0xMDEuNXQtMTUxIC0zMi41cS01MSAwIC05MCAzN3EtMzQgMzMgLTU0IDgydC0yNS41IDkwLjV0LTE3LjUgODQuNXQtMzEgNjRxLTQ4IDUwIC0xMDcgMTI3cS0xMDEgMTMxIC0xMzcgMTU1aC0yNzRxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djY0MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjUNCmgyODhxMjIgMCAxMzggNDBxMTI4IDQ0IDIyMyA2NnQyMDAgMjJoMTEycTE0MCAwIDIyNi41IC03OXQ4NS41IC0yMTZ2LTVxNjAgLTc3IDYwIC0xNzhxMCAtMjIgLTMgLTQzcTM4IC02NyAzOCAtMTQ0cTAgLTM2IC05IC02OXE0OSAtNzMgNDkgLTE2M3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJfaGFsZiIgdW5pY29kZT0iJiN4ZjA4OTsiIGhvcml6LWFkdi14PSI4OTYiIA0KZD0iTTgzMiAxNTA0di0xMzM5bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoZWFydF9lbXB0eSIgdW5pY29kZT0iJiN4ZjA4YTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjY0IDk0MHEwIDgxIC0yMS41IDE0M3QtNTUgOTguNXQtODEuNSA1OS41dC05NCAzMXQtOTggOHQtMTEyIC0yNS41dC0xMTAuNSAtNjR0LTg2LjUgLTcydC02MCAtNjEuNXEtMTggLTIyIC00OSAtMjJ0LTQ5IDIycS0yNCAyOCAtNjAgNjEuNXQtODYuNSA3MnQtMTEwLjUgNjR0LTExMiAyNS41dC05OCAtOHQtOTQgLTMxdC04MS41IC01OS41dC01NSAtOTguNXQtMjEuNSAtMTQzcTAgLTE2OCAxODcgLTM1NWw1ODEgLTU2MGw1ODAgNTU5DQpxMTg4IDE4OCAxODggMzU2ek0xNzkyIDk0MHEwIC0yMjEgLTIyOSAtNDUwbC02MjMgLTYwMHEtMTggLTE4IC00NCAtMTh0LTQ0IDE4bC02MjQgNjAycS0xMCA4IC0yNy41IDI2dC01NS41IDY1LjV0LTY4IDk3LjV0LTUzLjUgMTIxdC0yMy41IDEzOHEwIDIyMCAxMjcgMzQ0dDM1MSAxMjRxNjIgMCAxMjYuNSAtMjEuNXQxMjAgLTU4dDk1LjUgLTY4LjV0NzYgLTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNXQxMjAgNTh0MTI2LjUgMjEuNQ0KcTIyNCAwIDM1MSAtMTI0dDEyNyAtMzQ0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2lnbm91dCIgdW5pY29kZT0iJiN4ZjA4YjsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik02NDAgOTZxMCAtNCAxIC0yMHQwLjUgLTI2LjV0LTMgLTIzLjV0LTEwIC0xOS41dC0yMC41IC02LjVoLTMyMHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2NzA0cTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41cTAgLTQgMSAtMjB0MC41IC0yNi41dC0zIC0yMy41dC0xMCAtMTkuNXQtMjAuNSAtNi41aC0zMjBxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTcwNA0KcTAgLTY2IDQ3IC0xMTN0MTEzIC00N2gyODhoMTFoMTN0MTEuNSAtMXQxMS41IC0zdDggLTUuNXQ3IC05dDIgLTEzLjV6TTE1NjggNjQwcTAgLTI2IC0xOSAtNDVsLTU0NCAtNTQ0cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI4OGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloNDQ4djI4OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1NDQgLTU0NHExOSAtMTkgMTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlua2VkaW5fc2lnbiIgdW5pY29kZT0iJiN4ZjA4YzsiIA0KZD0iTTIzNyAxMjJoMjMxdjY5NGgtMjMxdi02OTR6TTQ4MyAxMDMwcS0xIDUyIC0zNiA4NnQtOTMgMzR0LTk0LjUgLTM0dC0zNi41IC04NnEwIC01MSAzNS41IC04NS41dDkyLjUgLTM0LjVoMXE1OSAwIDk1IDM0LjV0MzYgODUuNXpNMTA2OCAxMjJoMjMxdjM5OHEwIDE1NCAtNzMgMjMzdC0xOTMgNzlxLTEzNiAwIC0yMDkgLTExN2gydjEwMWgtMjMxcTMgLTY2IDAgLTY5NGgyMzF2Mzg4cTAgMzggNyA1NnExNSAzNSA0NSA1OS41dDc0IDI0LjUNCnExMTYgMCAxMTYgLTE1N3YtMzcxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InB1c2hwaW4iIHVuaWNvZGU9IiYjeGYwOGQ7IiBob3Jpei1hZHYteD0iMTE1MiIgDQpkPSJNNDgwIDY3MnY0NDhxMCAxNCAtOSAyM3QtMjMgOXQtMjMgLTl0LTkgLTIzdi00NDhxMCAtMTQgOSAtMjN0MjMgLTl0MjMgOXQ5IDIzek0xMTUyIDMyMHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQyOWwtNTEgLTQ4M3EtMiAtMTIgLTEwLjUgLTIwLjV0LTIwLjUgLTguNWgtMXEtMjcgMCAtMzIgMjdsLTc2IDQ4NWgtNDA0cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAxMjMgNzguNSAyMjEuNXQxNzcuNSA5OC41djUxMnEtNTIgMCAtOTAgMzgNCnQtMzggOTB0MzggOTB0OTAgMzhoNjQwcTUyIDAgOTAgLTM4dDM4IC05MHQtMzggLTkwdC05MCAtMzh2LTUxMnE5OSAwIDE3Ny41IC05OC41dDc4LjUgLTIyMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXh0ZXJuYWxfbGluayIgdW5pY29kZT0iJiN4ZjA4ZTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNDA4IDYwOHYtMzIwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoNzA0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTcwNHEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjMyMA0KcTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTQ3MnYtNTEycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTE3NiAxNzZsLTY1MiAtNjUycS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTExNCAxMTRxLTEwIDEwIC0xMCAyM3QxMCAyM2w2NTIgNjUybC0xNzYgMTc2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNpZ25pbiIgdW5pY29kZT0iJiN4ZjA5MDsiIA0KZD0iTTExODQgNjQwcTAgLTI2IC0xOSAtNDVsLTU0NCAtNTQ0cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI4OGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloNDQ4djI4OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1NDQgLTU0NHExOSAtMTkgMTkgLTQ1ek0xNTM2IDk5MnYtNzA0cTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC0zMjBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNQ0KcTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y3MDRxMCA2NiAtNDcgMTEzdC0xMTMgNDdoLTI4OGgtMTFoLTEzdC0xMS41IDF0LTExLjUgM3QtOCA1LjV0LTcgOXQtMiAxMy41cTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHJvcGh5IiB1bmljb2RlPSImI3hmMDkxOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTQ1OCA2NTNxLTc0IDE2MiAtNzQgMzcxaC0yNTZ2LTk2cTAgLTc4IDk0LjUgLTE2MnQyMzUuNSAtMTEzek0xNTM2IDkyOHY5NmgtMjU2cTAgLTIwOSAtNzQgLTM3MXExNDEgMjkgMjM1LjUgMTEzdDk0LjUgMTYyek0xNjY0IDEwNTZ2LTEyOHEwIC03MSAtNDEuNSAtMTQzdC0xMTIgLTEzMHQtMTczIC05Ny41dC0yMTUuNSAtNDQuNXEtNDIgLTU0IC05NSAtOTVxLTM4IC0zNCAtNTIuNSAtNzIuNXQtMTQuNSAtODkuNXEwIC01NCAzMC41IC05MQ0KdDk3LjUgLTM3cTc1IDAgMTMzLjUgLTQ1LjV0NTguNSAtMTE0LjV2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDY5IDU4LjUgMTE0LjV0MTMzLjUgNDUuNXE2NyAwIDk3LjUgMzd0MzAuNSA5MXEwIDUxIC0xNC41IDg5LjV0LTUyLjUgNzIuNXEtNTMgNDEgLTk1IDk1cS0xMTMgNSAtMjE1LjUgNDQuNXQtMTczIDk3LjV0LTExMiAxMzB0LTQxLjUgMTQzdjEyOHEwIDQwIDI4IDY4dDY4IDI4aDI4OHY5Ng0KcTAgNjYgNDcgMTEzdDExMyA0N2g1NzZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDI4OHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnaXRodWJfc2lnbiIgdW5pY29kZT0iJiN4ZjA5MjsiIA0KZD0iTTUxOSAzMzZxNCA2IC0zIDEzcS05IDcgLTE0IDJxLTQgLTYgMyAtMTNxOSAtNyAxNCAtMnpNNDkxIDM3N3EtNSA3IC0xMiA0cS02IC00IDAgLTEycTcgLTggMTIgLTVxNiA0IDAgMTN6TTQ1MCA0MTdxMiA0IC01IDhxLTcgMiAtOCAtMnEtMyAtNSA0IC04cTggLTIgOSAyek00NzEgMzk0cTIgMSAxLjUgNC41dC0zLjUgNS41cS02IDcgLTEwIDN0MSAtMTFxNiAtNiAxMSAtMnpNNTU3IDMxOXEyIDcgLTkgMTFxLTkgMyAtMTMgLTQNCnEtMiAtNyA5IC0xMXE5IC0zIDEzIDR6TTU5OSAzMTZxMCA4IC0xMiA4cS0xMCAwIC0xMCAtOHQxMSAtOHQxMSA4ek02MzggMzIzcS0yIDcgLTEzIDV0LTkgLTlxMiAtOCAxMiAtNnQxMCAxMHpNMTI4MCA2NDBxMCAyMTIgLTE1MCAzNjJ0LTM2MiAxNTB0LTM2MiAtMTUwdC0xNTAgLTM2MnEwIC0xNjcgOTggLTMwMC41dDI1MiAtMTg1LjVxMTggLTMgMjYuNSA1dDguNSAyMHEwIDUyIC0xIDk1cS02IC0xIC0xNS41IC0yLjV0LTM1LjUgLTJ0LTQ4IDQNCnQtNDMuNSAyMHQtMjkuNSA0MS41cS0yMyA1OSAtNTcgNzRxLTIgMSAtNC41IDMuNWwtOCA4dC03IDkuNXQ0IDcuNXQxOS41IDMuNXE2IDAgMTUgLTJ0MzAgLTE1LjV0MzMgLTM1LjVxMTYgLTI4IDM3LjUgLTQydDQzLjUgLTE0dDM4IDMuNXQzMCA5LjVxNyA0NyAzMyA2OXEtNDkgNiAtODYgMTguNXQtNzMgMzl0LTU1LjUgNzZ0LTE5LjUgMTE5LjVxMCA3OSA1MyAxMzdxLTI0IDYyIDUgMTM2cTE5IDYgNTQuNSAtNy41dDYwLjUgLTI5LjVsMjYgLTE2DQpxNTggMTcgMTI4IDE3dDEyOCAtMTdxMTEgNyAyOC41IDE4dDU1LjUgMjZ0NTcgOXEyOSAtNzQgNSAtMTM2cTUzIC01OCA1MyAtMTM3cTAgLTU3IC0xNCAtMTAwLjV0LTM1LjUgLTcwdC01My41IC00NC41dC02Mi41IC0yNnQtNjguNSAtMTJxMzUgLTMxIDM1IC05NXEwIC00MCAtMC41IC04OXQtMC41IC01MXEwIC0xMiA4LjUgLTIwdDI2LjUgLTVxMTU0IDUyIDI1MiAxODUuNXQ5OCAzMDAuNXpNMTUzNiAxMTIwdi05NjANCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVwbG9hZF9hbHQiIHVuaWNvZGU9IiYjeGYwOTM7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTI4MCA2NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE1MzYgNjRxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDI4OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTQ3MnEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDQyN3EyMSAtNTYgNzAuNSAtOTINCnQxMTAuNSAtMzZoMjU2cTYxIDAgMTEwLjUgMzZ0NzAuNSA5Mmg0MjdxNDAgMCA2OCAtMjh0MjggLTY4ek0xMzM5IDkzNnEtMTcgLTQwIC01OSAtNDBoLTI1NnYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4aC0yNTZxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWw0NDggNDQ4cTE4IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHEzMSAtMzAgMTQgLTY5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGVtb24iIHVuaWNvZGU9IiYjeGYwOTQ7IiANCmQ9Ik0xNDA3IDcxMHEwIDQ0IC03IDExMy41dC0xOCA5Ni41cS0xMiAzMCAtMTcgNDR0LTkgMzYuNXQtNCA0OC41cTAgMjMgNSA2OC41dDUgNjcuNXEwIDM3IC0xMCA1NXEtNCAxIC0xMyAxcS0xOSAwIC01OCAtNC41dC01OSAtNC41cS02MCAwIC0xNzYgMjR0LTE3NSAyNHEtNDMgMCAtOTQuNSAtMTEuNXQtODUgLTIzLjV0LTg5LjUgLTM0cS0xMzcgLTU0IC0yMDIgLTEwM3EtOTYgLTczIC0xNTkuNSAtMTg5LjV0LTg4IC0yMzZ0LTI0LjUgLTI0OC41DQpxMCAtNDAgMTIuNSAtMTIwdDEyLjUgLTEyMXEwIC0yMyAtMTEgLTY2LjV0LTExIC02NS41dDEyIC0zNi41dDM0IC0xNC41cTI0IDAgNzIuNSAxMXQ3My41IDExcTU3IDAgMTY5LjUgLTE1LjV0MTY5LjUgLTE1LjVxMTgxIDAgMjg0IDM2cTEyOSA0NSAyMzUuNSAxNTIuNXQxNjYgMjQ1LjV0NTkuNSAyNzV6TTE1MzUgNzEycTAgLTE2NSAtNzAgLTMyNy41dC0xOTYgLTI4OHQtMjgxIC0xODAuNXEtMTI0IC00NCAtMzI2IC00NA0KcS01NyAwIC0xNzAgMTQuNXQtMTY5IDE0LjVxLTI0IDAgLTcyLjUgLTE0LjV0LTczLjUgLTE0LjVxLTczIDAgLTEyMy41IDU1LjV0LTUwLjUgMTI4LjVxMCAyNCAxMSA2OHQxMSA2N3EwIDQwIC0xMi41IDEyMC41dC0xMi41IDEyMS41cTAgMTExIDE4IDIxNy41dDU0LjUgMjA5LjV0MTAwLjUgMTk0dDE1MCAxNTZxNzggNTkgMjMyIDEyMHExOTQgNzggMzE2IDc4cTYwIDAgMTc1LjUgLTI0dDE3My41IC0yNHExOSAwIDU3IDV0NTggNQ0KcTgxIDAgMTE4IC01MC41dDM3IC0xMzQuNXEwIC0yMyAtNSAtNjh0LTUgLTY4cTAgLTEzIDIgLTI1dDMuNSAtMTYuNXQ3LjUgLTIwLjV0OCAtMjBxMTYgLTQwIDI1IC0xMTguNXQ5IC0xMzYuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InBob25lIiB1bmljb2RlPSImI3hmMDk1OyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTE0MDggMjk2cTAgLTI3IC0xMCAtNzAuNXQtMjEgLTY4LjVxLTIxIC01MCAtMTIyIC0xMDZxLTk0IC01MSAtMTg2IC01MXEtMjcgMCAtNTMgMy41dC01Ny41IDEyLjV0LTQ3IDE0LjV0LTU1LjUgMjAuNXQtNDkgMThxLTk4IDM1IC0xNzUgODNxLTEyNyA3OSAtMjY0IDIxNnQtMjE2IDI2NHEtNDggNzcgLTgzIDE3NXEtMyA5IC0xOCA0OXQtMjAuNSA1NS41dC0xNC41IDQ3dC0xMi41IDU3LjV0LTMuNSA1M3EwIDkyIDUxIDE4Ng0KcTU2IDEwMSAxMDYgMTIycTI1IDExIDY4LjUgMjF0NzAuNSAxMHExNCAwIDIxIC0zcTE4IC02IDUzIC03NnExMSAtMTkgMzAgLTU0dDM1IC02My41dDMxIC01My41cTMgLTQgMTcuNSAtMjV0MjEuNSAtMzUuNXQ3IC0yOC41cTAgLTIwIC0yOC41IC01MHQtNjIgLTU1dC02MiAtNTN0LTI4LjUgLTQ2cTAgLTkgNSAtMjIuNXQ4LjUgLTIwLjV0MTQgLTI0dDExLjUgLTE5cTc2IC0xMzcgMTc0IC0yMzV0MjM1IC0xNzRxMiAtMSAxOSAtMTEuNXQyNCAtMTQNCnQyMC41IC04LjV0MjIuNSAtNXExOCAwIDQ2IDI4LjV0NTMgNjJ0NTUgNjJ0NTAgMjguNXExNCAwIDI4LjUgLTd0MzUuNSAtMjEuNXQyNSAtMTcuNXEyNSAtMTUgNTMuNSAtMzF0NjMuNSAtMzV0NTQgLTMwcTcwIC0zNSA3NiAtNTNxMyAtNyAzIC0yMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrX2VtcHR5IiB1bmljb2RlPSImI3hmMDk2OyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTExMjAgMTI4MGgtODMycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2ODMycTAgNjYgLTQ3IDExM3QtMTEzIDQ3ek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMg0KcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm9va21hcmtfZW1wdHkiIHVuaWNvZGU9IiYjeGYwOTc7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNMTE1MiAxMjgwaC0xMDI0di0xMjQybDQyMyA0MDZsODkgODVsODkgLTg1bDQyMyAtNDA2djEyNDJ6TTExNjQgMTQwOHEyMyAwIDQ0IC05cTMzIC0xMyA1Mi41IC00MXQxOS41IC02MnYtMTI4OXEwIC0zNCAtMTkuNSAtNjJ0LTUyLjUgLTQxcS0xOSAtOCAtNDQgLThxLTQ4IDAgLTgzIDMybC00NDEgNDI0bC00NDEgLTQyNHEtMzYgLTMzIC04MyAtMzNxLTIzIDAgLTQ0IDlxLTMzIDEzIC01Mi41IDQxdC0xOS41IDYydjEyODkNCnEwIDM0IDE5LjUgNjJ0NTIuNSA0MXEyMSA5IDQ0IDloMTA0OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InBob25lX3NpZ24iIHVuaWNvZGU9IiYjeGYwOTg7IiANCmQ9Ik0xMjgwIDM0M3EwIDExIC0yIDE2dC0xOCAxNi41dC00MC41IDI1dC00Ny41IDI2LjV0LTQ1LjUgMjV0LTI4LjUgMTVxLTUgMyAtMTkgMTN0LTI1IDE1dC0yMSA1cS0xNSAwIC0zNi41IC0yMC41dC0zOS41IC00NXQtMzguNSAtNDV0LTMzLjUgLTIwLjVxLTcgMCAtMTYuNSAzLjV0LTE1LjUgNi41dC0xNyA5LjV0LTE0IDguNXEtOTkgNTUgLTE3MCAxMjYuNXQtMTI3IDE3MC41cS0yIDMgLTguNSAxNHQtOS41IDE3dC02LjUgMTUuNQ0KdC0zLjUgMTYuNXEwIDEzIDIwLjUgMzMuNXQ0NSAzOC41dDQ1IDM5LjV0MjAuNSAzNi41cTAgMTAgLTUgMjF0LTE1IDI1dC0xMyAxOXEtMyA2IC0xNSAyOC41dC0yNSA0NS41dC0yNi41IDQ3LjV0LTI1IDQwLjV0LTE2LjUgMTh0LTE2IDJxLTQ4IDAgLTEwMSAtMjJxLTQ2IC0yMSAtODAgLTk0LjV0LTM0IC0xMzAuNXEwIC0xNiAyLjUgLTM0dDUgLTMwLjV0OSAtMzN0MTAgLTI5LjV0MTIuNSAtMzN0MTEgLTMwcTYwIC0xNjQgMjE2LjUgLTMyMC41DQp0MzIwLjUgLTIxNi41cTYgLTIgMzAgLTExdDMzIC0xMi41dDI5LjUgLTEwdDMzIC05dDMwLjUgLTV0MzQgLTIuNXE1NyAwIDEzMC41IDM0dDk0LjUgODBxMjIgNTMgMjIgMTAxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoNCiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHdpdHRlciIgdW5pY29kZT0iJiN4ZjA5OTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjIwIDExMjhxLTY3IC05OCAtMTYyIC0xNjdxMSAtMTQgMSAtNDJxMCAtMTMwIC0zOCAtMjU5LjV0LTExNS41IC0yNDguNXQtMTg0LjUgLTIxMC41dC0yNTggLTE0NnQtMzIzIC01NC41cS0yNzEgMCAtNDk2IDE0NXEzNSAtNCA3OCAtNHEyMjUgMCA0MDEgMTM4cS0xMDUgMiAtMTg4IDY0LjV0LTExNCAxNTkuNXEzMyAtNSA2MSAtNXE0MyAwIDg1IDExcS0xMTIgMjMgLTE4NS41IDExMS41dC03My41IDIwNS41djRxNjggLTM4IDE0NiAtNDENCnEtNjYgNDQgLTEwNSAxMTV0LTM5IDE1NHEwIDg4IDQ0IDE2M3ExMjEgLTE0OSAyOTQuNSAtMjM4LjV0MzcxLjUgLTk5LjVxLTggMzggLTggNzRxMCAxMzQgOTQuNSAyMjguNXQyMjguNSA5NC41cTE0MCAwIDIzNiAtMTAycTEwOSAyMSAyMDUgNzhxLTM3IC0xMTUgLTE0MiAtMTc4cTkzIDEwIDE4NiA1MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZhY2Vib29rIiB1bmljb2RlPSImI3hmMDlhOyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTk1OSAxNTI0di0yNjRoLTE1N3EtODYgMCAtMTE2IC0zNnQtMzAgLTEwOHYtMTg5aDI5M2wtMzkgLTI5NmgtMjU0di03NTloLTMwNnY3NTloLTI1NXYyOTZoMjU1djIxOHEwIDE4NiAxMDQgMjg4LjV0Mjc3IDEwMi41cTE0NyAwIDIyOCAtMTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnaXRodWIiIHVuaWNvZGU9IiYjeGYwOWI7IiANCmQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41cTAgLTI1MSAtMTQ2LjUgLTQ1MS41dC0zNzguNSAtMjc3LjVxLTI3IC01IC00MCA3dC0xMyAzMHEwIDMgMC41IDc2LjV0MC41IDEzNC41cTAgOTcgLTUyIDE0MnE1NyA2IDEwMi41IDE4dDk0IDM5dDgxIDY2LjV0NTMgMTA1dDIwLjUgMTUwLjVxMCAxMTkgLTc5IDIwNnEzNyA5MSAtOCAyMDRxLTI4IDkgLTgxIC0xMXQtOTIgLTQ0bC0zOCAtMjQNCnEtOTMgMjYgLTE5MiAyNnQtMTkyIC0yNnEtMTYgMTEgLTQyLjUgMjd0LTgzLjUgMzguNXQtODUgMTMuNXEtNDUgLTExMyAtOCAtMjA0cS03OSAtODcgLTc5IC0yMDZxMCAtODUgMjAuNSAtMTUwdDUyLjUgLTEwNXQ4MC41IC02N3Q5NCAtMzl0MTAyLjUgLTE4cS0zOSAtMzYgLTQ5IC0xMDNxLTIxIC0xMCAtNDUgLTE1dC01NyAtNXQtNjUuNSAyMS41dC01NS41IDYyLjVxLTE5IDMyIC00OC41IDUydC00OS41IDI0bC0yMCAzcS0yMSAwIC0yOSAtNC41DQp0LTUgLTExLjV0OSAtMTR0MTMgLTEybDcgLTVxMjIgLTEwIDQzLjUgLTM4dDMxLjUgLTUxbDEwIC0yM3ExMyAtMzggNDQgLTYxLjV0NjcgLTMwdDY5LjUgLTd0NTUuNSAzLjVsMjMgNHEwIC0zOCAwLjUgLTg4LjV0MC41IC01NC41cTAgLTE4IC0xMyAtMzB0LTQwIC03cS0yMzIgNzcgLTM3OC41IDI3Ny41dC0xNDYuNSA0NTEuNXEwIDIwOSAxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0yOTEgMzA1cTMgNyAtNyAxMg0KcS0xMCAzIC0xMyAtMnEtMyAtNyA3IC0xMnE5IC02IDEzIDJ6TTMyMiAyNzFxNyA1IC0yIDE2cS0xMCA5IC0xNiAzcS03IC01IDIgLTE2cTEwIC0xMCAxNiAtM3pNMzUyIDIyNnE5IDcgMCAxOXEtOCAxMyAtMTcgNnEtOSAtNSAwIC0xOHQxNyAtN3pNMzk0IDE4NHE4IDggLTQgMTlxLTEyIDEyIC0yMCAzcS05IC04IDQgLTE5cTEyIC0xMiAyMCAtM3pNNDUxIDE1OXEzIDExIC0xMyAxNnEtMTUgNCAtMTkgLTd0MTMgLTE1cTE1IC02IDE5IDZ6DQpNNTE0IDE1NHEwIDEzIC0xNyAxMXEtMTYgMCAtMTYgLTExcTAgLTEzIDE3IC0xMXExNiAwIDE2IDExek01NzIgMTY0cS0yIDExIC0xOCA5cS0xNiAtMyAtMTQgLTE1dDE4IC04dDE0IDE0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5sb2NrIiB1bmljb2RlPSImI3hmMDljOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTE2NjQgOTYwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTU3NnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djU3NnEwIDQwIDI4IDY4dDY4IDI4aDY3MnYxOTJxMCAxODUgMTMxLjUgMzE2LjV0MzE2LjUgMTMxLjUNCnQzMTYuNSAtMTMxLjV0MTMxLjUgLTMxNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY3JlZGl0X2NhcmQiIHVuaWNvZGU9IiYjeGYwOWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNMTc2MCAxNDA4cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwek0xNjAgMTI4MHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTIyNGgxNjY0djIyNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE2MDB6TTE3NjAgMHExMyAwIDIyLjUgOS41dDkuNSAyMi41djYwOGgtMTY2NHYtNjA4DQpxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwek0yNTYgMTI4djEyOGgyNTZ2LTEyOGgtMjU2ek02NDAgMTI4djEyOGgzODR2LTEyOGgtMzg0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icnNzIiB1bmljb2RlPSImI3hmMDllOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTM4NCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek04OTYgNjlxMiAtMjggLTE3IC00OHEtMTggLTIxIC00NyAtMjFoLTEzNXEtMjUgMCAtNDMgMTYuNXQtMjAgNDEuNXEtMjIgMjI5IC0xODQuNSAzOTEuNXQtMzkxLjUgMTg0LjVxLTI1IDIgLTQxLjUgMjB0LTE2LjUgNDN2MTM1cTAgMjkgMjEgNDdxMTcgMTcgNDMgMTdoNXExNjAgLTEzIDMwNiAtODAuNQ0KdDI1OSAtMTgxLjVxMTE0IC0xMTMgMTgxLjUgLTI1OXQ4MC41IC0zMDZ6TTE0MDggNjdxMiAtMjcgLTE4IC00N3EtMTggLTIwIC00NiAtMjBoLTE0M3EtMjYgMCAtNDQuNSAxNy41dC0xOS41IDQyLjVxLTEyIDIxNSAtMTAxIDQwOC41dC0yMzEuNSAzMzZ0LTMzNiAyMzEuNXQtNDA4LjUgMTAycS0yNSAxIC00Mi41IDE5LjV0LTE3LjUgNDMuNXYxNDNxMCAyOCAyMCA0NnExOCAxOCA0NCAxOGgzcTI2MiAtMTMgNTAxLjUgLTEyMHQ0MjUuNSAtMjk0DQpxMTg3IC0xODYgMjk0IC00MjUuNXQxMjAgLTUwMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGRkIiB1bmljb2RlPSImI3hmMGEwOyIgDQpkPSJNMTA0MCAzMjBxMCAtMzMgLTIzLjUgLTU2LjV0LTU2LjUgLTIzLjV0LTU2LjUgMjMuNXQtMjMuNSA1Ni41dDIzLjUgNTYuNXQ1Ni41IDIzLjV0NTYuNSAtMjMuNXQyMy41IC01Ni41ek0xMjk2IDMyMHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6TTE0MDggMTYwdjMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUNCmgtMTIxNnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTMyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEyMTZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc4IDY0MGgxMTgwbC0xNTcgNDgycS00IDEzIC0xNiAyMS41dC0yNiA4LjVoLTc4MnEtMTQgMCAtMjYgLTguNXQtMTYgLTIxLjV6TTE1MzYgNDgwdi0zMjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEyMTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjMyMHEwIDI1IDE2IDc1DQpsMTk3IDYwNnExNyA1MyA2MyA4NnQxMDEgMzNoNzgycTU1IDAgMTAxIC0zM3Q2MyAtODZsMTk3IC02MDZxMTYgLTUwIDE2IC03NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJ1bGxob3JuIiB1bmljb2RlPSImI3hmMGExOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE2NjQgODk2cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41di0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS00MTcgMzQ3IC04MTIgMzgwcS01OCAtMTkgLTkxIC02NnQtMzEgLTEwMC41dDQwIC05Mi41cS0yMCAtMzMgLTIzIC02NS41dDYgLTU4dDMzLjUgLTU1dDQ4IC01MHQ2MS41IC01MC41cS0yOSAtNTggLTExMS41IC04M3QtMTY4LjUgLTExLjV0LTEzMiA1NS41cS03IDIzIC0yOS41IDg3LjUNCnQtMzIgOTQuNXQtMjMgODl0LTE1IDEwMXQzLjUgOTguNXQyMiAxMTAuNWgtMTIycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxOTJxMCA2NiA0NyAxMTN0MTEzIDQ3aDQ4MHE0MzUgMCA4OTYgMzg0cTUyIDAgOTAgLTM4dDM4IC05MHYtMzg0ek0xNTM2IDI5MnY5NTRxLTM5NCAtMzAyIC03NjggLTM0M3YtMjcwcTM3NyAtNDIgNzY4IC0zNDF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJiZWxsIiB1bmljb2RlPSImI3hmMGEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTkxMiAtMTYwcTAgMTYgLTE2IDE2cS01OSAwIC0xMDEuNSA0Mi41dC00Mi41IDEwMS41cTAgMTYgLTE2IDE2dC0xNiAtMTZxMCAtNzMgNTEuNSAtMTI0LjV0MTI0LjUgLTUxLjVxMTYgMCAxNiAxNnpNMjQ2IDEyOGgxMzAwcS0yNjYgMzAwIC0yNjYgODMycTAgNTEgLTI0IDEwNXQtNjkgMTAzdC0xMjEuNSA4MC41dC0xNjkuNSAzMS41dC0xNjkuNSAtMzEuNXQtMTIxLjUgLTgwLjV0LTY5IC0xMDN0LTI0IC0xMDVxMCAtNTMyIC0yNjYgLTgzMnoNCk0xNzI4IDEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHE1MCA0MiA5MSA4OHQ4NSAxMTkuNXQ3NC41IDE1OC41dDUwIDIwNnQxOS41IDI2MHEwIDE1MiAxMTcgMjgyLjV0MzA3IDE1OC41cS04IDE5IC04IDM5cTAgNDAgMjggNjh0NjggMjh0NjggLTI4dDI4IC02OHEwIC0yMCAtOCAtMzlxMTkwIC0yOCAzMDcgLTE1OC41DQp0MTE3IC0yODIuNXEwIC0xMzkgMTkuNSAtMjYwdDUwIC0yMDZ0NzQuNSAtMTU4LjV0ODUgLTExOS41dDkxIC04OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNlcnRpZmljYXRlIiB1bmljb2RlPSImI3hmMGEzOyIgDQpkPSJNMTM3NiA2NDBsMTM4IC0xMzVxMzAgLTI4IDIwIC03MHEtMTIgLTQxIC01MiAtNTFsLTE4OCAtNDhsNTMgLTE4NnExMiAtNDEgLTE5IC03MHEtMjkgLTMxIC03MCAtMTlsLTE4NiA1M2wtNDggLTE4OHEtMTAgLTQwIC01MSAtNTJxLTEyIC0yIC0xOSAtMnEtMzEgMCAtNTEgMjJsLTEzNSAxMzhsLTEzNSAtMTM4cS0yOCAtMzAgLTcwIC0yMHEtNDEgMTEgLTUxIDUybC00OCAxODhsLTE4NiAtNTNxLTQxIC0xMiAtNzAgMTlxLTMxIDI5IC0xOSA3MA0KbDUzIDE4NmwtMTg4IDQ4cS00MCAxMCAtNTIgNTFxLTEwIDQyIDIwIDcwbDEzOCAxMzVsLTEzOCAxMzVxLTMwIDI4IC0yMCA3MHExMiA0MSA1MiA1MWwxODggNDhsLTUzIDE4NnEtMTIgNDEgMTkgNzBxMjkgMzEgNzAgMTlsMTg2IC01M2w0OCAxODhxMTAgNDEgNTEgNTFxNDEgMTIgNzAgLTE5bDEzNSAtMTM5bDEzNSAxMzlxMjkgMzAgNzAgMTlxNDEgLTEwIDUxIC01MWw0OCAtMTg4bDE4NiA1M3E0MSAxMiA3MCAtMTlxMzEgLTI5IDE5IC03MA0KbC01MyAtMTg2bDE4OCAtNDhxNDAgLTEwIDUyIC01MXExMCAtNDIgLTIwIC03MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImhhbmRfcmlnaHQiIHVuaWNvZGU9IiYjeGYwYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMjU2IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE2NjQgNzY4cTAgNTEgLTM5IDg5LjV0LTg5IDM4LjVoLTU3NnEwIDIwIDE1IDQ4LjV0MzMgNTV0MzMgNjh0MTUgODQuNXEwIDY3IC00NC41IDk3LjV0LTExNS41IDMwLjVxLTI0IDAgLTkwIC0xMzlxLTI0IC00NCAtMzcgLTY1cS00MCAtNjQgLTExMiAtMTQ1cS03MSAtODEgLTEwMSAtMTA2DQpxLTY5IC01NyAtMTQwIC01N2gtMzJ2LTY0MGgzMnE3MiAwIDE2NyAtMzJ0MTkzLjUgLTY0dDE3OS41IC0zMnExODkgMCAxODkgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVoMzMxcTUyIDAgOTAgMzh0MzggOTB6TTE3OTIgNzY5cTAgLTEwNSAtNzUuNSAtMTgxdC0xODAuNSAtNzZoLTE2OXEtNCAtNjIgLTM3IC0xMTlxMyAtMjEgMyAtNDMNCnEwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNXEtMTMzIDAgLTMyMiA2OXEtMTY0IDU5IC0yMjMgNTloLTI4OHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2NjQwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgyODhxMTAgMCAyMS41IDQuNXQyMy41IDE0dDIyLjUgMTh0MjQgMjIuNXQyMC41IDIxLjV0MTkgMjEuNXQxNCAxN3E2NSA3NCAxMDAgMTI5cTEzIDIxIDMzIDYydDM3IDcydDQwLjUgNjN0NTUgNDkuNQ0KdDY5LjUgMTcuNXExMjUgMCAyMDYuNSAtNjd0ODEuNSAtMTg5cTAgLTY4IC0yMiAtMTI4aDM3NHExMDQgMCAxODAgLTc2dDc2IC0xNzl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoYW5kX2xlZnQiIHVuaWNvZGU9IiYjeGYwYTU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTM3NiAxMjhoMzJ2NjQwaC0zMnEtMzUgMCAtNjcuNSAxMnQtNjIuNSAzN3QtNTAgNDZ0LTQ5IDU0cS04IDkgLTEyIDE0cS03MiA4MSAtMTEyIDE0NXEtMTQgMjIgLTM4IDY4cS0xIDMgLTEwLjUgMjIuNXQtMTguNSAzNnQtMjAgMzUuNXQtMjEuNSAzMC41dC0xOC41IDExLjVxLTcxIDAgLTExNS41IC0zMC41dC00NC41IC05Ny41cTAgLTQzIDE1IC04NC41dDMzIC02OHQzMyAtNTV0MTUgLTQ4LjVoLTU3NnEtNTAgMCAtODkgLTM4LjUNCnQtMzkgLTg5LjVxMCAtNTIgMzggLTkwdDkwIC0zOGgzMzFxLTE1IC0xNyAtMjUgLTQ3LjV0LTEwIC01NS41cTAgLTY5IDUzIC0xMTlxLTE4IC0zMiAtMTggLTY5dDE3LjUgLTczLjV0NDcuNSAtNTIuNXEtNCAtMjQgLTQgLTU2cTAgLTg1IDQ4LjUgLTEyNnQxMzUuNSAtNDFxODQgMCAxODMgMzJ0MTk0IDY0dDE2NyAzMnpNMTY2NCAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1eg0KTTE3OTIgNzY4di02NDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVoLTI4OHEtNTkgMCAtMjIzIC01OXEtMTkwIC02OSAtMzE3IC02OXEtMTQyIDAgLTIzMCA3Ny41dC04NyAyMTcuNWwxIDVxLTYxIDc2IC02MSAxNzhxMCAyMiAzIDQzcS0zMyA1NyAtMzcgMTE5aC0xNjlxLTEwNSAwIC0xODAuNSA3NnQtNzUuNSAxODFxMCAxMDMgNzYgMTc5dDE4MCA3NmgzNzRxLTIyIDYwIC0yMiAxMjhxMCAxMjIgODEuNSAxODl0MjA2LjUgNjcNCnEzOCAwIDY5LjUgLTE3LjV0NTUgLTQ5LjV0NDAuNSAtNjN0MzcgLTcydDMzIC02MnEzNSAtNTUgMTAwIC0xMjlxMiAtMyAxNCAtMTd0MTkgLTIxLjV0MjAuNSAtMjEuNXQyNCAtMjIuNXQyMi41IC0xOHQyMy41IC0xNHQyMS41IC00LjVoMjg4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGFuZF91cCIgdW5pY29kZT0iJiN4ZjBhNjsiIA0KZD0iTTEyODAgLTY0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3MDBxMCAxODkgLTE2NyAxODlxLTI2IDAgLTU2IC01cS0xNiAzMCAtNTIuNSA0Ny41dC03My41IDE3LjV0LTY5IC0xOHEtNTAgNTMgLTExOSA1M3EtMjUgMCAtNTUuNSAtMTB0LTQ3LjUgLTI1djMzMXEwIDUyIC0zOCA5MHQtOTAgMzhxLTUxIDAgLTg5LjUgLTM5dC0zOC41IC04OXYtNTc2DQpxLTIwIDAgLTQ4LjUgMTV0LTU1IDMzdC02OCAzM3QtODQuNSAxNXEtNjcgMCAtOTcuNSAtNDQuNXQtMzAuNSAtMTE1LjVxMCAtMjQgMTM5IC05MHE0NCAtMjQgNjUgLTM3cTY0IC00MCAxNDUgLTExMnE4MSAtNzEgMTA2IC0xMDFxNTcgLTY5IDU3IC0xNDB2LTMyaDY0MHYzMnEwIDcyIDMyIDE2N3Q2NCAxOTMuNXQzMiAxNzkuNXpNMTUzNiA3MDVxMCAtMTMzIC02OSAtMzIycS01OSAtMTY0IC01OSAtMjIzdi0yODhxMCAtNTMgLTM3LjUgLTkwLjUNCnQtOTAuNSAtMzcuNWgtNjQwcS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXYyODhxMCAxMCAtNC41IDIxLjV0LTE0IDIzLjV0LTE4IDIyLjV0LTIyLjUgMjR0LTIxLjUgMjAuNXQtMjEuNSAxOXQtMTcgMTRxLTc0IDY1IC0xMjkgMTAwcS0yMSAxMyAtNjIgMzN0LTcyIDM3dC02MyA0MC41dC00OS41IDU1dC0xNy41IDY5LjVxMCAxMjUgNjcgMjA2LjV0MTg5IDgxLjVxNjggMCAxMjggLTIydjM3NHEwIDEwNCA3NiAxODB0MTc5IDc2DQpxMTA1IDAgMTgxIC03NS41dDc2IC0xODAuNXYtMTY5cTYyIC00IDExOSAtMzdxMjEgMyA0MyAzcTEwMSAwIDE3OCAtNjBxMTM5IDEgMjE5LjUgLTg1dDgwLjUgLTIyN3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImhhbmRfZG93biIgdW5pY29kZT0iJiN4ZjBhNzsiIA0KZD0iTTE0MDggNTc2cTAgODQgLTMyIDE4M3QtNjQgMTk0dC0zMiAxNjd2MzJoLTY0MHYtMzJxMCAtMzUgLTEyIC02Ny41dC0zNyAtNjIuNXQtNDYgLTUwdC01NCAtNDlxLTkgLTggLTE0IC0xMnEtODEgLTcyIC0xNDUgLTExMnEtMjIgLTE0IC02OCAtMzhxLTMgLTEgLTIyLjUgLTEwLjV0LTM2IC0xOC41dC0zNS41IC0yMHQtMzAuNSAtMjEuNXQtMTEuNSAtMTguNXEwIC03MSAzMC41IC0xMTUuNXQ5Ny41IC00NC41cTQzIDAgODQuNSAxNXQ2OCAzMw0KdDU1IDMzdDQ4LjUgMTV2LTU3NnEwIC01MCAzOC41IC04OXQ4OS41IC0zOXE1MiAwIDkwIDM4dDM4IDkwdjMzMXE0NiAtMzUgMTAzIC0zNXE2OSAwIDExOSA1M3EzMiAtMTggNjkgLTE4dDczLjUgMTcuNXQ1Mi41IDQ3LjVxMjQgLTQgNTYgLTRxODUgMCAxMjYgNDguNXQ0MSAxMzUuNXpNMTI4MCAxMzQ0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTUzNiA1ODANCnEwIC0xNDIgLTc3LjUgLTIzMHQtMjE3LjUgLTg3bC01IDFxLTc2IC02MSAtMTc4IC02MXEtMjIgMCAtNDMgM3EtNTQgLTMwIC0xMTkgLTM3di0xNjlxMCAtMTA1IC03NiAtMTgwLjV0LTE4MSAtNzUuNXEtMTAzIDAgLTE3OSA3NnQtNzYgMTgwdjM3NHEtNTQgLTIyIC0xMjggLTIycS0xMjEgMCAtMTg4LjUgODEuNXQtNjcuNSAyMDYuNXEwIDM4IDE3LjUgNjkuNXQ0OS41IDU1dDYzIDQwLjV0NzIgMzd0NjIgMzNxNTUgMzUgMTI5IDEwMA0KcTMgMiAxNyAxNHQyMS41IDE5dDIxLjUgMjAuNXQyMi41IDI0dDE4IDIyLjV0MTQgMjMuNXQ0LjUgMjEuNXYyODhxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDY0MHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXYtMjg4cTAgLTU5IDU5IC0yMjNxNjkgLTE5MCA2OSAtMzE3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlX2Fycm93X2xlZnQiIHVuaWNvZGU9IiYjeGYwYTg7IiANCmQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC01MDJsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMzYyIC0zNjJsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDkxIC05MWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxcTE4IDE4IDE4IDQ1dC0xOCA0NWwtMTg5IDE4OWg1MDJxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDANCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9hcnJvd19yaWdodCIgdW5pY29kZT0iJiN4ZjBhOTsiIA0KZD0iTTEyODUgNjQwcTAgMjcgLTE4IDQ1bC05MSA5MWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDE4OSAtMTg5aC01MDJxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg1MDJsLTE4OSAtMTg5cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMzYyIDM2Mmw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDANCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9hcnJvd191cCIgdW5pY29kZT0iJiN4ZjBhYTsiIA0KZD0iTTEyODQgNjQxcTAgMjcgLTE4IDQ1bC0zNjIgMzYybC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MWwtMzYyIC0zNjJxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGwxODkgMTg5di01MDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5IC0xODlxMTkgLTE5IDQ1IC0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDANCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9hcnJvd19kb3duIiB1bmljb2RlPSImI3hmMGFiOyIgDQpkPSJNMTI4NCA2MzlxMCAyNyAtMTggNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMTg5IC0xODl2NTAycTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtNTAybC0xODkgMTg5cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtOTEgLTkxcS0xOCAtMTggLTE4IC00NXQxOCAtNDVsMzYyIC0zNjJsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsOTEgOTFsMzYyIDM2MnExOCAxOCAxOCA0NXpNMTUzNiA2NDANCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Imdsb2JlIiB1bmljb2RlPSImI3hmMGFjOyIgDQpkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNMTA0MiA4ODdxLTIgLTEgLTkuNSAtOS41dC0xMy41IC05LjVxMiAwIDQuNSA1dDUgMTF0My41IDdxNiA3IDIyIDE1cTE0IDYgNTIgMTJxMzQgOCA1MSAtMTENCnEtMiAyIDkuNSAxM3QxNC41IDEycTMgMiAxNSA0LjV0MTUgNy41bDIgMjJxLTEyIC0xIC0xNy41IDd0LTYuNSAyMXEwIC0yIC02IC04cTAgNyAtNC41IDh0LTExLjUgLTF0LTkgLTFxLTEwIDMgLTE1IDcuNXQtOCAxNi41dC00IDE1cS0yIDUgLTkuNSAxMXQtOS41IDEwcS0xIDIgLTIuNSA1LjV0LTMgNi41dC00IDUuNXQtNS41IDIuNXQtNyAtNXQtNy41IC0xMHQtNC41IC01cS0zIDIgLTYgMS41dC00LjUgLTF0LTQuNSAtM3QtNSAtMy41DQpxLTMgLTIgLTguNSAtM3QtOC41IC0ycTE1IDUgLTEgMTFxLTEwIDQgLTE2IDNxOSA0IDcuNSAxMnQtOC41IDE0aDVxLTEgNCAtOC41IDguNXQtMTcuNSA4LjV0LTEzIDZxLTggNSAtMzQgOS41dC0zMyAwLjVxLTUgLTYgLTQuNSAtMTAuNXQ0IC0xNHQzLjUgLTEyLjVxMSAtNiAtNS41IC0xM3QtNi41IC0xMnEwIC03IDE0IC0xNS41dDEwIC0yMS41cS0zIC04IC0xNiAtMTZ0LTE2IC0xMnEtNSAtOCAtMS41IC0xOC41dDEwLjUgLTE2LjUNCnEyIC0yIDEuNSAtNHQtMy41IC00LjV0LTUuNSAtNHQtNi41IC0zLjVsLTMgLTJxLTExIC01IC0yMC41IDZ0LTEzLjUgMjZxLTcgMjUgLTE2IDMwcS0yMyA4IC0yOSAtMXEtNSAxMyAtNDEgMjZxLTI1IDkgLTU4IDRxNiAxIDAgMTVxLTcgMTUgLTE5IDEycTMgNiA0IDE3LjV0MSAxMy41cTMgMTMgMTIgMjNxMSAxIDcgOC41dDkuNSAxMy41dDAuNSA2cTM1IC00IDUwIDExcTUgNSAxMS41IDE3dDEwLjUgMTdxOSA2IDE0IDUuNXQxNC41IC01LjUNCnQxNC41IC01cTE0IC0xIDE1LjUgMTF0LTcuNSAyMHExMiAtMSAzIDE3cS00IDcgLTggOXEtMTIgNCAtMjcgLTVxLTggLTQgMiAtOHEtMSAxIC05LjUgLTEwLjV0LTE2LjUgLTE3LjV0LTE2IDVxLTEgMSAtNS41IDEzLjV0LTkuNSAxMy41cS04IDAgLTE2IC0xNXEzIDggLTExIDE1dC0yNCA4cTE5IDEyIC04IDI3cS03IDQgLTIwLjUgNXQtMTkuNSAtNHEtNSAtNyAtNS41IC0xMS41dDUgLTh0MTAuNSAtNS41dDExLjUgLTR0OC41IC0zDQpxMTQgLTEwIDggLTE0cS0yIC0xIC04LjUgLTMuNXQtMTEuNSAtNC41dC02IC00cS0zIC00IDAgLTE0dC0yIC0xNHEtNSA1IC05IDE3LjV0LTcgMTYuNXE3IC05IC0yNSAtNmwtMTAgMXEtNCAwIC0xNiAtMnQtMjAuNSAtMXQtMTMuNSA4cS00IDggMCAyMHExIDQgNCAycS00IDMgLTExIDkuNXQtMTAgOC41cS00NiAtMTUgLTk0IC00MXE2IC0xIDEyIDFxNSAyIDEzIDYuNXQxMCA1LjVxMzQgMTQgNDIgN2w1IDVxMTQgLTE2IDIwIC0yNQ0KcS03IDQgLTMwIDFxLTIwIC02IC0yMiAtMTJxNyAtMTIgNSAtMThxLTQgMyAtMTEuNSAxMHQtMTQuNSAxMXQtMTUgNXEtMTYgMCAtMjIgLTFxLTE0NiAtODAgLTIzNSAtMjIycTcgLTcgMTIgLThxNCAtMSA1IC05dDIuNSAtMTF0MTEuNSAzcTkgLTggMyAtMTlxMSAxIDQ0IC0yN3ExOSAtMTcgMjEgLTIxcTMgLTExIC0xMCAtMThxLTEgMiAtOSA5dC05IDRxLTMgLTUgMC41IC0xOC41dDEwLjUgLTEyLjVxLTcgMCAtOS41IC0xNnQtMi41IC0zNS41DQp0LTEgLTIzLjVsMiAtMXEtMyAtMTIgNS41IC0zNC41dDIxLjUgLTE5LjVxLTEzIC0zIDIwIC00M3E2IC04IDggLTlxMyAtMiAxMiAtNy41dDE1IC0xMHQxMCAtMTAuNXE0IC01IDEwIC0yMi41dDE0IC0yMy41cS0yIC02IDkuNSAtMjB0MTAuNSAtMjNxLTEgMCAtMi41IC0xdC0yLjUgLTFxMyAtNyAxNS41IC0xNHQxNS41IC0xM3ExIC0zIDIgLTEwdDMgLTExdDggLTJxMiAyMCAtMjQgNjJxLTE1IDI1IC0xNyAyOXEtMyA1IC01LjUgMTUuNQ0KdC00LjUgMTQuNXEyIDAgNiAtMS41dDguNSAtMy41dDcuNSAtNHQyIC0zcS0zIC03IDIgLTE3LjV0MTIgLTE4LjV0MTcgLTE5dDEyIC0xM3E2IC02IDE0IC0xOS41dDAgLTEzLjVxOSAwIDIwIC0xMC41dDE3IC0xOS41cTUgLTggOCAtMjZ0NSAtMjRxMiAtNyA4LjUgLTEzLjV0MTIuNSAtOS41bDE2IC04dDEzIC03cTUgLTIgMTguNSAtMTAuNXQyMS41IC0xMS41cTEwIC00IDE2IC00dDE0LjUgMi41dDEzLjUgMy41cTE1IDIgMjkgLTE1dDIxIC0yMQ0KcTM2IC0xOSA1NSAtMTFxLTIgLTEgMC41IC03LjV0OCAtMTUuNXQ5IC0xNC41dDUuNSAtOC41cTUgLTYgMTggLTE1dDE4IC0xNXE2IDQgNyA5cS0zIC04IDcgLTIwdDE4IC0xMHExNCAzIDE0IDMycS0zMSAtMTUgLTQ5IDE4cTAgMSAtMi41IDUuNXQtNCA4LjV0LTIuNSA4LjV0MCA3LjV0NSAzcTkgMCAxMCAzLjV0LTIgMTIuNXQtNCAxM3EtMSA4IC0xMSAyMHQtMTIgMTVxLTUgLTkgLTE2IC04dC0xNiA5cTAgLTEgLTEuNSAtNS41dC0xLjUgLTYuNQ0KcS0xMyAwIC0xNSAxcTEgMyAyLjUgMTcuNXQzLjUgMjIuNXExIDQgNS41IDEydDcuNSAxNC41dDQgMTIuNXQtNC41IDkuNXQtMTcuNSAyLjVxLTE5IC0xIC0yNiAtMjBxLTEgLTMgLTMgLTEwLjV0LTUgLTExLjV0LTkgLTdxLTcgLTMgLTI0IC0ydC0yNCA1cS0xMyA4IC0yMi41IDI5dC05LjUgMzdxMCAxMCAyLjUgMjYuNXQzIDI1dC01LjUgMjQuNXEzIDIgOSA5LjV0MTAgMTAuNXEyIDEgNC41IDEuNXQ0LjUgMHQ0IDEuNXQzIDZxLTEgMSAtNCAzDQpxLTMgMyAtNCAzcTcgLTMgMjguNSAxLjV0MjcuNSAtMS41cTE1IC0xMSAyMiAycTAgMSAtMi41IDkuNXQtMC41IDEzLjVxNSAtMjcgMjkgLTlxMyAtMyAxNS41IC01dDE3LjUgLTVxMyAtMiA3IC01LjV0NS41IC00LjV0NSAwLjV0OC41IDYuNXExMCAtMTQgMTIgLTI0cTExIC00MCAxOSAtNDRxNyAtMyAxMSAtMnQ0LjUgOS41dDAgMTR0LTEuNSAxMi41bC0xIDh2MThsLTEgOHEtMTUgMyAtMTguNSAxMnQxLjUgMTguNXQxNSAxOC41cTEgMSA4IDMuNQ0KdDE1LjUgNi41dDEyLjUgOHEyMSAxOSAxNSAzNXE3IDAgMTEgOXEtMSAwIC01IDN0LTcuNSA1dC00LjUgMnE5IDUgMiAxNnE1IDMgNy41IDExdDcuNSAxMHE5IC0xMiAyMSAtMnE4IDggMSAxNnE1IDcgMjAuNSAxMC41dDE4LjUgOS41cTcgLTIgOCAydDEgMTJ0MyAxMnE0IDUgMTUgOXQxMyA1bDE3IDExcTMgNCAwIDRxMTggLTIgMzEgMTFxMTAgMTEgLTYgMjBxMyA2IC0zIDkuNXQtMTUgNS41cTMgMSAxMS41IDAuNXQxMC41IDEuNQ0KcTE1IDEwIC03IDE2cS0xNyA1IC00MyAtMTJ6TTg3OSAxMHEyMDYgMzYgMzUxIDE4OXEtMyAzIC0xMi41IDQuNXQtMTIuNSAzLjVxLTE4IDcgLTI0IDhxMSA3IC0yLjUgMTN0LTggOXQtMTIuNSA4dC0xMSA3cS0yIDIgLTcgNnQtNyA1LjV0LTcuNSA0LjV0LTguNSAydC0xMCAtMWwtMyAtMXEtMyAtMSAtNS41IC0yLjV0LTUuNSAtM3QtNCAtM3QwIC0yLjVxLTIxIDE3IC0zNiAyMnEtNSAxIC0xMSA1LjV0LTEwLjUgN3QtMTAgMS41dC0xMS41IC03DQpxLTUgLTUgLTYgLTE1dC0yIC0xM3EtNyA1IDAgMTcuNXQyIDE4LjVxLTMgNiAtMTAuNSA0LjV0LTEyIC00LjV0LTExLjUgLTguNXQtOSAtNi41dC04LjUgLTUuNXQtOC41IC03LjVxLTMgLTQgLTYgLTEydC01IC0xMXEtMiA0IC0xMS41IDYuNXQtOS41IDUuNXEyIC0xMCA0IC0zNXQ1IC0zOHE3IC0zMSAtMTIgLTQ4cS0yNyAtMjUgLTI5IC00MHEtNCAtMjIgMTIgLTI2cTAgLTcgLTggLTIwLjV0LTcgLTIxLjVxMCAtNiAyIC0xNnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9IndyZW5jaCIgdW5pY29kZT0iJiN4ZjBhZDsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0zODQgNjRxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xMDI4IDQ4NGwtNjgyIC02ODJxLTM3IC0zNyAtOTAgLTM3cS01MiAwIC05MSAzN2wtMTA2IDEwOHEtMzggMzYgLTM4IDkwcTAgNTMgMzggOTFsNjgxIDY4MXEzOSAtOTggMTE0LjUgLTE3My41dDE3My41IC0xMTQuNXpNMTY2MiA5MTlxMCAtMzkgLTIzIC0xMDZxLTQ3IC0xMzQgLTE2NC41IC0yMTcuNQ0KdC0yNTguNSAtODMuNXEtMTg1IDAgLTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXQxMzEuNSAzMTYuNXQzMTYuNSAxMzEuNXE1OCAwIDEyMS41IC0xNi41dDEwNy41IC00Ni41cTE2IC0xMSAxNiAtMjh0LTE2IC0yOGwtMjkzIC0xNjl2LTIyNGwxOTMgLTEwN3E1IDMgNzkgNDguNXQxMzUuNSA4MXQ3MC41IDM1LjVxMTUgMCAyMy41IC0xMHQ4LjUgLTI1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGFza3MiIHVuaWNvZGU9IiYjeGYwYWU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTAyNCAxMjhoNjQwdjEyOGgtNjQwdi0xMjh6TTY0MCA2NDBoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTI4MCAxMTUyaDM4NHYxMjhoLTM4NHYtMTI4ek0xNzkyIDMyMHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDgzMnYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTkNCnQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsdGVyIiB1bmljb2RlPSImI3hmMGIwOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTE0MDMgMTI0MXExNyAtNDEgLTE0IC03MGwtNDkzIC00OTN2LTc0MnEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV2NDg2bC00OTMgNDkzcS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMTI4MHE0MiAwIDU5IC0zOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJyaWVmY2FzZSIgdW5pY29kZT0iJiN4ZjBiMTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik02NDAgMTI4MGg1MTJ2MTI4aC01MTJ2LTEyOHpNMTc5MiA2NDB2LTQ4MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2NDgwaDY3MnYtMTYwcTAgLTI2IDE5IC00NXQ0NSAtMTloMzIwcTI2IDAgNDUgMTl0MTkgNDV2MTYwaDY3MnpNMTAyNCA2NDB2LTEyOGgtMjU2djEyOGgyNTZ6TTE3OTIgMTEyMHYtMzg0aC0xNzkydjM4NHEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydjE2MHEwIDQwIDI4IDY4DQp0NjggMjhoNTc2cTQwIDAgNjggLTI4dDI4IC02OHYtMTYwaDM1MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZ1bGxzY3JlZW4iIHVuaWNvZGU9IiYjeGYwYjI7IiANCmQ9Ik0xMjgzIDk5NWwtMzU1IC0zNTVsMzU1IC0zNTVsMTQ0IDE0NHEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC00NDhxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWwxNDQgMTQ0bC0zNTUgMzU1bC0zNTUgLTM1NWwxNDQgLTE0NHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDE0NCAtMTQ0DQpsMzU1IDM1NWwtMzU1IDM1NWwtMTQ0IC0xNDRxLTE5IC0xOSAtNDUgLTE5cS0xMiAwIC0yNCA1cS00MCAxNyAtNDAgNTl2NDQ4cTAgMjYgMTkgNDV0NDUgMTloNDQ4cTQyIDAgNTkgLTQwcTE3IC0zOSAtMTQgLTY5bC0xNDQgLTE0NGwzNTUgLTM1NWwzNTUgMzU1bC0xNDQgMTQ0cS0zMSAzMCAtMTQgNjlxMTcgNDAgNTkgNDBoNDQ4cTI2IDAgNDUgLTE5dDE5IC00NXYtNDQ4cTAgLTQyIC0zOSAtNTlxLTEzIC01IC0yNSAtNXEtMjYgMCAtNDUgMTl6DQoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Imdyb3VwIiB1bmljb2RlPSImI3hmMGMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTU5MyA2NDBxLTE2MiAtNSAtMjY1IC0xMjhoLTEzNHEtODIgMCAtMTM4IDQwLjV0LTU2IDExOC41cTAgMzUzIDEyNCAzNTNxNiAwIDQzLjUgLTIxdDk3LjUgLTQyLjV0MTE5IC0yMS41cTY3IDAgMTMzIDIzcS01IC0zNyAtNSAtNjZxMCAtMTM5IDgxIC0yNTZ6TTE2NjQgM3EwIC0xMjAgLTczIC0xODkuNXQtMTk0IC02OS41aC04NzRxLTEyMSAwIC0xOTQgNjkuNXQtNzMgMTg5LjVxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjUNCnQ0MyA5Ny41dDYyIDgxdDg1LjUgNTMuNXQxMTEuNSAyMHExMCAwIDQzIC0yMS41dDczIC00OHQxMDcgLTQ4dDEzNSAtMjEuNXQxMzUgMjEuNXQxMDcgNDh0NzMgNDh0NDMgMjEuNXE2MSAwIDExMS41IC0yMHQ4NS41IC01My41dDYyIC04MXQ0MyAtOTcuNXQyNi41IC0xMDguNXQxNCAtMTA5dDMuNSAtMTAzLjV6TTY0MCAxMjgwcTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1DQp0NzUgLTE4MXpNMTM0NCA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6TTE5MjAgNjcxcTAgLTc4IC01NiAtMTE4LjV0LTEzOCAtNDAuNWgtMTM0cS0xMDMgMTIzIC0yNjUgMTI4cTgxIDExNyA4MSAyNTZxMCAyOSAtNSA2NnE2NiAtMjMgMTMzIC0yM3E1OSAwIDExOSAyMS41dDk3LjUgNDIuNQ0KdDQzLjUgMjFxMTI0IDAgMTI0IC0zNTN6TTE3OTIgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGluayIgdW5pY29kZT0iJiN4ZjBjMTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNDU2IDMyMHEwIDQwIC0yOCA2OGwtMjA4IDIwOHEtMjggMjggLTY4IDI4cS00MiAwIC03MiAtMzJxMyAtMyAxOSAtMTguNXQyMS41IC0yMS41dDE1IC0xOXQxMyAtMjUuNXQzLjUgLTI3LjVxMCAtNDAgLTI4IC02OHQtNjggLTI4cS0xNSAwIC0yNy41IDMuNXQtMjUuNSAxM3QtMTkgMTV0LTIxLjUgMjEuNXQtMTguNSAxOXEtMzMgLTMxIC0zMyAtNzNxMCAtNDAgMjggLTY4bDIwNiAtMjA3cTI3IC0yNyA2OCAtMjdxNDAgMCA2OCAyNg0KbDE0NyAxNDZxMjggMjggMjggNjd6TTc1MyAxMDI1cTAgNDAgLTI4IDY4bC0yMDYgMjA3cS0yOCAyOCAtNjggMjhxLTM5IDAgLTY4IC0yN2wtMTQ3IC0xNDZxLTI4IC0yOCAtMjggLTY3cTAgLTQwIDI4IC02OGwyMDggLTIwOHEyNyAtMjcgNjggLTI3cTQyIDAgNzIgMzFxLTMgMyAtMTkgMTguNXQtMjEuNSAyMS41dC0xNSAxOXQtMTMgMjUuNXQtMy41IDI3LjVxMCA0MCAyOCA2OHQ2OCAyOHExNSAwIDI3LjUgLTMuNXQyNS41IC0xM3QxOSAtMTUNCnQyMS41IC0yMS41dDE4LjUgLTE5cTMzIDMxIDMzIDczek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTIwNiAyMDdxLTgzIDgzIC04MyAyMDNxMCAxMjMgODggMjA5bC04OCA4OHEtODYgLTg4IC0yMDggLTg4cS0xMjAgMCAtMjA0IDg0bC0yMDggMjA4cS04NCA4NCAtODQgMjA0dDg1IDIwM2wxNDcgMTQ2cTgzIDgzIDIwMyA4M3ExMjEgMCAyMDQgLTg1bDIwNiAtMjA3DQpxODMgLTgzIDgzIC0yMDNxMCAtMTIzIC04OCAtMjA5bDg4IC04OHE4NiA4OCAyMDggODhxMTIwIDAgMjA0IC04NGwyMDggLTIwOHE4NCAtODQgODQgLTIwNHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNsb3VkIiB1bmljb2RlPSImI3hmMGMyOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODhxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxMzIgNzEgMjQxLjV0MTg3IDE2My41cS0yIDI4IC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTggMCAyODYuNSAtODh0MTg3LjUgLTIzMHE3MCA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc1IC00MSAtMTM4cTEyOSAtMzAgMjEzIC0xMzQuNXQ4NCAtMjM5LjV6DQoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJlYWtlciIgdW5pY29kZT0iJiN4ZjBjMzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNTI3IDg4cTU2IC04OSAyMS41IC0xNTIuNXQtMTQwLjUgLTYzLjVoLTExNTJxLTEwNiAwIC0xNDAuNSA2My41dDIxLjUgMTUyLjVsNTAzIDc5M3YzOTloLTY0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTY0di0zOTl6TTc0OCA4MTNsLTI3MiAtNDI5aDcxMmwtMjcyIDQyOWwtMjAgMzF2Mzd2Mzk5aC0xMjh2LTM5OXYtMzd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjdXQiIHVuaWNvZGU9IiYjeGYwYzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNOTYwIDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEyNjAgNTc2bDUwNyAtMzk4cTI4IC0yMCAyNSAtNTZxLTUgLTM1IC0zNSAtNTFsLTEyOCAtNjRxLTEzIC03IC0yOSAtN3EtMTcgMCAtMzEgOGwtNjkwIDM4N2wtMTEwIC02NnEtOCAtNCAtMTIgLTVxMTQgLTQ5IDEwIC05N3EtNyAtNzcgLTU2IC0xNDcuNXQtMTMyIC0xMjMuNXEtMTMyIC04NCAtMjc3IC04NA0KcS0xMzYgMCAtMjIyIDc4cS05MCA4NCAtNzkgMjA3cTcgNzYgNTYgMTQ3dDEzMSAxMjRxMTMyIDg0IDI3OCA4NHE4MyAwIDE1MSAtMzFxOSAxMyAyMiAyMmwxMjIgNzNsLTEyMiA3M3EtMTMgOSAtMjIgMjJxLTY4IC0zMSAtMTUxIC0zMXEtMTQ2IDAgLTI3OCA4NHEtODIgNTMgLTEzMSAxMjR0LTU2IDE0N3EtNSA1OSAxNS41IDExM3Q2My41IDkzcTg1IDc5IDIyMiA3OXExNDUgMCAyNzcgLTg0cTgzIC01MiAxMzIgLTEyM3Q1NiAtMTQ4DQpxNCAtNDggLTEwIC05N3E0IC0xIDEyIC01bDExMCAtNjZsNjkwIDM4N3ExNCA4IDMxIDhxMTYgMCAyOSAtN2wxMjggLTY0cTMwIC0xNiAzNSAtNTFxMyAtMzYgLTI1IC01NnpNNTc5IDgzNnE0NiA0MiAyMSAxMDh0LTEwNiAxMTdxLTkyIDU5IC0xOTIgNTlxLTc0IDAgLTExMyAtMzZxLTQ2IC00MiAtMjEgLTEwOHQxMDYgLTExN3E5MiAtNTkgMTkyIC01OXE3NCAwIDExMyAzNnpNNDk0IDkxcTgxIDUxIDEwNiAxMTd0LTIxIDEwOA0KcS0zOSAzNiAtMTEzIDM2cS0xMDAgMCAtMTkyIC01OXEtODEgLTUxIC0xMDYgLTExN3QyMSAtMTA4cTM5IC0zNiAxMTMgLTM2cTEwMCAwIDE5MiA1OXpNNjcyIDcwNGw5NiAtNTh2MTFxMCAzNiAzMyA1NmwxNCA4bC03OSA0N2wtMjYgLTI2cS0zIC0zIC0xMCAtMTF0LTEyIC0xMnEtMiAtMiAtNCAtMy41dC0zIC0yLjV6TTg5NiA0ODBsOTYgLTMybDczNiA1NzZsLTEyOCA2NGwtNzY4IC00MzF2LTExM2wtMTYwIC05Nmw5IC04cTIgLTIgNyAtNg0KcTQgLTQgMTEgLTEydDExIC0xMmwyNiAtMjZ6TTE2MDAgNjRsMTI4IDY0bC01MjAgNDA4bC0xNzcgLTEzOHEtMiAtMyAtMTMgLTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb3B5IiB1bmljb2RlPSImI3hmMGM1OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE2OTYgMTE1MnE0MCAwIDY4IC0yOHQyOCAtNjh2LTEyMTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYyODhoLTU0NHEtNDAgMCAtNjggMjh0LTI4IDY4djY3MnEwIDQwIDIwIDg4dDQ4IDc2bDQwOCA0MDhxMjggMjggNzYgNDh0ODggMjBoNDE2cTQwIDAgNjggLTI4dDI4IC02OHYtMzI4cTY4IDQwIDEyOCA0MGg0MTZ6TTExNTIgOTM5bC0yOTkgLTI5OWgyOTl2Mjk5ek01MTIgMTMyM2wtMjk5IC0yOTkNCmgyOTl2Mjk5ek03MDggNjc2bDMxNiAzMTZ2NDE2aC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDUxMnYyNTZxMCA0MCAyMCA4OHQ0OCA3NnpNMTY2NCAtMTI4djExNTJoLTM4NHYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di02NDBoODk2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGFwZXJfY2xpcCIgdW5pY29kZT0iJiN4ZjBjNjsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xNDA0IDE1MXEwIC0xMTcgLTc5IC0xOTZ0LTE5NiAtNzlxLTEzNSAwIC0yMzUgMTAwbC03NzcgNzc2cS0xMTMgMTE1IC0xMTMgMjcxcTAgMTU5IDExMCAyNzB0MjY5IDExMXExNTggMCAyNzMgLTExM2w2MDUgLTYwNnExMCAtMTAgMTAgLTIycTAgLTE2IC0zMC41IC00Ni41dC00Ni41IC0zMC41cS0xMyAwIC0yMyAxMGwtNjA2IDYwN3EtNzkgNzcgLTE4MSA3N3EtMTA2IDAgLTE3OSAtNzV0LTczIC0xODFxMCAtMTA1IDc2IC0xODENCmw3NzYgLTc3N3E2MyAtNjMgMTQ1IC02M3E2NCAwIDEwNiA0MnQ0MiAxMDZxMCA4MiAtNjMgMTQ1bC01ODEgNTgxcS0yNiAyNCAtNjAgMjRxLTI5IDAgLTQ4IC0xOXQtMTkgLTQ4cTAgLTMyIDI1IC01OWw0MTAgLTQxMHExMCAtMTAgMTAgLTIycTAgLTE2IC0zMSAtNDd0LTQ3IC0zMXEtMTIgMCAtMjIgMTBsLTQxMCA0MTBxLTYzIDYxIC02MyAxNDlxMCA4MiA1NyAxMzl0MTM5IDU3cTg4IDAgMTQ5IC02M2w1ODEgLTU4MXExMDAgLTk4IDEwMCAtMjM1DQp6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzYXZlIiB1bmljb2RlPSImI3hmMGM3OyIgDQpkPSJNMzg0IDBoNzY4djM4NGgtNzY4di0zODR6TTEyODAgMGgxMjh2ODk2cTAgMTQgLTEwIDM4LjV0LTIwIDM0LjVsLTI4MSAyODFxLTEwIDEwIC0zNCAyMHQtMzkgMTB2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTU3NnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMTI4di0xMjgwaDEyOHY0MTZxMCA0MCAyOCA2OHQ2OCAyOGg4MzJxNDAgMCA2OCAtMjh0MjggLTY4di00MTZ6TTg5NiA5Mjh2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNQ0KaC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTUzNiA4OTZ2LTkyOHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODggLTIwdDc2IC00OGwyODAgLTI4MHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNpZ25fYmxhbmsiIHVuaWNvZGU9IiYjeGYwYzg7IiANCmQ9Ik0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJlb3JkZXIiIHVuaWNvZGU9IiYjeGYwYzk7IiANCmQ9Ik0xNTM2IDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEyMTZ2LTEyOHEwIC0yNiAtMTkgLTQ1DQp0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idWwiIHVuaWNvZGU9IiYjeGYwY2E7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMzg0IDEyOHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTM4NCA2NDBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNzkyIDIyNHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41DQp0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMTUycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoNCk0xNzkyIDEyNDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im9sIiB1bmljb2RlPSImI3hmMGNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTM4MSAtODRxMCAtODAgLTU0LjUgLTEyNnQtMTM1LjUgLTQ2cS0xMDYgMCAtMTcyIDY2bDU3IDg4cTQ5IC00NSAxMDYgLTQ1cTI5IDAgNTAuNSAxNC41dDIxLjUgNDIuNXEwIDY0IC0xMDUgNTZsLTI2IDU2cTggMTAgMzIuNSA0My41dDQyLjUgNTR0MzcgMzguNXYxcS0xNiAwIC00OC41IC0xdC00OC41IC0xdi01M2gtMTA2djE1MmgzMzN2LTg4bC05NSAtMTE1cTUxIC0xMiA4MSAtNDl0MzAgLTg4ek0zODMgNTQzdi0xNTloLTM2Mg0KcS02IDM2IC02IDU0cTAgNTEgMjMuNSA5M3Q1Ni41IDY4dDY2IDQ3LjV0NTYuNSA0My41dDIzLjUgNDVxMCAyNSAtMTQuNSAzOC41dC0zOS41IDEzLjVxLTQ2IDAgLTgxIC01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41dDEwNS41IDI4LjVxNzMgMCAxMjMgLTQxLjV0NTAgLTExMi41cTAgLTUwIC0zNCAtOTEuNXQtNzUgLTY0LjV0LTc1LjUgLTUwLjV0LTM1LjUgLTUyLjVoMTI3djYwaDEwNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41DQp0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDE0IDkgMjN0MjMgOWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDExMjN2LTk5aC0zMzV2OTloMTA3cTAgNDEgMC41IDEyMS41dDAuNSAxMjEuNXYxMmgtMnEtOCAtMTcgLTUwIC01NGwtNzEgNzZsMTM2IDEyN2gxMDZ2LTQwNGgxMDh6TTE3OTIgNzM2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMjE2DQpxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxNCA5IDIzdDIzIDloMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RyaWtldGhyb3VnaCIgdW5pY29kZT0iJiN4ZjBjYzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzYwIDY0MHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNzI4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3Mjh6TTQ4MyA3MDRxLTI4IDM1IC01MSA4MHEtNDggOTggLTQ4IDE4OHEwIDE4MSAxMzQgMzA5cTEzMyAxMjcgMzkzIDEyN3E1MCAwIDE2NyAtMTlxNjYgLTEyIDE3NyAtNDhxMTAgLTM4IDIxIC0xMThxMTQgLTEyMyAxNCAtMTgzcTAgLTE4IC01IC00NWwtMTIgLTNsLTg0IDYNCmwtMTQgMnEtNTAgMTQ5IC0xMDMgMjA1cS04OCA5MSAtMjEwIDkxcS0xMTQgMCAtMTgyIC01OXEtNjcgLTU4IC02NyAtMTQ2cTAgLTczIDY2IC0xNDB0Mjc5IC0xMjlxNjkgLTIwIDE3MyAtNjZxNTggLTI4IDk1IC01MmgtNzQzek05OTAgNDQ4aDQxMXE3IC0zOSA3IC05MnEwIC0xMTEgLTQxIC0yMTJxLTIzIC01NiAtNzEgLTEwNHEtMzcgLTM1IC0xMDkgLTgxcS04MCAtNDggLTE1MyAtNjZxLTgwIC0yMSAtMjAzIC0yMXEtMTE0IDAgLTE5NSAyMw0KbC0xNDAgNDBxLTU3IDE2IC03MiAyOHEtOCA4IC04IDIydjEzcTAgMTA4IC0yIDE1NnEtMSAzMCAwIDY4bDIgMzd2NDRsMTAyIDJxMTUgLTM0IDMwIC03MXQyMi41IC01NnQxMi41IC0yN3EzNSAtNTcgODAgLTk0cTQzIC0zNiAxMDUgLTU3cTU5IC0yMiAxMzIgLTIycTY0IDAgMTM5IDI3cTc3IDI2IDEyMiA4NnE0NyA2MSA0NyAxMjlxMCA4NCAtODEgMTU3cS0zNCAyOSAtMTM3IDcxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5kZXJsaW5lIiB1bmljb2RlPSImI3hmMGNkOyIgDQpkPSJNNDggMTMxM3EtMzcgMiAtNDUgNGwtMyA4OHExMyAxIDQwIDFxNjAgMCAxMTIgLTRxMTMyIC03IDE2NiAtN3E4NiAwIDE2OCAzcTExNiA0IDE0NiA1cTU2IDAgODYgMmwtMSAtMTRsMiAtNjR2LTlxLTYwIC05IC0xMjQgLTlxLTYwIDAgLTc5IC0yNXEtMTMgLTE0IC0xMyAtMTMycTAgLTEzIDAuNSAtMzIuNXQwLjUgLTI1LjVsMSAtMjI5bDE0IC0yODBxNiAtMTI0IDUxIC0yMDJxMzUgLTU5IDk2IC05MnE4OCAtNDcgMTc3IC00Nw0KcTEwNCAwIDE5MSAyOHE1NiAxOCA5OSA1MXE0OCAzNiA2NSA2NHEzNiA1NiA1MyAxMTRxMjEgNzMgMjEgMjI5cTAgNzkgLTMuNSAxMjh0LTExIDEyMi41dC0xMy41IDE1OS41bC00IDU5cS01IDY3IC0yNCA4OHEtMzQgMzUgLTc3IDM0bC0xMDAgLTJsLTE0IDNsMiA4Nmg4NGwyMDUgLTEwcTc2IC0zIDE5NiAxMGwxOCAtMnE2IC0zOCA2IC01MXEwIC03IC00IC0zMXEtNDUgLTEyIC04NCAtMTNxLTczIC0xMSAtNzkgLTE3cS0xNSAtMTUgLTE1IC00MQ0KcTAgLTcgMS41IC0yN3QxLjUgLTMxcTggLTE5IDIyIC0zOTZxNiAtMTk1IC0xNSAtMzA0cS0xNSAtNzYgLTQxIC0xMjJxLTM4IC02NSAtMTEyIC0xMjNxLTc1IC01NyAtMTgyIC04OXEtMTA5IC0zMyAtMjU1IC0zM3EtMTY3IDAgLTI4NCA0NnEtMTE5IDQ3IC0xNzkgMTIycS02MSA3NiAtODMgMTk1cS0xNiA4MCAtMTYgMjM3djMzM3EwIDE4OCAtMTcgMjEzcS0yNSAzNiAtMTQ3IDM5ek0xNTM2IC05NnY2NHEwIDE0IC05IDIzdC0yMyA5aC0xNDcyDQpxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloMTQ3MnExNCAwIDIzIDl0OSAyM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRhYmxlIiB1bmljb2RlPSImI3hmMGNlOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTUxMiAxNjB2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek01MTIgNTQ0djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTAyNCAxNjB2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzDQp2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTYwdjE5Mg0KcTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDkyOHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNTQ0djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkyDQpxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNTM2IDkyOHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTI0OHYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTM0NHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTM0NHE2NiAwIDExMyAtNDd0NDcgLTExMw0KeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWFnaWMiIHVuaWNvZGU9IiYjeGYwZDA7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTE5MCA5NTVsMjkzIDI5M2wtMTA3IDEwN2wtMjkzIC0yOTN6TTE2MzcgMTI0OHEwIC0yNyAtMTggLTQ1bC0xMjg2IC0xMjg2cS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTE5OCAxOThxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMjg2IDEyODZxMTggMTggNDUgMTh0NDUgLTE4bDE5OCAtMTk4cTE4IC0xOCAxOCAtNDV6TTI4NiAxNDM4bDk4IC0zMGwtOTggLTMwbC0zMCAtOThsLTMwIDk4bC05OCAzMGw5OCAzMGwzMCA5OHpNNjM2IDEyNzYNCmwxOTYgLTYwbC0xOTYgLTYwbC02MCAtMTk2bC02MCAxOTZsLTE5NiA2MGwxOTYgNjBsNjAgMTk2ek0xNTY2IDc5OGw5OCAtMzBsLTk4IC0zMGwtMzAgLTk4bC0zMCA5OGwtOTggMzBsOTggMzBsMzAgOTh6TTkyNiAxNDM4bDk4IC0zMGwtOTggLTMwbC0zMCAtOThsLTMwIDk4bC05OCAzMGw5OCAzMGwzMCA5OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRydWNrIiB1bmljb2RlPSImI3hmMGQxOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTY0MCAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTMgMCAtMjIgLTlsLTE5NSAtMTk1cS05IC05IC05IC0yMnYtMzB6TTE1MzYgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMTc5MiAxMjE2di0xMDI0cTAgLTE1IC00IC0yNi41dC0xMy41IC0xOC41DQp0LTE2LjUgLTExLjV0LTIzLjUgLTZ0LTIyLjUgLTJ0LTI1LjUgMHQtMjIuNSAwLjVxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtMzg0cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTY0cS0zIDAgLTIyLjUgLTAuNXQtMjUuNSAwdC0yMi41IDJ0LTIzLjUgNnQtMTYuNSAxMS41dC0xMy41IDE4LjV0LTQgMjYuNXEwIDI2IDE5IDQ1dDQ1IDE5djMyMHEwIDggLTAuNSAzNXQwIDM4DQp0Mi41IDM0LjV0Ni41IDM3dDE0IDMwLjV0MjIuNSAzMGwxOTggMTk4cTE5IDE5IDUwLjUgMzJ0NTguNSAxM2gxNjB2MTkycTAgMjYgMTkgNDV0NDUgMTloMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwaW50ZXJlc3QiIHVuaWNvZGU9IiYjeGYwZDI7IiANCmQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3EtMTExIDAgLTIxOCAzMnE1OSA5MyA3OCAxNjRxOSAzNCA1NCAyMTFxMjAgLTM5IDczIC02Ny41dDExNCAtMjguNXExMjEgMCAyMTYgNjguNXQxNDcgMTg4LjV0NTIgMjcwcTAgMTE0IC01OS41IDIxNHQtMTcyLjUgMTYzdC0yNTUgNjNxLTEwNSAwIC0xOTYgLTI5dC0xNTQuNSAtNzd0LTEwOSAtMTEwLjV0LTY3IC0xMjkuNXQtMjEuNSAtMTM0DQpxMCAtMTA0IDQwIC0xODN0MTE3IC0xMTFxMzAgLTEyIDM4IDIwcTIgNyA4IDMxdDggMzBxNiAyMyAtMTEgNDNxLTUxIDYxIC01MSAxNTFxMCAxNTEgMTA0LjUgMjU5LjV0MjczLjUgMTA4LjVxMTUxIDAgMjM1LjUgLTgydDg0LjUgLTIxM3EwIC0xNzAgLTY4LjUgLTI4OXQtMTc1LjUgLTExOXEtNjEgMCAtOTggNDMuNXQtMjMgMTA0LjVxOCAzNSAyNi41IDkzLjV0MzAgMTAzdDExLjUgNzUuNXEwIDUwIC0yNyA4M3QtNzcgMzMNCnEtNjIgMCAtMTA1IC01N3QtNDMgLTE0MnEwIC03MyAyNSAtMTIybC05OSAtNDE4cS0xNyAtNzAgLTEzIC0xNzdxLTIwNiA5MSAtMzMzIDI4MXQtMTI3IDQyM3EwIDIwOSAxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwaW50ZXJlc3Rfc2lnbiIgdW5pY29kZT0iJiN4ZjBkMzsiIA0KZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MjVxODUgMTIyIDEwOCAyMTBxOSAzNCA1MyAyMDlxMjEgLTM5IDczLjUgLTY3dDExMi41IC0yOHExODEgMCAyOTUuNSAxNDcuNXQxMTQuNSAzNzMuNXEwIDg0IC0zNSAxNjIuNXQtOTYuNSAxMzl0LTE1Mi41IDk3dC0xOTcgMzYuNXEtMTA0IDAgLTE5NC41IC0yOC41dC0xNTMgLTc2LjUNCnQtMTA3LjUgLTEwOS41dC02Ni41IC0xMjh0LTIxLjUgLTEzMi41cTAgLTEwMiAzOS41IC0xODB0MTE2LjUgLTExMHExMyAtNSAyMy41IDB0MTQuNSAxOXExMCA0NCAxNSA2MXE2IDIzIC0xMSA0MnEtNTAgNjIgLTUwIDE1MHEwIDE1MCAxMDMuNSAyNTYuNXQyNzAuNSAxMDYuNXExNDkgMCAyMzIuNSAtODF0ODMuNSAtMjEwcTAgLTE2OCAtNjcuNSAtMjg2dC0xNzMuNSAtMTE4cS02MCAwIC05NyA0My41dC0yMyAxMDMuNXE4IDM0IDI2LjUgOTIuNQ0KdDI5LjUgMTAydDExIDc0LjVxMCA0OSAtMjYuNSA4MS41dC03NS41IDMyLjVxLTYxIDAgLTEwMy41IC01Ni41dC00Mi41IC0xMzkuNXEwIC03MiAyNCAtMTIxbC05OCAtNDE0cS0yNCAtMTAwIC03IC0yNTRoLTE4M3EtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnb29nbGVfcGx1c19zaWduIiB1bmljb2RlPSImI3hmMGQ0OyIgDQpkPSJNOTE3IDYzMXEwIDI2IC02IDY0aC0zNjJ2LTEzMmgyMTdxLTMgLTI0IC0xNi41IC01MHQtMzcuNSAtNTN0LTY2LjUgLTQ0LjV0LTk2LjUgLTE3LjVxLTk5IDAgLTE2OSA3MXQtNzAgMTcxdDcwIDE3MXQxNjkgNzFxOTIgMCAxNTMgLTU5bDEwNCAxMDFxLTEwOCAxMDAgLTI1NyAxMDBxLTE2MCAwIC0yNzIgLTExMi41dC0xMTIgLTI3MS41dDExMiAtMjcxLjV0MjcyIC0xMTIuNXExNjUgMCAyNjYuNSAxMDV0MTAxLjUgMjcwek0xMjYyIDU4NQ0KaDEwOXYxMTBoLTEwOXYxMTBoLTExMHYtMTEwaC0xMTB2LTExMGgxMTB2LTExMGgxMTB2MTEwek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Imdvb2dsZV9wbHVzIiB1bmljb2RlPSImI3hmMGQ1OyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTE0MzcgNjIzcTAgLTIwOCAtODcgLTM3MC41dC0yNDggLTI1NHQtMzY5IC05MS41cS0xNDkgMCAtMjg1IDU4dC0yMzQgMTU2dC0xNTYgMjM0dC01OCAyODV0NTggMjg1dDE1NiAyMzR0MjM0IDE1NnQyODUgNThxMjg2IDAgNDkxIC0xOTJsLTE5OSAtMTkxcS0xMTcgMTEzIC0yOTIgMTEzcS0xMjMgMCAtMjI3LjUgLTYydC0xNjUuNSAtMTY4LjV0LTYxIC0yMzIuNXQ2MSAtMjMyLjV0MTY1LjUgLTE2OC41dDIyNy41IC02Mg0KcTgzIDAgMTUyLjUgMjN0MTE0LjUgNTcuNXQ3OC41IDc4LjV0NDkgODN0MjEuNSA3NGgtNDE2djI1Mmg2OTJxMTIgLTYzIDEyIC0xMjJ6TTIzMDQgNzQ1di0yMTBoLTIwOXYtMjA5aC0yMTB2MjA5aC0yMDl2MjEwaDIwOXYyMDloMjEwdi0yMDloMjA5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibW9uZXkiIHVuaWNvZGU9IiYjeGYwZDY7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNNzY4IDM4NGgzODR2OTZoLTEyOHY0NDhoLTExNGwtMTQ4IC0xMzdsNzcgLTgwcTQyIDM3IDU1IDU3aDJ2LTI4OGgtMTI4di05NnpNMTI4MCA2NDBxMCAtNzAgLTIxIC0xNDJ0LTU5LjUgLTEzNHQtMTAxLjUgLTEwMXQtMTM4IC0zOXQtMTM4IDM5dC0xMDEuNSAxMDF0LTU5LjUgMTM0dC0yMSAxNDJ0MjEgMTQydDU5LjUgMTM0dDEwMS41IDEwMXQxMzggMzl0MTM4IC0zOXQxMDEuNSAtMTAxdDU5LjUgLTEzNHQyMSAtMTQyek0xNzkyIDM4NA0KdjUxMnEtMTA2IDAgLTE4MSA3NXQtNzUgMTgxaC0xMTUycTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXYtNTEycTEwNiAwIDE4MSAtNzV0NzUgLTE4MWgxMTUycTAgMTA2IDc1IDE4MXQxODEgNzV6TTE5MjAgMTIxNnYtMTE1MnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE3OTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMTUycTAgMjYgMTkgNDV0NDUgMTloMTc5MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYXJldF9kb3duIiB1bmljb2RlPSImI3hmMGQ3OyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTEwMjQgODMycTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2FyZXRfdXAiIHVuaWNvZGU9IiYjeGYwZDg7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNMTAyNCAzMjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2FyZXRfbGVmdCIgdW5pY29kZT0iJiN4ZjBkOTsiIGhvcml6LWFkdi14PSI2NDAiIA0KZD0iTTY0MCAxMDg4di04OTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhcmV0X3JpZ2h0IiB1bmljb2RlPSImI3hmMGRhOyIgaG9yaXotYWR2LXg9IjY0MCIgDQpkPSJNNTc2IDY0MHEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXY4OTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbHVtbnMiIHVuaWNvZGU9IiYjeGYwZGI7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTYwIDBoNjA4djExNTJoLTY0MHYtMTEyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41ek0xNTM2IDMydjExMjBoLTY0MHYtMTE1Mmg2MDhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMzQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydCIgdW5pY29kZT0iJiN4ZjBkYzsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik0xMDI0IDQ0OHEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTAyNCA4MzJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9kb3duIiB1bmljb2RlPSImI3hmMGRkOyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF91cCIgdW5pY29kZT0iJiN4ZjBkZTsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbnZlbG9wZV9hbHQiIHVuaWNvZGU9IiYjeGYwZTA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc5MiA4MjZ2LTc5NHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2Nzk0cTQ0IC00OSAxMDEgLTg3cTM2MiAtMjQ2IDQ5NyAtMzQ1cTU3IC00MiA5Mi41IC02NS41dDk0LjUgLTQ4dDExMCAtMjQuNWgxaDFxNTEgMCAxMTAgMjQuNXQ5NC41IDQ4dDkyLjUgNjUuNXExNzAgMTIzIDQ5OCAzNDVxNTcgMzkgMTAwIDg3ek0xNzkyIDExMjBxMCAtNzkgLTQ5IC0xNTF0LTEyMiAtMTIzDQpxLTM3NiAtMjYxIC00NjggLTMyNXEtMTAgLTcgLTQyLjUgLTMwLjV0LTU0IC0zOHQtNTIgLTMyLjV0LTU3LjUgLTI3dC01MCAtOWgtMWgtMXEtMjMgMCAtNTAgOXQtNTcuNSAyN3QtNTIgMzIuNXQtNTQgMzh0LTQyLjUgMzAuNXEtOTEgNjQgLTI2MiAxODIuNXQtMjA1IDE0Mi41cS02MiA0MiAtMTE3IDExNS41dC01NSAxMzYuNXEwIDc4IDQxLjUgMTMwdDExOC41IDUyaDE0NzJxNjUgMCAxMTIuNSAtNDd0NDcuNSAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlua2VkaW4iIHVuaWNvZGU9IiYjeGYwZTE7IiANCmQ9Ik0zNDkgOTExdi05OTFoLTMzMHY5OTFoMzMwek0zNzAgMTIxN3ExIC03MyAtNTAuNSAtMTIydC0xMzUuNSAtNDloLTJxLTgyIDAgLTEzMiA0OXQtNTAgMTIycTAgNzQgNTEuNSAxMjIuNXQxMzQuNSA0OC41dDEzMyAtNDguNXQ1MSAtMTIyLjV6TTE1MzYgNDg4di01NjhoLTMyOXY1MzBxMCAxMDUgLTQwLjUgMTY0LjV0LTEyNi41IDU5LjVxLTYzIDAgLTEwNS41IC0zNC41dC02My41IC04NS41cS0xMSAtMzAgLTExIC04MXYtNTUzaC0zMjkNCnEyIDM5OSAyIDY0N3QtMSAyOTZsLTEgNDhoMzI5di0xNDRoLTJxMjAgMzIgNDEgNTZ0NTYuNSA1MnQ4NyA0My41dDExNC41IDE1LjVxMTcxIDAgMjc1IC0xMTMuNXQxMDQgLTMzMi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5kbyIgdW5pY29kZT0iJiN4ZjBlMjsiIA0KZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzIgMCAtMzI3IDcyLjV0LTI2NCAyMDQuNXEtNyAxMCAtNi41IDIyLjV0OC41IDIwLjVsMTM3IDEzOHExMCA5IDI1IDlxMTYgLTIgMjMgLTEycTczIC05NSAxNzkgLTE0N3QyMjUgLTUycTEwNCAwIDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjUNCnQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjVxLTk4IDAgLTE4OCAtMzUuNXQtMTYwIC0xMDEuNWwxMzcgLTEzOHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDEzMCAtMTI5cTEwNyAxMDEgMjQ0LjUgMTU2LjV0Mjg0LjUgNTUuNXExNTYgMCAyOTggLTYxdDI0NSAtMTY0dDE2NCAtMjQ1dDYxIC0yOTh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsZWdhbCIgdW5pY29kZT0iJiN4ZjBlMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzcxIDBxMCAtNTMgLTM3IC05MGwtMTA3IC0xMDhxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtMzYzIDM2NHEtMzggMzYgLTM4IDkwcTAgNTMgNDMgOTZsLTI1NiAyNTZsLTEyNiAtMTI2cS0xNCAtMTQgLTM0IC0xNHQtMzQgMTRxMiAtMiAxMi41IC0xMnQxMi41IC0xM3QxMCAtMTEuNXQxMCAtMTMuNXQ2IC0xMy41dDUuNSAtMTYuNXQxLjUgLTE4cTAgLTM4IC0yOCAtNjhxLTMgLTMgLTE2LjUgLTE4dC0xOSAtMjAuNQ0KdC0xOC41IC0xNi41dC0yMiAtMTUuNXQtMjIgLTl0LTI2IC00LjVxLTQwIDAgLTY4IDI4bC00MDggNDA4cS0yOCAyOCAtMjggNjhxMCAxMyA0LjUgMjZ0OSAyMnQxNS41IDIydDE2LjUgMTguNXQyMC41IDE5dDE4IDE2LjVxMzAgMjggNjggMjhxMTAgMCAxOCAtMS41dDE2LjUgLTUuNXQxMy41IC02dDEzLjUgLTEwdDExLjUgLTEwdDEzIC0xMi41dDEyIC0xMi41cS0xNCAxNCAtMTQgMzR0MTQgMzRsMzQ4IDM0OHExNCAxNCAzNCAxNHQzNCAtMTQNCnEtMiAyIC0xMi41IDEydC0xMi41IDEzdC0xMCAxMS41dC0xMCAxMy41dC02IDEzLjV0LTUuNSAxNi41dC0xLjUgMThxMCAzOCAyOCA2OHEzIDMgMTYuNSAxOHQxOSAyMC41dDE4LjUgMTYuNXQyMiAxNS41dDIyIDl0MjYgNC41cTQwIDAgNjggLTI4bDQwOCAtNDA4cTI4IC0yOCAyOCAtNjhxMCAtMTMgLTQuNSAtMjZ0LTkgLTIydC0xNS41IC0yMnQtMTYuNSAtMTguNXQtMjAuNSAtMTl0LTE4IC0xNi41cS0zMCAtMjggLTY4IC0yOA0KcS0xMCAwIC0xOCAxLjV0LTE2LjUgNS41dC0xMy41IDZ0LTEzLjUgMTB0LTExLjUgMTB0LTEzIDEyLjV0LTEyIDEyLjVxMTQgLTE0IDE0IC0zNHQtMTQgLTM0bC0xMjYgLTEyNmwyNTYgLTI1NnE0MyA0MyA5NiA0M3E1MiAwIDkxIC0zN2wzNjMgLTM2M3EzNyAtMzkgMzcgLTkxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZGFzaGJvYXJkIiB1bmljb2RlPSImI3hmMGU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTM4NCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTU3NiA4MzJxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMDQgMzUxbDEwMSAzODJxNiAyNiAtNy41IDQ4LjV0LTM4LjUgMjkuNQ0KdC00OCAtNi41dC0zMCAtMzkuNWwtMTAxIC0zODJxLTYwIC01IC0xMDcgLTQzLjV0LTYzIC05OC41cS0yMCAtNzcgMjAgLTE0NnQxMTcgLTg5dDE0NiAyMHQ4OSAxMTdxMTYgNjAgLTYgMTE3dC03MiA5MXpNMTY2NCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgMTAyNHEwIDUzIC0zNy41IDkwLjUNCnQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDcyIDgzMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTc5MiAzODRxMCAtMjYxIC0xNDEgLTQ4M3EtMTkgLTI5IC01NCAtMjloLTE0MDJxLTM1IDAgLTU0IDI5DQpxLTE0MSAyMjEgLTE0MSA0ODNxMCAxODIgNzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudF9hbHQiIHVuaWNvZGU9IiYjeGYwZTU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODk2IDExNTJxLTIwNCAwIC0zODEuNSAtNjkuNXQtMjgyIC0xODcuNXQtMTA0LjUgLTI1NXEwIC0xMTIgNzEuNSAtMjEzLjV0MjAxLjUgLTE3NS41bDg3IC01MGwtMjcgLTk2cS0yNCAtOTEgLTcwIC0xNzJxMTUyIDYzIDI3NSAxNzFsNDMgMzhsNTcgLTZxNjkgLTggMTMwIC04cTIwNCAwIDM4MS41IDY5LjV0MjgyIDE4Ny41dDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwDQpxMCAtMTc0IC0xMjAgLTMyMS41dC0zMjYgLTIzM3QtNDUwIC04NS41cS03MCAwIC0xNDUgOHEtMTk4IC0xNzUgLTQ2MCAtMjQycS00OSAtMTQgLTExNCAtMjJoLTVxLTE1IDAgLTI3IDEwLjV0LTE2IDI3LjV2MXEtMyA0IC0wLjUgMTJ0MiAxMHQ0LjUgOS41bDYgOXQ3IDguNXQ4IDlxNyA4IDMxIDM0LjV0MzQuNSAzOHQzMSAzOS41dDMyLjUgNTF0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MXEwIDE3NCAxMjAgMzIxLjUNCnQzMjYgMjMzdDQ1MCA4NS41dDQ1MCAtODUuNXQzMjYgLTIzM3QxMjAgLTMyMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudHNfYWx0IiB1bmljb2RlPSImI3hmMGU2OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTcwNCAxMTUycS0xNTMgMCAtMjg2IC01MnQtMjExLjUgLTE0MXQtNzguNSAtMTkxcTAgLTgyIDUzIC0xNTh0MTQ5IC0xMzJsOTcgLTU2bC0zNSAtODRxMzQgMjAgNjIgMzlsNDQgMzFsNTMgLTEwcTc4IC0xNCAxNTMgLTE0cTE1MyAwIDI4NiA1MnQyMTEuNSAxNDF0NzguNSAxOTF0LTc4LjUgMTkxdC0yMTEuNSAxNDF0LTI4NiA1MnpNNzA0IDEyODBxMTkxIDAgMzUzLjUgLTY4LjV0MjU2LjUgLTE4Ni41dDk0IC0yNTd0LTk0IC0yNTcNCnQtMjU2LjUgLTE4Ni41dC0zNTMuNSAtNjguNXEtODYgMCAtMTc2IDE2cS0xMjQgLTg4IC0yNzggLTEyOHEtMzYgLTkgLTg2IC0xNmgtM3EtMTEgMCAtMjAuNSA4dC0xMS41IDIxcS0xIDMgLTEgNi41dDAuNSA2LjV0MiA2bDIuNSA1dDMuNSA1LjV0NCA1dDQuNSA1dDQgNC41cTUgNiAyMyAyNXQyNiAyOS41dDIyLjUgMjl0MjUgMzguNXQyMC41IDQ0cS0xMjQgNzIgLTE5NSAxNzd0LTcxIDIyNHEwIDEzOSA5NCAyNTd0MjU2LjUgMTg2LjUNCnQzNTMuNSA2OC41ek0xNTI2IDExMXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03cS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5DQpxMTI1IDkyIDE5MiAyMTJ0NjcgMjU0cTAgNzcgLTIzIDE1MnExMjkgLTcxIDIwNCAtMTc4dDc1IC0yMzBxMCAtMTIwIC03MSAtMjI0LjV0LTE5NSAtMTc2LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJib2x0IiB1bmljb2RlPSImI3hmMGU3OyIgaG9yaXotYWR2LXg9Ijg5NiIgDQpkPSJNODg1IDk3MHExOCAtMjAgNyAtNDRsLTU0MCAtMTE1N3EtMTMgLTI1IC00MiAtMjVxLTQgMCAtMTQgMnEtMTcgNSAtMjUuNSAxOXQtNC41IDMwbDE5NyA4MDhsLTQwNiAtMTAxcS00IC0xIC0xMiAtMXEtMTggMCAtMzEgMTFxLTE4IDE1IC0xMyAzOWwyMDEgODI1cTQgMTQgMTYgMjN0MjggOWgzMjhxMTkgMCAzMiAtMTIuNXQxMyAtMjkuNXEwIC04IC01IC0xOGwtMTcxIC00NjNsMzk2IDk4cTggMiAxMiAycTE5IDAgMzQgLTE1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2l0ZW1hcCIgdW5pY29kZT0iJiN4ZjBlODsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDI4OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkyaC01MTJ2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MmgtNTEydi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di0zMjANCnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MnEwIDUyIDM4IDkwdDkwIDM4aDUxMnYxOTJoLTk2cS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTZ2LTE5Mmg1MTJxNTIgMCA5MCAtMzh0MzggLTkwdi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4DQp6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bWJyZWxsYSIgdW5pY29kZT0iJiN4ZjBlOTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik04OTYgNzA4di01ODBxMCAtMTA0IC03NiAtMTgwdC0xODAgLTc2dC0xODAgNzZ0LTc2IDE4MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDVxMCAtNTAgMzkgLTg5dDg5IC0zOXQ4OSAzOXQzOSA4OXY1ODBxMzMgMTEgNjQgMTF0NjQgLTExek0xNjY0IDY4MXEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTExIDAgLTIzIDEwcS00OSA0NiAtOTMgNjl0LTEwMiAyM3EtNjggMCAtMTI4IC0zN3QtMTAzIC05Nw0KcS03IC0xMCAtMTcuNSAtMjh0LTE0LjUgLTI0cS0xMSAtMTcgLTI4IC0xN3EtMTggMCAtMjkgMTdxLTQgNiAtMTQuNSAyNHQtMTcuNSAyOHEtNDMgNjAgLTEwMi41IDk3dC0xMjcuNSAzN3QtMTI3LjUgLTM3dC0xMDIuNSAtOTdxLTcgLTEwIC0xNy41IC0yOHQtMTQuNSAtMjRxLTExIC0xNyAtMjkgLTE3cS0xNyAwIC0yOCAxN3EtNCA2IC0xNC41IDI0dC0xNy41IDI4cS00MyA2MCAtMTAzIDk3dC0xMjggMzdxLTU4IDAgLTEwMiAtMjN0LTkzIC02OQ0KcS0xMiAtMTAgLTIzIC0xMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41cTAgNSAxIDdxNDUgMTgzIDE3Mi41IDMxOS41dDI5OCAyMDQuNXQzNjAuNSA2OHExNDAgMCAyNzQuNSAtNDB0MjQ2LjUgLTExMy41dDE5NC41IC0xODd0MTE1LjUgLTI1MS41cTEgLTIgMSAtN3pNODk2IDE0MDh2LTk4cS00MiAyIC02NCAydC02NCAtMnY5OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwYXN0ZSIgdW5pY29kZT0iJiN4ZjBlYTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik03NjggLTEyOGg4OTZ2NjQwaC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTM4NHYtMTE1MnpNMTAyNCAxMzEydjY0cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNzA0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtNjRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg3MDRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTI4MCA2NDBoMjk5bC0yOTkgMjk5di0yOTl6TTE3OTIgNTEydi02NzJxMCAtNDAgLTI4IC02OHQtNjggLTI4DQpoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MGgtNTQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDEwODhxNDAgMCA2OCAtMjh0MjggLTY4di0zMjhxMjEgLTEzIDM2IC0yOGw0MDggLTQwOHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImxpZ2h0X2J1bGIiIHVuaWNvZGU9IiYjeGYwZWI7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNNzM2IDk2MHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjV0LTIyLjUgOS41dC05LjUgMjIuNXEwIDQ2IC01NCA3MXQtMTA2IDI1cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV0OS41IDIyLjV0MjIuNSA5LjVxNTAgMCA5OS41IC0xNnQ4NyAtNTR0MzcuNSAtOTB6TTg5NiA5NjBxMCA3MiAtMzQuNSAxMzR0LTkwIDEwMS41dC0xMjMgNjJ0LTEzNi41IDIyLjV0LTEzNi41IC0yMi41dC0xMjMgLTYydC05MCAtMTAxLjV0LTM0LjUgLTEzNA0KcTAgLTEwMSA2OCAtMTgwcTEwIC0xMSAzMC41IC0zM3QzMC41IC0zM3ExMjggLTE1MyAxNDEgLTI5OGgyMjhxMTMgMTQ1IDE0MSAyOThxMTAgMTEgMzAuNSAzM3QzMC41IDMzcTY4IDc5IDY4IDE4MHpNMTAyNCA5NjBxMCAtMTU1IC0xMDMgLTI2OHEtNDUgLTQ5IC03NC41IC04N3QtNTkuNSAtOTUuNXQtMzQgLTEwNy41cTQ3IC0yOCA0NyAtODJxMCAtMzcgLTI1IC02NHEyNSAtMjcgMjUgLTY0cTAgLTUyIC00NSAtODFxMTMgLTIzIDEzIC00Nw0KcTAgLTQ2IC0zMS41IC03MXQtNzcuNSAtMjVxLTIwIC00NCAtNjAgLTcwdC04NyAtMjZ0LTg3IDI2dC02MCA3MHEtNDYgMCAtNzcuNSAyNXQtMzEuNSA3MXEwIDI0IDEzIDQ3cS00NSAyOSAtNDUgODFxMCAzNyAyNSA2NHEtMjUgMjcgLTI1IDY0cTAgNTQgNDcgODJxLTQgNTAgLTM0IDEwNy41dC01OS41IDk1LjV0LTc0LjUgODdxLTEwMyAxMTMgLTEwMyAyNjhxMCA5OSA0NC41IDE4NC41dDExNyAxNDJ0MTY0IDg5dDE4Ni41IDMyLjUNCnQxODYuNSAtMzIuNXQxNjQgLTg5dDExNyAtMTQydDQ0LjUgLTE4NC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXhjaGFuZ2UiIHVuaWNvZGU9IiYjeGYwZWM7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc5MiAzNTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTEyIDAgLTI0IDEwbC0zMTkgMzIwcS05IDkgLTkgMjJxMCAxNCA5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMTM3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgODk2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05DQpxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJoLTEzNzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzc2djE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2xvdWRfZG93bmxvYWQiIHVuaWNvZGU9IiYjeGYwZWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNMTI4MCA2MDhxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djM1MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTM1MmgtMjI0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNCA5IC0yM2wzNTIgLTM1MnE5IC05IDIzIC05dDIzIDlsMzUxIDM1MXExMCAxMiAxMCAyNHpNMTkyMCAzODRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtMTA4OA0KcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2xvdWRfdXBsb2FkIiB1bmljb2RlPSImI3hmMGVlOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTEyODAgNjcycTAgMTQgLTkgMjNsLTM1MiAzNTJxLTkgOSAtMjMgOXQtMjMgLTlsLTM1MSAtMzUxcS0xMCAtMTIgLTEwIC0yNHEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTM1MnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41djM1MmgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTkyMCAzODRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtMTA4OA0KcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXNlcl9tZCIgdW5pY29kZT0iJiN4ZjBmMDsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0zODQgMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTMxcTAgLTEyMSAtNzMgLTE5MHQtMTk0IC02OWgtODc0cS0xMjEgMCAtMTk0IDY5dC03MyAxOTBxMCA2OCA1LjUgMTMxdDI0IDEzOHQ0Ny41IDEzMi41dDgxIDEwM3QxMjAgNjAuNXEtMjIgLTUyIC0yMiAtMTIwdi0yMDNxLTU4IC0yMCAtOTMgLTcwdC0zNSAtMTExcTAgLTgwIDU2IC0xMzZ0MTM2IC01Ng0KdDEzNiA1NnQ1NiAxMzZxMCA2MSAtMzUuNSAxMTF0LTkyLjUgNzB2MjAzcTAgNjIgMjUgOTNxMTMyIC0xMDQgMjk1IC0xMDR0Mjk1IDEwNHEyNSAtMzEgMjUgLTkzdi02NHEtMTA2IDAgLTE4MSAtNzV0LTc1IC0xODF2LTg5cS0zMiAtMjkgLTMyIC03MXEwIC00MCAyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4cTAgNDIgLTMyIDcxdjg5cTAgNTIgMzggOTB0OTAgMzh0OTAgLTM4dDM4IC05MHYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OA0KdDY4IC0yOHQ2OCAyOHQyOCA2OHEwIDQyIC0zMiA3MXY4OXEwIDY4IC0zNC41IDEyNy41dC05My41IDkzLjVxMCAxMCAwLjUgNDIuNXQwIDQ4dC0yLjUgNDEuNXQtNyA0N3QtMTMgNDBxNjggLTE1IDEyMCAtNjAuNXQ4MSAtMTAzdDQ3LjUgLTEzMi41dDI0IC0xMzh0NS41IC0xMzF6TTEwODggMTAyNHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjUNCnQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RldGhvc2NvcGUiIHVuaWNvZGU9IiYjeGYwZjE7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNDA4IDgzMnEwIC02MiAtMzUuNSAtMTExdC05Mi41IC03MHYtMzk1cTAgLTE1OSAtMTMxLjUgLTI3MS41dC0zMTYuNSAtMTEyLjV0LTMxNi41IDExMi41dC0xMzEuNSAyNzEuNXYxMzJxLTE2NCAyMCAtMjc0IDEyOHQtMTEwIDI1MnY1MTJxMCAyNiAxOSA0NXQ0NSAxOXE2IDAgMTYgLTJxMTcgMzAgNDcgNDgNCnQ2NSAxOHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtMzMgMCAtNjQgMTh2LTQwMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2NDAycS0zMSAtMTggLTY0IC0xOHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXEzNSAwIDY1IC0xOHQ0NyAtNDhxMTAgMiAxNiAycTI2IDAgNDUgLTE5dDE5IC00NXYtNTEycTAgLTE0NCAtMTEwIC0yNTINCnQtMjc0IC0xMjh2LTEzMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2Mzk1cS01NyAyMSAtOTIuNSA3MHQtMzUuNSAxMTFxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN1aXRjYXNlIiB1bmljb2RlPSImI3hmMGYyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0yODggMTE1MnYtMTI4MGgtNjRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoNjR6TTE0MDggMTE1MnYtMTI4MGgtMTAyNHYxMjgwaDEyOHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTI4ek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC02NHYxMjgwaDY0cTkyIDAgMTU4IC02Ng0KdDY2IC0xNTh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJiZWxsX2FsdCIgdW5pY29kZT0iJiN4ZjBmMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik05MTIgLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTE3MjggMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTQ0OHEtNTIgMCAtOTAgMzh0LTM4IDkwcTUwIDQyIDkxIDg4dDg1IDExOS41dDc0LjUgMTU4LjUNCnQ1MCAyMDZ0MTkuNSAyNjBxMCAxNTIgMTE3IDI4Mi41dDMwNyAxNTguNXEtOCAxOSAtOCAzOXEwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMjAgLTggLTM5cTE5MCAtMjggMzA3IC0xNTguNXQxMTcgLTI4Mi41cTAgLTEzOSAxOS41IC0yNjB0NTAgLTIwNnQ3NC41IC0xNTguNXQ4NSAtMTE5LjV0OTEgLTg4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29mZmVlIiB1bmljb2RlPSImI3hmMGY0OyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTE2NjQgODk2cTAgODAgLTU2IDEzNnQtMTM2IDU2aC02NHYtMzg0aDY0cTgwIDAgMTM2IDU2dDU2IDEzNnpNMCAxMjhoMTc5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTEyODBxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXpNMTg1NiA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtNjR2LTMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC03MDRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1DQp0NDUgMTloMTE1MnExNTkgMCAyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9vZCIgdW5pY29kZT0iJiN4ZjBmNTsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik02NDAgMTQ3MnYtNjQwcTAgLTYxIC0zNS41IC0xMTF0LTkyLjUgLTcwdi03NzlxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY3NzlxLTU3IDIwIC05Mi41IDcwdC0zNS41IDExMXY2NDBxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1DQp0NDUgLTE5dDQ1IDE5dDE5IDQ1djQxNnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTQ3MnYtMTYwMHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTEyOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjUxMmgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2ODAwcTAgMTMyIDk0IDIyNnQyMjYgOTRoMjU2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZpbGVfdGV4dF9hbHQiIHVuaWNvZGU9IiYjeGYwZjY7IiANCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgweg0KTTM4NCA3MzZxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTcwNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNMTEyMCA1MTJxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHpNMTEyMCAyNTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0DQpxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVpbGRpbmciIHVuaWNvZGU9IiYjeGYwZjc7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMzg0IDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNMTE1MiAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNODk2IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTY0MCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDk5MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoNCk02NDAgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNMTE1MiA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNODk2IDk5MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTY0MCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNODk2IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNODk2IC0xMjhoMzg0djE1MzZoLTExNTJ2LTE1MzZoMzg0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTIyNHpNMTQwOCAxNDcydi0xNjY0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE2NjRxMCAyNiAxOSA0NXQ0NSAxOWgxMjgwcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Imhvc3BpdGFsIiB1bmljb2RlPSImI3hmMGY4OyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTY0MCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTExNTIgMjI0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoNCk02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6DQpNODk2IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eg0KTTg5NiAtMTI4aDM4NHYxMTUyaC0yNTZ2LTMycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDQ4cS00MCAwIC02OCAyOHQtMjggNjh2MzJoLTI1NnYtMTE1MmgzODR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzIwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMjI0ek04OTYgMTA1NnYzMjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2aC0xMjh2OTZxMCAxMyAtOS41IDIyLjUNCnQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTQwOCAxMDg4di0xMjgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyODBxMCAyNiAxOSA0NXQ0NSAxOWgzMjANCnYyODhxMCA0MCAyOCA2OHQ2OCAyOGg0NDhxNDAgMCA2OCAtMjh0MjggLTY4di0yODhoMzIwcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFtYnVsYW5jZSIgdW5pY29kZT0iJiN4ZjBmOTsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik02NDAgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTQgLTIgLTIyIC05bC0xOTUgLTE5NXEtNyAtMTIgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41DQp0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTY2NCA4MDB2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNMTkyMCAxMzQ0di0xMTUyDQpxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xOTJxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtMzg0cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5djQxNnEwIDI2IDEzIDU4dDMyIDUxbDE5OCAxOThxMTkgMTkgNTEgMzJ0NTggMTNoMTYwdjMyMHEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWVka2l0IiB1bmljb2RlPSImI3hmMGZhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyODAgNDE2djE5MnEwIDE0IC05IDIzdC0yMyA5aC0yMjR2MjI0cTAgMTQgLTkgMjN0LTIzIDloLTE5MnEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yMjRoLTIyNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMjI0di0yMjRxMCAtMTQgOSAtMjN0MjMgLTloMTkycTE0IDAgMjMgOXQ5IDIzdjIyNGgyMjRxMTQgMCAyMyA5dDkgMjN6TTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0yNTYgMTE1MnYtMTI4MGgtMzINCnEtOTIgMCAtMTU4IDY2dC02NiAxNTh2ODMycTAgOTIgNjYgMTU4dDE1OCA2NmgzMnpNMTQ0MCAxMTUydi0xMjgwaC0xMDg4djEyODBoMTYwdjE2MHEwIDQwIDI4IDY4dDY4IDI4aDU3NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTE2MGgxNjB6TTE3OTIgOTI4di04MzJxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTMydjEyODBoMzJxOTIgMCAxNTggLTY2dDY2IC0xNTh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmaWdodGVyX2pldCIgdW5pY29kZT0iJiN4ZjBmYjsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xOTIwIDU3NnEtMSAtMzIgLTI4OCAtOTZsLTM1MiAtMzJsLTIyNCAtNjRoLTY0bC0yOTMgLTM1Mmg2OXEyNiAwIDQ1IC00LjV0MTkgLTExLjV0LTE5IC0xMS41dC00NSAtNC41aC05NmgtMTYwaC02NHYzMmg2NHY0MTZoLTE2MGwtMTkyIC0yMjRoLTk2bC0zMiAzMnYxOTJoMzJ2MzJoMTI4djhsLTE5MiAyNHYxMjhsMTkyIDI0djhoLTEyOHYzMmgtMzJ2MTkybDMyIDMyaDk2bDE5MiAtMjI0aDE2MHY0MTZoLTY0djMyaDY0aDE2MGg5Ng0KcTI2IDAgNDUgLTQuNXQxOSAtMTEuNXQtMTkgLTExLjV0LTQ1IC00LjVoLTY5bDI5MyAtMzUyaDY0bDIyNCAtNjRsMzUyIC0zMnExMjggLTI4IDIwMCAtNTJ0ODAgLTM0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmVlciIgdW5pY29kZT0iJiN4ZjBmYzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik02NDAgNjQwdjM4NGgtMjU2di0yNTZxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41aDEyOHpNMTY2NCAxOTJ2LTE5MmgtMTE1MnYxOTJsMTI4IDE5MmgtMTI4cS0xNTkgMCAtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41djMyMGwtNjQgNjRsMzIgMTI4aDQ4MGwzMiAxMjhoOTYwbDMyIC0xOTJsLTY0IC0zMnYtODAweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaF9zaWduIiB1bmljb2RlPSImI3hmMGZkOyIgDQpkPSJNMTI4MCAxOTJ2ODk2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMzIwaC01MTJ2MzIwcTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtODk2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDUxMnYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwDQpxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMGZlIiB1bmljb2RlPSImI3hmMGZlOyIgDQpkPSJNMTI4MCA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMzIwdjMyMHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTMyMGgtMzIwcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMzIwdi0zMjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoMzIwcTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwDQpxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfbGVmdCIgdW5pY29kZT0iJiN4ZjEwMDsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik02MjcgMTYwcTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3pNMTAxMSAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyMw0KdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTM5MyAtMzkzbDM5MyAtMzkzcTEwIC0xMCAxMCAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfcmlnaHQiIHVuaWNvZGU9IiYjeGYxMDE7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNNTk1IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNOTc5IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzDQpsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZG91YmxlX2FuZ2xlX3VwIiB1bmljb2RlPSImI3hmMTAyOyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTEwNzUgMjI0cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5M3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6TTEwNzUgNjA4cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5Mw0KcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImRvdWJsZV9hbmdsZV9kb3duIiB1bmljb2RlPSImI3hmMTAzOyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTEwNzUgNjcycTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6TTEwNzUgMTA1NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjMNCnQxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbmdsZV9sZWZ0IiB1bmljb2RlPSImI3hmMTA0OyIgaG9yaXotYWR2LXg9IjY0MCIgDQpkPSJNNjI3IDk5MnEwIC0xMyAtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbmdsZV9yaWdodCIgdW5pY29kZT0iJiN4ZjEwNTsiIGhvcml6LWFkdi14PSI2NDAiIA0KZD0iTTU5NSA1NzZxMCAtMTMgLTEwIC0yM2wtNDY2IC00NjZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2wzOTMgMzkzbC0zOTMgMzkzcS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbmdsZV91cCIgdW5pY29kZT0iJiN4ZjEwNjsiIGhvcml6LWFkdi14PSIxMTUyIiANCmQ9Ik0xMDc1IDM1MnEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMzkzIDM5M2wtMzkzIC0zOTNxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYW5nbGVfZG93biIgdW5pY29kZT0iJiN4ZjEwNzsiIGhvcml6LWFkdi14PSIxMTUyIiANCmQ9Ik0xMDc1IDgwMHEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZGVza3RvcCIgdW5pY29kZT0iJiN4ZjEwODsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xNzkyIDU0NHY4MzJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtODMycTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDEzNzZ2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTU0NHEwIC0zNyAxNiAtNzcuNXQzMiAtNzF0MTYgLTQzLjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5DQp0LTE5IDQ1cTAgMTQgMTYgNDR0MzIgNzB0MTYgNzhoLTU0NHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImxhcHRvcCIgdW5pY29kZT0iJiN4ZjEwOTsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik00MTYgMjU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y3MDRxMCA2NiA0NyAxMTN0MTEzIDQ3aDEwODhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTcwNHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHpNMzg0IDExMjB2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEwODhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xMDg4cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXoNCk0xNzYwIDE5MmgxNjB2LTk2cTAgLTQwIC00NyAtNjh0LTExMyAtMjhoLTE2MDBxLTY2IDAgLTExMyAyOHQtNDcgNjh2OTZoMTYwaDE2MDB6TTEwNDAgOTZxMTYgMCAxNiAxNnQtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0YWJsZXQiIHVuaWNvZGU9IiYjeGYxMGE7IiBob3Jpei1hZHYteD0iMTE1MiIgDQpkPSJNNjQwIDEyOHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjQgMjg4djk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTgzMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDgzMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTgzMg0KcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2g4MzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtb2JpbGVfcGhvbmUiIHVuaWNvZGU9IiYjeGYxMGI7IiBob3Jpei1hZHYteD0iNzY4IiANCmQ9Ik00NjQgMTI4cTAgMzMgLTIzLjUgNTYuNXQtNTYuNSAyMy41dC01Ni41IC0yMy41dC0yMy41IC01Ni41dDIzLjUgLTU2LjV0NTYuNSAtMjMuNXQ1Ni41IDIzLjV0MjMuNSA1Ni41ek02NzIgMjg4djcwNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTUxMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDUxMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek00ODAgMTEzNg0KcTAgMTYgLTE2IDE2aC0xNjBxLTE2IDAgLTE2IC0xNnQxNiAtMTZoMTYwcTE2IDAgMTYgMTZ6TTc2OCAxMTUydi0xMDI0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2MTAyNHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYmxhbmsiIHVuaWNvZGU9IiYjeGYxMGM7IiANCmQ9Ik03NjggMTE4NHEtMTQ4IDAgLTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3QyNzMgNzN0MTk4IDE5OHQ3MyAyNzN0LTczIDI3M3QtMTk4IDE5OHQtMjczIDczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwMw0KdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icXVvdGVfbGVmdCIgdW5pY29kZT0iJiN4ZjEwZDsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik03NjggNTc2di0zODRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2NzA0cTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNWg2NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMzJxMCAtNDAgMjggLTY4dDY4IC0yOGgyMjRxODAgMCAxMzYgLTU2dDU2IC0xMzZ6DQpNMTY2NCA1NzZ2LTM4NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtMzg0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41aDY0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjRxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0zMnEwIC00MCAyOCAtNjh0NjggLTI4aDIyNHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InF1b3RlX3JpZ2h0IiB1bmljb2RlPSImI3hmMTBlOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTc2OCAxMjE2di03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek0xNjY0IDEyMTYNCnYtNzA0cTAgLTEwNCAtNDAuNSAtMTk4LjV0LTEwOS41IC0xNjMuNXQtMTYzLjUgLTEwOS41dC0xOTguNSAtNDAuNWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHExMDYgMCAxODEgNzV0NzUgMTgxdjMycTAgNDAgLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzODRxMCA4MCA1NiAxMzZ0MTM2IDU2aDM4NHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNwaW5uZXIiIHVuaWNvZGU9IiYjeGYxMTA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNTI2IDE0MnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTIgMCAtOTAgMzh0LTM4IDkwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTEwMjQgLTY0cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMzIwIDY0MHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNQ0KdC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTUyMiAxNDJxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNNTU4IDExMzhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDd0LTExMyA0N3QtNDcgMTEzdDQ3IDExM3QxMTMgNDd0MTEzIC00N3Q0NyAtMTEzeg0KTTE3MjggNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTA4OCAxMzQ0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTYxOCAxMTM4cTAgLTkzIC02NiAtMTU4LjV0LTE1OCAtNjUuNXEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNQ0KcTAgOTIgNjUuNSAxNTh0MTU4LjUgNjZxOTIgMCAxNTggLTY2dDY2IC0xNTh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGUiIHVuaWNvZGU9IiYjeGYxMTE7IiANCmQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJlcGx5IiB1bmljb2RlPSImI3hmMTEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgNDE2cTAgLTE2NiAtMTI3IC00NTFxLTMgLTcgLTEwLjUgLTI0dC0xMy41IC0zMHQtMTMgLTIycS0xMiAtMTcgLTI4IC0xN3EtMTUgMCAtMjMuNSAxMHQtOC41IDI1cTAgOSAyLjUgMjYuNXQyLjUgMjMuNXE1IDY4IDUgMTIzcTAgMTAxIC0xNy41IDE4MXQtNDguNSAxMzguNXQtODAgMTAxdC0xMDUuNSA2OS41dC0xMzMgNDIuNXQtMTU0IDIxLjV0LTE3NS41IDZoLTIyNHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTkNCmwtNTEyIDUxMnEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDUxMiA1MTJxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXYtMjU2aDIyNHE3MTMgMCA4NzUgLTQwM3E1MyAtMTM0IDUzIC0zMzN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnaXRodWJfYWx0IiB1bmljb2RlPSImI3hmMTEzOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTY0MCAzMjBxMCAtNDAgLTEyLjUgLTgydC00MyAtNzZ0LTcyLjUgLTM0dC03Mi41IDM0dC00MyA3NnQtMTIuNSA4MnQxMi41IDgydDQzIDc2dDcyLjUgMzR0NzIuNSAtMzR0NDMgLTc2dDEyLjUgLTgyek0xMjgwIDMyMHEwIC00MCAtMTIuNSAtODJ0LTQzIC03NnQtNzIuNSAtMzR0LTcyLjUgMzR0LTQzIDc2dC0xMi41IDgydDEyLjUgODJ0NDMgNzZ0NzIuNSAzNHQ3Mi41IC0zNHQ0MyAtNzZ0MTIuNSAtODJ6TTE0NDAgMzIwDQpxMCAxMjAgLTY5IDIwNHQtMTg3IDg0cS00MSAwIC0xOTUgLTIxcS03MSAtMTEgLTE1NyAtMTF0LTE1NyAxMXEtMTUyIDIxIC0xOTUgMjFxLTExOCAwIC0xODcgLTg0dC02OSAtMjA0cTAgLTg4IDMyIC0xNTMuNXQ4MSAtMTAzdDEyMiAtNjB0MTQwIC0yOS41dDE0OSAtN2gxNjhxODIgMCAxNDkgN3QxNDAgMjkuNXQxMjIgNjB0ODEgMTAzdDMyIDE1My41ek0xNjY0IDQ5NnEwIC0yMDcgLTYxIC0zMzFxLTM4IC03NyAtMTA1LjUgLTEzM3QtMTQxIC04Ng0KdC0xNzAgLTQ3LjV0LTE3MS41IC0yMnQtMTY3IC00LjVxLTc4IDAgLTE0MiAzdC0xNDcuNSAxMi41dC0xNTIuNSAzMHQtMTM3IDUxLjV0LTEyMSA4MXQtODYgMTE1cS02MiAxMjMgLTYyIDMzMXEwIDIzNyAxMzYgMzk2cS0yNyA4MiAtMjcgMTcwcTAgMTE2IDUxIDIxOHExMDggMCAxOTAgLTM5LjV0MTg5IC0xMjMuNXExNDcgMzUgMzA5IDM1cTE0OCAwIDI4MCAtMzJxMTA1IDgyIDE4NyAxMjF0MTg5IDM5cTUxIC0xMDIgNTEgLTIxOA0KcTAgLTg3IC0yNyAtMTY4cTEzNiAtMTYwIDEzNiAtMzk4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9sZGVyX2Nsb3NlX2FsdCIgdW5pY29kZT0iJiN4ZjExNDsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNTM2IDIyNHY3MDRxMCA0MCAtMjggNjh0LTY4IDI4aC03MDRxLTQwIDAgLTY4IDI4dC0yOCA2OHY2NHEwIDQwIC0yOCA2OHQtNjggMjhoLTMyMHEtNDAgMCAtNjggLTI4dC0yOCAtNjh2LTk2MHEwIC00MCAyOCAtNjh0NjggLTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHpNMTY2NCA5Mjh2LTcwNHEwIC05MiAtNjYgLTE1OHQtMTU4IC02NmgtMTIxNnEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjANCnE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZm9sZGVyX29wZW5fYWx0IiB1bmljb2RlPSImI3hmMTE1OyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTE3ODEgNjA1cTAgMzUgLTUzIDM1aC0xMDg4cS00MCAwIC04NS41IC0yMS41dC03MS41IC01Mi41bC0yOTQgLTM2M3EtMTggLTI0IC0xOCAtNDBxMCAtMzUgNTMgLTM1aDEwODhxNDAgMCA4NiAyMnQ3MSA1M2wyOTQgMzYzcTE4IDIyIDE4IDM5ek02NDAgNzY4aDc2OHYxNjBxMCA0MCAtMjggNjh0LTY4IDI4aC01NzZxLTQwIDAgLTY4IDI4dC0yOCA2OHY2NHEwIDQwIC0yOCA2OHQtNjggMjhoLTMyMHEtNDAgMCAtNjggLTI4dC0yOCAtNjgNCnYtODUzbDI1NiAzMTVxNDQgNTMgMTE2IDg3LjV0MTQwIDM0LjV6TTE5MDkgNjA1cTAgLTYyIC00NiAtMTIwbC0yOTUgLTM2M3EtNDMgLTUzIC0xMTYgLTg3LjV0LTE0MCAtMzQuNWgtMTA4OHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMTYwaDE5MnE1NCAwIDk5IC0yNC41dDY3IC03MC41cTE1IC0zMiAxNSAtNjh6DQoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImV4cGFuZF9hbHQiIHVuaWNvZGU9IiYjeGYxMTY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29sbGFwc2VfYWx0IiB1bmljb2RlPSImI3hmMTE3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNtaWxlIiB1bmljb2RlPSImI3hmMTE4OyIgDQpkPSJNMTEzNCA0NjFxLTM3IC0xMjEgLTEzOCAtMTk1dC0yMjggLTc0dC0yMjggNzR0LTEzOCAxOTVxLTggMjUgNCA0OC41dDM4IDMxLjVxMjUgOCA0OC41IC00dDMxLjUgLTM4cTI1IC04MCA5Mi41IC0xMjkuNXQxNTEuNSAtNDkuNXQxNTEuNSA0OS41dDkyLjUgMTI5LjVxOCAyNiAzMiAzOHQ0OSA0dDM3IC0zMS41dDQgLTQ4LjV6TTY0MCA4OTZxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41DQp0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTExNTIgODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTQwOCA2NDBxMCAxMzAgLTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF0LTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41DQp0NTEgLTI0OC41dDEzNi41IC0yMDR0MjA0IC0xMzYuNXQyNDguNSAtNTF0MjQ4LjUgNTF0MjA0IDEzNi41dDEzNi41IDIwNHQ1MSAyNDguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmcm93biIgdW5pY29kZT0iJiN4ZjExOTsiIA0KZD0iTTExMzQgMzA3cTggLTI1IC00IC00OC41dC0zNyAtMzEuNXQtNDkgNHQtMzIgMzhxLTI1IDgwIC05Mi41IDEyOS41dC0xNTEuNSA0OS41dC0xNTEuNSAtNDkuNXQtOTIuNSAtMTI5LjVxLTggLTI2IC0zMS41IC0zOHQtNDguNSAtNHEtMjYgOCAtMzggMzEuNXQtNCA0OC41cTM3IDEyMSAxMzggMTk1dDIyOCA3NHQyMjggLTc0dDEzOCAtMTk1ek02NDAgODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjUNCnQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xMTUyIDg5NnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE0MDggNjQwcTAgMTMwIC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxdC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDQNCnQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWVoIiB1bmljb2RlPSImI3hmMTFhOyIgDQpkPSJNMTE1MiA0NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWg2NDBxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTE1MiA4OTZxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNQ0KdC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE0MDggNjQwcTAgMTMwIC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxdC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDR0LTUxIC0yNDguNXQ1MSAtMjQ4LjV0MTM2LjUgLTIwNHQyMDQgLTEzNi41dDI0OC41IC01MXQyNDguNSA1MXQyMDQgMTM2LjV0MTM2LjUgMjA0dDUxIDI0OC41ek0xNTM2IDY0MA0KcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2FtZXBhZCIgdW5pY29kZT0iJiN4ZjExYjsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik04MzIgNDQ4djEyOHEwIDE0IC05IDIzdC0yMyA5aC0xOTJ2MTkycTAgMTQgLTkgMjN0LTIzIDloLTEyOHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJoLTE5MnEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMjhxMCAtMTQgOSAtMjN0MjMgLTloMTkydi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMTI4cTE0IDAgMjMgOXQ5IDIzdjE5MmgxOTJxMTQgMCAyMyA5dDkgMjN6TTE0MDggMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41DQp0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE2NjQgNjQwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xOTIwIDUxMnEwIC0yMTIgLTE1MCAtMzYydC0zNjIgLTE1MHEtMTkyIDAgLTMzOCAxMjhoLTIyMHEtMTQ2IC0xMjggLTMzOCAtMTI4cS0yMTIgMCAtMzYyIDE1MA0KdC0xNTAgMzYydDE1MCAzNjJ0MzYyIDE1MGg4OTZxMjEyIDAgMzYyIC0xNTB0MTUwIC0zNjJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJrZXlib2FyZCIgdW5pY29kZT0iJiN4ZjExYzsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0zODQgMzY4di05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNNTEyIDYyNHYtOTZxMCAtMTYgLTE2IC0xNmgtMjI0cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDIyNHExNiAwIDE2IC0xNnpNMzg0IDg4MHYtOTZxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTE0MDggMzY4di05NnEwIC0xNiAtMTYgLTE2DQpoLTg2NHEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg4NjRxMTYgMCAxNiAtMTZ6TTc2OCA2MjR2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek02NDAgODgwdi05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTAyNCA2MjR2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2DQpoOTZxMTYgMCAxNiAtMTZ6TTg5NiA4ODB2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek0xMjgwIDYyNHYtOTZxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTE2NjQgMzY4di05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTE1MiA4ODB2LTk2DQpxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTE0MDggODgwdi05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTY2NCA4ODB2LTM1MnEwIC0xNiAtMTYgLTE2aC0yMjRxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoMTEydjI0MHEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek0xNzkyIDEyOHY4OTZoLTE2NjR2LTg5Ng0KaDE2NjR6TTE5MjAgMTAyNHYtODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNjY0cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY4OTZxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDE2NjRxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmbGFnX2FsdCIgdW5pY29kZT0iJiN4ZjExZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjY0IDQ5MXY2MTZxLTE2OSAtOTEgLTMwNiAtOTFxLTgyIDAgLTE0NSAzMnEtMTAwIDQ5IC0xODQgNzYuNXQtMTc4IDI3LjVxLTE3MyAwIC00MDMgLTEyN3YtNTk5cTI0NSAxMTMgNDMzIDExM3E1NSAwIDEwMy41IC03LjV0OTggLTI2dDc3IC0zMXQ4Mi41IC0zOS41bDI4IC0xNHE0NCAtMjIgMTAxIC0yMnExMjAgMCAyOTMgOTJ6TTMyMCAxMjgwcTAgLTM1IC0xNy41IC02NHQtNDYuNSAtNDZ2LTEyNjZxMCAtMTQgLTkgLTIzdC0yMyAtOQ0KaC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMjY2cS0yOSAxNyAtNDYuNSA0NnQtMTcuNSA2NHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNzkyIDEyMTZ2LTc2M3EwIC0zOSAtMzUgLTU3cS0xMCAtNSAtMTcgLTlxLTIxOCAtMTE2IC0zNjkgLTExNnEtODggMCAtMTU4IDM1bC0yOCAxNHEtNjQgMzMgLTk5IDQ4dC05MSAyOXQtMTE0IDE0cS0xMDIgMCAtMjM1LjUgLTQ0dC0yMjguNSAtMTAyDQpxLTE1IC05IC0zMyAtOXEtMTYgMCAtMzIgOHEtMzIgMTkgLTMyIDU2djc0MnEwIDM1IDMxIDU1cTM1IDIxIDc4LjUgNDIuNXQxMTQgNTJ0MTUyLjUgNDkuNXQxNTUgMTlxMTEyIDAgMjA5IC0zMXQyMDkgLTg2cTM4IC0xOSA4OSAtMTlxMTIyIDAgMzEwIDExMnEyMiAxMiAzMSAxN3EzMSAxNiA2MiAtMnEzMSAtMjAgMzEgLTU1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmxhZ19jaGVja2VyZWQiIHVuaWNvZGU9IiYjeGYxMWU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODMyIDUzNnYxOTJxLTE4MSAtMTYgLTM4NCAtMTE3di0xODVxMjA1IDk2IDM4NCAxMTB6TTgzMiA5NTR2MTk3cS0xNzIgLTggLTM4NCAtMTI2di0xODlxMjE1IDExMSAzODQgMTE4ek0xNjY0IDQ5MXYxODRxLTIzNSAtMTE2IC0zODQgLTcxdjIyNHEtMjAgNiAtMzkgMTVxLTUgMyAtMzMgMTd0LTM0LjUgMTd0LTMxLjUgMTV0LTM0LjUgMTUuNXQtMzIuNSAxM3QtMzYgMTIuNXQtMzUgOC41dC0zOS41IDcuNXQtMzkuNSA0dC00NCAyDQpxLTIzIDAgLTQ5IC0zdi0yMjJoMTlxMTAyIDAgMTkyLjUgLTI5dDE5Ny41IC04MnExOSAtOSAzOSAtMTV2LTE4OHE0MiAtMTcgOTEgLTE3cTEyMCAwIDI5MyA5MnpNMTY2NCA5MTh2MTg5cS0xNjkgLTkxIC0zMDYgLTkxcS00NSAwIC03OCA4di0xOTZxMTQ4IC00MiAzODQgOTB6TTMyMCAxMjgwcTAgLTM1IC0xNy41IC02NHQtNDYuNSAtNDZ2LTEyNjZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTI2Ng0KcS0yOSAxNyAtNDYuNSA0NnQtMTcuNSA2NHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNzkyIDEyMTZ2LTc2M3EwIC0zOSAtMzUgLTU3cS0xMCAtNSAtMTcgLTlxLTIxOCAtMTE2IC0zNjkgLTExNnEtODggMCAtMTU4IDM1bC0yOCAxNHEtNjQgMzMgLTk5IDQ4dC05MSAyOXQtMTE0IDE0cS0xMDIgMCAtMjM1LjUgLTQ0dC0yMjguNSAtMTAycS0xNSAtOSAtMzMgLTlxLTE2IDAgLTMyIDgNCnEtMzIgMTkgLTMyIDU2djc0MnEwIDM1IDMxIDU1cTM1IDIxIDc4LjUgNDIuNXQxMTQgNTJ0MTUyLjUgNDkuNXQxNTUgMTlxMTEyIDAgMjA5IC0zMXQyMDkgLTg2cTM4IC0xOSA4OSAtMTlxMTIyIDAgMzEwIDExMnEyMiAxMiAzMSAxN3EzMSAxNiA2MiAtMnEzMSAtMjAgMzEgLTU1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGVybWluYWwiIHVuaWNvZGU9IiYjeGYxMjA7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNNTg1IDU1M2wtNDY2IC00NjZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2wzOTMgMzkzbC0zOTMgMzkzcS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN0LTEwIC0yM3pNMTY2NCA5NnYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTYwcS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2MHExNCAwIDIzIC05DQp0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2RlIiB1bmljb2RlPSImI3hmMTIxOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTYxNyAxMzdsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3QtMTAgLTIzek0xMjA4IDEyMDRsLTM3MyAtMTI5MXEtNCAtMTMgLTE1LjUgLTE5LjV0LTIzLjUgLTIuNWwtNjIgMTdxLTEzIDQgLTE5LjUgMTUuNXQtMi41IDI0LjUNCmwzNzMgMTI5MXE0IDEzIDE1LjUgMTkuNXQyMy41IDIuNWw2MiAtMTdxMTMgLTQgMTkuNSAtMTUuNXQyLjUgLTI0LjV6TTE4NjUgNTUzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3QtMTAgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVwbHlfYWxsIiB1bmljb2RlPSImI3hmMTIyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTY0MCA0NTR2LTcwcTAgLTQyIC0zOSAtNTlxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDUgMTlsLTUxMiA1MTJxLTE5IDE5IC0xOSA0NXQxOSA0NWw1MTIgNTEycTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl2LTY5bC0zOTcgLTM5OHEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1ek0xNzkyIDQxNnEwIC01OCAtMTcgLTEzMy41dC0zOC41IC0xMzh0LTQ4IC0xMjV0LTQwLjUgLTkwLjVsLTIwIC00MHEtOCAtMTcgLTI4IC0xN3EtNiAwIC05IDENCnEtMjUgOCAtMjMgMzRxNDMgNDAwIC0xMDYgNTY1cS02NCA3MSAtMTcwLjUgMTEwLjV0LTI2Ny41IDUyLjV2LTI1MXEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC01MTIgNTEycS0xOSAxOSAtMTkgNDV0MTkgNDVsNTEyIDUxMnEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di0yNjJxNDExIC0yOCA1OTkgLTIyMXExNjkgLTE3MyAxNjkgLTUwOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJfaGFsZl9lbXB0eSIgdW5pY29kZT0iJiN4ZjEyMzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xMTg2IDU3OWwyNTcgMjUwbC0zNTYgNTJsLTY2IDEwbC0zMCA2MGwtMTU5IDMyMnYtOTYzbDU5IC0zMWwzMTggLTE2OGwtNjAgMzU1bC0xMiA2NnpNMTYzOCA4NDFsLTM2MyAtMzU0bDg2IC01MDBxNSAtMzMgLTYgLTUxLjV0LTM0IC0xOC41cS0xNyAwIC00MCAxMmwtNDQ5IDIzNmwtNDQ5IC0yMzZxLTIzIC0xMiAtNDAgLTEycS0yMyAwIC0zNCAxOC41dC02IDUxLjVsODYgNTAwbC0zNjQgMzU0cS0zMiAzMiAtMjMgNTkuNXQ1NCAzNC41DQpsNTAyIDczbDIyNSA0NTVxMjAgNDEgNDkgNDFxMjggMCA0OSAtNDFsMjI1IC00NTVsNTAyIC03M3E0NSAtNyA1NCAtMzQuNXQtMjQgLTU5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb2NhdGlvbl9hcnJvdyIgdW5pY29kZT0iJiN4ZjEyNDsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xNDAxIDExODdsLTY0MCAtMTI4MHEtMTcgLTM1IC01NyAtMzVxLTUgMCAtMTUgMnEtMjIgNSAtMzUuNSAyMi41dC0xMy41IDM5LjV2NTc2aC01NzZxLTIyIDAgLTM5LjUgMTMuNXQtMjIuNSAzNS41dDQgNDJ0MjkgMzBsMTI4MCA2NDBxMTMgNyAyOSA3cTI3IDAgNDUgLTE5cTE1IC0xNCAxOC41IC0zNC41dC02LjUgLTM5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjcm9wIiB1bmljb2RlPSImI3hmMTI1OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTU1NyAyNTZoNTk1djU5NXpNNTEyIDMwMWw1OTUgNTk1aC01OTV2LTU5NXpNMTY2NCAyMjR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0yMjR2LTIyNHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC04NjRxLTE0IDAgLTIzIDl0LTkgMjN2ODY0aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHYyMjRxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjMNCnYtMjI0aDg1MWwyNDYgMjQ3cTEwIDkgMjMgOXQyMyAtOXE5IC0xMCA5IC0yM3QtOSAtMjNsLTI0NyAtMjQ2di04NTFoMjI0cTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2RlX2ZvcmsiIHVuaWNvZGU9IiYjeGYxMjY7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNMjg4IDY0cTAgNDAgLTI4IDY4dC02OCAyOHQtNjggLTI4dC0yOCAtNjh0MjggLTY4dDY4IC0yOHQ2OCAyOHQyOCA2OHpNMjg4IDEyMTZxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek05MjggMTA4OHEwIDQwIC0yOCA2OHQtNjggMjh0LTY4IC0yOHQtMjggLTY4dDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjh6TTEwMjQgMTA4OHEwIC01MiAtMjYgLTk2LjV0LTcwIC02OS41DQpxLTIgLTI4NyAtMjI2IC00MTRxLTY3IC0zOCAtMjAzIC04MXEtMTI4IC00MCAtMTY5LjUgLTcxdC00MS41IC0xMDB2LTI2cTQ0IC0yNSA3MCAtNjkuNXQyNiAtOTYuNXEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZxMCA1MiAyNiA5Ni41dDcwIDY5LjV2ODIwcS00NCAyNSAtNzAgNjkuNXQtMjYgOTYuNXEwIDgwIDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2cTAgLTUyIC0yNiAtOTYuNXQtNzAgLTY5LjV2LTQ5Nw0KcTU0IDI2IDE1NCA1N3E1NSAxNyA4Ny41IDI5LjV0NzAuNSAzMXQ1OSAzOS41dDQwLjUgNTF0MjggNjkuNXQ4LjUgOTEuNXEtNDQgMjUgLTcwIDY5LjV0LTI2IDk2LjVxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVubGluayIgdW5pY29kZT0iJiN4ZjEyNzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik00MzkgMjY1bC0yNTYgLTI1NnEtMTEgLTkgLTIzIC05dC0yMyA5cS05IDEwIC05IDIzdDkgMjNsMjU2IDI1NnExMCA5IDIzIDl0MjMgLTlxOSAtMTAgOSAtMjN0LTkgLTIzek02MDggMjI0di0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTM4NCA0NDhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMzIwcS0xNCAwIC0yMyA5dC05IDIzdDkgMjN0MjMgOWgzMjANCnExNCAwIDIzIC05dDkgLTIzek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTMzNCAzMzVxLTIxIDIxIC00MiA1NmwyMzkgMThsMjczIC0yNzRxMjcgLTI3IDY4IC0yNy41dDY4IDI2LjVsMTQ3IDE0NnEyOCAyOCAyOCA2N3EwIDQwIC0yOCA2OGwtMjc0IDI3NWwxOCAyMzlxMzUgLTIxIDU2IC00MmwzMzYgLTMzNnE4NCAtODYgODQgLTIwNHpNMTAzMSAxMDQ0bC0yMzkgLTE4DQpsLTI3MyAyNzRxLTI4IDI4IC02OCAyOHEtMzkgMCAtNjggLTI3bC0xNDcgLTE0NnEtMjggLTI4IC0yOCAtNjdxMCAtNDAgMjggLTY4bDI3NCAtMjc0bC0xOCAtMjQwcS0zNSAyMSAtNTYgNDJsLTMzNiAzMzZxLTg0IDg2IC04NCAyMDRxMCAxMjAgODUgMjAzbDE0NyAxNDZxODMgODMgMjAzIDgzcTEyMSAwIDIwNCAtODVsMzM0IC0zMzVxMjEgLTIxIDQyIC01NnpNMTY2NCA5NjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMzIwcS0xNCAwIC0yMyA5DQp0LTkgMjN0OSAyM3QyMyA5aDMyMHExNCAwIDIzIC05dDkgLTIzek0xMTIwIDE1MDR2LTMyMHEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdjMyMHEwIDE0IDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNMTUyNyAxMzUzbC0yNTYgLTI1NnEtMTEgLTkgLTIzIC05dC0yMyA5cS05IDEwIC05IDIzdDkgMjNsMjU2IDI1NnExMCA5IDIzIDl0MjMgLTlxOSAtMTAgOSAtMjN0LTkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icXVlc3Rpb24iIHVuaWNvZGU9IiYjeGYxMjg7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNNzA0IDI4MHYtMjQwcTAgLTE2IC0xMiAtMjh0LTI4IC0xMmgtMjQwcS0xNiAwIC0yOCAxMnQtMTIgMjh2MjQwcTAgMTYgMTIgMjh0MjggMTJoMjQwcTE2IDAgMjggLTEydDEyIC0yOHpNMTAyMCA4ODBxMCAtNTQgLTE1LjUgLTEwMXQtMzUgLTc2LjV0LTU1IC01OS41dC01Ny41IC00My41dC02MSAtMzUuNXEtNDEgLTIzIC02OC41IC02NXQtMjcuNSAtNjdxMCAtMTcgLTEyIC0zMi41dC0yOCAtMTUuNWgtMjQwcS0xNSAwIC0yNS41IDE4LjUNCnQtMTAuNSAzNy41djQ1cTAgODMgNjUgMTU2LjV0MTQzIDEwOC41cTU5IDI3IDg0IDU2dDI1IDc2cTAgNDIgLTQ2LjUgNzR0LTEwNy41IDMycS02NSAwIC0xMDggLTI5cS0zNSAtMjUgLTEwNyAtMTE1cS0xMyAtMTYgLTMxIC0xNnEtMTIgMCAtMjUgOGwtMTY0IDEyNXEtMTMgMTAgLTE1LjUgMjV0NS41IDI4cTE2MCAyNjYgNDY0IDI2NnE4MCAwIDE2MSAtMzF0MTQ2IC04M3QxMDYgLTEyNy41dDQxIC0xNTguNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8yNzkiIHVuaWNvZGU9IiYjeGYxMjk7IiBob3Jpei1hZHYteD0iNjQwIiANCmQ9Ik02NDAgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHYzODRoLTY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXYtNTc2aDY0cTI2IDAgNDUgLTE5dDE5IC00NXpNNTEyIDEzNDR2LTE5MnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE5Mg0KcTAgMjYgMTkgNDV0NDUgMTloMjU2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImV4Y2xhbWF0aW9uIiB1bmljb2RlPSImI3hmMTJhOyIgaG9yaXotYWR2LXg9IjY0MCIgDQpkPSJNNTEyIDI4OHYtMjI0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2MjI0cTAgMjYgMTkgNDV0NDUgMTloMjU2cTI2IDAgNDUgLTE5dDE5IC00NXpNNTQyIDEzNDRsLTI4IC03NjhxLTEgLTI2IC0yMC41IC00NXQtNDUuNSAtMTloLTI1NnEtMjYgMCAtNDUuNSAxOXQtMjAuNSA0NWwtMjggNzY4cS0xIDI2IDE3LjUgNDV0NDQuNSAxOWgzMjBxMjYgMCA0NC41IC0xOXQxNy41IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InN1cGVyc2NyaXB0IiB1bmljb2RlPSImI3hmMTJiOyIgDQpkPSJNODk3IDE2N3YtMTY3aC0yNDhsLTE1OSAyNTJsLTI0IDQycS04IDkgLTExIDIxaC0zcS0xIC0zIC0yLjUgLTYuNXQtMy41IC04dC0zIC02LjVxLTEwIC0yMCAtMjUgLTQ0bC0xNTUgLTI1MGgtMjU4djE2N2gxMjhsMTk3IDI5MWwtMTg1IDI3MmgtMTM3djE2OGgyNzZsMTM5IC0yMjhxMiAtNCAyMyAtNDJxOCAtOSAxMSAtMjFoM3EzIDkgMTEgMjFsMjUgNDJsMTQwIDIyOGgyNTd2LTE2OGgtMTI1bC0xODQgLTI2N2wyMDQgLTI5NmgxMDl6DQpNMTUzNCA4NDZ2LTIwNmgtNTE0bC0zIDI3cS00IDI4IC00IDQ2cTAgNjQgMjYgMTE3dDY1IDg2LjV0ODQgNjV0ODQgNTQuNXQ2NSA1NHQyNiA2NHEwIDM4IC0yOS41IDYyLjV0LTcwLjUgMjQuNXEtNTEgMCAtOTcgLTM5cS0xNCAtMTEgLTM2IC0zOGwtMTA1IDkycTI2IDM3IDYzIDY2cTgzIDY1IDE4OCA2NXExMTAgMCAxNzggLTU5LjV0NjggLTE1OC41cTAgLTU2IC0yNC41IC0xMDN0LTYyIC03Ni41dC04MS41IC01OC41dC04MiAtNTAuNQ0KdC02NS41IC01MS41dC0zMC41IC02M2gyMzJ2ODBoMTI2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3Vic2NyaXB0IiB1bmljb2RlPSImI3hmMTJjOyIgDQpkPSJNODk3IDE2N3YtMTY3aC0yNDhsLTE1OSAyNTJsLTI0IDQycS04IDkgLTExIDIxaC0zcS0xIC0zIC0yLjUgLTYuNXQtMy41IC04dC0zIC02LjVxLTEwIC0yMCAtMjUgLTQ0bC0xNTUgLTI1MGgtMjU4djE2N2gxMjhsMTk3IDI5MWwtMTg1IDI3MmgtMTM3djE2OGgyNzZsMTM5IC0yMjhxMiAtNCAyMyAtNDJxOCAtOSAxMSAtMjFoM3EzIDkgMTEgMjFsMjUgNDJsMTQwIDIyOGgyNTd2LTE2OGgtMTI1bC0xODQgLTI2N2wyMDQgLTI5NmgxMDl6DQpNMTUzNiAtNTB2LTIwNmgtNTE0bC00IDI3cS0zIDQ1IC0zIDQ2cTAgNjQgMjYgMTE3dDY1IDg2LjV0ODQgNjV0ODQgNTQuNXQ2NSA1NHQyNiA2NHEwIDM4IC0yOS41IDYyLjV0LTcwLjUgMjQuNXEtNTEgMCAtOTcgLTM5cS0xNCAtMTEgLTM2IC0zOGwtMTA1IDkycTI2IDM3IDYzIDY2cTgwIDY1IDE4OCA2NXExMTAgMCAxNzggLTU5LjV0NjggLTE1OC41cTAgLTY2IC0zNC41IC0xMTguNXQtODQgLTg2dC05OS41IC02Mi41dC04NyAtNjN0LTQxIC03Mw0KaDIzMnY4MGgxMjZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMjgzIiB1bmljb2RlPSImI3hmMTJkOyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTg5NiAxMjhsMzM2IDM4NGgtNzY4bC0zMzYgLTM4NGg3Njh6TTE5MDkgMTIwNXExNSAtMzQgOS41IC03MS41dC0zMC41IC02NS41bC04OTYgLTEwMjRxLTM4IC00NCAtOTYgLTQ0aC03NjhxLTM4IDAgLTY5LjUgMjAuNXQtNDcuNSA1NC41cS0xNSAzNCAtOS41IDcxLjV0MzAuNSA2NS41bDg5NiAxMDI0cTM4IDQ0IDk2IDQ0aDc2OHEzOCAwIDY5LjUgLTIwLjV0NDcuNSAtNTQuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InB1enpsZV9waWVjZSIgdW5pY29kZT0iJiN4ZjEyZTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjY0IDQzOHEwIC04MSAtNDQuNSAtMTM1dC0xMjMuNSAtNTRxLTQxIDAgLTc3LjUgMTcuNXQtNTkgMzh0LTU2LjUgMzh0LTcxIDE3LjVxLTExMCAwIC0xMTAgLTEyNHEwIC0zOSAxNiAtMTE1dDE1IC0xMTV2LTVxLTIyIDAgLTMzIC0xcS0zNCAtMyAtOTcuNSAtMTEuNXQtMTE1LjUgLTEzLjV0LTk4IC01cS02MSAwIC0xMDMgMjYuNXQtNDIgODMuNXEwIDM3IDE3LjUgNzF0MzggNTYuNXQzOCA1OXQxNy41IDc3LjVxMCA3OSAtNTQgMTIzLjUNCnQtMTM1IDQ0LjVxLTg0IDAgLTE0MyAtNDUuNXQtNTkgLTEyNy41cTAgLTQzIDE1IC04M3QzMy41IC02NC41dDMzLjUgLTUzdDE1IC01MC41cTAgLTQ1IC00NiAtODlxLTM3IC0zNSAtMTE3IC0zNXEtOTUgMCAtMjQ1IDI0cS05IDIgLTI3LjUgNHQtMjcuNSA0bC0xMyAycS0xIDAgLTMgMXEtMiAwIC0yIDF2MTAyNHEyIC0xIDE3LjUgLTMuNXQzNCAtNXQyMS41IC0zLjVxMTUwIC0yNCAyNDUgLTI0cTgwIDAgMTE3IDM1cTQ2IDQ0IDQ2IDg5DQpxMCAyMiAtMTUgNTAuNXQtMzMuNSA1M3QtMzMuNSA2NC41dC0xNSA4M3EwIDgyIDU5IDEyNy41dDE0NCA0NS41cTgwIDAgMTM0IC00NC41dDU0IC0xMjMuNXEwIC00MSAtMTcuNSAtNzcuNXQtMzggLTU5dC0zOCAtNTYuNXQtMTcuNSAtNzFxMCAtNTcgNDIgLTgzLjV0MTAzIC0yNi41cTY0IDAgMTgwIDE1dDE2MyAxN3YtMnEtMSAtMiAtMy41IC0xNy41dC01IC0zNHQtMy41IC0yMS41cS0yNCAtMTUwIC0yNCAtMjQ1cTAgLTgwIDM1IC0xMTcNCnE0NCAtNDYgODkgLTQ2cTIyIDAgNTAuNSAxNXQ1MyAzMy41dDY0LjUgMzMuNXQ4MyAxNXE4MiAwIDEyNy41IC01OXQ0NS41IC0xNDN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtaWNyb3Bob25lIiB1bmljb2RlPSImI3hmMTMwOyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTExNTIgODMydi0xMjhxMCAtMjIxIC0xNDcuNSAtMzg0LjV0LTM2NC41IC0xODcuNXYtMTMyaDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZ2MTMycS0yMTcgMjQgLTM2NC41IDE4Ny41dC0xNDcuNSAzODQuNXYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMTg1IDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjUNCnQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek04OTYgMTIxNnYtNTEycTAgLTEzMiAtOTQgLTIyNnQtMjI2IC05NHQtMjI2IDk0dC05NCAyMjZ2NTEycTAgMTMyIDk0IDIyNnQyMjYgOTR0MjI2IC05NHQ5NCAtMjI2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWljcm9waG9uZV9vZmYiIHVuaWNvZGU9IiYjeGYxMzE7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMjcxIDU5MWwtMTAxIC0xMDFxLTQyIDEwMyAtNDIgMjE0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC01MyAxNSAtMTEzek0xMzg1IDExOTNsLTM2MSAtMzYxdi0xMjhxMCAtMTMyIC05NCAtMjI2dC0yMjYgLTk0cS01NSAwIC0xMDkgMTlsLTk2IC05NnE5NyAtNTEgMjA1IC01MXExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjgNCnEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di0xMzJoMjU2cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnYxMzJxLTEyNSAxMyAtMjM1IDgxbC0yNTQgLTI1NHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC04MiA4MnEtMTAgMTAgLTEwIDIzdDEwIDIzbDEyMzQgMTIzNHExMCAxMCAyMyAxMHQyMyAtMTBsODIgLTgycTEwIC0xMCAxMCAtMjMNCnQtMTAgLTIzek0xMDA1IDEzMjVsLTYyMSAtNjIxdjUxMnEwIDEzMiA5NCAyMjZ0MjI2IDk0cTEwMiAwIDE4NC41IC01OXQxMTYuNSAtMTUyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hpZWxkIiB1bmljb2RlPSImI3hmMTMyOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTEwODggNTc2djY0MGgtNDQ4di0xMTM3cTExOSA2MyAyMTMgMTM3cTIzNSAxODQgMjM1IDM2MHpNMTI4MCAxMzQ0di03NjhxMCAtODYgLTMzLjUgLTE3MC41dC04MyAtMTUwdC0xMTggLTEyNy41dC0xMjYuNSAtMTAzdC0xMjEgLTc3LjV0LTg5LjUgLTQ5LjV0LTQyLjUgLTIwcS0xMiAtNiAtMjYgLTZ0LTI2IDZxLTE2IDcgLTQyLjUgMjB0LTg5LjUgNDkuNXQtMTIxIDc3LjV0LTEyNi41IDEwM3QtMTE4IDEyNy41dC04MyAxNTANCnQtMzMuNSAxNzAuNXY3NjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhbGVuZGFyX2VtcHR5IiB1bmljb2RlPSImI3hmMTMzOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTEyOCAtMTI4aDE0MDh2MTAyNGgtMTQwOHYtMTAyNHpNNTEyIDEwODh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTI4MCAxMDg4djI4OHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTE1MnYtMTI4MA0KcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgxMjhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlyZV9leHRpbmd1aXNoZXIiIHVuaWNvZGU9IiYjeGYxMzQ7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNNTEyIDEzNDRxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNDA4IDEzNzZ2LTMyMHEwIC0xNiAtMTIgLTI1cS04IC03IC0yMCAtN3EtNCAwIC03IDFsLTQ0OCA5NnEtMTEgMiAtMTggMTF0LTcgMjBoLTI1NnYtMTAycTExMSAtMjMgMTgzLjUgLTExMXQ3Mi41IC0yMDN2LTgwMHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djgwMA0KcTAgMTA2IDYyLjUgMTkwLjV0MTYxLjUgMTE0LjV2MTExaC0zMnEtNTkgMCAtMTE1IC0yMy41dC05MS41IC01M3QtNjYgLTY2LjV0LTQwLjUgLTUzLjV0LTE0IC0yNC41cS0xNyAtMzUgLTU3IC0zNXEtMTYgMCAtMjkgN3EtMjMgMTIgLTMxLjUgMzd0My41IDQ5cTUgMTAgMTQuNSAyNnQzNy41IDUzLjV0NjAuNSA3MHQ4NSA2N3QxMDguNSA1Mi41cS0yNSA0MiAtMjUgODZxMCA2NiA0NyAxMTN0MTEzIDQ3dDExMyAtNDd0NDcgLTExMw0KcTAgLTMzIC0xNCAtNjRoMzAycTAgMTEgNyAyMHQxOCAxMWw0NDggOTZxMyAxIDcgMXExMiAwIDIwIC03cTEyIC05IDEyIC0yNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InJvY2tldCIgdW5pY29kZT0iJiN4ZjEzNTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNDQwIDEwODhxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek0xNjY0IDEzNzZxMCAtMjQ5IC03NS41IC00MzAuNXQtMjUzLjUgLTM2MC41cS04MSAtODAgLTE5NSAtMTc2bC0yMCAtMzc5cS0yIC0xNiAtMTYgLTI2bC0zODQgLTIyNHEtNyAtNCAtMTYgLTRxLTEyIDAgLTIzIDlsLTY0IDY0cS0xMyAxNCAtOCAzMmw4NSAyNzZsLTI4MSAyODFsLTI3NiAtODVxLTMgLTEgLTkgLTENCnEtMTQgMCAtMjMgOWwtNjQgNjRxLTE3IDE5IC01IDM5bDIyNCAzODRxMTAgMTQgMjYgMTZsMzc5IDIwcTk2IDExNCAxNzYgMTk1cTE4OCAxODcgMzU4IDI1OHQ0MzEgNzFxMTQgMCAyNCAtOS41dDEwIC0yMi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWF4Y2RuIiB1bmljb2RlPSImI3hmMTM2OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NDUgNzYzbC0xNjQgLTc2M2gtMzM0bDE3OCA4MzJxMTMgNTYgLTE1IDg4cS0yNyAzMyAtODMgMzNoLTE2OWwtMjA0IC05NTNoLTMzNGwyMDQgOTUzaC0yODZsLTIwNCAtOTUzaC0zMzRsMjA0IDk1M2wtMTUzIDMyN2gxMjc2cTEwMSAwIDE4OS41IC00MC41dDE0Ny41IC0xMTMuNXE2MCAtNzMgODEgLTE2OC41dDAgLTE5NC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9zaWduX2xlZnQiIHVuaWNvZGU9IiYjeGYxMzc7IiANCmQ9Ik05MDkgMTQxbDEwMiAxMDJxMTkgMTkgMTkgNDV0LTE5IDQ1bC0zMDcgMzA3bDMwNyAzMDdxMTkgMTkgMTkgNDV0LTE5IDQ1bC0xMDIgMTAycS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtNDU0IC00NTRxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWw0NTQgLTQ1NHExOSAtMTkgNDUgLTE5dDQ1IDE5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNQ0KdC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9zaWduX3JpZ2h0IiB1bmljb2RlPSImI3hmMTM4OyIgDQpkPSJNNzE3IDE0MWw0NTQgNDU0cTE5IDE5IDE5IDQ1dC0xOSA0NWwtNDU0IDQ1NHEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTEwMiAtMTAycS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsMzA3IC0zMDdsLTMwNyAtMzA3cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsMTAyIC0xMDJxMTkgLTE5IDQ1IC0xOXQ0NSAxOXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjUNCnQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl91cCIgdW5pY29kZT0iJiN4ZjEzOTsiIA0KZD0iTTExNjUgMzk3bDEwMiAxMDJxMTkgMTkgMTkgNDV0LTE5IDQ1bC00NTQgNDU0cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtNDU0IC00NTRxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWwxMDIgLTEwMnExOSAtMTkgNDUgLTE5dDQ1IDE5bDMwNyAzMDdsMzA3IC0zMDdxMTkgLTE5IDQ1IC0xOXQ0NSAxOXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjUNCnQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl9kb3duIiB1bmljb2RlPSImI3hmMTNhOyIgDQpkPSJNODEzIDIzN2w0NTQgNDU0cTE5IDE5IDE5IDQ1dC0xOSA0NWwtMTAyIDEwMnEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTMwNyAtMzA3bC0zMDcgMzA3cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtMTAyIC0xMDJxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWw0NTQgLTQ1NHExOSAtMTkgNDUgLTE5dDQ1IDE5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNQ0KdC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaHRtbDUiIHVuaWNvZGU9IiYjeGYxM2I7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNMTEzMCA5MzlsMTYgMTc1aC04ODRsNDcgLTUzNGg2MTJsLTIyIC0yMjhsLTE5NyAtNTNsLTE5NiA1M2wtMTMgMTQwaC0xNzVsMjIgLTI3OGwzNjIgLTEwMGg0djFsMzU5IDk5bDUwIDU0NGgtNjQ0bC0xNSAxODFoNjc0ek0wIDE0MDhoMTQwOGwtMTI4IC0xNDM4bC01NzggLTE2MmwtNTc0IDE2MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNzczMiIHVuaWNvZGU9IiYjeGYxM2M7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMjc1IDE0MDhoMTUwNWwtMjY2IC0xMzMzbC04MDQgLTI2N2wtNjk4IDI2N2w3MSAzNTZoMjk3bC0yOSAtMTQ3bDQyMiAtMTYxbDQ4NiAxNjFsNjggMzM5aC0xMjA4bDU4IDI5N2gxMjA5bDM4IDE5MWgtMTIwOHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFuY2hvciIgdW5pY29kZT0iJiN4ZjEzZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik05NjAgMTI4MHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE3OTIgMzUydi0zNTJxMCAtMjIgLTIwIC0zMHEtOCAtMiAtMTIgLTJxLTEyIDAgLTIzIDlsLTkzIDkzcS0xMTkgLTE0MyAtMzE4LjUgLTIyNi41dC00MjkuNSAtODMuNXQtNDI5LjUgODMuNXQtMzE4LjUgMjI2LjVsLTkzIC05M3EtOSAtOSAtMjMgLTlxLTQgMCAtMTIgMnEtMjAgOCAtMjAgMzB2MzUyDQpxMCAxNCA5IDIzdDIzIDloMzUycTIyIDAgMzAgLTIwcTggLTE5IC03IC0zNWwtMTAwIC0xMDBxNjcgLTkxIDE4OS41IC0xNTMuNXQyNzEuNSAtODIuNXY2NDdoLTE5MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE5MnYxNjNxLTU4IDM0IC05MyA5Mi41dC0zNSAxMjguNXEwIDEwNiA3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MXEwIC03MCAtMzUgLTEyOC41dC05MyAtOTIuNXYtMTYzaDE5MnEyNiAwIDQ1IC0xOQ0KdDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkydi02NDdxMTQ5IDIwIDI3MS41IDgyLjV0MTg5LjUgMTUzLjVsLTEwMCAxMDBxLTE1IDE2IC03IDM1cTggMjAgMzAgMjBoMzUycTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmxvY2tfYWx0IiB1bmljb2RlPSImI3hmMTNlOyIgaG9yaXotYWR2LXg9IjExNTIiIA0KZD0iTTEwNTYgNzY4cTQwIDAgNjggLTI4dDI4IC02OHYtNTc2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MzIwcTAgMTg1IDEzMS41IDMxNi41dDMxNi41IDEzMS41dDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MQ0Kdi0zMjBoNzM2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVsbHNleWUiIHVuaWNvZGU9IiYjeGYxNDA7IiANCmQ9Ik0xMDI0IDY0MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxek0xMTUyIDY0MHEwIDE1OSAtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41dC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjV0MjcxLjUgLTExMi41dDI3MS41IDExMi41dDExMi41IDI3MS41ek0xMjgwIDY0MHEwIC0yMTIgLTE1MCAtMzYydC0zNjIgLTE1MHQtMzYyIDE1MA0KdC0xNTAgMzYydDE1MCAzNjJ0MzYyIDE1MHQzNjIgLTE1MHQxNTAgLTM2MnpNMTQwOCA2NDBxMCAxMzAgLTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF0LTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV6TTE1MzYgNjQwDQpxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbGxpcHNpc19ob3Jpem9udGFsIiB1bmljb2RlPSImI3hmMTQxOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTM4NCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6TTg5NiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6TTE0MDggODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xOTINCnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbGxpcHNpc192ZXJ0aWNhbCIgdW5pY29kZT0iJiN4ZjE0MjsiIGhvcml6LWFkdi14PSIzODQiIA0KZD0iTTM4NCAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6TTM4NCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6TTM4NCAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xOTINCnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzAzIiB1bmljb2RlPSImI3hmMTQzOyIgDQpkPSJNNTEyIDI1NnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNODYzIDE2MnEtMTMgMjMzIC0xNzYuNSAzOTYuNXQtMzk2LjUgMTc2LjVxLTE0IDEgLTI0IC05dC0xMCAtMjN2LTEyOHEwIC0xMyA4LjUgLTIydDIxLjUgLTEwcTE1NCAtMTEgMjY0IC0xMjF0MTIxIC0yNjRxMSAtMTMgMTAgLTIxLjV0MjIgLTguNWgxMjgNCnExMyAwIDIzIDEwdDkgMjR6TTEyNDcgMTYxcS01IDE1NCAtNTYgMjk3LjV0LTEzOS41IDI2MHQtMjA1IDIwNXQtMjYwIDEzOS41dC0yOTcuNSA1NnEtMTQgMSAtMjMgLTlxLTEwIC0xMCAtMTAgLTIzdi0xMjhxMCAtMTMgOSAtMjJ0MjIgLTEwcTIwNCAtNyAzNzggLTExMS41dDI3OC41IC0yNzguNXQxMTEuNSAtMzc4cTEgLTEzIDEwIC0yMnQyMiAtOWgxMjhxMTMgMCAyMyAxMHExMSA5IDkgMjN6TTE1MzYgMTEyMHYtOTYwDQpxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbGF5X3NpZ24iIHVuaWNvZGU9IiYjeGYxNDQ7IiANCmQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0xMTUyIDU4NXEzMiAxOCAzMiA1NXQtMzIgNTVsLTU0NCAzMjBxLTMxIDE5IC02NCAxcS0zMiAtMTkgLTMyIC01NnYtNjQwcTAgLTM3IDMyIC01Ng0KcTE2IC04IDMyIC04cTE3IDAgMzIgOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InRpY2tldCIgdW5pY29kZT0iJiN4ZjE0NTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMDI0IDEwODRsMzE2IC0zMTZsLTU3MiAtNTcybC0zMTYgMzE2ek04MTMgMTA1bDYxOCA2MThxMTkgMTkgMTkgNDV0LTE5IDQ1bC0zNjIgMzYycS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtNjE4IC02MThxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4ek0xNzAyIDc0MmwtOTA3IC05MDhxLTM3IC0zNyAtOTAuNSAtMzd0LTkwLjUgMzdsLTEyNiAxMjZxNTYgNTYgNTYgMTM2dC01NiAxMzYNCnQtMTM2IDU2dC0xMzYgLTU2bC0xMjUgMTI2cS0zNyAzNyAtMzcgOTAuNXQzNyA5MC41bDkwNyA5MDZxMzcgMzcgOTAuNSAzN3Q5MC41IC0zN2wxMjUgLTEyNXEtNTYgLTU2IC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnQxMzYgNTZsMTI2IC0xMjVxMzcgLTM3IDM3IC05MC41dC0zNyAtOTAuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im1pbnVzX3NpZ25fYWx0IiB1bmljb2RlPSImI3hmMTQ2OyIgDQpkPSJNMTI4MCA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtODk2cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41DQp0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja19taW51cyIgdW5pY29kZT0iJiN4ZjE0NzsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xMTUyIDczNnYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtODMycS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDgzMnExNCAwIDIzIC05dDkgLTIzek0xMjgwIDI4OHY4MzJxMCA2NiAtNDcgMTEzdC0xMTMgNDdoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41DQp0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMycTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGV2ZWxfdXAiIHVuaWNvZGU9IiYjeGYxNDg7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNMTAxOCA5MzNxLTE4IC0zNyAtNTggLTM3aC0xOTJ2LTg2NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTIxIDAgLTI5IDE4cS04IDIwIDQgMzVsMTYwIDE5MnE5IDExIDI1IDExaDMyMHY2NDBoLTE5MnEtNDAgMCAtNTggMzdxLTE3IDM3IDkgNjhsMzIwIDM4NHExOCAyMiA0OSAyMnQ0OSAtMjJsMzIwIC0zODRxMjcgLTMyIDkgLTY4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGV2ZWxfZG93biIgdW5pY29kZT0iJiN4ZjE0OTsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik0zMiAxMjgwaDcwNHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIzLjV2LTg2M2gxOTJxNDAgMCA1OCAtMzd0LTkgLTY5bC0zMjAgLTM4NHEtMTggLTIyIC00OSAtMjJ0LTQ5IDIybC0zMjAgMzg0cS0yNiAzMSAtOSA2OXExOCAzNyA1OCAzN2gxOTJ2NjQwaC0zMjBxLTE0IDAgLTI1IDExbC0xNjAgMTkycS0xMyAxNCAtNCAzNHE5IDE5IDI5IDE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hlY2tfc2lnbiIgdW5pY29kZT0iJiN4ZjE0YTsiIA0KZD0iTTY4NSAyMzdsNjE0IDYxNHExOSAxOSAxOSA0NXQtMTkgNDVsLTEwMiAxMDJxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC00NjcgLTQ2N2wtMjExIDIxMXEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTEwMiAtMTAycS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsMzU4IC0zNThxMTkgLTE5IDQ1IC0xOXQ0NSAxOXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjUNCnQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImVkaXRfc2lnbiIgdW5pY29kZT0iJiN4ZjE0YjsiIA0KZD0iTTQwNCA0MjhsMTUyIC0xNTJsLTUyIC01MmgtNTZ2OTZoLTk2djU2ek04MTggODE4cTE0IC0xMyAtMyAtMzBsLTI5MSAtMjkxcS0xNyAtMTcgLTMwIC0zcS0xNCAxMyAzIDMwbDI5MSAyOTFxMTcgMTcgMzAgM3pNNTQ0IDEyOGw1NDQgNTQ0bC0yODggMjg4bC01NDQgLTU0NHYtMjg4aDI4OHpNMTE1MiA3MzZsOTIgOTJxMjggMjggMjggNjh0LTI4IDY4bC0xNTIgMTUycS0yOCAyOCAtNjggMjh0LTY4IC0yOGwtOTIgLTkyek0xNTM2IDExMjANCnYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzMxMiIgdW5pY29kZT0iJiN4ZjE0YzsiIA0KZD0iTTEyODAgNjA4djQ4MHEwIDI2IC0xOSA0NXQtNDUgMTloLTQ4MHEtNDIgMCAtNTkgLTM5cS0xNyAtNDEgMTQgLTcwbDE0NCAtMTQ0bC01MzQgLTUzNHEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDEwMiAtMTAycTE5IC0xOSA0NSAtMTl0NDUgMTlsNTM0IDUzNGwxNDQgLTE0NHExOCAtMTkgNDUgLTE5cTEyIDAgMjUgNXEzOSAxNyAzOSA1OXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MA0KcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNoYXJlX3NpZ24iIHVuaWNvZGU9IiYjeGYxNGQ7IiANCmQ9Ik0xMDA1IDQzNWwzNTIgMzUycTE5IDE5IDE5IDQ1dC0xOSA0NWwtMzUyIDM1MnEtMzAgMzEgLTY5IDE0cS00MCAtMTcgLTQwIC01OXYtMTYwcS0xMTkgMCAtMjE2IC0xOS41dC0xNjIuNSAtNTF0LTExNCAtNzl0LTc2LjUgLTk1LjV0LTQ0LjUgLTEwOXQtMjEuNSAtMTExLjV0LTUgLTExMC41cTAgLTE4MSAxNjcgLTQwNHExMSAtMTIgMjUgLTEycTcgMCAxMyAzcTIyIDkgMTkgMzNxLTQ0IDM1NCA2MiA0NzNxNDYgNTIgMTMwIDc1LjUNCnQyMjQgMjMuNXYtMTYwcTAgLTQyIDQwIC01OXExMiAtNSAyNCAtNXEyNiAwIDQ1IDE5ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbXBhc3MiIHVuaWNvZGU9IiYjeGYxNGU7IiANCmQ9Ik02NDAgNDQ4bDI1NiAxMjhsLTI1NiAxMjh2LTI1NnpNMTAyNCAxMDM5di01NDJsLTUxMiAtMjU2djU0MnpNMTMxMiA2NDBxMCAxNDggLTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzDQp0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29sbGFwc2UiIHVuaWNvZGU9IiYjeGYxNTA7IiANCmQ9Ik0xMTQ1IDg2MXExOCAtMzUgLTUgLTY2bC0zMjAgLTQ0OHEtMTkgLTI3IC01MiAtMjd0LTUyIDI3bC0zMjAgNDQ4cS0yMyAzMSAtNSA2NnExNyAzNSA1NyAzNWg2NDBxNDAgMCA1NyAtMzV6TTEyODAgMTYwdjk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTk2MHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNTM2IDExMjANCnYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29sbGFwc2VfdG9wIiB1bmljb2RlPSImI3hmMTUxOyIgDQpkPSJNMTE0NSA0MTlxLTE3IC0zNSAtNTcgLTM1aC02NDBxLTQwIDAgLTU3IDM1cS0xOCAzNSA1IDY2bDMyMCA0NDhxMTkgMjcgNTIgMjd0NTIgLTI3bDMyMCAtNDQ4cTIzIC0zMSA1IC02NnpNMTI4MCAxNjB2OTYwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtOTYwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtOTYwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoOTYwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgMTEyMHYtOTYwDQpxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzE3IiB1bmljb2RlPSImI3hmMTUyOyIgDQpkPSJNMTA4OCA2NDBxMCAtMzMgLTI3IC01MmwtNDQ4IC0zMjBxLTMxIC0yMyAtNjYgLTVxLTM1IDE3IC0zNSA1N3Y2NDBxMCA0MCAzNSA1N3EzNSAxOCA2NiAtNWw0NDggLTMyMHEyNyAtMTkgMjcgLTUyek0xMjgwIDE2MHY5NjBxMCAxNCAtOSAyM3QtMjMgOWgtOTYwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2MHEwIC0xNCA5IC0yM3QyMyAtOWg5NjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjUNCnQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJldXIiIHVuaWNvZGU9IiYjeGYxNTM7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNOTc2IDIyOWwzNSAtMTU5cTMgLTEyIC0zIC0yMi41dC0xNyAtMTQuNWwtNSAtMXEtNCAtMiAtMTAuNSAtMy41dC0xNiAtNC41dC0yMS41IC01LjV0LTI1LjUgLTV0LTMwIC01dC0zMy41IC00LjV0LTM2LjUgLTN0LTM4LjUgLTFxLTIzNCAwIC00MDkgMTMwLjV0LTIzOCAzNTEuNWgtOTVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxMTNxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NnEtMiA1NyAxIDEwNWgtNjdxLTE0IDAgLTIzIDkNCnQtOSAyM3YxMTRxMCAxNCA5IDIzdDIzIDloOThxNjcgMjEwIDI0My41IDMzOHQ0MDAuNSAxMjhxMTAyIDAgMTk0IC0yM3ExMSAtMyAyMCAtMTVxNiAtMTEgMyAtMjRsLTQzIC0xNTlxLTMgLTEzIC0xNCAtMTkuNXQtMjQgLTIuNWwtNCAxcS00IDEgLTExLjUgMi41bC0xNy41IDMuNXQtMjIuNSAzLjV0LTI2IDN0LTI5IDIuNXQtMjkuNSAxcS0xMjYgMCAtMjI2IC02NHQtMTUwIC0xNzZoNDY4cTE2IDAgMjUgLTEycTEwIC0xMiA3IC0yNg0KbC0yNCAtMTE0cS01IC0yNiAtMzIgLTI2aC00ODhxLTMgLTM3IDAgLTEwNWg0NTlxMTUgMCAyNSAtMTJxOSAtMTIgNiAtMjdsLTI0IC0xMTJxLTIgLTExIC0xMSAtMTguNXQtMjAgLTcuNWgtMzg3cTQ4IC0xMTcgMTQ5LjUgLTE4NS41dDIyOC41IC02OC41cTE4IDAgMzYgMS41dDMzLjUgMy41dDI5LjUgNC41dDI0LjUgNXQxOC41IDQuNWwxMiAzbDUgMnExMyA1IDI2IC0ycTEyIC03IDE1IC0yMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImdicCIgdW5pY29kZT0iJiN4ZjE1NDsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik0xMDIwIDM5OXYtMzY3cTAgLTE0IC05IC0yM3QtMjMgLTloLTk1NnEtMTQgMCAtMjMgOXQtOSAyM3YxNTBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5N3YzODNoLTk1cS0xNCAwIC0yMyA5LjV0LTkgMjIuNXYxMzFxMCAxNCA5IDIzdDIzIDloOTV2MjIzcTAgMTcxIDEyMy41IDI4MnQzMTQuNSAxMTFxMTg1IDAgMzM1IC0xMjVxOSAtOCAxMCAtMjAuNXQtNyAtMjIuNWwtMTAzIC0xMjdxLTkgLTExIC0yMiAtMTJxLTEzIC0yIC0yMyA3DQpxLTUgNSAtMjYgMTl0LTY5IDMydC05MyAxOHEtODUgMCAtMTM3IC00N3QtNTIgLTEyM3YtMjE1aDMwNXExMyAwIDIyLjUgLTl0OS41IC0yM3YtMTMxcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMzA1di0zNzloNDE0djE4MXEwIDEzIDkgMjIuNXQyMyA5LjVoMTYycTE0IDAgMjMgLTkuNXQ5IC0yMi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXNkIiB1bmljb2RlPSImI3hmMTU1OyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTk3OCAzNTFxMCAtMTUzIC05OS41IC0yNjMuNXQtMjU4LjUgLTEzNi41di0xNzVxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTM1cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTc1cS02NiA5IC0xMjcuNSAzMXQtMTAxLjUgNDQuNXQtNzQgNDh0LTQ2LjUgMzcuNXQtMTcuNSAxOHEtMTcgMjEgLTIgNDFsMTAzIDEzNXE3IDEwIDIzIDEycTE1IDIgMjQgLTlsMiAtMnExMTMgLTk5IDI0MyAtMTI1cTM3IC04IDc0IC04cTgxIDAgMTQyLjUgNDMNCnQ2MS41IDEyMnEwIDI4IC0xNSA1M3QtMzMuNSA0MnQtNTguNSAzNy41dC02NiAzMnQtODAgMzIuNXEtMzkgMTYgLTYxLjUgMjV0LTYxLjUgMjYuNXQtNjIuNSAzMXQtNTYuNSAzNS41dC01My41IDQyLjV0LTQzLjUgNDl0LTM1LjUgNTh0LTIxIDY2LjV0LTguNSA3OHEwIDEzOCA5OCAyNDJ0MjU1IDEzNHYxODBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzVxMTQgMCAyMyAtOXQ5IC0yM3YtMTc2cTU3IC02IDExMC41IC0yM3Q4NyAtMzMuNQ0KdDYzLjUgLTM3LjV0MzkgLTI5dDE1IC0xNHExNyAtMTggNSAtMzhsLTgxIC0xNDZxLTggLTE1IC0yMyAtMTZxLTE0IC0zIC0yNyA3cS0zIDMgLTE0LjUgMTJ0LTM5IDI2LjV0LTU4LjUgMzJ0LTc0LjUgMjZ0LTg1LjUgMTEuNXEtOTUgMCAtMTU1IC00M3QtNjAgLTExMXEwIC0yNiA4LjUgLTQ4dDI5LjUgLTQxLjV0MzkuNSAtMzN0NTYgLTMxdDYwLjUgLTI3dDcwIC0yNy41cTUzIC0yMCA4MSAtMzEuNXQ3NiAtMzV0NzUuNSAtNDIuNXQ2MiAtNTANCnQ1MyAtNjMuNXQzMS41IC03Ni41dDEzIC05NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImluciIgdW5pY29kZT0iJiN4ZjE1NjsiIGhvcml6LWFkdi14PSI4OTgiIA0KZD0iTTg5OCAxMDY2di0xMDJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTY4cS0yMyAtMTQ0IC0xMjkgLTIzNHQtMjc2IC0xMTBxMTY3IC0xNzggNDU5IC01MzZxMTQgLTE2IDQgLTM0cS04IC0xOCAtMjkgLTE4aC0xOTVxLTE2IDAgLTI1IDEycS0zMDYgMzY3IC00OTggNTcxcS05IDkgLTkgMjJ2MTI3cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTEycTEzMiAwIDIxMi41IDQzdDEwMi41IDEyNWgtNDI3cS0xNCAwIC0yMyA5dC05IDIzdjEwMg0KcTAgMTQgOSAyM3QyMyA5aDQxM3EtNTcgMTEzIC0yNjggMTEzaC0xNDVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxMzNxMCAxNCA5IDIzdDIzIDloODMycTE0IDAgMjMgLTl0OSAtMjN2LTEwMnEwIC0xNCAtOSAtMjN0LTIzIC05aC0yMzNxNDcgLTYxIDY0IC0xNDRoMTcxcTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJqcHkiIHVuaWNvZGU9IiYjeGYxNTc7IiBob3Jpei1hZHYteD0iMTAyNyIgDQpkPSJNNjAzIDBoLTE3MnEtMTMgMCAtMjIuNSA5dC05LjUgMjN2MzMwaC0yODhxLTEzIDAgLTIyLjUgOXQtOS41IDIzdjEwM3EwIDEzIDkuNSAyMi41dDIyLjUgOS41aDI4OHY4NWgtMjg4cS0xMyAwIC0yMi41IDl0LTkuNSAyM3YxMDRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMTRsLTMyMSA1NzhxLTggMTYgMCAzMnExMCAxNiAyOCAxNmgxOTRxMTkgMCAyOSAtMThsMjE1IC00MjVxMTkgLTM4IDU2IC0xMjVxMTAgMjQgMzAuNSA2OHQyNy41IDYxDQpsMTkxIDQyMHE4IDE5IDI5IDE5aDE5MXExNyAwIDI3IC0xNnE5IC0xNCAxIC0zMWwtMzEzIC01NzloMjE1cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMTA0cTAgLTE0IC05LjUgLTIzdC0yMi41IC05aC0yOTB2LTg1aDI5MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTEwM3EwIC0xNCAtOS41IC0yM3QtMjIuNSAtOWgtMjkwdi0zMzBxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icnViIiB1bmljb2RlPSImI3hmMTU4OyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTEwNDMgOTcxcTAgMTAwIC02NSAxNjJ0LTE3MSA2MmgtMzIwdi00NDhoMzIwcTEwNiAwIDE3MSA2MnQ2NSAxNjJ6TTEyODAgOTcxcTAgLTE5MyAtMTI2LjUgLTMxNXQtMzI2LjUgLTEyMmgtMzQwdi0xMThoNTA1cTE0IDAgMjMgLTl0OSAtMjN2LTEyOHEwIC0xNCAtOSAtMjN0LTIzIC05aC01MDV2LTE5MnEwIC0xNCAtOS41IC0yM3QtMjIuNSAtOWgtMTY3cS0xNCAwIC0yMyA5dC05IDIzdjE5MmgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjEyOA0KcTAgMTQgOSAyM3QyMyA5aDIyNHYxMThoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxNDlxMCAxMyA5IDIyLjV0MjMgOS41aDIyNHY2MjlxMCAxNCA5IDIzdDIzIDloNTM5cTIwMCAwIDMyNi41IC0xMjJ0MTI2LjUgLTMxNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImtydyIgdW5pY29kZT0iJiN4ZjE1OTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik01MTQgMzQxbDgxIDI5OWgtMTU5bDc1IC0zMDBxMSAtMSAxIC0zdDEgLTNxMCAxIDAuNSAzLjV0MC41IDMuNXpNNjMwIDc2OGwzNSAxMjhoLTI5MmwzMiAtMTI4aDIyNXpNODIyIDc2OGgxMzlsLTM1IDEyOGgtNzB6TTEyNzEgMzQwbDc4IDMwMGgtMTYybDgxIC0yOTlxMCAtMSAwLjUgLTMuNXQxLjUgLTMuNXEwIDEgMC41IDN0MC41IDN6TTEzODIgNzY4bDMzIDEyOGgtMjk3bDM0IC0xMjhoMjMwek0xNzkyIDczNnYtNjRxMCAtMTQgLTkgLTIzDQp0LTIzIC05aC0yMTNsLTE2NCAtNjE2cS03IC0yNCAtMzEgLTI0aC0xNTlxLTI0IDAgLTMxIDI0bC0xNjYgNjE2aC0yMDlsLTE2NyAtNjE2cS03IC0yNCAtMzEgLTI0aC0xNTlxLTExIDAgLTE5LjUgN3QtMTAuNSAxN2wtMTYwIDYxNmgtMjA4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3NWwtMzMgMTI4aC0xNDJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTA5bC04OSAzNDRxLTUgMTUgNSAyOA0KcTEwIDEyIDI2IDEyaDEzN3EyNiAwIDMxIC0yNGw5MCAtMzYwaDM1OWw5NyAzNjBxNyAyNCAzMSAyNGgxMjZxMjQgMCAzMSAtMjRsOTggLTM2MGgzNjVsOTMgMzYwcTUgMjQgMzEgMjRoMTM3cTE2IDAgMjYgLTEycTEwIC0xMyA1IC0yOGwtOTEgLTM0NGgxMTFxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTQ1bC0zNCAtMTI4aDE3OXExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnRjIiB1bmljb2RlPSImI3hmMTVhOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTExNjcgODk2cTE4IC0xODIgLTEzMSAtMjU4cTExNyAtMjggMTc1IC0xMDN0NDUgLTIxNHEtNyAtNzEgLTMyLjUgLTEyNXQtNjQuNSAtODl0LTk3IC01OC41dC0xMjEuNSAtMzQuNXQtMTQ1LjUgLTE1di0yNTVoLTE1NHYyNTFxLTgwIDAgLTEyMiAxdi0yNTJoLTE1NHYyNTVxLTE4IDAgLTU0IDAuNXQtNTUgMC41aC0yMDBsMzEgMTgzaDExMXE1MCAwIDU4IDUxdjQwMmgxNnEtNiAxIC0xNiAxdjI4N3EtMTMgNjggLTg5IDY4aC0xMTF2MTY0DQpsMjEyIC0xcTY0IDAgOTcgMXYyNTJoMTU0di0yNDdxODIgMiAxMjIgMnYyNDVoMTU0di0yNTJxNzkgLTcgMTQwIC0yMi41dDExMyAtNDV0ODIuNSAtNzh0MzYuNSAtMTE0LjV6TTk1MiAzNTFxMCAzNiAtMTUgNjR0LTM3IDQ2dC01Ny41IDMwLjV0LTY1LjUgMTguNXQtNzQgOXQtNjkgM3QtNjQuNSAtMXQtNDcuNSAtMXYtMzM4cTggMCAzNyAtMC41dDQ4IC0wLjV0NTMgMS41dDU4LjUgNHQ1NyA4LjV0NTUuNSAxNHQ0Ny41IDIxdDM5LjUgMzANCnQyNC41IDQwdDkuNSA1MXpNODgxIDgyN3EwIDMzIC0xMi41IDU4LjV0LTMwLjUgNDJ0LTQ4IDI4dC01NSAxNi41dC02MS41IDh0LTU4IDIuNXQtNTQgLTF0LTM5LjUgLTAuNXYtMzA3cTUgMCAzNC41IC0wLjV0NDYuNSAwdDUwIDJ0NTUgNS41dDUxLjUgMTF0NDguNSAxOC41dDM3IDI3dDI3IDM4LjV0OSA1MXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZpbGUiIHVuaWNvZGU9IiYjeGYxNWI7IiANCmQ9Ik0xMDI0IDEwMjR2NDcycTIyIC0xNCAzNiAtMjhsNDA4IC00MDhxMTQgLTE0IDI4IC0zNmgtNDcyek04OTYgOTkycTAgLTQwIDI4IC02OHQ2OCAtMjhoNTQ0di0xMDU2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4MDB2LTU0NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZpbGVfdGV4dCIgdW5pY29kZT0iJiN4ZjE1YzsiIA0KZD0iTTE0NjggMTA2MHExNCAtMTQgMjggLTM2aC00NzJ2NDcycTIyIC0xNCAzNiAtMjh6TTk5MiA4OTZoNTQ0di0xMDU2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4MDB2LTU0NHEwIC00MCAyOCAtNjh0NjggLTI4ek0xMTUyIDE2MHY2NHEwIDE0IC05IDIzdC0yMyA5aC03MDRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNzA0DQpxMTQgMCAyMyA5dDkgMjN6TTExNTIgNDE2djY0cTAgMTQgLTkgMjN0LTIzIDloLTcwNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg3MDRxMTQgMCAyMyA5dDkgMjN6TTExNTIgNjcydjY0cTAgMTQgLTkgMjN0LTIzIDloLTcwNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg3MDRxMTQgMCAyMyA5dDkgMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X2FscGhhYmV0IiB1bmljb2RlPSImI3hmMTVkOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTExOTEgMTEyOGgxNzdsLTcyIDIxOGwtMTIgNDdxLTIgMTYgLTIgMjBoLTRsLTMgLTIwcTAgLTEgLTMuNSAtMTh0LTcuNSAtMjl6TTczNiA5NnEwIC0xMiAtMTAgLTI0bC0zMTkgLTMxOXEtMTAgLTkgLTIzIC05cS0xMiAwIC0yMyA5bC0zMjAgMzIwcS0xNSAxNiAtNyAzNXE4IDIwIDMwIDIwaDE5MnYxMzc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi0xMzc2aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNTcyIC0yMw0Kdi0yMzNoLTU4NHY5MGwzNjkgNTI5cTEyIDE4IDIxIDI3bDExIDl2M3EtMiAwIC02LjUgLTAuNXQtNy41IC0wLjVxLTEyIC0zIC0zMCAtM2gtMjMydi0xMTVoLTEyMHYyMjloNTY3di04OWwtMzY5IC01MzBxLTYgLTggLTIxIC0yNmwtMTEgLTExdi0ybDE0IDJxOSAyIDMwIDJoMjQ4djExOWgxMjF6TTE2NjEgODc0di0xMDZoLTI4OHYxMDZoNzVsLTQ3IDE0NGgtMjQzbC00NyAtMTQ0aDc1di0xMDZoLTI4N3YxMDZoNzBsMjMwIDY2MmgxNjINCmwyMzAgLTY2Mmg3MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zMjkiIHVuaWNvZGU9IiYjeGYxNWU7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTE5MSAxMDRoMTc3bC03MiAyMThsLTEyIDQ3cS0yIDE2IC0yIDIwaC00bC0zIC0yMHEwIC0xIC0zLjUgLTE4dC03LjUgLTI5ek03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTY2MSAtMTUwDQp2LTEwNmgtMjg4djEwNmg3NWwtNDcgMTQ0aC0yNDNsLTQ3IC0xNDRoNzV2LTEwNmgtMjg3djEwNmg3MGwyMzAgNjYyaDE2MmwyMzAgLTY2Mmg3MHpNMTU3MiAxMDAxdi0yMzNoLTU4NHY5MGwzNjkgNTI5cTEyIDE4IDIxIDI3bDExIDl2M3EtMiAwIC02LjUgLTAuNXQtNy41IC0wLjVxLTEyIC0zIC0zMCAtM2gtMjMydi0xMTVoLTEyMHYyMjloNTY3di04OWwtMzY5IC01MzBxLTYgLTggLTIxIC0yNmwtMTEgLTEwdi0zbDE0IDNxOSAxIDMwIDFoMjQ4DQp2MTE5aDEyMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNvcnRfYnlfYXR0cmlidXRlcyIgdW5pY29kZT0iJiN4ZjE2MDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiAtMzJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDgzMg0KcTE0IDAgMjMgLTl0OSAtMjN6TTE2MDAgNDgwdi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjQwcS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg2NDBxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCA5OTJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC00NDhxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDQ0OHExNCAwIDIzIC05dDkgLTIzek0xMjE2IDE1MDR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0yNTYNCnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjU2cTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0IiB1bmljb2RlPSImI3hmMTYxOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyMTYgLTMydi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMjU2cS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgyNTZxMTQgMCAyMyAtOXQ5IC0yM3pNNzM2IDk2cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS0xMCAtOSAtMjMgLTlxLTEyIDAgLTIzIDlsLTMyMCAzMjBxLTE1IDE2IC03IDM1cTggMjAgMzAgMjBoMTkydjEzNzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTEzNzZoMTkyDQpxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCA0ODB2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC00NDhxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDQ0OHExNCAwIDIzIC05dDkgLTIzek0xNjAwIDk5MnYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTY0MHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloNjQwcTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTUwNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMg0KcS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg4MzJxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InNvcnRfYnlfb3JkZXIiIHVuaWNvZGU9IiYjeGYxNjI7IiANCmQ9Ik0xMzQ2IDIyM3EwIDYzIC00NCAxMTZ0LTEwMyA1M3EtNTIgMCAtODMgLTM3dC0zMSAtOTR0MzYuNSAtOTV0MTA0LjUgLTM4cTUwIDAgODUgMjd0MzUgNjh6TTczNiA5NnEwIC0xMiAtMTAgLTI0bC0zMTkgLTMxOXEtMTAgLTkgLTIzIC05cS0xMiAwIC0yMyA5bC0zMjAgMzIwcS0xNSAxNiAtNyAzNXE4IDIwIDMwIDIwaDE5MnYxMzc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi0xMzc2aDE5MnExNCAwIDIzIC05dDkgLTIzDQp6TTE0ODYgMTY1cTAgLTYyIC0xMyAtMTIxLjV0LTQxIC0xMTR0LTY4IC05NS41dC05OC41IC02NS41dC0xMjcuNSAtMjQuNXEtNjIgMCAtMTA4IDE2cS0yNCA4IC00MiAxNWwzOSAxMTNxMTUgLTcgMzEgLTExcTM3IC0xMyA3NSAtMTNxODQgMCAxMzQuNSA1OC41dDY2LjUgMTQ1LjVoLTJxLTIxIC0yMyAtNjEuNSAtMzd0LTg0LjUgLTE0cS0xMDYgMCAtMTczIDcxLjV0LTY3IDE3Mi41cTAgMTA1IDcyIDE3OHQxODEgNzNxMTIzIDAgMjA1IC05NC41DQp0ODIgLTI1Mi41ek0xNDU2IDg4MnYtMTE0aC00Njl2MTE0aDE2N3Y0MzJxMCA3IDAuNSAxOXQwLjUgMTd2MTZoLTJsLTcgLTEycS04IC0xMyAtMjYgLTMxbC02MiAtNThsLTgyIDg2bDE5MiAxODVoMTIzdi02NTRoMTY1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9ieV9vcmRlcl9hbHQiIHVuaWNvZGU9IiYjeGYxNjM7IiANCmQ9Ik0xMzQ2IDEyNDdxMCA2MyAtNDQgMTE2dC0xMDMgNTNxLTUyIDAgLTgzIC0zN3QtMzEgLTk0dDM2LjUgLTk1dDEwNC41IC0zOHE1MCAwIDg1IDI3dDM1IDY4ek03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOQ0KdDkgLTIzek0xNDU2IC0xNDJ2LTExNGgtNDY5djExNGgxNjd2NDMycTAgNyAwLjUgMTl0MC41IDE3djE2aC0ybC03IC0xMnEtOCAtMTMgLTI2IC0zMWwtNjIgLTU4bC04MiA4NmwxOTIgMTg1aDEyM3YtNjU0aDE2NXpNMTQ4NiAxMTg5cTAgLTYyIC0xMyAtMTIxLjV0LTQxIC0xMTR0LTY4IC05NS41dC05OC41IC02NS41dC0xMjcuNSAtMjQuNXEtNjIgMCAtMTA4IDE2cS0yNCA4IC00MiAxNWwzOSAxMTNxMTUgLTcgMzEgLTExcTM3IC0xMyA3NSAtMTMNCnE4NCAwIDEzNC41IDU4LjV0NjYuNSAxNDUuNWgtMnEtMjEgLTIzIC02MS41IC0zN3QtODQuNSAtMTRxLTEwNiAwIC0xNzMgNzEuNXQtNjcgMTcyLjVxMCAxMDUgNzIgMTc4dDE4MSA3M3ExMjMgMCAyMDUgLTk0LjV0ODIgLTI1Mi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzMzNCIgdW5pY29kZT0iJiN4ZjE2NDsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXEtMjcgMCAtNDUuNSAtMTl0LTE4LjUgLTQ1cTAgLTI3IDE4LjUgLTQ1LjV0NDUuNSAtMTguNXEyNiAwIDQ1IDE4LjV0MTkgNDUuNXpNNDE2IDcwNHYtNjQwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjg4cS0yNiAwIC00NSAxOXQtMTkgNDV2NjQwcTAgMjYgMTkgNDV0NDUgMTloMjg4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTYwMCA3MDRxMCAtODYgLTU1IC0xNDlxMTUgLTQ0IDE1IC03Ng0KcTMgLTc2IC00MyAtMTM3cTE3IC01NiAwIC0xMTdxLTE1IC01NyAtNTQgLTk0cTkgLTExMiAtNDkgLTE4MXEtNjQgLTc2IC0xOTcgLTc4aC0zNmgtNzZoLTE3cS02NiAwIC0xNDQgMTUuNXQtMTIxLjUgMjl0LTEyMC41IDM5LjVxLTEyMyA0MyAtMTU4IDQ0cS0yNiAxIC00NSAxOS41dC0xOSA0NC41djY0MXEwIDI1IDE4IDQzLjV0NDMgMjAuNXEyNCAyIDc2IDU5dDEwMSAxMjFxNjggODcgMTAxIDEyMHExOCAxOCAzMSA0OHQxNy41IDQ4LjUNCnQxMy41IDYwLjVxNyAzOSAxMi41IDYxdDE5LjUgNTJ0MzQgNTBxMTkgMTkgNDUgMTlxNDYgMCA4Mi41IC0xMC41dDYwIC0yNnQ0MCAtNDAuNXQyNCAtNDV0MTIgLTUwdDUgLTQ1dDAuNSAtMzlxMCAtMzggLTkuNSAtNzZ0LTE5IC02MHQtMjcuNSAtNTZxLTMgLTYgLTEwIC0xOHQtMTEgLTIydC04IC0yNGgyNzdxNzggMCAxMzUgLTU3dDU3IC0xMzV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzM1IiB1bmljb2RlPSImI3hmMTY1OyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTI1NiA5NjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5cS0yNyAwIC00NS41IDE5dC0xOC41IDQ1cTAgMjcgMTguNSA0NS41dDQ1LjUgMTguNXEyNiAwIDQ1IC0xOC41dDE5IC00NS41ek00MTYgNDQ4djY0MHEwIDI2IC0xOSA0NXQtNDUgMTloLTI4OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTY0MHEwIC0yNiAxOSAtNDV0NDUgLTE5aDI4OHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTQ1IDU5N3E1NSAtNjEgNTUgLTE0OXEtMSAtNzggLTU3LjUgLTEzNQ0KdC0xMzQuNSAtNTdoLTI3N3E0IC0xNCA4IC0yNHQxMSAtMjJ0MTAgLTE4cTE4IC0zNyAyNyAtNTd0MTkgLTU4LjV0MTAgLTc2LjVxMCAtMjQgLTAuNSAtMzl0LTUgLTQ1dC0xMiAtNTB0LTI0IC00NXQtNDAgLTQwLjV0LTYwIC0yNnQtODIuNSAtMTAuNXEtMjYgMCAtNDUgMTlxLTIwIDIwIC0zNCA1MHQtMTkuNSA1MnQtMTIuNSA2MXEtOSA0MiAtMTMuNSA2MC41dC0xNy41IDQ4LjV0LTMxIDQ4cS0zMyAzMyAtMTAxIDEyMHEtNDkgNjQgLTEwMSAxMjENCnQtNzYgNTlxLTI1IDIgLTQzIDIwLjV0LTE4IDQzLjV2NjQxcTAgMjYgMTkgNDQuNXQ0NSAxOS41cTM1IDEgMTU4IDQ0cTc3IDI2IDEyMC41IDM5LjV0MTIxLjUgMjl0MTQ0IDE1LjVoMTdoNzZoMzZxMTMzIC0yIDE5NyAtNzhxNTggLTY5IDQ5IC0xODFxMzkgLTM3IDU0IC05NHExNyAtNjEgMCAtMTE3cTQ2IC02MSA0MyAtMTM3cTAgLTMyIC0xNSAtNzZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ5b3V0dWJlX3NpZ24iIHVuaWNvZGU9IiYjeGYxNjY7IiANCmQ9Ik05MTkgMjMzdjE1N3EwIDUwIC0yOSA1MHEtMTcgMCAtMzMgLTE2di0yMjRxMTYgLTE2IDMzIC0xNnEyOSAwIDI5IDQ5ek0xMTAzIDM1NWg2NnYzNHEwIDUxIC0zMyA1MXQtMzMgLTUxdi0zNHpNNTMyIDYyMXYtNzBoLTgwdi00MjNoLTc0djQyM2gtNzh2NzBoMjMyek03MzMgNDk1di0zNjdoLTY3djQwcS0zOSAtNDUgLTc2IC00NXEtMzMgMCAtNDIgMjhxLTYgMTcgLTYgNTR2MjkwaDY2di0yNzBxMCAtMjQgMSAtMjZxMSAtMTUgMTUgLTE1DQpxMjAgMCA0MiAzMXYyODBoNjd6TTk4NSAzODR2LTE0NnEwIC01MiAtNyAtNzNxLTEyIC00MiAtNTMgLTQycS0zNSAwIC02OCA0MXYtMzZoLTY3djQ5M2g2N3YtMTYxcTMyIDQwIDY4IDQwcTQxIDAgNTMgLTQycTcgLTIxIDcgLTc0ek0xMjM2IDI1NXYtOXEwIC0yOSAtMiAtNDNxLTMgLTIyIC0xNSAtNDBxLTI3IC00MCAtODAgLTQwcS01MiAwIC04MSAzOHEtMjEgMjcgLTIxIDg2djEyOXEwIDU5IDIwIDg2cTI5IDM4IDgwIDM4dDc4IC0zOA0KcTIxIC0yOSAyMSAtODZ2LTc2aC0xMzN2LTY1cTAgLTUxIDM0IC01MXEyNCAwIDMwIDI2cTAgMSAwLjUgN3QwLjUgMTYuNXYyMS41aDY4ek03ODUgMTA3OXYtMTU2cTAgLTUxIC0zMiAtNTF0LTMyIDUxdjE1NnEwIDUyIDMyIDUydDMyIC01MnpNMTMxOCAzNjZxMCAxNzcgLTE5IDI2MHEtMTAgNDQgLTQzIDczLjV0LTc2IDM0LjVxLTEzNiAxNSAtNDEyIDE1cS0yNzUgMCAtNDExIC0xNXEtNDQgLTUgLTc2LjUgLTM0LjV0LTQyLjUgLTczLjUNCnEtMjAgLTg3IC0yMCAtMjYwcTAgLTE3NiAyMCAtMjYwcTEwIC00MyA0Mi41IC03M3Q3NS41IC0zNXExMzcgLTE1IDQxMiAtMTV0NDEyIDE1cTQzIDUgNzUuNSAzNXQ0Mi41IDczcTIwIDg0IDIwIDI2MHpNNTYzIDEwMTdsOTAgMjk2aC03NWwtNTEgLTE5NWwtNTMgMTk1aC03OHE3IC0yMyAyMyAtNjlsMjQgLTY5cTM1IC0xMDMgNDYgLTE1OHYtMjAxaDc0djIwMXpNODUyIDkzNnYxMzBxMCA1OCAtMjEgODdxLTI5IDM4IC03OCAzOA0KcS01MSAwIC03OCAtMzhxLTIxIC0yOSAtMjEgLTg3di0xMzBxMCAtNTggMjEgLTg3cTI3IC0zOCA3OCAtMzhxNDkgMCA3OCAzOHEyMSAyNyAyMSA4N3pNMTAzMyA4MTZoNjd2MzcwaC02N3YtMjgzcS0yMiAtMzEgLTQyIC0zMXEtMTUgMCAtMTYgMTZxLTEgMiAtMSAyNnYyNzJoLTY3di0yOTNxMCAtMzcgNiAtNTVxMTEgLTI3IDQzIC0yN3EzNiAwIDc3IDQ1di00MHpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjUNCmgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InlvdXR1YmUiIHVuaWNvZGU9IiYjeGYxNjc7IiANCmQ9Ik05NzEgMjkydi0yMTFxMCAtNjcgLTM5IC02N3EtMjMgMCAtNDUgMjJ2MzAxcTIyIDIyIDQ1IDIycTM5IDAgMzkgLTY3ek0xMzA5IDI5MXYtNDZoLTkwdjQ2cTAgNjggNDUgNjh0NDUgLTY4ek0zNDMgNTA5aDEwN3Y5NGgtMzEydi05NGgxMDV2LTU2OWgxMDB2NTY5ek02MzEgLTYwaDg5djQ5NGgtODl2LTM3OHEtMzAgLTQyIC01NyAtNDJxLTE4IDAgLTIxIDIxcS0xIDMgLTEgMzV2MzY0aC04OXYtMzkxcTAgLTQ5IDggLTczDQpxMTIgLTM3IDU4IC0zN3E0OCAwIDEwMiA2MXYtNTR6TTEwNjAgODh2MTk3cTAgNzMgLTkgOTlxLTE3IDU2IC03MSA1NnEtNTAgMCAtOTMgLTU0djIxN2gtODl2LTY2M2g4OXY0OHE0NSAtNTUgOTMgLTU1cTU0IDAgNzEgNTVxOSAyNyA5IDEwMHpNMTM5OCA5OHYxM2gtOTFxMCAtNTEgLTIgLTYxcS03IC0zNiAtNDAgLTM2cS00NiAwIC00NiA2OXY4N2gxNzl2MTAzcTAgNzkgLTI3IDExNnEtMzkgNTEgLTEwNiA1MXEtNjggMCAtMTA3IC01MQ0KcS0yOCAtMzcgLTI4IC0xMTZ2LTE3M3EwIC03OSAyOSAtMTE2cTM5IC01MSAxMDggLTUxcTcyIDAgMTA4IDUzcTE4IDI3IDIxIDU0cTIgOSAyIDU4ek03OTAgMTAxMXYyMTBxMCA2OSAtNDMgNjl0LTQzIC02OXYtMjEwcTAgLTcwIDQzIC03MHQ0MyA3MHpNMTUwOSAyNjBxMCAtMjM0IC0yNiAtMzUwcS0xNCAtNTkgLTU4IC05OXQtMTAyIC00NnEtMTg0IC0yMSAtNTU1IC0yMXQtNTU1IDIxcS01OCA2IC0xMDIuNSA0NnQtNTcuNSA5OQ0KcS0yNiAxMTIgLTI2IDM1MHEwIDIzNCAyNiAzNTBxMTQgNTkgNTggOTl0MTAzIDQ3cTE4MyAyMCA1NTQgMjB0NTU1IC0yMHE1OCAtNyAxMDIuNSAtNDd0NTcuNSAtOTlxMjYgLTExMiAyNiAtMzUwek01MTEgMTUzNmgxMDJsLTEyMSAtMzk5di0yNzFoLTEwMHYyNzFxLTE0IDc0IC02MSAyMTJxLTM3IDEwMyAtNjUgMTg3aDEwNmw3MSAtMjYzek04ODEgMTIwM3YtMTc1cTAgLTgxIC0yOCAtMTE4cS0zOCAtNTEgLTEwNiAtNTFxLTY3IDAgLTEwNSA1MQ0KcS0yOCAzOCAtMjggMTE4djE3NXEwIDgwIDI4IDExN3EzOCA1MSAxMDUgNTFxNjggMCAxMDYgLTUxcTI4IC0zNyAyOCAtMTE3ek0xMjE2IDEzNjV2LTQ5OWgtOTF2NTVxLTUzIC02MiAtMTAzIC02MnEtNDYgMCAtNTkgMzdxLTggMjQgLTggNzV2Mzk0aDkxdi0zNjdxMCAtMzMgMSAtMzVxMyAtMjIgMjEgLTIycTI3IDAgNTcgNDN2MzgxaDkxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ieGluZyIgdW5pY29kZT0iJiN4ZjE2ODsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik01OTcgODY5cS0xMCAtMTggLTI1NyAtNDU2cS0yNyAtNDYgLTY1IC00NmgtMjM5cS0yMSAwIC0zMSAxN3QwIDM2bDI1MyA0NDhxMSAwIDAgMWwtMTYxIDI3OXEtMTIgMjIgLTEgMzdxOSAxNSAzMiAxNWgyMzlxNDAgMCA2NiAtNDV6TTE0MDMgMTUxMXExMSAtMTYgMCAtMzdsLTUyOCAtOTM0di0xbDMzNiAtNjE1cTExIC0yMCAxIC0zN3EtMTAgLTE1IC0zMiAtMTVoLTIzOXEtNDIgMCAtNjYgNDVsLTMzOSA2MjJxMTggMzIgNTMxIDk0Mg0KcTI1IDQ1IDY0IDQ1aDI0MXEyMiAwIDMxIC0xNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Inhpbmdfc2lnbiIgdW5pY29kZT0iJiN4ZjE2OTsiIA0KZD0iTTY4NSA3NzFxMCAxIC0xMjYgMjIycS0yMSAzNCAtNTIgMzRoLTE4NHEtMTggMCAtMjYgLTExcS03IC0xMiAxIC0yOWwxMjUgLTIxNnYtMWwtMTk2IC0zNDZxLTkgLTE0IDAgLTI4cTggLTEzIDI0IC0xM2gxODVxMzEgMCA1MCAzNnpNMTMwOSAxMjY4cS03IDEyIC0yNCAxMmgtMTg3cS0zMCAwIC00OSAtMzVsLTQxMSAtNzI5cTEgLTIgMjYyIC00ODFxMjAgLTM1IDUyIC0zNWgxODRxMTggMCAyNSAxMnE4IDEzIC0xIDI4bC0yNjAgNDc2djENCmw0MDkgNzIzcTggMTYgMCAyOHpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ5b3V0dWJlX3BsYXkiIHVuaWNvZGU9IiYjeGYxNmE7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNzExIDQwOGw0ODQgMjUwbC00ODQgMjUzdi01MDN6TTg5NiAxMjcwcTE2OCAwIDMyNC41IC00LjV0MjI5LjUgLTkuNWw3MyAtNHExIDAgMTcgLTEuNXQyMyAtM3QyMy41IC00LjV0MjguNSAtOHQyOCAtMTN0MzEgLTE5LjV0MjkgLTI2LjVxNiAtNiAxNS41IC0xOC41dDI5IC01OC41dDI2LjUgLTEwMXE4IC02NCAxMi41IC0xMzYuNXQ1LjUgLTExMy41di00MHYtMTM2cTEgLTE0NSAtMTggLTI5MHEtNyAtNTUgLTI1IC05OS41dC0zMiAtNjEuNQ0KbC0xNCAtMTdxLTE0IC0xNSAtMjkgLTI2LjV0LTMxIC0xOXQtMjggLTEyLjV0LTI4LjUgLTh0LTI0IC00LjV0LTIzIC0zdC0xNi41IC0xLjVxLTI1MSAtMTkgLTYyNyAtMTlxLTIwNyAyIC0zNTkuNSA2LjV0LTIwMC41IDcuNWwtNDkgNGwtMzYgNHEtMzYgNSAtNTQuNSAxMHQtNTEgMjF0LTU2LjUgNDFxLTYgNiAtMTUuNSAxOC41dC0yOSA1OC41dC0yNi41IDEwMXEtOCA2NCAtMTIuNSAxMzYuNXQtNS41IDExMy41djQwdjEzNg0KcS0xIDE0NSAxOCAyOTBxNyA1NSAyNSA5OS41dDMyIDYxLjVsMTQgMTdxMTQgMTUgMjkgMjYuNXQzMSAxOS41dDI4IDEzdDI4LjUgOHQyMy41IDQuNXQyMyAzdDE3IDEuNXEyNTEgMTggNjI3IDE4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZHJvcGJveCIgdW5pY29kZT0iJiN4ZjE2YjsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik00MDIgODI5bDQ5NCAtMzA1bC0zNDIgLTI4NWwtNDkwIDMxOXpNMTM4OCAyNzR2LTEwOGwtNDkwIC0yOTN2LTFsLTEgMWwtMSAtMXYxbC00ODkgMjkzdjEwOGwxNDcgLTk2bDM0MiAyODR2MmwxIC0xbDEgMXYtMmwzNDMgLTI4NHpNNTU0IDE0MThsMzQyIC0yODVsLTQ5NCAtMzA0bC0zMzggMjcwek0xMzkwIDgyOWwzMzggLTI3MWwtNDg5IC0zMTlsLTM0MyAyODV6TTEyMzkgMTQxOGw0ODkgLTMxOWwtMzM4IC0yNzBsLTQ5NCAzMDR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFja2V4Y2hhbmdlIiB1bmljb2RlPSImI3hmMTZjOyIgDQpkPSJNMTI4OSAtOTZoLTExMTh2NDgwaC0xNjB2LTY0MGgxNDM4djY0MGgtMTYwdi00ODB6TTM0NyA0MjhsMzMgMTU3bDc4MyAtMTY1bC0zMyAtMTU2ek00NTAgODAybDY3IDE0Nmw3MjUgLTMzOWwtNjcgLTE0NXpNNjUxIDExNThsMTAyIDEyM2w2MTQgLTUxM2wtMTAyIC0xMjN6TTEwNDggMTUzNmw0NzcgLTY0MWwtMTI4IC05NmwtNDc3IDY0MXpNMzMwIDY1djE1OWg4MDB2LTE1OWgtODAweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW5zdGFncmFtIiB1bmljb2RlPSImI3hmMTZkOyIgDQpkPSJNMTAyNCA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xMTYyIDY0MHEwIC0xNjQgLTExNSAtMjc5dC0yNzkgLTExNXQtMjc5IDExNXQtMTE1IDI3OXQxMTUgMjc5dDI3OSAxMTV0Mjc5IC0xMTV0MTE1IC0yNzl6TTEyNzAgMTA1MHEwIC0zOCAtMjcgLTY1dC02NSAtMjd0LTY1IDI3dC0yNyA2NXQyNyA2NXQ2NSAyN3Q2NSAtMjd0MjcgLTY1ek03NjggMTI3MA0KcS03IDAgLTc2LjUgMC41dC0xMDUuNSAwdC05Ni41IC0zdC0xMDMgLTEwdC03MS41IC0xOC41cS01MCAtMjAgLTg4IC01OHQtNTggLTg4cS0xMSAtMjkgLTE4LjUgLTcxLjV0LTEwIC0xMDN0LTMgLTk2LjV0MCAtMTA1LjV0MC41IC03Ni41dC0wLjUgLTc2LjV0MCAtMTA1LjV0MyAtOTYuNXQxMCAtMTAzdDE4LjUgLTcxLjVxMjAgLTUwIDU4IC04OHQ4OCAtNThxMjkgLTExIDcxLjUgLTE4LjV0MTAzIC0xMHQ5Ni41IC0zdDEwNS41IDB0NzYuNSAwLjUNCnQ3Ni41IC0wLjV0MTA1LjUgMHQ5Ni41IDN0MTAzIDEwdDcxLjUgMTguNXE1MCAyMCA4OCA1OHQ1OCA4OHExMSAyOSAxOC41IDcxLjV0MTAgMTAzdDMgOTYuNXQwIDEwNS41dC0wLjUgNzYuNXQwLjUgNzYuNXQwIDEwNS41dC0zIDk2LjV0LTEwIDEwM3QtMTguNSA3MS41cS0yMCA1MCAtNTggODh0LTg4IDU4cS0yOSAxMSAtNzEuNSAxOC41dC0xMDMgMTB0LTk2LjUgM3QtMTA1LjUgMHQtNzYuNSAtMC41ek0xNTM2IDY0MHEwIC0yMjkgLTUgLTMxNw0KcS0xMCAtMjA4IC0xMjQgLTMyMnQtMzIyIC0xMjRxLTg4IC01IC0zMTcgLTV0LTMxNyA1cS0yMDggMTAgLTMyMiAxMjR0LTEyNCAzMjJxLTUgODggLTUgMzE3dDUgMzE3cTEwIDIwOCAxMjQgMzIydDMyMiAxMjRxODggNSAzMTcgNXQzMTcgLTVxMjA4IC0xMCAzMjIgLTEyNHQxMjQgLTMyMnE1IC04OCA1IC0zMTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmbGlja3IiIHVuaWNvZGU9IiYjeGYxNmU7IiANCmQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHpNNjk4IDY0MHEwIDg4IC02MiAxNTB0LTE1MCA2MnQtMTUwIC02MnQtNjIgLTE1MHQ2MiAtMTUwdDE1MCAtNjJ0MTUwIDYydDYyIDE1MHpNMTI2MiA2NDBxMCA4OCAtNjIgMTUwDQp0LTE1MCA2MnQtMTUwIC02MnQtNjIgLTE1MHQ2MiAtMTUwdDE1MCAtNjJ0MTUwIDYydDYyIDE1MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFkbiIgdW5pY29kZT0iJiN4ZjE3MDsiIA0KZD0iTTc2OCA5MTRsMjAxIC0zMDZoLTQwMnpNMTEzMyAzODRoOTRsLTQ1OSA2OTFsLTQ1OSAtNjkxaDk0bDEwNCAxNjBoNTIyek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxNzEiIHVuaWNvZGU9IiYjeGYxNzE7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNODE1IDY3N3E4IC02MyAtNTAuNSAtMTAxdC0xMTEuNSAtNnEtMzkgMTcgLTUzLjUgNTh0LTAuNSA4MnQ1MiA1OHEzNiAxOCA3Mi41IDEydDY0IC0zNS41dDI3LjUgLTY3LjV6TTkyNiA2OThxLTE0IDEwNyAtMTEzIDE2NHQtMTk3IDEzcS02MyAtMjggLTEwMC41IC04OC41dC0zNC41IC0xMjkuNXE0IC05MSA3Ny41IC0xNTV0MTY1LjUgLTU2cTkxIDggMTUyIDg0dDUwIDE2OHpNMTE2NSAxMjQwcS0yMCAyNyAtNTYgNDQuNXQtNTggMjINCnQtNzEgMTIuNXEtMjkxIDQ3IC01NjYgLTJxLTQzIC03IC02NiAtMTJ0LTU1IC0yMnQtNTAgLTQzcTMwIC0yOCA3NiAtNDUuNXQ3My41IC0yMnQ4Ny41IC0xMS41cTIyOCAtMjkgNDQ4IC0xcTYzIDggODkuNSAxMnQ3Mi41IDIxLjV0NzUgNDYuNXpNMTIyMiAyMDVxLTggLTI2IC0xNS41IC03Ni41dC0xNCAtODR0LTI4LjUgLTcwdC01OCAtNTYuNXEtODYgLTQ4IC0xODkuNSAtNzEuNXQtMjAyIC0yMnQtMjAxLjUgMTguNXEtNDYgOCAtODEuNSAxOA0KdC03Ni41IDI3dC03MyA0My41dC01MiA2MS41cS0yNSA5NiAtNTcgMjkybDYgMTZsMTggOXEyMjMgLTE0OCA1MDYuNSAtMTQ4dDUwNy41IDE0OHEyMSAtNiAyNCAtMjN0LTUgLTQ1dC04IC0zN3pNMTQwMyAxMTY2cS0yNiAtMTY3IC0xMTEgLTY1NXEtNSAtMzAgLTI3IC01NnQtNDMuNSAtNDB0LTU0LjUgLTMxcS0yNTIgLTEyNiAtNjEwIC04OHEtMjQ4IDI3IC0zOTQgMTM5cS0xNSAxMiAtMjUuNSAyNi41dC0xNyAzNXQtOSAzNHQtNiAzOS41DQp0LTUuNSAzNXEtOSA1MCAtMjYuNSAxNTB0LTI4IDE2MS41dC0yMy41IDE0Ny41dC0yMiAxNThxMyAyNiAxNy41IDQ4LjV0MzEuNSAzNy41dDQ1IDMwdDQ2IDIyLjV0NDggMTguNXExMjUgNDYgMzEzIDY0cTM3OSAzNyA2NzYgLTUwcTE1NSAtNDYgMjE1IC0xMjJxMTYgLTIwIDE2LjUgLTUxdC01LjUgLTU0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYml0YnVja2V0X3NpZ24iIHVuaWNvZGU9IiYjeGYxNzI7IiANCmQ9Ik04NDggNjY2cTAgNDMgLTQxIDY2dC03NyAxcS00MyAtMjAgLTQyLjUgLTcyLjV0NDMuNSAtNzAuNXEzOSAtMjMgODEgNHQzNiA3MnpNOTI4IDY4MnE4IC02NiAtMzYgLTEyMXQtMTEwIC02MXQtMTE5IDQwdC01NiAxMTNxLTIgNDkgMjUuNSA5M3Q3Mi41IDY0cTcwIDMxIDE0MS41IC0xMHQ4MS41IC0xMTh6TTExMDAgMTA3M3EtMjAgLTIxIC01My41IC0zNHQtNTMgLTE2dC02My41IC04cS0xNTUgLTIwIC0zMjQgMHEtNDQgNiAtNjMgOS41DQp0LTUyLjUgMTZ0LTU0LjUgMzIuNXExMyAxOSAzNiAzMXQ0MCAxNS41dDQ3IDguNXExOTggMzUgNDA4IDFxMzMgLTUgNTEgLTguNXQ0MyAtMTZ0MzkgLTMxLjV6TTExNDIgMzI3cTAgNyA1LjUgMjYuNXQzIDMydC0xNy41IDE2LjVxLTE2MSAtMTA2IC0zNjUgLTEwNnQtMzY2IDEwNmwtMTIgLTZsLTUgLTEycTI2IC0xNTQgNDEgLTIxMHE0NyAtODEgMjA0IC0xMDhxMjQ5IC00NiA0MjggNTNxMzQgMTkgNDkgNTEuNXQyMi41IDg1LjV0MTIuNSA3MXoNCk0xMjcyIDEwMjBxOSA1MyAtOCA3NXEtNDMgNTUgLTE1NSA4OHEtMjE2IDYzIC00ODcgMzZxLTEzMiAtMTIgLTIyNiAtNDZxLTM4IC0xNSAtNTkuNSAtMjV0LTQ3IC0zNHQtMjkuNSAtNTRxOCAtNjggMTkgLTEzOHQyOSAtMTcxdDI0IC0xMzdxMSAtNSA1IC0zMXQ3IC0zNnQxMiAtMjd0MjIgLTI4cTEwNSAtODAgMjg0IC0xMDBxMjU5IC0yOCA0NDAgNjNxMjQgMTMgMzkuNSAyM3QzMSAyOXQxOS41IDQwcTQ4IDI2NyA4MCA0NzN6TTE1MzYgMTEyMA0Kdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0dW1ibHIiIHVuaWNvZGU9IiYjeGYxNzM7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNOTQ0IDIwN2w4MCAtMjM3cS0yMyAtMzUgLTExMSAtNjZ0LTE3NyAtMzJxLTEwNCAtMiAtMTkwLjUgMjZ0LTE0Mi41IDc0dC05NSAxMDZ0LTU1LjUgMTIwdC0xNi41IDExOHY1NDRoLTE2OHYyMTVxNzIgMjYgMTI5IDY5LjV0OTEgOTB0NTggMTAydDM0IDk5dDE1IDg4LjVxMSA1IDQuNSA4LjV0Ny41IDMuNWgyNDR2LTQyNGgzMzN2LTI1MmgtMzM0di01MThxMCAtMzAgNi41IC01NnQyMi41IC01Mi41dDQ5LjUgLTQxLjV0ODEuNSAtMTQNCnE3OCAyIDEzNCAyOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InR1bWJscl9zaWduIiB1bmljb2RlPSImI3hmMTc0OyIgDQpkPSJNMTEzNiA3NWwtNjIgMTgzcS00NCAtMjIgLTEwMyAtMjJxLTM2IC0xIC02MiAxMC41dC0zOC41IDMxLjV0LTE3LjUgNDAuNXQtNSA0My41djM5OGgyNTd2MTk0aC0yNTZ2MzI2aC0xODhxLTggMCAtOSAtMTBxLTUgLTQ0IC0xNy41IC04N3QtMzkgLTk1dC03NyAtOTV0LTExOC41IC02OHYtMTY1aDEzMHYtNDE4cTAgLTU3IDIxLjUgLTExNXQ2NSAtMTExdDEyMSAtODUuNXQxNzYuNSAtMzAuNXE2OSAxIDEzNi41IDI1dDg1LjUgNTB6DQpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb25nX2Fycm93X2Rvd24iIHVuaWNvZGU9IiYjeGYxNzU7IiBob3Jpei1hZHYteD0iNzY4IiANCmQ9Ik03NjUgMjM3cTggLTE5IC01IC0zNWwtMzUwIC0zODRxLTEwIC0xMCAtMjMgLTEwcS0xNCAwIC0yNCAxMGwtMzU1IDM4NHEtMTMgMTYgLTUgMzVxOSAxOSAyOSAxOWgyMjR2MTI0OHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTI0OGgyMjRxMjEgMCAyOSAtMTl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb25nX2Fycm93X3VwIiB1bmljb2RlPSImI3hmMTc2OyIgaG9yaXotYWR2LXg9Ijc2OCIgDQpkPSJNNzY1IDEwNDNxLTkgLTE5IC0yOSAtMTloLTIyNHYtMTI0OHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTI0OGgtMjI0cS0yMSAwIC0yOSAxOXQ1IDM1bDM1MCAzODRxMTAgMTAgMjMgMTBxMTQgMCAyNCAtMTBsMzU1IC0zODRxMTMgLTE2IDUgLTM1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibG9uZ19hcnJvd19sZWZ0IiB1bmljb2RlPSImI3hmMTc3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgNzM2di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTI0OHYtMjI0cTAgLTIxIC0xOSAtMjl0LTM1IDVsLTM4NCAzNTBxLTEwIDEwIC0xMCAyM3EwIDE0IDEwIDI0bDM4NCAzNTRxMTYgMTQgMzUgNnExOSAtOSAxOSAtMjl2LTIyNGgxMjQ4cTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb25nX2Fycm93X3JpZ2h0IiB1bmljb2RlPSImI3hmMTc4OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3MjggNjQzcTAgLTE0IC0xMCAtMjRsLTM4NCAtMzU0cS0xNiAtMTQgLTM1IC02cS0xOSA5IC0xOSAyOXYyMjRoLTEyNDhxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDEyNDh2MjI0cTAgMjEgMTkgMjl0MzUgLTVsMzg0IC0zNTBxMTAgLTEwIDEwIC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFwcGxlIiB1bmljb2RlPSImI3hmMTc5OyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTEzOTMgMzIxcS0zOSAtMTI1IC0xMjMgLTI1MHEtMTI5IC0xOTYgLTI1NyAtMTk2cS00OSAwIC0xNDAgMzJxLTg2IDMyIC0xNTEgMzJxLTYxIDAgLTE0MiAtMzNxLTgxIC0zNCAtMTMyIC0zNHEtMTUyIDAgLTMwMSAyNTlxLTE0NyAyNjEgLTE0NyA1MDNxMCAyMjggMTEzIDM3NHExMTMgMTQ0IDI4NCAxNDRxNzIgMCAxNzcgLTMwcTEwNCAtMzAgMTM4IC0zMHE0NSAwIDE0MyAzNHExMDIgMzQgMTczIDM0cTExOSAwIDIxMyAtNjUNCnE1MiAtMzYgMTA0IC0xMDBxLTc5IC02NyAtMTE0IC0xMThxLTY1IC05NCAtNjUgLTIwN3EwIC0xMjQgNjkgLTIyM3QxNTggLTEyNnpNMTAxNyAxNDk0cTAgLTYxIC0yOSAtMTM2cS0zMCAtNzUgLTkzIC0xMzhxLTU0IC01NCAtMTA4IC03MnEtMzcgLTExIC0xMDQgLTE3cTMgMTQ5IDc4IDI1N3E3NCAxMDcgMjUwIDE0OHExIC0zIDIuNSAtMTF0Mi41IC0xMXEwIC00IDAuNSAtMTB0MC41IC0xMHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9IndpbmRvd3MiIHVuaWNvZGU9IiYjeGYxN2E7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNNjgyIDUzMHYtNjUxbC02ODIgOTR2NTU3aDY4MnpNNjgyIDEyNzN2LTY1OWgtNjgydjU2NXpNMTY2NCA1MzB2LTc4NmwtOTA3IDEyNXY2NjFoOTA3ek0xNjY0IDE0MDh2LTc5NGgtOTA3djY2OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImFuZHJvaWQiIHVuaWNvZGU9IiYjeGYxN2I7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNNDkzIDEwNTNxMTYgMCAyNy41IDExLjV0MTEuNSAyNy41dC0xMS41IDI3LjV0LTI3LjUgMTEuNXQtMjcgLTExLjV0LTExIC0yNy41dDExIC0yNy41dDI3IC0xMS41ek05MTUgMTA1M3ExNiAwIDI3IDExLjV0MTEgMjcuNXQtMTEgMjcuNXQtMjcgMTEuNXQtMjcuNSAtMTEuNXQtMTEuNSAtMjcuNXQxMS41IC0yNy41dDI3LjUgLTExLjV6TTEwMyA4NjlxNDIgMCA3MiAtMzB0MzAgLTcydi00MzBxMCAtNDMgLTI5LjUgLTczdC03Mi41IC0zMA0KdC03MyAzMHQtMzAgNzN2NDMwcTAgNDIgMzAgNzJ0NzMgMzB6TTExNjMgODUwdi02NjZxMCAtNDYgLTMyIC03OHQtNzcgLTMyaC03NXYtMjI3cTAgLTQzIC0zMCAtNzN0LTczIC0zMHQtNzMgMzB0LTMwIDczdjIyN2gtMTM4di0yMjdxMCAtNDMgLTMwIC03M3QtNzMgLTMwcS00MiAwIC03MiAzMHQtMzAgNzNsLTEgMjI3aC03NHEtNDYgMCAtNzggMzJ0LTMyIDc4djY2Nmg5MTh6TTkzMSAxMjU1cTEwNyAtNTUgMTcxIC0xNTMuNXQ2NCAtMjE1LjUNCmgtOTI1cTAgMTE3IDY0IDIxNS41dDE3MiAxNTMuNWwtNzEgMTMxcS03IDEzIDUgMjBxMTMgNiAyMCAtNmw3MiAtMTMycTk1IDQyIDIwMSA0MnQyMDEgLTQybDcyIDEzMnE3IDEyIDIwIDZxMTIgLTcgNSAtMjB6TTE0MDggNzY3di00MzBxMCAtNDMgLTMwIC03M3QtNzMgLTMwcS00MiAwIC03MiAzMHQtMzAgNzN2NDMwcTAgNDMgMzAgNzIuNXQ3MiAyOS41cTQzIDAgNzMgLTI5LjV0MzAgLTcyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsaW51eCIgdW5pY29kZT0iJiN4ZjE3YzsiIA0KZD0iTTY2MyAxMTI1cS0xMSAtMSAtMTUuNSAtMTAuNXQtOC41IC05LjVxLTUgLTEgLTUgNXEwIDEyIDE5IDE1aDEwek03NTAgMTExMXEtNCAtMSAtMTEuNSA2LjV0LTE3LjUgNC41cTI0IDExIDMyIC0ycTMgLTYgLTMgLTl6TTM5OSA2ODRxLTQgMSAtNiAtM3QtNC41IC0xMi41dC01LjUgLTEzLjV0LTEwIC0xM3EtMTAgLTExIC0xIC0xMnE0IC0xIDEyLjUgN3QxMi41IDE4cTEgMyAyIDd0MiA2dDEuNSA0LjV0MC41IDR2M3QtMSAyLjV0LTMgMnoNCk0xMjU0IDMyNXEwIDE4IC01NSA0MnE0IDE1IDcuNSAyNy41dDUgMjZ0MyAyMS41dDAuNSAyMi41dC0xIDE5LjV0LTMuNSAyMnQtNCAyMC41dC01IDI1dC01LjUgMjYuNXEtMTAgNDggLTQ3IDEwM3QtNzIgNzVxMjQgLTIwIDU3IC04M3E4NyAtMTYyIDU0IC0yNzhxLTExIC00MCAtNTAgLTQycS0zMSAtNCAtMzguNSAxOC41dC04IDgzLjV0LTExLjUgMTA3cS05IDM5IC0xOS41IDY5dC0xOS41IDQ1LjV0LTE1LjUgMjQuNXQtMTMgMTV0LTcuNSA3DQpxLTE0IDYyIC0zMSAxMDN0LTI5LjUgNTZ0LTIzLjUgMzN0LTE1IDQwcS00IDIxIDYgNTMuNXQ0LjUgNDkuNXQtNDQuNSAyNXEtMTUgMyAtNDQuNSAxOHQtMzUuNSAxNnEtOCAxIC0xMSAyNnQ4IDUxdDM2IDI3cTM3IDMgNTEgLTMwdDQgLTU4cS0xMSAtMTkgLTIgLTI2LjV0MzAgLTAuNXExMyA0IDEzIDM2djM3cS01IDMwIC0xMy41IDUwdC0yMSAzMC41dC0yMy41IDE1dC0yNyA3LjVxLTEwNyAtOCAtODkgLTEzNHEwIC0xNSAtMSAtMTUNCnEtOSA5IC0yOS41IDEwLjV0LTMzIC0wLjV0LTE1LjUgNXExIDU3IC0xNiA5MHQtNDUgMzRxLTI3IDEgLTQxLjUgLTI3LjV0LTE2LjUgLTU5LjVxLTEgLTE1IDMuNSAtMzd0MTMgLTM3LjV0MTUuNSAtMTMuNXExMCAzIDE2IDE0cTQgOSAtNyA4cS03IDAgLTE1LjUgMTQuNXQtOS41IDMzLjVxLTEgMjIgOSAzN3QzNCAxNHExNyAwIDI3IC0yMXQ5LjUgLTM5dC0xLjUgLTIycS0yMiAtMTUgLTMxIC0yOXEtOCAtMTIgLTI3LjUgLTIzLjUNCnQtMjAuNSAtMTIuNXEtMTMgLTE0IC0xNS41IC0yN3Q3LjUgLTE4cTE0IC04IDI1IC0xOS41dDE2IC0xOXQxOC41IC0xM3QzNS41IC02LjVxNDcgLTIgMTAyIDE1cTIgMSAyMyA3dDM0LjUgMTAuNXQyOS41IDEzdDIxIDE3LjVxOSAxNCAyMCA4cTUgLTMgNi41IC04LjV0LTMgLTEydC0xNi41IC05LjVxLTIwIC02IC01Ni41IC0yMS41dC00NS41IC0xOS41cS00NCAtMTkgLTcwIC0yM3EtMjUgLTUgLTc5IDJxLTEwIDIgLTkgLTJ0MTcgLTE5DQpxMjUgLTIzIDY3IC0yMnExNyAxIDM2IDd0MzYgMTR0MzMuNSAxNy41dDMwIDE3dDI0LjUgMTJ0MTcuNSAyLjV0OC41IC0xMXEwIC0yIC0xIC00LjV0LTQgLTV0LTYgLTQuNXQtOC41IC01dC05IC00LjV0LTEwIC01dC05LjUgLTQuNXEtMjggLTE0IC02Ny41IC00NHQtNjYuNSAtNDN0LTQ5IC0xcS0yMSAxMSAtNjMgNzNxLTIyIDMxIC0yNSAyMnEtMSAtMyAtMSAtMTBxMCAtMjUgLTE1IC01Ni41dC0yOS41IC01NS41dC0yMSAtNTh0MTEuNSAtNjMNCnEtMjMgLTYgLTYyLjUgLTkwdC00Ny41IC0xNDFxLTIgLTE4IC0xLjUgLTY5dC01LjUgLTU5cS04IC0yNCAtMjkgLTNxLTMyIDMxIC0zNiA5NHEtMiAyOCA0IDU2cTQgMTkgLTEgMThxLTIgLTEgLTQgLTVxLTM2IC02NSAxMCAtMTY2cTUgLTEyIDI1IC0yOHQyNCAtMjBxMjAgLTIzIDEwNCAtOTAuNXQ5MyAtNzYuNXExNiAtMTUgMTcuNSAtMzh0LTE0IC00M3QtNDUuNSAtMjNxOCAtMTUgMjkgLTQ0LjV0MjggLTU0dDcgLTcwLjVxNDYgMjQgNyA5Mg0KcS00IDggLTEwLjUgMTZ0LTkuNSAxMnQtMiA2cTMgNSAxMyA5LjV0MjAgLTIuNXE0NiAtNTIgMTY2IC0zNnExMzMgMTUgMTc3IDg3cTIzIDM4IDM0IDMwcTEyIC02IDEwIC01MnEtMSAtMjUgLTIzIC05MnEtOSAtMjMgLTYgLTM3LjV0MjQgLTE1LjVxMyAxOSAxNC41IDc3dDEzLjUgOTBxMiAyMSAtNi41IDczLjV0LTcuNSA5N3QyMyA3MC41cTE1IDE4IDUxIDE4cTEgMzcgMzQuNSA1M3Q3Mi41IDEwLjV0NjAgLTIyLjV6TTYyNiAxMTUyDQpxMyAxNyAtMi41IDMwdC0xMS41IDE1cS05IDIgLTkgLTdxMiAtNSA1IC02cTEwIDAgNyAtMTVxLTMgLTIwIDggLTIwcTMgMCAzIDN6TTEwNDUgOTU1cS0yIDggLTYuNSAxMS41dC0xMyA1dC0xNC41IDUuNXEtNSAzIC05LjUgOHQtNyA4dC01LjUgNi41dC00IDR0LTQgLTEuNXEtMTQgLTE2IDcgLTQzLjV0MzkgLTMxLjVxOSAtMSAxNC41IDh0My41IDIwek04NjcgMTE2OHEwIDExIC01IDE5LjV0LTExIDEyLjV0LTkgM3EtNiAwIC04IC0ydDAgLTQNCnQ1IC0zcTE0IC00IDE4IC0zMXEwIC0zIDggMnEyIDIgMiAzek05MjEgMTQwMXEwIDIgLTIuNSA1dC05IDd0LTkuNSA2cS0xNSAxNSAtMjQgMTVxLTkgLTEgLTExLjUgLTcuNXQtMSAtMTN0LTAuNSAtMTIuNXEtMSAtNCAtNiAtMTAuNXQtNiAtOXQzIC04LjVxNCAtMyA4IDB0MTEgOXQxNSA5cTEgMSA5IDF0MTUgMnQ5IDd6TTE0ODYgNjBxMjAgLTEyIDMxIC0yNC41dDEyIC0yNHQtMi41IC0yMi41dC0xNS41IC0yMnQtMjMuNSAtMTkuNQ0KdC0zMCAtMTguNXQtMzEuNSAtMTYuNXQtMzIgLTE1LjV0LTI3IC0xM3EtMzggLTE5IC04NS41IC01NnQtNzUuNSAtNjRxLTE3IC0xNiAtNjggLTE5LjV0LTg5IDE0LjVxLTE4IDkgLTI5LjUgMjMuNXQtMTYuNSAyNS41dC0yMiAxOS41dC00NyA5LjVxLTQ0IDEgLTEzMCAxcS0xOSAwIC01NyAtMS41dC01OCAtMi41cS00NCAtMSAtNzkuNSAtMTV0LTUzLjUgLTMwdC00My41IC0yOC41dC01My41IC0xMS41cS0yOSAxIC0xMTEgMzF0LTE0NiA0Mw0KcS0xOSA0IC01MSA5LjV0LTUwIDl0LTM5LjUgOS41dC0zMy41IDE0LjV0LTE3IDE5LjVxLTEwIDIzIDcgNjYuNXQxOCA1NC41cTEgMTYgLTQgNDB0LTEwIDQyLjV0LTQuNSAzNi41dDEwLjUgMjdxMTQgMTIgNTcgMTR0NjAgMTJxMzAgMTggNDIgMzV0MTIgNTFxMjEgLTczIC0zMiAtMTA2cS0zMiAtMjAgLTgzIC0xNXEtMzQgMyAtNDMgLTEwcS0xMyAtMTUgNSAtNTdxMiAtNiA4IC0xOHQ4LjUgLTE4dDQuNSAtMTd0MSAtMjJxMCAtMTUgLTE3IC00OQ0KdC0xNCAtNDhxMyAtMTcgMzcgLTI2cTIwIC02IDg0LjUgLTE4LjV0OTkuNSAtMjAuNXEyNCAtNiA3NCAtMjJ0ODIuNSAtMjN0NTUuNSAtNHE0MyA2IDY0LjUgMjh0MjMgNDh0LTcuNSA1OC41dC0xOSA1MnQtMjAgMzYuNXEtMTIxIDE5MCAtMTY5IDI0MnEtNjggNzQgLTExMyA0MHEtMTEgLTkgLTE1IDE1cS0zIDE2IC0yIDM4cTEgMjkgMTAgNTJ0MjQgNDd0MjIgNDJxOCAyMSAyNi41IDcydDI5LjUgNzh0MzAgNjF0MzkgNTQNCnExMTAgMTQzIDEyNCAxOTVxLTEyIDExMiAtMTYgMzEwcS0yIDkwIDI0IDE1MS41dDEwNiAxMDQuNXEzOSAyMSAxMDQgMjFxNTMgMSAxMDYgLTEzLjV0ODkgLTQxLjVxNTcgLTQyIDkxLjUgLTEyMS41dDI5LjUgLTE0Ny41cS01IC05NSAzMCAtMjE0cTM0IC0xMTMgMTMzIC0yMThxNTUgLTU5IDk5LjUgLTE2M3Q1OS41IC0xOTFxOCAtNDkgNSAtODQuNXQtMTIgLTU1LjV0LTIwIC0yMnEtMTAgLTIgLTIzLjUgLTE5dC0yNyAtMzUuNQ0KdC00MC41IC0zMy41dC02MSAtMTRxLTE4IDEgLTMxLjUgNXQtMjIuNSAxMy41dC0xMy41IDE1LjV0LTExLjUgMjAuNXQtOSAxOS41cS0yMiAzNyAtNDEgMzB0LTI4IC00OXQ3IC05N3EyMCAtNzAgMSAtMTk1cS0xMCAtNjUgMTggLTEwMC41dDczIC0zM3Q4NSAzNS41cTU5IDQ5IDg5LjUgNjYuNXQxMDMuNSA0Mi41cTUzIDE4IDc3IDM2LjV0MTguNSAzNC41dC0yNSAyOC41dC01MS41IDIzLjVxLTMzIDExIC00OS41IDQ4dC0xNSA3Mi41DQp0MTUuNSA0Ny41cTEgLTMxIDggLTU2LjV0MTQuNSAtNDAuNXQyMC41IC0yOC41dDIxIC0xOXQyMS41IC0xM3QxNi41IC05LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkcmliYmxlIiB1bmljb2RlPSImI3hmMTdkOyIgDQpkPSJNMTAyNCAzNnEtNDIgMjQxIC0xNDAgNDk4aC0ybC0yIC0xcS0xNiAtNiAtNDMgLTE2LjV0LTEwMSAtNDl0LTEzNyAtODJ0LTEzMSAtMTE0LjV0LTEwMyAtMTQ4bC0xNSAxMXExODQgLTE1MCA0MTggLTE1MHExMzIgMCAyNTYgNTJ6TTgzOSA2NDNxLTIxIDQ5IC01MyAxMTFxLTMxMSAtOTMgLTY3MyAtOTNxLTEgLTcgLTEgLTIxcTAgLTEyNCA0NCAtMjM2LjV0MTI0IC0yMDEuNXE1MCA4OSAxMjMuNSAxNjYuNXQxNDIuNSAxMjQuNXQxMzAuNSA4MQ0KdDk5LjUgNDhsMzcgMTNxNCAxIDEzIDMuNXQxMyA0LjV6TTczMiA4NTVxLTEyMCAyMTMgLTI0NCAzNzhxLTEzOCAtNjUgLTIzNCAtMTg2dC0xMjggLTI3MnEzMDIgMCA2MDYgODB6TTE0MTYgNTM2cS0yMTAgNjAgLTQwOSAyOXE4NyAtMjM5IDEyOCAtNDY5cTExMSA3NSAxODUgMTg5LjV0OTYgMjUwLjV6TTYxMSAxMjc3cS0xIDAgLTIgLTFxMSAxIDIgMXpNMTIwMSAxMTMycS0xODUgMTY0IC00MzMgMTY0cS03NiAwIC0xNTUgLTE5DQpxMTMxIC0xNzAgMjQ2IC0zODJxNjkgMjYgMTMwIDYwLjV0OTYuNSA2MS41dDY1LjUgNTd0MzcuNSA0MC41ek0xNDI0IDY0N3EtMyAyMzIgLTE0OSA0MTBsLTEgLTFxLTkgLTEyIC0xOSAtMjQuNXQtNDMuNSAtNDQuNXQtNzEgLTYwLjV0LTEwMCAtNjV0LTEzMS41IC02NC41cTI1IC01MyA0NCAtOTVxMiAtNSA2LjUgLTE3dDcuNSAtMTdxMzYgNSA3NC41IDd0NzMuNSAydDY5IC0xLjV0NjQgLTR0NTYuNSAtNS41dDQ4IC02LjV0MzYuNSAtNg0KdDI1IC00LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2t5cGUiIHVuaWNvZGU9IiYjeGYxN2U7IiANCmQ9Ik0xMTczIDQ3M3EwIDUwIC0xOS41IDkxLjV0LTQ4LjUgNjguNXQtNzMgNDl0LTgyLjUgMzR0LTg3LjUgMjNsLTEwNCAyNHEtMzAgNyAtNDQgMTAuNXQtMzUgMTEuNXQtMzAgMTZ0LTE2LjUgMjF0LTcuNSAzMHEwIDc3IDE0NCA3N3E0MyAwIDc3IC0xMnQ1NCAtMjguNXQzOCAtMzMuNXQ0MCAtMjl0NDggLTEycTQ3IDAgNzUuNSAzMnQyOC41IDc3cTAgNTUgLTU2IDk5LjV0LTE0MiA2Ny41dC0xODIgMjNxLTY4IDAgLTEzMiAtMTUuNQ0KdC0xMTkuNSAtNDd0LTg5IC04N3QtMzMuNSAtMTI4LjVxMCAtNjEgMTkgLTEwNi41dDU2IC03NS41dDgwIC00OC41dDEwMyAtMzIuNWwxNDYgLTM2cTkwIC0yMiAxMTIgLTM2cTMyIC0yMCAzMiAtNjBxMCAtMzkgLTQwIC02NC41dC0xMDUgLTI1LjVxLTUxIDAgLTkxLjUgMTZ0LTY1IDM4LjV0LTQ1LjUgNDV0LTQ2IDM4LjV0LTU0IDE2cS01MCAwIC03NS41IC0zMHQtMjUuNSAtNzVxMCAtOTIgMTIyIC0xNTcuNXQyOTEgLTY1LjUNCnE3MyAwIDE0MCAxOC41dDEyMi41IDUzLjV0ODguNSA5My41dDMzIDEzMS41ek0xNTM2IDI1NnEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41cS0xMzAgMCAtMjM0IDgwcS03NyAtMTYgLTE1MCAtMTZxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41cTAgNzMgMTYgMTUwcS04MCAxMDQgLTgwIDIzNHEwIDE1OSAxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNXExMzAgMCAyMzQgLTgwDQpxNzcgMTYgMTUwIDE2cTE0MyAwIDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTczIC0xNiAtMTUwcTgwIC0xMDQgODAgLTIzNHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZvdXJzcXVhcmUiIHVuaWNvZGU9IiYjeGYxODA7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNMTAwMCAxMTAybDM3IDE5NHE1IDIzIC05IDQwdC0zNSAxN2gtNzEycS0yMyAwIC0zOC41IC0xN3QtMTUuNSAtMzd2LTExMDFxMCAtNyA2IC0xbDI5MSAzNTJxMjMgMjYgMzggMzMuNXQ0OCA3LjVoMjM5cTIyIDAgMzcgMTQuNXQxOCAyOS41cTI0IDEzMCAzNyAxOTFxNCAyMSAtMTEuNSA0MHQtMzYuNSAxOWgtMjk0cS0yOSAwIC00OCAxOXQtMTkgNDh2NDJxMCAyOSAxOSA0Ny41dDQ4IDE4LjVoMzQ2cTE4IDAgMzUgMTMuNXQyMCAyOS41eg0KTTEyMjcgMTMyNHEtMTUgLTczIC01My41IC0yNjYuNXQtNjkuNSAtMzUwdC0zNSAtMTczLjVxLTYgLTIyIC05IC0zMi41dC0xNCAtMzIuNXQtMjQuNSAtMzN0LTM4LjUgLTIxdC01OCAtMTBoLTI3MXEtMTMgMCAtMjIgLTEwcS04IC05IC00MjYgLTQ5NHEtMjIgLTI1IC01OC41IC0yOC41dC00OC41IDUuNXEtNTUgMjIgLTU1IDk4djE0MTBxMCA1NSAzOCAxMDIuNXQxMjAgNDcuNWg4ODhxOTUgMCAxMjcgLTUzdDEwIC0xNTl6TTEyMjcgMTMyNA0KbC0xNTggLTc5MHE0IDE3IDM1IDE3My41dDY5LjUgMzUwdDUzLjUgMjY2LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmVsbG8iIHVuaWNvZGU9IiYjeGYxODE7IiANCmQ9Ik03MDQgMTkydjEwMjRxMCAxNCAtOSAyM3QtMjMgOWgtNDgwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEwMjRxMCAtMTQgOSAtMjN0MjMgLTloNDgwcTE0IDAgMjMgOXQ5IDIzek0xMzc2IDU3NnY2NDBxMCAxNCAtOSAyM3QtMjMgOWgtNDgwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0MHEwIC0xNCA5IC0yM3QyMyAtOWg0ODBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDgNCnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImZlbWFsZSIgdW5pY29kZT0iJiN4ZjE4MjsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMjgwIDQ4MHEwIC00MCAtMjggLTY4dC02OCAtMjhxLTUxIDAgLTgwIDQzbC0yMjcgMzQxaC00NXYtMTMybDI0NyAtNDExcTkgLTE1IDkgLTMzcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkydi0yNzJxMCAtNDYgLTMzIC03OXQtNzkgLTMzaC0xNjBxLTQ2IDAgLTc5IDMzdC0zMyA3OXYyNzJoLTE5MnEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTggOSAzM2wyNDcgNDExdjEzMmgtNDVsLTIyNyAtMzQxcS0yOSAtNDMgLTgwIC00Mw0KcS00MCAwIC02OCAyOHQtMjggNjhxMCAyOSAxNiA1M2wyNTYgMzg0cTczIDEwNyAxNzYgMTA3aDM4NHExMDMgMCAxNzYgLTEwN2wyNTYgLTM4NHExNiAtMjQgMTYgLTUzek04NjQgMTI4MHEwIC05MyAtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41dC0xNTguNSA2NS41dC02NS41IDE1OC41dDY1LjUgMTU4LjV0MTU4LjUgNjUuNXQxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Im1hbGUiIHVuaWNvZGU9IiYjeGYxODM7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNMTAyNCA4MzJ2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjh0LTY4IDI4dC0yOCA2OHYzNTJoLTY0di05MTJxMCAtNDYgLTMzIC03OXQtNzkgLTMzdC03OSAzM3QtMzMgNzl2NDY0aC02NHYtNDY0cTAgLTQ2IC0zMyAtNzl0LTc5IC0zM3QtNzkgMzN0LTMzIDc5djkxMmgtNjR2LTM1MnEwIC00MCAtMjggLTY4dC02OCAtMjh0LTY4IDI4dC0yOCA2OHY0MTZxMCA4MCA1NiAxMzZ0MTM2IDU2aDY0MHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoNCk03MzYgMTI4MHEwIC05MyAtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41dC0xNTguNSA2NS41dC02NS41IDE1OC41dDY1LjUgMTU4LjV0MTU4LjUgNjUuNXQxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImdpdHRpcCIgdW5pY29kZT0iJiN4ZjE4NDsiIA0KZD0iTTc3MyAyMzRsMzUwIDQ3M3ExNiAyMiAyNC41IDU5dC02IDg1dC02MS41IDc5cS00MCAyNiAtODMgMjUuNXQtNzMuNSAtMTcuNXQtNTQuNSAtNDVxLTM2IC00MCAtOTYgLTQwcS01OSAwIC05NSA0MHEtMjQgMjggLTU0LjUgNDV0LTczLjUgMTcuNXQtODQgLTI1LjVxLTQ2IC0zMSAtNjAuNSAtNzl0LTYgLTg1dDI0LjUgLTU5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzDQp0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3VuIiB1bmljb2RlPSImI3hmMTg1OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE0NzIgNjQwcTAgMTE3IC00NS41IDIyMy41dC0xMjMgMTg0dC0xODQgMTIzdC0yMjMuNSA0NS41dC0yMjMuNSAtNDUuNXQtMTg0IC0xMjN0LTEyMyAtMTg0dC00NS41IC0yMjMuNXQ0NS41IC0yMjMuNXQxMjMgLTE4NHQxODQgLTEyM3QyMjMuNSAtNDUuNXQyMjMuNSA0NS41dDE4NCAxMjN0MTIzIDE4NHQ0NS41IDIyMy41ek0xNzQ4IDM2M3EtNCAtMTUgLTIwIC0yMGwtMjkyIC05NnYtMzA2cTAgLTE2IC0xMyAtMjZxLTE1IC0xMCAtMjkgLTQNCmwtMjkyIDk0bC0xODAgLTI0OHEtMTAgLTEzIC0yNiAtMTN0LTI2IDEzbC0xODAgMjQ4bC0yOTIgLTk0cS0xNCAtNiAtMjkgNHEtMTMgMTAgLTEzIDI2djMwNmwtMjkyIDk2cS0xNiA1IC0yMCAyMHEtNSAxNyA0IDI5bDE4MCAyNDhsLTE4MCAyNDhxLTkgMTMgLTQgMjlxNCAxNSAyMCAyMGwyOTIgOTZ2MzA2cTAgMTYgMTMgMjZxMTUgMTAgMjkgNGwyOTIgLTk0bDE4MCAyNDhxOSAxMiAyNiAxMnQyNiAtMTJsMTgwIC0yNDhsMjkyIDk0DQpxMTQgNiAyOSAtNHExMyAtMTAgMTMgLTI2di0zMDZsMjkyIC05NnExNiAtNSAyMCAtMjBxNSAtMTYgLTQgLTI5bC0xODAgLTI0OGwxODAgLTI0OHE5IC0xMiA0IC0yOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zNjYiIHVuaWNvZGU9IiYjeGYxODY7IiANCmQ9Ik0xMjYyIDIzM3EtNTQgLTkgLTExMCAtOXEtMTgyIDAgLTMzNyA5MHQtMjQ1IDI0NXQtOTAgMzM3cTAgMTkyIDEwNCAzNTdxLTIwMSAtNjAgLTMyOC41IC0yMjl0LTEyNy41IC0zODRxMCAtMTMwIDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxcTE0NCAwIDI3My41IDYxLjV0MjIwLjUgMTcxLjV6TTE0NjUgMzE4cS05NCAtMjAzIC0yODMuNSAtMzI0LjV0LTQxMy41IC0xMjEuNXEtMTU2IDAgLTI5OCA2MQ0KdC0yNDUgMTY0dC0xNjQgMjQ1dC02MSAyOThxMCAxNTMgNTcuNSAyOTIuNXQxNTYgMjQxLjV0MjM1LjUgMTY0LjV0MjkwIDY4LjVxNDQgMiA2MSAtMzlxMTggLTQxIC0xNSAtNzJxLTg2IC03OCAtMTMxLjUgLTE4MS41dC00NS41IC0yMTguNXEwIC0xNDggNzMgLTI3M3QxOTggLTE5OHQyNzMgLTczcTExOCAwIDIyOCA1MXE0MSAxOCA3MiAtMTNxMTQgLTE0IDE3LjUgLTM0dC00LjUgLTM4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYXJjaGl2ZSIgdW5pY29kZT0iJiN4ZjE4NzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMDg4IDcwNHEwIDI2IC0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOWgyNTZxMjYgMCA0NSAxOXQxOSA0NXpNMTY2NCA4OTZ2LTk2MHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY5NjBxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTcyOCAxMzQ0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNTM2DQpxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImJ1ZyIgdW5pY29kZT0iJiN4ZjE4ODsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNjMyIDU3NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTIyNHEwIC0xNzEgLTY3IC0yOTBsMjA4IC0yMDlxMTkgLTE5IDE5IC00NXQtMTkgLTQ1cS0xOCAtMTkgLTQ1IC0xOXQtNDUgMTlsLTE5OCAxOTdxLTUgLTUgLTE1IC0xM3QtNDIgLTI4LjV0LTY1IC0zNi41dC04MiAtMjl0LTk3IC0xM3Y4OTZoLTEyOHYtODk2cS01MSAwIC0xMDEuNSAxMy41dC04NyAzM3QtNjYgMzl0LTQzLjUgMzIuNWwtMTUgMTRsLTE4MyAtMjA3DQpxLTIwIC0yMSAtNDggLTIxcS0yNCAwIC00MyAxNnEtMTkgMTggLTIwLjUgNDQuNXQxNS41IDQ2LjVsMjAyIDIyN3EtNTggMTE0IC01OCAyNzRoLTIyNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDIyNHYyOTRsLTE3MyAxNzNxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTlsMTczIC0xNzNoODQ0bDE3MyAxNzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0xNzMgLTE3M3YtMjk0aDIyNHEyNiAwIDQ1IC0xOQ0KdDE5IC00NXpNMTE1MiAxMTUyaC02NDBxMCAxMzMgOTMuNSAyMjYuNXQyMjYuNSA5My41dDIyNi41IC05My41dDkzLjUgLTIyNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idmsiIHVuaWNvZGU9IiYjeGYxODk7IiBob3Jpei1hZHYteD0iMTkyMCIgDQpkPSJNMTkxNyAxMDE2cTIzIC02NCAtMTUwIC0yOTRxLTI0IC0zMiAtNjUgLTg1cS00MCAtNTEgLTU1IC03MnQtMzAuNSAtNDkuNXQtMTIgLTQydDEzIC0zNC41dDMyLjUgLTQzdDU3IC01M3E0IC0yIDUgLTRxMTQxIC0xMzEgMTkxIC0yMjFxMyAtNSA2LjUgLTEyLjV0NyAtMjYuNXQtMC41IC0zNHQtMjUgLTI3LjV0LTU5IC0xMi41bC0yNTYgLTRxLTI0IC01IC01NiA1dC01MiAyMmwtMjAgMTJxLTMwIDIxIC03MCA2NHQtNjguNSA3Ny41dC02MSA1OA0KdC01Ni41IDE1LjVxLTMgLTEgLTggLTMuNXQtMTcgLTE0LjV0LTIxLjUgLTI5LjV0LTE3IC01MnQtNi41IC03Ny41cTAgLTE1IC0zLjUgLTI3LjV0LTcuNSAtMTguNWwtNCAtNXEtMTggLTE5IC01MyAtMjJoLTExNXEtNzEgLTQgLTE0NiAxNi41dC0xMzEuNSA1M3QtMTAzIDY2dC03MC41IDU3LjVsLTI1IDI0cS0xMCAxMCAtMjcuNSAzMHQtNzEuNSA5MXQtMTA2IDE1MXQtMTIyLjUgMjExdC0xMzAuNSAyNzJxLTYgMTYgLTYgMjd0MyAxNmw0IDYNCnExNSAxOSA1NyAxOWwyNzQgMnExMiAtMiAyMyAtNi41dDE2IC04LjVsNSAtM3ExNiAtMTEgMjQgLTMycTIwIC01MCA0NiAtMTAzLjV0NDEgLTgxLjVsMTYgLTI5cTI5IC02MCA1NiAtMTA0dDQ4LjUgLTY4LjV0NDEuNSAtMzguNXQzNCAtMTR0MjcgNXEyIDEgNSA1dDEyIDIydDEzLjUgNDd0OS41IDgxdDAgMTI1cS0yIDQwIC05IDczdC0xNCA0NmwtNiAxMnEtMjUgMzQgLTg1IDQzcS0xMyAyIDUgMjRxMTYgMTkgMzggMzBxNTMgMjYgMjM5IDI0DQpxODIgLTEgMTM1IC0xM3EyMCAtNSAzMy41IC0xMy41dDIwLjUgLTI0dDEwLjUgLTMydDMuNSAtNDUuNXQtMSAtNTV0LTIuNSAtNzAuNXQtMS41IC04Mi41cTAgLTExIC0xIC00MnQtMC41IC00OHQzLjUgLTQwLjV0MTEuNSAtMzl0MjIuNSAtMjQuNXE4IC0yIDE3IC00dDI2IDExdDM4IDM0LjV0NTIgNjd0NjggMTA3LjVxNjAgMTA0IDEwNyAyMjVxNCAxMCAxMCAxNy41dDExIDEwLjVsNCAzbDUgMi41dDEzIDN0MjAgMC41bDI4OCAyDQpxMzkgNSA2NCAtMi41dDMxIC0xNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0id2VpYm8iIHVuaWNvZGU9IiYjeGYxOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNjc1IDI1MnEyMSAzNCAxMSA2OXQtNDUgNTBxLTM0IDE0IC03MyAxdC02MCAtNDZxLTIyIC0zNCAtMTMgLTY4LjV0NDMgLTUwLjV0NzQuNSAtMi41dDYyLjUgNDcuNXpNNzY5IDM3M3E4IDEzIDMuNSAyNi41dC0xNy41IDE4LjVxLTE0IDUgLTI4LjUgLTAuNXQtMjEuNSAtMTguNXEtMTcgLTMxIDEzIC00NXExNCAtNSAyOSAwLjV0MjIgMTguNXpNOTQzIDI2NnEtNDUgLTEwMiAtMTU4IC0xNTB0LTIyNCAtMTINCnEtMTA3IDM0IC0xNDcuNSAxMjYuNXQ2LjUgMTg3LjVxNDcgOTMgMTUxLjUgMTM5dDIxMC41IDE5cTExMSAtMjkgMTU4LjUgLTExOS41dDIuNSAtMTkwLjV6TTEyNTUgNDI2cS05IDk2IC04OSAxNzB0LTIwOC41IDEwOXQtMjc0LjUgMjFxLTIyMyAtMjMgLTM2OS41IC0xNDEuNXQtMTMyLjUgLTI2NC41cTkgLTk2IDg5IC0xNzB0MjA4LjUgLTEwOXQyNzQuNSAtMjFxMjIzIDIzIDM2OS41IDE0MS41dDEzMi41IDI2NC41ek0xNTYzIDQyMg0KcTAgLTY4IC0zNyAtMTM5LjV0LTEwOSAtMTM3dC0xNjguNSAtMTE3LjV0LTIyNiAtODN0LTI3MC41IC0zMXQtMjc1IDMzLjV0LTI0MC41IDkzdC0xNzEuNSAxNTF0LTY1IDE5OS41cTAgMTE1IDY5LjUgMjQ1dDE5Ny41IDI1OHExNjkgMTY5IDM0MS41IDIzNnQyNDYuNSAtN3E2NSAtNjQgMjAgLTIwOXEtNCAtMTQgLTEgLTIwdDEwIC03dDE0LjUgMC41dDEzLjUgMy41bDYgMnExMzkgNTkgMjQ2IDU5dDE1MyAtNjFxNDUgLTYzIDAgLTE3OA0KcS0yIC0xMyAtNC41IC0yMHQ0LjUgLTEyLjV0MTIgLTcuNXQxNyAtNnE1NyAtMTggMTAzIC00N3Q4MCAtODEuNXQzNCAtMTE2LjV6TTE0ODkgMTA0NnE0MiAtNDcgNTQuNSAtMTA4LjV0LTYuNSAtMTE3LjVxLTggLTIzIC0yOS41IC0zNHQtNDQuNSAtNHEtMjMgOCAtMzQgMjkuNXQtNCA0NC41cTIwIDYzIC0yNCAxMTF0LTEwNyAzNXEtMjQgLTUgLTQ1IDh0LTI1IDM3cS01IDI0IDggNDQuNXQzNyAyNS41cTYwIDEzIDExOSAtNS41dDEwMSAtNjUuNXoNCk0xNjcwIDEyMDlxODcgLTk2IDExMi41IC0yMjIuNXQtMTMuNSAtMjQxLjVxLTkgLTI3IC0zNCAtNDB0LTUyIC00dC00MCAzNHQtNSA1MnEyOCA4MiAxMCAxNzJ0LTgwIDE1OHEtNjIgNjkgLTE0OCA5NS41dC0xNzMgOC41cS0yOCAtNiAtNTIgOS41dC0zMCA0My41dDkuNSA1MS41dDQzLjUgMjkuNXExMjMgMjYgMjQ0IC0xMS41dDIwOCAtMTM0LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZW5yZW4iIHVuaWNvZGU9IiYjeGYxOGI7IiANCmQ9Ik0xMTMzIC0zNHEtMTcxIC05NCAtMzY4IC05NHEtMTk2IDAgLTM2NyA5NHExMzggODcgMjM1LjUgMjExdDEzMS41IDI2OHEzNSAtMTQ0IDEzMi41IC0yNjh0MjM1LjUgLTIxMXpNNjM4IDEzOTR2LTQ4NXEwIC0yNTIgLTEyNi41IC00NTkuNXQtMzMwLjUgLTMwNi41cS0xODEgMjE1IC0xODEgNDk1cTAgMTg3IDgzLjUgMzQ5LjV0MjI5LjUgMjY5LjV0MzI1IDEzN3pNMTUzNiA2MzhxMCAtMjgwIC0xODEgLTQ5NQ0KcS0yMDQgOTkgLTMzMC41IDMwNi41dC0xMjYuNSA0NTkuNXY0ODVxMTc5IC0zMCAzMjUgLTEzN3QyMjkuNSAtMjY5LjV0ODMuNSAtMzQ5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzcyIiB1bmljb2RlPSImI3hmMThjOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTE0MDIgNDMzcS0zMiAtODAgLTc2IC0xMzh0LTkxIC04OC41dC05OSAtNDYuNXQtMTAxLjUgLTE0LjV0LTk2LjUgOC41dC04Ni41IDIydC02OS41IDI3LjV0LTQ2IDIyLjVsLTE3IDEwcS0xMTMgLTIyOCAtMjg5LjUgLTM1OS41dC0zODQuNSAtMTMyLjVxLTE5IDAgLTMyIDEzdC0xMyAzMnQxMyAzMS41dDMyIDEyLjVxMTczIDEgMzIyLjUgMTA3LjV0MjUxLjUgMjk0LjVxLTM2IC0xNCAtNzIgLTIzdC04MyAtMTN0LTkxIDIuNXQtOTMgMjguNQ0KdC05MiA1OXQtODQuNSAxMDB0LTc0LjUgMTQ2cTExNCA0NyAyMTQgNTd0MTY3LjUgLTcuNXQxMjQuNSAtNTYuNXQ4OC41IC03N3Q1Ni41IC04MnE1MyAxMzEgNzkgMjkxcS03IC0xIC0xOCAtMi41dC00Ni41IC0yLjV0LTY5LjUgMC41dC04MS41IDEwdC04OC41IDIzdC04NCA0Mi41dC03NSA2NXQtNTQuNSA5NC41dC0yOC41IDEyNy41cTcwIDI4IDEzMy41IDM2LjV0MTEyLjUgLTF0OTIgLTMwdDczLjUgLTUwdDU2IC02MXQ0MiAtNjN0MjcuNSAtNTYNCnQxNiAtMzkuNWw0IC0xNnExMiAxMjIgMTIgMTk1cS04IDYgLTIxLjUgMTZ0LTQ5IDQ0LjV0LTYzLjUgNzEuNXQtNTQgOTN0LTMzIDExMi41dDEyIDEyN3Q3MCAxMzguNXE3MyAtMjUgMTI3LjUgLTYxLjV0ODQuNSAtNzYuNXQ0OCAtODV0MjAuNSAtODl0LTAuNSAtODUuNXQtMTMgLTc2LjV0LTE5IC02MnQtMTcgLTQybC03IC0xNXExIC00IDEgLTUwdC0xIC03MnEzIDcgMTAgMTguNXQzMC41IDQzdDUwLjUgNTh0NzEgNTUuNXQ5MS41IDQ0LjUNCnQxMTIgMTQuNXQxMzIuNSAtMjRxLTIgLTc4IC0yMS41IC0xNDEuNXQtNTAgLTEwNC41dC02OS41IC03MS41dC04MS41IC00NS41dC04NC41IC0yNHQtODAgLTkuNXQtNjcuNSAxdC00Ni41IDQuNWwtMTcgM3EtMjMgLTE0NyAtNzMgLTI4M3E2IDcgMTggMTguNXQ0OS41IDQxdDc3LjUgNTIuNXQ5OS41IDQydDExNy41IDIwdDEyOSAtMjMuNXQxMzcgLTc3LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFja19leGNoYW5nZSIgdW5pY29kZT0iJiN4ZjE4ZDsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMjU5IDI4M3YtNjZxMCAtODUgLTU3LjUgLTE0NC41dC0xMzguNSAtNTkuNWgtNTdsLTI2MCAtMjY5djI2OWgtNTI5cS04MSAwIC0xMzguNSA1OS41dC01Ny41IDE0NC41djY2aDEyMzh6TTEyNTkgNjA5di0yNTVoLTEyMzh2MjU1aDEyMzh6TTEyNTkgOTM3di0yNTVoLTEyMzh2MjU1aDEyMzh6TTEyNTkgMTA3N3YtNjdoLTEyMzh2NjdxMCA4NCA1Ny41IDE0My41dDEzOC41IDU5LjVoODQ2cTgxIDAgMTM4LjUgLTU5LjV0NTcuNSAtMTQzLjV6DQoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zNzQiIHVuaWNvZGU9IiYjeGYxOGU7IiANCmQ9Ik0xMTUyIDY0MHEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMzUycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzUydjE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4DQp0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19jaXJjbGVfYWx0X2xlZnQiIHVuaWNvZGU9IiYjeGYxOTA7IiANCmQ9Ik0xMTUyIDczNnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMzUydi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOXEtMTIgMCAtMjQgMTBsLTMxOSAzMTlxLTkgOSAtOSAyM3Q5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMzUycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTMxMiA2NDBxMCAxNDggLTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OA0KdC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3QyNzMgNzN0MTk4IDE5OHQ3MyAyNzN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM3NiIgdW5pY29kZT0iJiN4ZjE5MTsiIA0KZD0iTTEwMjQgOTYwdi02NDBxMCAtMjYgLTE5IC00NXQtNDUgLTE5cS0yMCAwIC0zNyAxMmwtNDQ4IDMyMHEtMjcgMTkgLTI3IDUydDI3IDUybDQ0OCAzMjBxMTcgMTIgMzcgMTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDE2MHY5NjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC05NjBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg5NjBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXoNCk0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImRvdF9jaXJjbGVfYWx0IiB1bmljb2RlPSImI3hmMTkyOyIgDQpkPSJNMTAyNCA2NDBxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MXpNNzY4IDExODRxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczdC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjUNCnQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zNzgiIHVuaWNvZGU9IiYjeGYxOTM7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTAyMyAzNDlsMTAyIC0yMDRxLTU4IC0xNzkgLTIxMCAtMjkwdC0zMzkgLTExMXEtMTU2IDAgLTI4OC41IDc3LjV0LTIxMCAyMTB0LTc3LjUgMjg4LjVxMCAxODEgMTA0LjUgMzMwdDI3NC41IDIxMWwxNyAtMTMxcS0xMjIgLTU0IC0xOTUgLTE2NS41dC03MyAtMjQ0LjVxMCAtMTg1IDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjVxMTI2IDAgMjMyLjUgNjV0MTY1IDE3NS41dDQ5LjUgMjM2LjV6TTE1NzEgMjQ5bDU4IC0xMTRsLTI1NiAtMTI4DQpxLTEzIC03IC0yOSAtN3EtNDAgMCAtNTcgMzVsLTIzOSA0NzdoLTQ3MnEtMjQgMCAtNDIuNSAxNi41dC0yMS41IDQwLjVsLTk2IDc3OXEtMiAxNyA2IDQycTE0IDUxIDU3IDgyLjV0OTcgMzEuNXE2NiAwIDExMyAtNDd0NDcgLTExM3EwIC02OSAtNTIgLTExNy41dC0xMjAgLTQxLjVsMzcgLTI4OWg0MjN2LTEyOGgtNDA3bDE2IC0xMjhoNDU1cTQwIDAgNTcgLTM1bDIyOCAtNDU1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idmltZW9fc3F1YXJlIiB1bmljb2RlPSImI3hmMTk0OyIgDQpkPSJNMTI5MiA4OThxMTAgMjE2IC0xNjEgMjIycS0yMzEgOCAtMzEyIC0yNjFxNDQgMTkgODIgMTlxODUgMCA3NCAtOTZxLTQgLTU3IC03NCAtMTY3dC0xMDUgLTExMHEtNDMgMCAtODIgMTY5cS0xMyA1NCAtNDUgMjU1cS0zMCAxODkgLTE2MCAxNzdxLTU5IC03IC0xNjQgLTEwMGwtODEgLTcybC04MSAtNzJsNTIgLTY3cTc2IDUyIDg3IDUycTU3IDAgMTA3IC0xNzlxMTUgLTU1IDQ1IC0xNjQuNXQ0NSAtMTY0LjVxNjggLTE3OSAxNjQgLTE3OQ0KcTE1NyAwIDM4MyAyOTRxMjIwIDI4MyAyMjYgNDQ0ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zODAiIHVuaWNvZGU9IiYjeGYxOTU7IiBob3Jpei1hZHYteD0iMTE1MiIgDQpkPSJNMTE1MiA3MDRxMCAtMTkxIC05NC41IC0zNTN0LTI1Ni41IC0yNTYuNXQtMzUzIC05NC41aC0xNjBxLTE0IDAgLTIzIDl0LTkgMjN2NjExbC0yMTUgLTY2cS0zIC0xIC05IC0xcS0xMCAwIC0xOSA2cS0xMyAxMCAtMTMgMjZ2MTI4cTAgMjMgMjMgMzFsMjMzIDcxdjkzbC0yMTUgLTY2cS0zIC0xIC05IC0xcS0xMCAwIC0xOSA2cS0xMyAxMCAtMTMgMjZ2MTI4cTAgMjMgMjMgMzFsMjMzIDcxdjI1MHEwIDE0IDkgMjN0MjMgOWgxNjANCnExNCAwIDIzIC05dDkgLTIzdi0xODFsMzc1IDExNnExNSA1IDI4IC01dDEzIC0yNnYtMTI4cTAgLTIzIC0yMyAtMzFsLTM5MyAtMTIxdi05M2wzNzUgMTE2cTE1IDUgMjggLTV0MTMgLTI2di0xMjhxMCAtMjMgLTIzIC0zMWwtMzkzIC0xMjF2LTQ4N3ExODggMTMgMzE4IDE1MXQxMzAgMzI4cTAgMTQgOSAyM3QyMyA5aDE2MHExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGx1c19zcXVhcmVfbyIgdW5pY29kZT0iJiN4ZjE5NjsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik0xMTUyIDczNnYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMzUydi0zNTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzUyaC0zNTJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzUydjM1MnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi0zNTJoMzUycTE0IDAgMjMgLTl0OSAtMjN6TTEyODAgMjg4djgzMnEwIDY2IC00NyAxMTN0LTExMyA0N2gtODMyDQpxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3pNMTQwOCAxMTIwdi04MzJxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzJxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzgyIiB1bmljb2RlPSImI3hmMTk3OyIgaG9yaXotYWR2LXg9IjIxNzYiIA0KZD0iTTYyMCA0MTZxLTExMCAtNjQgLTI2OCAtNjRoLTEyOHY2NGgtNjRxLTEzIDAgLTIyLjUgMjMuNXQtOS41IDU2LjVxMCAyNCA3IDQ5cS01OCAyIC05Ni41IDEwLjV0LTM4LjUgMjAuNXQzOC41IDIwLjV0OTYuNSAxMC41cS03IDI1IC03IDQ5cTAgMzMgOS41IDU2LjV0MjIuNSAyMy41aDY0djY0aDEyOHExNTggMCAyNjggLTY0aDExMTNxNDIgLTcgMTA2LjUgLTE4dDgwLjUgLTE0cTg5IC0xNSAxNTAgLTQwLjV0ODMuNSAtNDcuNXQyMi41IC00MA0KdC0yMi41IC00MHQtODMuNSAtNDcuNXQtMTUwIC00MC41cS0xNiAtMyAtODAuNSAtMTR0LTEwNi41IC0xOGgtMTExM3pNMTczOSA2NjhxNTMgLTM2IDUzIC05MnQtNTMgLTkybDgxIC0zMHE2OCA0OCA2OCAxMjJ0LTY4IDEyMnpNNjI1IDQwMGgxMDE1cS0yMTcgLTM4IC00NTYgLTgwcS01NyAwIC0xMTMgLTI0dC04MyAtNDhsLTI4IC0yNGwtMjg4IC0yODhxLTI2IC0yNiAtNzAuNSAtNDV0LTg5LjUgLTE5aC05NmwtOTMgNDY0aDI5DQpxMTU3IDAgMjczIDY0ek0zNTIgODE2aC0yOWw5MyA0NjRoOTZxNDYgMCA5MCAtMTl0NzAgLTQ1bDI4OCAtMjg4cTQgLTQgMTEgLTEwLjV0MzAuNSAtMjN0NDguNSAtMjl0NjEuNSAtMjN0NzIuNSAtMTAuNWw0NTYgLTgwaC0xMDE1cS0xMTYgNjQgLTI3MyA2NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zODMiIHVuaWNvZGU9IiYjeGYxOTg7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTUxOSA3NjBxNjIgMCAxMDMuNSAtNDAuNXQ0MS41IC0xMDEuNXEwIC05NyAtOTMgLTEzMGwtMTcyIC01OWw1NiAtMTY3cTcgLTIxIDcgLTQ3cTAgLTU5IC00MiAtMTAydC0xMDEgLTQzcS00NyAwIC04NS41IDI3dC01My41IDcybC01NSAxNjVsLTMxMCAtMTA2bDU1IC0xNjRxOCAtMjQgOCAtNDdxMCAtNTkgLTQyIC0xMDJ0LTEwMiAtNDNxLTQ3IDAgLTg1IDI3dC01MyA3MmwtNTUgMTYzbC0xNTMgLTUzcS0yOSAtOSAtNTAgLTkNCnEtNjEgMCAtMTAxLjUgNDB0LTQwLjUgMTAxcTAgNDcgMjcuNSA4NXQ3MS41IDUzbDE1NiA1M2wtMTA1IDMxM2wtMTU2IC01NHEtMjYgLTggLTQ4IC04cS02MCAwIC0xMDEgNDAuNXQtNDEgMTAwLjVxMCA0NyAyNy41IDg1dDcxLjUgNTNsMTU3IDUzbC01MyAxNTlxLTggMjQgLTggNDdxMCA2MCA0MiAxMDIuNXQxMDIgNDIuNXE0NyAwIDg1IC0yN3Q1MyAtNzJsNTQgLTE2MGwzMTAgMTA1bC01NCAxNjBxLTggMjQgLTggNDdxMCA1OSA0Mi41IDEwMg0KdDEwMS41IDQzcTQ3IDAgODUuNSAtMjcuNXQ1My41IC03MS41bDUzIC0xNjFsMTYyIDU1cTIxIDYgNDMgNnE2MCAwIDEwMi41IC0zOS41dDQyLjUgLTk4LjVxMCAtNDUgLTMwIC04MS41dC03NCAtNTEuNWwtMTU3IC01NGwxMDUgLTMxNmwxNjQgNTZxMjQgOCA0NiA4ek03MjUgNDk4bDMxMCAxMDVsLTEwNSAzMTVsLTMxMCAtMTA3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4NCIgdW5pY29kZT0iJiN4ZjE5OTsiIA0KZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwek0xMjgwIDM1MnY0MzZxLTMxIC0zNSAtNjQgLTU1cS0zNCAtMjIgLTEzMi41IC04NXQtMTUxLjUgLTk5cS05OCAtNjkgLTE2NCAtNjl2MHYwcS02NiAwIC0xNjQgNjkNCnEtNDcgMzIgLTE0MiA5Mi41dC0xNDIgOTIuNXEtMTIgOCAtMzMgMjd0LTMxIDI3di00MzZxMCAtNDAgMjggLTY4dDY4IC0yOGg4MzJxNDAgMCA2OCAyOHQyOCA2OHpNMTI4MCA5MjVxMCA0MSAtMjcuNSA3MHQtNjguNSAyOWgtODMycS00MCAwIC02OCAtMjh0LTI4IC02OHEwIC0zNyAzMC41IC03Ni41dDY3LjUgLTY0LjVxNDcgLTMyIDEzNy41IC04OXQxMjkuNSAtODNxMyAtMiAxNyAtMTEuNXQyMSAtMTR0MjEgLTEzdDIzLjUgLTEzDQp0MjEuNSAtOS41dDIyLjUgLTcuNXQyMC41IC0yLjV0MjAuNSAyLjV0MjIuNSA3LjV0MjEuNSA5LjV0MjMuNSAxM3QyMSAxM3QyMSAxNHQxNyAxMS41bDI2NyAxNzRxMzUgMjMgNjYuNSA2Mi41dDMxLjUgNzMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zODUiIHVuaWNvZGU9IiYjeGYxOWE7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTI3IDY0MHEwIDE2MyA2NyAzMTNsMzY3IC0xMDA1cS0xOTYgOTUgLTMxNSAyODF0LTExOSA0MTF6TTE0MTUgNjc5cTAgLTE5IC0yLjUgLTM4LjV0LTEwIC00OS41dC0xMS41IC00NHQtMTcuNSAtNTl0LTE3LjUgLTU4bC03NiAtMjU2bC0yNzggODI2cTQ2IDMgODggOHExOSAyIDI2IDE4LjV0LTIuNSAzMXQtMjguNSAxMy41bC0yMDUgLTEwcS03NSAxIC0yMDIgMTBxLTEyIDEgLTIwLjUgLTV0LTExLjUgLTE1dC0xLjUgLTE4LjV0OSAtMTYuNQ0KdDE5LjUgLThsODAgLThsMTIwIC0zMjhsLTE2OCAtNTA0bC0yODAgODMycTQ2IDMgODggOHExOSAyIDI2IDE4LjV0LTIuNSAzMXQtMjguNSAxMy41bC0yMDUgLTEwcS03IDAgLTIzIDAuNXQtMjYgMC41cTEwNSAxNjAgMjc0LjUgMjUzLjV0MzY3LjUgOTMuNXExNDcgMCAyODAuNSAtNTN0MjM4LjUgLTE0OWgtMTBxLTU1IDAgLTkyIC00MC41dC0zNyAtOTUuNXEwIC0xMiAyIC0yNHQ0IC0yMS41dDggLTIzdDkgLTIxdDEyIC0yMi41dDEyLjUgLTIxDQp0MTQuNSAtMjR0MTQgLTIzcTYzIC0xMDcgNjMgLTIxMnpNOTA5IDU3M2wyMzcgLTY0N3ExIC02IDUgLTExcS0xMjYgLTQ0IC0yNTUgLTQ0cS0xMTIgMCAtMjE3IDMyek0xNTcwIDEwMDlxOTUgLTE3NCA5NSAtMzY5cTAgLTIwOSAtMTA0IC0zODUuNXQtMjc5IC0yNzguNWwyMzUgNjc4cTU5IDE2OSA1OSAyNzZxMCA0MiAtNiA3OXpNODk2IDE1MzZxMTgyIDAgMzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4dC03MSAtMzQ4dC0xOTEgLTI4Ng0KdC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6TTg5NiAtMjE1cTE3MyAwIDMzMS41IDY4dDI3MyAxODIuNXQxODIuNSAyNzN0NjggMzMxLjV0LTY4IDMzMS41dC0xODIuNSAyNzN0LTI3MyAxODIuNXQtMzMxLjUgNjh0LTMzMS41IC02OHQtMjczIC0xODIuNXQtMTgyLjUgLTI3M3QtNjggLTMzMS41dDY4IC0zMzEuNXQxODIuNSAtMjczDQp0MjczIC0xODIuNXQzMzEuNSAtNjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg2IiB1bmljb2RlPSImI3hmMTliOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwODYgMTUzNnYtMTUzNmwtMjcyIC0xMjhxLTIyOCAyMCAtNDE0IDEwMnQtMjkzIDIwOC41dC0xMDcgMjcyLjVxMCAxNDAgMTAwLjUgMjYzLjV0Mjc1IDIwNS41dDM5MS41IDEwOHYtMTcycS0yMTcgLTM4IC0zNTYuNSAtMTUwdC0xMzkuNSAtMjU1cTAgLTE1MiAxNTQuNSAtMjY3dDM4OC41IC0xNDV2MTM2MHpNMTc1NSA5NTRsMzcgLTM5MGwtNTI1IDExNGwxNDcgODNxLTExOSA3MCAtMjgwIDk5djE3MnEyNzcgLTMzIDQ4MSAtMTU3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4NyIgdW5pY29kZT0iJiN4ZjE5YzsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik05NjAgMTUzNmw5NjAgLTM4NHYtMTI4aC0xMjhxMCAtMjYgLTIwLjUgLTQ1dC00OC41IC0xOWgtMTUyNnEtMjggMCAtNDguNSAxOXQtMjAuNSA0NWgtMTI4djEyOHpNMjU2IDg5NmgyNTZ2LTc2OGgxMjh2NzY4aDI1NnYtNzY4aDEyOHY3NjhoMjU2di03NjhoMTI4djc2OGgyNTZ2LTc2OGg1OXEyOCAwIDQ4LjUgLTE5dDIwLjUgLTQ1di02NGgtMTY2NHY2NHEwIDI2IDIwLjUgNDV0NDguNSAxOWg1OXY3Njh6TTE4NTEgLTY0DQpxMjggMCA0OC41IC0xOXQyMC41IC00NXYtMTI4aC0xOTIwdjEyOHEwIDI2IDIwLjUgNDV0NDguNSAxOWgxNzgyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4OCIgdW5pY29kZT0iJiN4ZjE5ZDsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0xNzc0IDcwMGwxOCAtMzE2cTQgLTY5IC04MiAtMTI4dC0yMzUgLTkzLjV0LTMyMyAtMzQuNXQtMzIzIDM0LjV0LTIzNSA5My41dC04MiAxMjhsMTggMzE2bDU3NCAtMTgxcTIyIC03IDQ4IC03dDQ4IDd6TTIzMDQgMTAyNHEwIC0yMyAtMjIgLTMxbC0xMTIwIC0zNTJxLTQgLTEgLTEwIC0xdC0xMCAxbC02NTIgMjA2cS00MyAtMzQgLTcxIC0xMTEuNXQtMzQgLTE3OC41cTYzIC0zNiA2MyAtMTA5cTAgLTY5IC01OCAtMTA3bDU4IC00MzMNCnEyIC0xNCAtOCAtMjVxLTkgLTExIC0yNCAtMTFoLTE5MnEtMTUgMCAtMjQgMTFxLTEwIDExIC04IDI1bDU4IDQzM3EtNTggMzggLTU4IDEwN3EwIDczIDY1IDExMXExMSAyMDcgOTggMzMwbC0zMzMgMTA0cS0yMiA4IC0yMiAzMXQyMiAzMWwxMTIwIDM1MnE0IDEgMTAgMXQxMCAtMWwxMTIwIC0zNTJxMjIgLTggMjIgLTMxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4OSIgdW5pY29kZT0iJiN4ZjE5ZTsiIA0KZD0iTTg1OSA1NzlsMTMgLTcwN3EtNjIgMTEgLTEwNSAxMXEtNDEgMCAtMTA1IC0xMWwxMyA3MDdxLTQwIDY5IC0xNjguNSAyOTUuNXQtMjE2LjUgMzc0LjV0LTE4MSAyODdxNTggLTE1IDEwOCAtMTVxNDQgMCAxMTEgMTVxNjMgLTExMSAxMzMuNSAtMjI5LjV0MTY3IC0yNzYuNXQxMzguNSAtMjI3cTM3IDYxIDEwOS41IDE3Ny41dDExNy41IDE5MHQxMDUgMTc2dDEwNyAxODkuNXE1NCAtMTQgMTA3IC0xNHE1NiAwIDExNCAxNHYwDQpxLTI4IC0zOSAtNjAgLTg4LjV0LTQ5LjUgLTc4LjV0LTU2LjUgLTk2dC00OSAtODRxLTE0NiAtMjQ4IC0zNTMgLTYxMHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxQTAiIHVuaWNvZGU9IiYjeGYxYTA7IiANCmQ9Ik03NjggNzUwaDcyNXExMiAtNjcgMTIgLTEyOHEwIC0yMTcgLTkxIC0zODcuNXQtMjU5LjUgLTI2Ni41dC0zODYuNSAtOTZxLTE1NyAwIC0yOTkgNjAuNXQtMjQ1IDE2My41dC0xNjMuNSAyNDV0LTYwLjUgMjk5dDYwLjUgMjk5dDE2My41IDI0NXQyNDUgMTYzLjV0Mjk5IDYwLjVxMzAwIDAgNTE1IC0yMDFsLTIwOSAtMjAxcS0xMjMgMTE5IC0zMDYgMTE5cS0xMjkgMCAtMjM4LjUgLTY1dC0xNzMuNSAtMTc2LjV0LTY0IC0yNDMuNQ0KdDY0IC0yNDMuNXQxNzMuNSAtMTc2LjV0MjM4LjUgLTY1cTg3IDAgMTYwIDI0dDEyMCA2MHQ4MiA4MnQ1MS41IDg3dDIyLjUgNzhoLTQzNnYyNjR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMWExIiB1bmljb2RlPSImI3hmMWExOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwOTUgMzY5cTE2IC0xNiAwIC0zMXEtNjIgLTYyIC0xOTkgLTYydC0xOTkgNjJxLTE2IDE1IDAgMzFxNiA2IDE1IDZ0MTUgLTZxNDggLTQ5IDE2OSAtNDlxMTIwIDAgMTY5IDQ5cTYgNiAxNSA2dDE1IC02ek03ODggNTUwcTAgLTM3IC0yNiAtNjN0LTYzIC0yNnQtNjMuNSAyNnQtMjYuNSA2M3EwIDM4IDI2LjUgNjR0NjMuNSAyNnQ2MyAtMjYuNXQyNiAtNjMuNXpNMTE4MyA1NTBxMCAtMzcgLTI2LjUgLTYzdC02My41IC0yNnQtNjMgMjYNCnQtMjYgNjN0MjYgNjMuNXQ2MyAyNi41dDYzLjUgLTI2dDI2LjUgLTY0ek0xNDM0IDY3MHEwIDQ5IC0zNSA4NHQtODUgMzV0LTg2IC0zNnEtMTMwIDkwIC0zMTEgOTZsNjMgMjgzbDIwMCAtNDVxMCAtMzcgMjYgLTYzdDYzIC0yNnQ2My41IDI2LjV0MjYuNSA2My41dC0yNi41IDYzLjV0LTYzLjUgMjYuNXEtNTQgMCAtODAgLTUwbC0yMjEgNDlxLTE5IDUgLTI1IC0xNmwtNjkgLTMxMnEtMTgwIC03IC0zMDkgLTk3cS0zNSAzNyAtODcgMzcNCnEtNTAgMCAtODUgLTM1dC0zNSAtODRxMCAtMzUgMTguNSAtNjR0NDkuNSAtNDRxLTYgLTI3IC02IC01NnEwIC0xNDIgMTQwIC0yNDN0MzM3IC0xMDFxMTk4IDAgMzM4IDEwMXQxNDAgMjQzcTAgMzIgLTcgNTdxMzAgMTUgNDggNDMuNXQxOCA2My41ek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MQ0KdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzkyIiB1bmljb2RlPSImI3hmMWEyOyIgDQpkPSJNOTM5IDQwN3ExMyAtMTMgMCAtMjZxLTUzIC01MyAtMTcxIC01M3QtMTcxIDUzcS0xMyAxMyAwIDI2cTUgNiAxMyA2dDEzIC02cTQyIC00MiAxNDUgLTQydDE0NSA0MnE1IDYgMTMgNnQxMyAtNnpNNjc2IDU2M3EwIC0zMSAtMjMgLTU0dC01NCAtMjN0LTU0IDIzdC0yMyA1NHEwIDMyIDIyLjUgNTQuNXQ1NC41IDIyLjV0NTQuNSAtMjIuNXQyMi41IC01NC41ek0xMDE0IDU2M3EwIC0zMSAtMjMgLTU0dC01NCAtMjN0LTU0IDIzdC0yMyA1NA0KcTAgMzIgMjIuNSA1NC41dDU0LjUgMjIuNXQ1NC41IC0yMi41dDIyLjUgLTU0LjV6TTEyMjkgNjY2cTAgNDIgLTMwIDcydC03MyAzMHEtNDIgMCAtNzMgLTMxcS0xMTMgNzggLTI2NyA4Mmw1NCAyNDNsMTcxIC0zOXExIC0zMiAyMy41IC01NHQ1My41IC0yMnEzMiAwIDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41cS00OCAwIC02OSAtNDNsLTE4OSA0MnEtMTcgNSAtMjEgLTEzbC02MCAtMjY4cS0xNTQgLTYgLTI2NSAtODMNCnEtMzAgMzIgLTc0IDMycS00MyAwIC03MyAtMzB0LTMwIC03MnEwIC0zMCAxNiAtNTV0NDIgLTM4cS01IC0yNSAtNSAtNDhxMCAtMTIyIDEyMCAtMjA4LjV0Mjg5IC04Ni41cTE3MCAwIDI5MCA4Ni41dDEyMCAyMDguNXEwIDI1IC02IDQ5cTI1IDEzIDQwLjUgMzcuNXQxNS41IDU0LjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MA0KcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzkzIiB1bmljb2RlPSImI3hmMWEzOyIgDQpkPSJNODY2IDY5N2w5MCAyN3Y2MnEwIDc5IC01OCAxMzV0LTEzOCA1NnQtMTM4IC01NS41dC01OCAtMTM0LjV2LTI4M3EwIC0yMCAtMTQgLTMzLjV0LTMzIC0xMy41dC0zMi41IDEzLjV0LTEzLjUgMzMuNXYxMjBoLTE1MXYtMTIycTAgLTgyIDU3LjUgLTEzOXQxMzkuNSAtNTdxODEgMCAxMzguNSA1Ni41dDU3LjUgMTM2LjV2MjgwcTAgMTkgMTMuNSAzM3QzMy41IDE0cTE5IDAgMzIuNSAtMTR0MTMuNSAtMzN2LTU0ek0xMTk5IDUwMnYxMjJoLTE1MA0Kdi0xMjZxMCAtMjAgLTEzLjUgLTMzLjV0LTMzLjUgLTEzLjVxLTE5IDAgLTMyLjUgMTR0LTEzLjUgMzN2MTIzbC05MCAtMjZsLTYwIDI4di0xMjNxMCAtODAgNTggLTEzN3QxMzkgLTU3dDEzOC41IDU3dDU3LjUgMTM5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDMNCnQzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjFhNCIgdW5pY29kZT0iJiN4ZjFhNDsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xMDYyIDgyNHYxMThxMCA0MiAtMzAgNzJ0LTcyIDMwdC03MiAtMzB0LTMwIC03MnYtNjEycTAgLTE3NSAtMTI2IC0yOTl0LTMwMyAtMTI0cS0xNzggMCAtMzAzLjUgMTI1LjV0LTEyNS41IDMwMy41djI2NmgzMjh2LTI2MnEwIC00MyAzMCAtNzIuNXQ3MiAtMjkuNXQ3MiAyOS41dDMwIDcyLjV2NjIwcTAgMTcxIDEyNi41IDI5MnQzMDEuNSAxMjFxMTc2IDAgMzAyIC0xMjJ0MTI2IC0yOTR2LTEzNmwtMTk1IC01OHpNMTU5MiA2MDJoMzI4DQp2LTI2NnEwIC0xNzggLTEyNS41IC0zMDMuNXQtMzAzLjUgLTEyNS41cS0xNzcgMCAtMzAzIDEyNC41dC0xMjYgMzAwLjV2MjY4bDEzMSAtNjFsMTk1IDU4di0yNzBxMCAtNDIgMzAgLTcxLjV0NzIgLTI5LjV0NzIgMjkuNXQzMCA3MS41djI3NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zOTUiIHVuaWNvZGU9IiYjeGYxYTU7IiANCmQ9Ik0xNDcyIDE2MHY0ODBoLTcwNHY3MDRoLTQ4MHEtOTMgMCAtMTU4LjUgLTY1LjV0LTY1LjUgLTE1OC41di00ODBoNzA0di03MDRoNDgwcTkzIDAgMTU4LjUgNjUuNXQ2NS41IDE1OC41ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNQ0KdDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM5NiIgdW5pY29kZT0iJiN4ZjFhNjsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0zMjggMTI1NGgyMDR2LTk4M2gtNTMydjY5N2gzMjh2Mjg2ek0zMjggNDM1djM2OWgtMTIzdi0zNjloMTIzek02MTQgOTY4di02OTdoMjA1djY5N2gtMjA1ek02MTQgMTI1NHYtMjA0aDIwNXYyMDRoLTIwNXpNOTAxIDk2OGg1MzN2LTk0MmgtNTMzdjE2M2gzMjh2ODJoLTMyOHY2OTd6TTEyMjkgNDM1djM2OWgtMTIzdi0zNjloMTIzek0xNTE2IDk2OGg1MzJ2LTk0MmgtNTMydjE2M2gzMjd2ODJoLTMyN3Y2OTd6TTE4NDMgNDM1djM2OWgtMTIzDQp2LTM2OWgxMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzk3IiB1bmljb2RlPSImI3hmMWE3OyIgDQpkPSJNMTA0NiA1MTZxMCAtNjQgLTM4IC0xMDl0LTkxIC00NXEtNDMgMCAtNzAgMTV2Mjc3cTI4IDE3IDcwIDE3cTUzIDAgOTEgLTQ1LjV0MzggLTEwOS41ek03MDMgOTQ0cTAgLTY0IC0zOCAtMTA5LjV0LTkxIC00NS41cS00MyAwIC03MCAxNXYyNzdxMjggMTcgNzAgMTdxNTMgMCA5MSAtNDV0MzggLTEwOXpNMTI2NSA1MTNxMCAxMzQgLTg4IDIyOXQtMjEzIDk1cS0yMCAwIC0zOSAtM3EtMjMgLTc4IC03OCAtMTM2cS04NyAtOTUgLTIxMSAtMTAxDQp2LTYzNmwyMTEgNDF2MjA2cTUxIC0xOSAxMTcgLTE5cTEyNSAwIDIxMyA5NXQ4OCAyMjl6TTkyMiA5NDBxMCAxMzQgLTg4LjUgMjI5dC0yMTMuNSA5NXEtNzQgMCAtMTQxIC0zNmgtMTg2di04NDBsMjExIDQxdjIwNnE1NSAtMTkgMTE2IC0xOXExMjUgMCAyMTMuNSA5NXQ4OC41IDIyOXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwDQpxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zOTgiIHVuaWNvZGU9IiYjeGYxYTg7IiBob3Jpei1hZHYteD0iMjAzOCIgDQpkPSJNMTIyMiA2MDdxNzUgMyAxNDMuNSAtMjAuNXQxMTggLTU4LjV0MTAxIC05NC41dDg0IC0xMDh0NzUuNSAtMTIwLjVxMzMgLTU2IDc4LjUgLTEwOXQ3NS41IC04MC41dDk5IC04OC41cS00OCAtMzAgLTEwOC41IC01Ny41dC0xMzguNSAtNTl0LTExNCAtNDcuNXEtNDQgMzcgLTc0IDExNXQtNDMuNSAxNjQuNXQtMzMgMTgwLjV0LTQyLjUgMTY4LjV0LTcyLjUgMTIzdC0xMjIuNSA0OC41bC0xMCAtMmwtNiAtNHE0IC01IDEzIC0xNA0KcTYgLTUgMjggLTIzLjV0MjUuNSAtMjJ0MTkgLTE4dDE4IC0yMC41dDExLjUgLTIxdDEwLjUgLTI3LjV0NC41IC0zMXQ0IC00MC41bDEgLTMzcTEgLTI2IC0yLjUgLTU3LjV0LTcuNSAtNTJ0LTEyLjUgLTU4LjV0LTExLjUgLTUzcS0zNSAxIC0xMDEgLTkuNXQtOTggLTEwLjVxLTM5IDAgLTcyIDEwcS0yIDE2IC0yIDQ3cTAgNzQgMyA5NnEyIDEzIDMxLjUgNDEuNXQ1NyA1OXQyNi41IDUxLjVxLTI0IDIgLTQzIC0yNA0KcS0zNiAtNTMgLTExMS41IC05OS41dC0xMzYuNSAtNDYuNXEtMjUgMCAtNzUuNSA2M3QtMTA2LjUgMTM5LjV0LTg0IDk2LjVxLTYgNCAtMjcgMzBxLTQ4MiAtMTEyIC01MTMgLTExMnEtMTYgMCAtMjggMTF0LTEyIDI3cTAgMTUgOC41IDI2LjV0MjIuNSAxNC41bDQ4NiAxMDZxLTggMTQgLTggMjV0NS41IDE3LjV0MTYgMTEuNXQyMCA3dDIzIDQuNXQxOC41IDQuNXE0IDEgMTUuNSA3LjV0MTcuNSA2LjVxMTUgMCAyOCAtMTZ0MjAgLTMzDQpxMTYzIDM3IDE3MiAzN3ExNyAwIDI5LjUgLTExdDEyLjUgLTI4cTAgLTE1IC04LjUgLTI2dC0yMy41IC0xNGwtMTgyIC00MGwtMSAtMTZxLTEgLTI2IDgxLjUgLTExNy41dDEwNC41IC05MS41cTQ3IDAgMTE5IDgwdDcyIDEyOXEwIDM2IC0yMy41IDUzdC01MSAxOC41dC01MSAxMS41dC0yMy41IDM0cTAgMTYgMTAgMzRsLTY4IDE5cTQzIDQ0IDQzIDExN3EwIDI2IC01IDU4cTgyIDE2IDE0NCAxNnE0NCAwIDcxLjUgLTEuNXQ0OC41IC04LjUNCnQzMSAtMTMuNXQyMC41IC0yNC41dDE1LjUgLTMzLjV0MTcgLTQ3LjV0MjQgLTYwbDUwIDI1cS0zIC00MCAtMjMgLTYwdC00Mi41IC0yMXQtNDAgLTYuNXQtMTYuNSAtMjAuNXpNMTI4MiA4NDJxLTUgNSAtMTMuNSAxNS41dC0xMiAxNC41dC0xMC41IDExLjV0LTEwIDEwLjVsLTggOHQtOC41IDcuNXQtOCA1dC04LjUgNC41cS03IDMgLTE0LjUgNXQtMjAuNSAyLjV0LTIyIDAuNWgtMzIuNWgtMzcuNXEtMTI2IDAgLTIxNyAtNDMNCnExNiAzMCAzNiA0Ni41dDU0IDI5LjV0NjUuNSAzNnQ0NiAzNi41dDUwIDU1dDQzLjUgNTAuNXExMiAtOSAyOCAtMzEuNXQzMiAtMzYuNXQzOCAtMTNsMTIgMXYtNzZsMjIgLTFxMjQ3IDk1IDM3MSAxOTBxMjggMjEgNTAgMzl0NDIuNSAzNy41dDMzIDMxdDI5LjUgMzR0MjQgMzF0MjQuNSAzN3QyMyAzOHQyNyA0Ny41dDI5LjUgNTNsNyA5cS0yIC01MyAtNDMgLTEzOXEtNzkgLTE2NSAtMjA1IC0yNjR0LTMwNiAtMTQycS0xNCAtMyAtNDIgLTcuNQ0KdC01MCAtOS41dC0zOSAtMTRxMyAtMTkgMjQuNSAtNDZ0MjEuNSAtMzRxMCAtMTEgLTI2IC0zMHpNMTA2MSAtNzlxMzkgMjYgMTMxLjUgNDcuNXQxNDYuNSAyMS41cTkgMCAyMi41IC0xNS41dDI4IC00Mi41dDI2IC01MHQyNCAtNTF0MTQuNSAtMzNxLTEyMSAtNDUgLTI0NCAtNDVxLTYxIDAgLTEyNSAxMXpNODIyIDU2OGw0OCAxMmwxMDkgLTE3N2wtNzMgLTQ4ek0xMzIzIDUxcTMgLTE1IDMgLTE2cTAgLTcgLTE3LjUgLTE0LjV0LTQ2IC0xMw0KdC01NCAtOS41dC01My41IC03LjV0LTMyIC00LjVsLTcgNDNxMjEgMiA2MC41IDguNXQ3MiAxMHQ2MC41IDMuNWgxNHpNODY2IDY3OWwtOTYgLTIwbC02IDE3cTEwIDEgMzIuNSA3dDM0LjUgNnExOSAwIDM1IC0xMHpNMTA2MSA0NWgzMWwxMCAtODNsLTQxIC0xMnY5NXpNMTk1MCAxNTM1djF2LTF6TTE5NTAgMTUzNWwtMSAtNWwtMiAtMmwxIDN6TTE5NTAgMTUzNWwxIDF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzk5IiB1bmljb2RlPSImI3hmMWE5OyIgDQpkPSJNMTE2NyAtNTBxLTUgMTkgLTI0IDVxLTMwIC0yMiAtODcgLTM5dC0xMzEgLTE3cS0xMjkgMCAtMTkzIDQ5cS01IDQgLTEzIDRxLTExIDAgLTI2IC0xMnEtNyAtNiAtNy41IC0xNnQ3LjUgLTIwcTM0IC0zMiA4Ny41IC00NnQxMDIuNSAtMTIuNXQ5OSA0LjVxNDEgNCA4NC41IDIwLjV0NjUgMzB0MjguNSAyMC41cTEyIDEyIDcgMjl6TTExMjggNjVxLTE5IDQ3IC0zOSA2MXEtMjMgMTUgLTc2IDE1cS00NyAwIC03MSAtMTANCnEtMjkgLTEyIC03OCAtNTZxLTI2IC0yNCAtMTIgLTQ0cTkgLTggMTcuNSAtNC41dDMxLjUgMjMuNXEzIDIgMTAuNSA4LjV0MTAuNSA4LjV0MTAgN3QxMS41IDd0MTIuNSA1dDE1IDQuNXQxNi41IDIuNXQyMC41IDFxMjcgMCA0NC41IC03LjV0MjMgLTE0LjV0MTMuNSAtMjJxMTAgLTE3IDEyLjUgLTIwdDEyLjUgMXEyMyAxMiAxNCAzNHpNMTQ4MyAzNDZxMCAyMiAtNSA0NC41dC0xNi41IDQ1dC0zNCAzNi41dC01Mi41IDE0DQpxLTMzIDAgLTk3IC00MS41dC0xMjkgLTgzLjV0LTEwMSAtNDJxLTI3IC0xIC02My41IDE5dC03NiA0OXQtODMuNSA1OHQtMTAwIDQ5dC0xMTEgMTlxLTExNSAtMSAtMTk3IC03OC41dC04NCAtMTc4LjVxLTIgLTExMiA3NCAtMTY0cTI5IC0yMCA2Mi41IC0yOC41dDEwMy41IC04LjVxNTcgMCAxMzIgMzIuNXQxMzQgNzF0MTIwIDcwLjV0OTMgMzFxMjYgLTEgNjUgLTMxLjV0NzEuNSAtNjd0NjggLTY3LjV0NTUuNSAtMzJxMzUgLTMgNTguNSAxNA0KdDU1LjUgNjNxMjggNDEgNDIuNSAxMDF0MTQuNSAxMDZ6TTE1MzYgNTA2cTAgLTE2NCAtNjIgLTMwNC41dC0xNjYgLTIzNnQtMjQyLjUgLTE0OS41dC0yOTAuNSAtNTR0LTI5MyA1Ny41dC0yNDcuNSAxNTd0LTE3MC41IDI0MS41dC02NCAzMDJxMCA4OSAxOS41IDE3Mi41dDQ5IDE0NS41dDcwLjUgMTE4LjV0NzguNSA5NHQ3OC41IDY5LjV0NjQuNSA0Ni41dDQyLjUgMjQuNXExNCA4IDUxIDI2LjV0NTQuNSAyOC41dDQ4IDMwdDYwLjUgNDQNCnEzNiAyOCA1OCA3Mi41dDMwIDEyNS41cTEyOSAtMTU1IDE4NiAtMTkzcTQ0IC0yOSAxMzAgLTY4dDEyOSAtNjZxMjEgLTEzIDM5IC0yNXQ2MC41IC00Ni41dDc2IC03MC41dDc1IC05NXQ2OSAtMTIydDQ3IC0xNDguNXQxOS41IC0xNzcuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MDAiIHVuaWNvZGU9IiYjeGYxYWE7IiANCmQ9Ik0xMDcwIDQ2M2wtMTYwIC0xNjBsLTE1MSAtMTUybC0zMCAtMzBxLTY1IC02NCAtMTUxLjUgLTg3dC0xNzEuNSAtMnEtMTYgLTcwIC03MiAtMTE1dC0xMjkgLTQ1cS04NSAwIC0xNDUgNjAuNXQtNjAgMTQ1LjVxMCA3MiA0NC41IDEyOHQxMTMuNSA3MnEtMjIgODYgMSAxNzN0ODggMTUybDEyIDEybDE1MSAtMTUybC0xMSAtMTFxLTM3IC0zNyAtMzcgLTg5dDM3IC05MHEzNyAtMzcgODkgLTM3dDg5IDM3bDMwIDMwbDE1MSAxNTJsMTYxIDE2MHoNCk03MjkgMTE0NWwxMiAtMTJsLTE1MiAtMTUybC0xMiAxMnEtMzcgMzcgLTg5IDM3dC04OSAtMzd0LTM3IC04OS41dDM3IC04OS41bDI5IC0yOWwxNTIgLTE1MmwxNjAgLTE2MGwtMTUxIC0xNTJsLTE2MSAxNjBsLTE1MSAxNTJsLTMwIDMwcS02OCA2NyAtOTAgMTU5LjV0NSAxNzkuNXEtNzAgMTUgLTExNSA3MXQtNDUgMTI5cTAgODUgNjAgMTQ1LjV0MTQ1IDYwLjVxNzYgMCAxMzMuNSAtNDl0NjkuNSAtMTIzcTg0IDIwIDE2OS41IC0zLjUNCnQxNDkuNSAtODcuNXpNMTUzNiA3OHEwIC04NSAtNjAgLTE0NS41dC0xNDUgLTYwLjVxLTc0IDAgLTEzMSA0N3QtNzEgMTE4cS04NiAtMjggLTE3OS41IC02dC0xNjEuNSA5MGwtMTEgMTJsMTUxIDE1MmwxMiAtMTJxMzcgLTM3IDg5IC0zN3Q4OSAzN3QzNyA4OXQtMzcgODlsLTMwIDMwbC0xNTIgMTUybC0xNjAgMTYwbDE1MiAxNTJsMTYwIC0xNjBsMTUyIC0xNTJsMjkgLTMwcTY0IC02NCA4Ny41IC0xNTAuNXQyLjUgLTE3MS41DQpxNzYgLTExIDEyNi41IC02OC41dDUwLjUgLTEzNC41ek0xNTM0IDEyMDJxMCAtNzcgLTUxIC0xMzV0LTEyNyAtNjlxMjYgLTg1IDMgLTE3Ni41dC05MCAtMTU4LjVsLTEyIC0xMmwtMTUxIDE1MmwxMiAxMnEzNyAzNyAzNyA4OXQtMzcgODl0LTg5IDM3dC04OSAtMzdsLTMwIC0zMGwtMTUyIC0xNTJsLTE2MCAtMTYwbC0xNTIgMTUybDE2MSAxNjBsMTUyIDE1MmwyOSAzMHE2NyA2NyAxNTkgODkuNXQxNzggLTMuNXExMSA3NSA2OC41IDEyNg0KdDEzNS41IDUxcTg1IDAgMTQ1IC02MC41dDYwIC0xNDUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxYWIiIHVuaWNvZGU9IiYjeGYxYWI7IiANCmQ9Ik02NTQgNDU4cS0xIC0zIC0xMi41IDAuNXQtMzEuNSAxMS41bC0yMCA5cS00NCAyMCAtODcgNDlxLTcgNSAtNDEgMzEuNXQtMzggMjguNXEtNjcgLTEwMyAtMTM0IC0xODFxLTgxIC05NSAtMTA1IC0xMTBxLTQgLTIgLTE5LjUgLTR0LTE4LjUgMHE2IDQgODIgOTJxMjEgMjQgODUuNSAxMTV0NzguNSAxMThxMTcgMzAgNTEgOTguNXQzNiA3Ny41cS04IDEgLTExMCAtMzNxLTggLTIgLTI3LjUgLTcuNXQtMzQuNSAtOS41dC0xNyAtNQ0KcS0yIC0yIC0yIC0xMC41dC0xIC05LjVxLTUgLTEwIC0zMSAtMTVxLTIzIC03IC00NyAwcS0xOCA0IC0yOCAyMXEtNCA2IC01IDIzcTYgMiAyNC41IDV0MjkuNSA2cTU4IDE2IDEwNSAzMnExMDAgMzUgMTAyIDM1cTEwIDIgNDMgMTkuNXQ0NCAyMS41cTkgMyAyMS41IDh0MTQuNSA1LjV0NiAtMC41cTIgLTEyIC0xIC0zM3EwIC0yIC0xMi41IC0yN3QtMjYuNSAtNTMuNXQtMTcgLTMzLjVxLTI1IC01MCAtNzcgLTEzMWw2NCAtMjgNCnExMiAtNiA3NC41IC0zMnQ2Ny41IC0yOHE0IC0xIDEwLjUgLTI1LjV0NC41IC0zMC41ek00NDkgOTQ0cTMgLTE1IC00IC0yOHEtMTIgLTIzIC01MCAtMzhxLTMwIC0xMiAtNjAgLTEycS0yNiAzIC00OSAyNnEtMTQgMTUgLTE4IDQxbDEgM3EzIC0zIDE5LjUgLTV0MjYuNSAwdDU4IDE2cTM2IDEyIDU1IDE0cTE3IDAgMjEgLTE3ek0xMTQ3IDgxNWw2MyAtMjI3bC0xMzkgNDJ6TTM5IDE1bDY5NCAyMzJ2MTAzMmwtNjk0IC0yMzN2LTEwMzF6DQpNMTI4MCAzMzJsMTAyIC0zMWwtMTgxIDY1N2wtMTAwIDMxbC0yMTYgLTUzNmwxMDIgLTMxbDQ1IDExMGwyMTEgLTY1ek03NzcgMTI5NGw1NzMgLTE4NHYzODB6TTEwODggLTI5bDE1OCAtMTNsLTU0IC0xNjBsLTQwIDY2cS0xMzAgLTgzIC0yNzYgLTEwOHEtNTggLTEyIC05MSAtMTJoLTg0cS03OSAwIC0xOTkuNSAzOXQtMTgzLjUgODVxLTggNyAtOCAxNnEwIDggNSAxMy41dDEzIDUuNXE0IDAgMTggLTcuNXQzMC41IC0xNi41dDIwLjUgLTExDQpxNzMgLTM3IDE1OS41IC02MS41dDE1Ny41IC0yNC41cTk1IDAgMTY3IDE0LjV0MTU3IDUwLjVxMTUgNyAzMC41IDE1LjV0MzQgMTl0MjguNSAxNi41ek0xNTM2IDEwNTB2LTEwNzlsLTc3NCAyNDZxLTE0IC02IC0zNzUgLTEyNy41dC0zNjggLTEyMS41cS0xMyAwIC0xOCAxM3EwIDEgLTEgM3YxMDc4cTMgOSA0IDEwcTUgNiAyMCAxMXExMDcgMzYgMTQ5IDUwdjM4NGw1NTggLTE5OHEyIDAgMTYwLjUgNTV0MzE2IDEwOC41dDE2MS41IDUzLjUNCnEyMCAwIDIwIC0yMXYtNDE4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwMiIgdW5pY29kZT0iJiN4ZjFhYzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0yODggMTE1MnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTI4cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMjh6TTE2NjQgOTg5cTU4IC0zNCA5MyAtOTN0MzUgLTEyOHYtNzY4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NWgtODY0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxNTM2cTAgNDAgMjggNjh0NjggMjhoNjcycTQwIDAgODggLTIwdDc2IC00OA0KbDE1MiAtMTUycTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xNjN6TTkyOCAwdjEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjhxLTE0IDAgLTIzIC05dC05IC0yM3YtMTI4cTAgLTE0IDkgLTIzdDIzIC05aDEyOHExNCAwIDIzIDl0OSAyM3pNOTI4IDI1NnYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTkyOCA1MTJ2MTI4cTAgMTQgLTkgMjMNCnQtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTExODQgMHYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTExODQgMjU2djEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjhxLTE0IDAgLTIzIC05dC05IC0yM3YtMTI4cTAgLTE0IDkgLTIzdDIzIC05aDEyOA0KcTE0IDAgMjMgOXQ5IDIzek0xMTg0IDUxMnYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgMHYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgMjU2djEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjgNCnEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMjhxMCAtMTQgOSAtMjN0MjMgLTloMTI4cTE0IDAgMjMgOXQ5IDIzek0xNDQwIDUxMnYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE1MzYgODk2djI1NmgtMTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTYwaC02NDB2LTUxMmg4OTZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDAzIiB1bmljb2RlPSImI3hmMWFkOyIgDQpkPSJNMTM0NCAxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXYtMTY2NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMTI4MHpNNTEyIDEyNDh2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzdjY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN6TTUxMiA5OTJ2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOQ0KdDkgMjN2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3pNNTEyIDczNnYtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3pNNTEyIDQ4MHYtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3pNMzg0IDE2MHY2NA0KcTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0zODQgNDE2djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0zODQgNjcydjY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0DQpxMTQgMCAyMyA5dDkgMjN6TTM4NCA5Mjh2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTM4NCAxMTg0djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek04OTYgLTk2djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05DQp0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek04OTYgNDE2djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek04OTYgNjcydjY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek04OTYgOTI4djY0DQpxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTg5NiAxMTg0djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDE2MHY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NA0KcTE0IDAgMjMgOXQ5IDIzek0xMTUyIDQxNnY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTE1MiA2NzJ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTExNTIgOTI4djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOQ0KdC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTExNTIgMTE4NHY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MDQiIHVuaWNvZGU9IiYjeGYxYWU7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNMTE4OCA5ODhsLTI5MiAtMjkydi04MjRxMCAtNDYgLTMzIC03OXQtNzkgLTMzdC03OSAzM3QtMzMgNzl2Mzg0aC02NHYtMzg0cTAgLTQ2IC0zMyAtNzl0LTc5IC0zM3QtNzkgMzN0LTMzIDc5djgyNGwtMjkyIDI5MnEtMjggMjggLTI4IDY4dDI4IDY4cTI5IDI4IDY4LjUgMjh0NjcuNSAtMjhsMjI4IC0yMjhoMzY4bDIyOCAyMjhxMjggMjggNjggMjh0NjggLTI4cTI4IC0yOSAyOCAtNjguNXQtMjggLTY3LjV6TTg2NCAxMTUyDQpxMCAtOTMgLTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNXQtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjV0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUIxIiB1bmljb2RlPSImI3hmMWIwOyIgaG9yaXotYWR2LXg9IjE2NjQiIA0KZD0iTTc4MCAxMDY0cTAgLTYwIC0xOSAtMTEzLjV0LTYzIC05Mi41dC0xMDUgLTM5cS03NiAwIC0xMzggNTcuNXQtOTIgMTM1LjV0LTMwIDE1MXEwIDYwIDE5IDExMy41dDYzIDkyLjV0MTA1IDM5cTc3IDAgMTM4LjUgLTU3LjV0OTEuNSAtMTM1dDMwIC0xNTEuNXpNNDM4IDU4MXEwIC04MCAtNDIgLTEzOXQtMTE5IC01OXEtNzYgMCAtMTQxLjUgNTUuNXQtMTAwLjUgMTMzLjV0LTM1IDE1MnEwIDgwIDQyIDEzOS41dDExOSA1OS41DQpxNzYgMCAxNDEuNSAtNTUuNXQxMDAuNSAtMTM0dDM1IC0xNTIuNXpNODMyIDYwOHExMTggMCAyNTUgLTk3LjV0MjI5IC0yMzd0OTIgLTI1NC41cTAgLTQ2IC0xNyAtNzYuNXQtNDguNSAtNDV0LTY0LjUgLTIwdC03NiAtNS41cS02OCAwIC0xODcuNSA0NXQtMTgyLjUgNDVxLTY2IDAgLTE5Mi41IC00NC41dC0yMDAuNSAtNDQuNXEtMTgzIDAgLTE4MyAxNDZxMCA4NiA1NiAxOTEuNXQxMzkuNSAxOTIuNXQxODcuNSAxNDZ0MTkzIDU5ek0xMDcxIDgxOQ0KcS02MSAwIC0xMDUgMzl0LTYzIDkyLjV0LTE5IDExMy41cTAgNzQgMzAgMTUxLjV0OTEuNSAxMzV0MTM4LjUgNTcuNXE2MSAwIDEwNSAtMzl0NjMgLTkyLjV0MTkgLTExMy41cTAgLTczIC0zMCAtMTUxdC05MiAtMTM1LjV0LTEzOCAtNTcuNXpNMTUwMyA5MjNxNzcgMCAxMTkgLTU5LjV0NDIgLTEzOS41cTAgLTc0IC0zNSAtMTUydC0xMDAuNSAtMTMzLjV0LTE0MS41IC01NS41cS03NyAwIC0xMTkgNTl0LTQyIDEzOXEwIDc0IDM1IDE1Mi41DQp0MTAwLjUgMTM0dDE0MS41IDU1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDA2IiB1bmljb2RlPSImI3hmMWIxOyIgaG9yaXotYWR2LXg9Ijc2OCIgDQpkPSJNNzA0IDEwMDhxMCAtMTQ1IC01NyAtMjQzLjV0LTE1MiAtMTM1LjVsNDUgLTgyMXEyIC0yNiAtMTYgLTQ1dC00NCAtMTloLTE5MnEtMjYgMCAtNDQgMTl0LTE2IDQ1bDQ1IDgyMXEtOTUgMzcgLTE1MiAxMzUuNXQtNTcgMjQzLjVxMCAxMjggNDIuNSAyNDkuNXQxMTcuNSAyMDB0MTYwIDc4LjV0MTYwIC03OC41dDExNy41IC0yMDB0NDIuNSAtMjQ5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDA3IiB1bmljb2RlPSImI3hmMWIyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTg5NiAtOTNsNjQwIDM0OXY2MzZsLTY0MCAtMjMzdi03NTJ6TTgzMiA3NzJsNjk4IDI1NGwtNjk4IDI1NGwtNjk4IC0yNTR6TTE2NjQgMTAyNHYtNzY4cTAgLTM1IC0xOCAtNjV0LTQ5IC00N2wtNzA0IC0zODRxLTI4IC0xNiAtNjEgLTE2dC02MSAxNmwtNzA0IDM4NHEtMzEgMTcgLTQ5IDQ3dC0xOCA2NXY3NjhxMCA0MCAyMyA3M3Q2MSA0N2w3MDQgMjU2cTIyIDggNDQgOHQ0NCAtOGw3MDQgLTI1NnEzOCAtMTQgNjEgLTQ3dDIzIC03M3oNCiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwOCIgdW5pY29kZT0iJiN4ZjFiMzsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik02NDAgLTk2bDM4NCAxOTJ2MzE0bC0zODQgLTE2NHYtMzQyek01NzYgMzU4bDQwNCAxNzNsLTQwNCAxNzNsLTQwNCAtMTczek0xNjY0IC05NmwzODQgMTkydjMxNGwtMzg0IC0xNjR2LTM0MnpNMTYwMCAzNThsNDA0IDE3M2wtNDA0IDE3M2wtNDA0IC0xNzN6TTExNTIgNjUxbDM4NCAxNjV2MjY2bC0zODQgLTE2NHYtMjY3ek0xMDg4IDEwMzBsNDQxIDE4OWwtNDQxIDE4OWwtNDQxIC0xODl6TTIxNzYgNTEydi00MTZxMCAtMzYgLTE5IC02Nw0KdC01MiAtNDdsLTQ0OCAtMjI0cS0yNSAtMTQgLTU3IC0xNHQtNTcgMTRsLTQ0OCAyMjRxLTQgMiAtNyA0cS0yIC0yIC03IC00bC00NDggLTIyNHEtMjUgLTE0IC01NyAtMTR0LTU3IDE0bC00NDggMjI0cS0zMyAxNiAtNTIgNDd0LTE5IDY3djQxNnEwIDM4IDIxLjUgNzB0NTYuNSA0OGw0MzQgMTg2djQwMHEwIDM4IDIxLjUgNzB0NTYuNSA0OGw0NDggMTkycTIzIDEwIDUwIDEwdDUwIC0xMGw0NDggLTE5MnEzNSAtMTYgNTYuNSAtNDh0MjEuNSAtNzANCnYtNDAwbDQzNCAtMTg2cTM2IC0xNiA1NyAtNDh0MjEgLTcweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwOSIgdW5pY29kZT0iJiN4ZjFiNDsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xODQ4IDExOTdoLTUxMXYtMTI0aDUxMXYxMjR6TTE1OTYgNzcxcS05MCAwIC0xNDYgLTUyLjV0LTYyIC0xNDIuNWg0MDhxLTE4IDE5NSAtMjAwIDE5NXpNMTYxMiAxODZxNjMgMCAxMjIgMzJ0NzYgODdoMjIxcS0xMDAgLTMwNyAtNDI3IC0zMDdxLTIxNCAwIC0zNDAuNSAxMzJ0LTEyNi41IDM0N3EwIDIwOCAxMzAuNSAzNDUuNXQzMzYuNSAxMzcuNXExMzggMCAyNDAuNSAtNjh0MTUzIC0xNzl0NTAuNSAtMjQ4cTAgLTE3IC0yIC00N2gtNjU4DQpxMCAtMTExIDU3LjUgLTE3MS41dDE2Ni41IC02MC41ek0yNzcgMjM2aDI5NnEyMDUgMCAyMDUgMTY3cTAgMTgwIC0xOTkgMTgwaC0zMDJ2LTM0N3pNMjc3IDc3M2gyODFxNzggMCAxMjMuNSAzNi41dDQ1LjUgMTEzLjVxMCAxNDQgLTE5MCAxNDRoLTI2MHYtMjk0ek0wIDEyODJoNTk0cTg3IDAgMTU1IC0xNHQxMjYuNSAtNDcuNXQ5MCAtOTYuNXQzMS41IC0xNTRxMCAtMTgxIC0xNzIgLTI2M3ExMTQgLTMyIDE3MiAtMTE1dDU4IC0yMDQNCnEwIC03NSAtMjQuNSAtMTM2LjV0LTY2IC0xMDMuNXQtOTguNSAtNzF0LTEyMSAtNDJ0LTEzNCAtMTNoLTYxMXYxMjYweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxMCIgdW5pY29kZT0iJiN4ZjFiNTsiIA0KZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwek00OTkgMTA0MWgtMzcxdi03ODdoMzgycTExNyAwIDE5NyA1Ny41dDgwIDE3MC41cTAgMTU4IC0xNDMgMjAwcTEwNyA1MiAxMDcgMTY0cTAgNTcgLTE5LjUgOTYuNQ0KdC01Ni41IDYwLjV0LTc5IDI5LjV0LTk3IDguNXpNNDc3IDcyM2gtMTc2djE4NGgxNjNxMTE5IDAgMTE5IC05MHEwIC05NCAtMTA2IC05NHpNNDg2IDM4OGgtMTg1djIxN2gxODlxMTI0IDAgMTI0IC0xMTNxMCAtMTA0IC0xMjggLTEwNHpNMTEzNiAzNTZxLTY4IDAgLTEwNCAzOHQtMzYgMTA3aDQxMXExIDEwIDEgMzBxMCAxMzIgLTc0LjUgMjIwLjV0LTIwMy41IDg4LjVxLTEyOCAwIC0yMTAgLTg2dC04MiAtMjE2cTAgLTEzNSA3OSAtMjE3DQp0MjEzIC04MnEyMDUgMCAyNjcgMTkxaC0xMzhxLTExIC0zNCAtNDcuNSAtNTR0LTc1LjUgLTIwek0xMTI2IDcyMnExMTMgMCAxMjQgLTEyMmgtMjU0cTQgNTYgMzkgODl0OTEgMzN6TTk2NCA5ODhoMzE5di03N2gtMzE5djc3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxMSIgdW5pY29kZT0iJiN4ZjFiNjsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNTgyIDk1NHEwIC0xMDEgLTcxLjUgLTE3Mi41dC0xNzIuNSAtNzEuNXQtMTcyLjUgNzEuNXQtNzEuNSAxNzIuNXQ3MS41IDE3Mi41dDE3Mi41IDcxLjV0MTcyLjUgLTcxLjV0NzEuNSAtMTcyLjV6TTgxMiAyMTJxMCAxMDQgLTczIDE3N3QtMTc3IDczcS0yNyAwIC01NCAtNmwxMDQgLTQycTc3IC0zMSAxMDkuNSAtMTA2LjV0MS41IC0xNTEuNXEtMzEgLTc3IC0xMDcgLTEwOXQtMTUyIC0xcS0yMSA4IC02MiAyNC41dC02MSAyNC41DQpxMzIgLTYwIDkxIC05Ni41dDEzMCAtMzYuNXExMDQgMCAxNzcgNzN0NzMgMTc3ek0xNjQyIDk1M3EwIDEyNiAtODkuNSAyMTUuNXQtMjE1LjUgODkuNXEtMTI3IDAgLTIxNi41IC04OS41dC04OS41IC0yMTUuNXEwIC0xMjcgODkuNSAtMjE2dDIxNi41IC04OXExMjYgMCAyMTUuNSA4OXQ4OS41IDIxNnpNMTc5MiA5NTNxMCAtMTg5IC0xMzMuNSAtMzIydC0zMjEuNSAtMTMzbC00MzcgLTMxOXEtMTIgLTEyOSAtMTA5IC0yMTh0LTIyOSAtODkNCnEtMTIxIDAgLTIxNCA3NnQtMTE4IDE5MmwtMjMwIDkydjQyOWwzODkgLTE1N3E3OSA0OCAxNzMgNDhxMTMgMCAzNSAtMmwyODQgNDA3cTIgMTg3IDEzNS41IDMxOXQzMjAuNSAxMzJxMTg4IDAgMzIxLjUgLTEzMy41dDEzMy41IC0zMjEuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTIiIHVuaWNvZGU9IiYjeGYxYjc7IiANCmQ9Ik0xMjQyIDg4OXEwIDgwIC01NyAxMzYuNXQtMTM3IDU2LjV0LTEzNi41IC01N3QtNTYuNSAtMTM2cTAgLTgwIDU2LjUgLTEzNi41dDEzNi41IC01Ni41dDEzNyA1Ni41dDU3IDEzNi41ek02MzIgMzAxcTAgLTgzIC01OCAtMTQwLjV0LTE0MCAtNTcuNXEtNTYgMCAtMTAzIDI5dC03MiA3N3E1MiAtMjAgOTggLTQwcTYwIC0yNCAxMjAgMS41dDg1IDg2LjVxMjQgNjAgLTEuNSAxMjB0LTg2LjUgODRsLTgyIDMzcTIyIDUgNDIgNQ0KcTgyIDAgMTQwIC01Ny41dDU4IC0xNDAuNXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2MTUzbDE3MiAtNjlxMjAgLTkyIDkzLjUgLTE1MnQxNjguNSAtNjBxMTA0IDAgMTgxIDcwdDg3IDE3M2wzNDUgMjUycTE1MCAwIDI1NS41IDEwNS41dDEwNS41IDI1NC41cTAgMTUwIC0xMDUuNSAyNTUuNXQtMjU1LjUgMTA1LjUNCnEtMTQ4IDAgLTI1MyAtMTA0LjV0LTEwNyAtMjUyLjVsLTIyNSAtMzIycS05IDEgLTI4IDFxLTc1IDAgLTEzNyAtMzdsLTI5NyAxMTl2NDY4cTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6TTEyODkgODg3cTAgLTEwMCAtNzEgLTE3MC41dC0xNzEgLTcwLjV0LTE3MC41IDcwLjV0LTcwLjUgMTcwLjV0NzAuNSAxNzF0MTcwLjUgNzFxMTAxIDAgMTcxLjUgLTcwLjV0NzAuNSAtMTcxLjV6DQoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTMiIHVuaWNvZGU9IiYjeGYxYjg7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODM2IDM2N2wtMTUgLTM2OGwtMiAtMjJsLTQyMCAyOXEtMzYgMyAtNjcgMzEuNXQtNDcgNjUuNXEtMTEgMjcgLTE0LjUgNTV0NCA2NXQxMiA1NXQyMS41IDY0dDE5IDUzcTc4IC0xMiA1MDkgLTI4ek00NDkgOTUzbDE4MCAtMzc5bC0xNDcgOTJxLTYzIC03MiAtMTExLjUgLTE0NC41dC03Mi41IC0xMjV0LTM5LjUgLTk0LjV0LTE4LjUgLTYzbC00IC0yMWwtMTkwIDM1N3EtMTcgMjYgLTE4IDU2dDYgNDdsOCAxOHEzNSA2MyAxMTQgMTg4DQpsLTE0MCA4NnpNMTY4MCA0MzZsLTE4OCAtMzU5cS0xMiAtMjkgLTM2LjUgLTQ2LjV0LTQzLjUgLTIwLjVsLTE4IC00cS03MSAtNyAtMjE5IC0xMmw4IC0xNjRsLTIzMCAzNjdsMjExIDM2Mmw3IC0xNzNxMTcwIC0xNiAyODMgLTV0MTcwIDMzek04OTUgMTM2MHEtNDcgLTYzIC0yNjUgLTQzNWwtMzE3IDE4N2wtMTkgMTJsMjI1IDM1NnEyMCAzMSA2MCA0NXQ4MCAxMHEyNCAtMiA0OC41IC0xMnQ0MiAtMjF0NDEuNSAtMzN0MzYgLTM0LjUNCnQzNiAtMzkuNXQzMiAtMzV6TTE1NTAgMTA1M2wyMTIgLTM2M3ExOCAtMzcgMTIuNSAtNzZ0LTI3LjUgLTc0cS0xMyAtMjAgLTMzIC0zN3QtMzggLTI4dC00OC41IC0yMnQtNDcgLTE2dC01MS41IC0xNHQtNDYgLTEycS0zNCA3MiAtMjY1IDQzNmwzMTMgMTk1ek0xNDA3IDEyNzlsMTQyIDgzbC0yMjAgLTM3M2wtNDE5IDIwbDE1MSA4NnEtMzQgODkgLTc1IDE2NnQtNzUuNSAxMjMuNXQtNjQuNSA4MHQtNDcgNDYuNWwtMTcgMTNsNDA1IC0xDQpxMzEgMyA1OCAtMTAuNXQzOSAtMjguNWwxMSAtMTVxMzkgLTYxIDExMiAtMTkweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNCIgdW5pY29kZT0iJiN4ZjFiOTsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik00ODAgNDQ4cTAgNjYgLTQ3IDExM3QtMTEzIDQ3dC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzek01MTYgNzY4aDEwMTZsLTg5IDM1N3EtMiA4IC0xNCAxNy41dC0yMSA5LjVoLTc2OHEtOSAwIC0yMSAtOS41dC0xNCAtMTcuNXpNMTg4OCA0NDhxMCA2NiAtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN6TTIwNDggNTQ0di0zODQNCnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtMTI4cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnYxMjhoLTEwMjR2LTEyOHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ2MTI4aC05NnEtMTQgMCAtMjMgOXQtOSAyM3YzODRxMCA5MyA2NS41IDE1OC41dDE1OC41IDY1LjVoMjhsMTA1IDQxOXEyMyA5NCAxMDQgMTU3LjV0MTc5IDYzLjVoNzY4cTk4IDAgMTc5IC02My41dDEwNCAtMTU3LjUNCmwxMDUgLTQxOWgyOHE5MyAwIDE1OC41IC02NS41dDY1LjUgLTE1OC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNSIgdW5pY29kZT0iJiN4ZjFiYTsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xODI0IDY0MHE5MyAwIDE1OC41IC02NS41dDY1LjUgLTE1OC41di0zODRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTY0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnY2NGgtMTAyNHYtNjRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2djY0aC05NnEtMTQgMCAtMjMgOXQtOSAyM3YzODRxMCA5MyA2NS41IDE1OC41dDE1OC41IDY1LjVoMjhsMTA1IDQxOXEyMyA5NCAxMDQgMTU3LjUNCnQxNzkgNjMuNWgxMjh2MjI0cTAgMTQgOSAyM3QyMyA5aDQ0OHExNCAwIDIzIC05dDkgLTIzdi0yMjRoMTI4cTk4IDAgMTc5IC02My41dDEwNCAtMTU3LjVsMTA1IC00MTloMjh6TTMyMCAxNjBxNjYgMCAxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3QtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd6TTUxNiA2NDBoMTAxNmwtODkgMzU3cS0yIDggLTE0IDE3LjV0LTIxIDkuNWgtNzY4cS05IDAgLTIxIC05LjV0LTE0IC0xNy41eg0KTTE3MjggMTYwcTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNiIgdW5pY29kZT0iJiN4ZjFiYjsiIA0KZD0iTTE1MDQgNjRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC00NjJxMSAtMTcgNiAtODcuNXQ1IC0xMDguNXEwIC0yNSAtMTggLTQyLjV0LTQzIC0xNy41aC0zMjBxLTI1IDAgLTQzIDE3LjV0LTE4IDQyLjVxMCAzOCA1IDEwOC41dDYgODcuNWgtNDYycS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDAyIDQwM2gtMjI5cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDAyIDQwM2gtMTk3cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMzg0IDM4NA0KcTE5IDE5IDQ1IDE5dDQ1IC0xOWwzODQgLTM4NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTk3bDQwMiAtNDAzcTE5IC0xOSAxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC0yMjlsNDAyIC00MDNxMTkgLTE5IDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTciIHVuaWNvZGU9IiYjeGYxYmM7IiANCmQ9Ik0xMTI3IDMyNnEwIDMyIC0zMCA1MXEtMTkzIDExNSAtNDQ3IDExNXEtMTMzIDAgLTI4NyAtMzRxLTQyIC05IC00MiAtNTJxMCAtMjAgMTMuNSAtMzQuNXQzNS41IC0xNC41cTUgMCAzNyA4cTEzMiAyNyAyNDMgMjdxMjI2IDAgMzk3IC0xMDNxMTkgLTExIDMzIC0xMXExOSAwIDMzIDEzLjV0MTQgMzQuNXpNMTIyMyA1NDFxMCA0MCAtMzUgNjFxLTIzNyAxNDEgLTU0OCAxNDFxLTE1MyAwIC0zMDMgLTQycS00OCAtMTMgLTQ4IC02NA0KcTAgLTI1IDE3LjUgLTQyLjV0NDIuNSAtMTcuNXE3IDAgMzcgOHExMjIgMzMgMjUxIDMzcTI3OSAwIDQ4OCAtMTI0cTI0IC0xMyAzOCAtMTNxMjUgMCA0Mi41IDE3LjV0MTcuNSA0Mi41ek0xMzMxIDc4OXEwIDQ3IC00MCA3MHEtMTI2IDczIC0yOTMgMTEwLjV0LTM0MyAzNy41cS0yMDQgMCAtMzY0IC00N3EtMjMgLTcgLTM4LjUgLTI1LjV0LTE1LjUgLTQ4LjVxMCAtMzEgMjAuNSAtNTJ0NTEuNSAtMjFxMTEgMCA0MCA4cTEzMyAzNyAzMDcgMzcNCnExNTkgMCAzMDkuNSAtMzR0MjUzLjUgLTk1cTIxIC0xMiA0MCAtMTJxMjkgMCA1MC41IDIwLjV0MjEuNSA1MS41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTgiIHVuaWNvZGU9IiYjeGYxYmQ7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNMTAyNCAxMjMzbC0zMDMgLTU4MmwyNCAtMzFoMjc5di00MTVoLTUwN2wtNDQgLTMwbC0xNDIgLTI3M2wtMzAgLTMwaC0zMDF2MzAzbDMwMyA1ODNsLTI0IDMwaC0yNzl2NDE1aDUwN2w0NCAzMGwxNDIgMjczbDMwIDMwaDMwMXYtMzAzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxOSIgdW5pY29kZT0iJiN4ZjFiZTsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik03ODQgMTY0bDE2IDI0MWwtMTYgNTIzcS0xIDEwIC03LjUgMTd0LTE2LjUgN3EtOSAwIC0xNiAtN3QtNyAtMTdsLTE0IC01MjNsMTQgLTI0MXExIC0xMCA3LjUgLTE2LjV0MTUuNSAtNi41cTIyIDAgMjQgMjN6TTEwODAgMTkzbDExIDIxMWwtMTIgNTg2cTAgMTYgLTEzIDI0cS04IDUgLTE2IDV0LTE2IC01cS0xMyAtOCAtMTMgLTI0bC0xIC02bC0xMCAtNTc5cTAgLTEgMTEgLTIzNnYtMXEwIC0xMCA2IC0xN3E5IC0xMSAyMyAtMTENCnExMSAwIDIwIDlxOSA3IDkgMjB6TTM1IDUzM2wyMCAtMTI4bC0yMCAtMTI2cS0yIC05IC05IC05dC05IDlsLTE3IDEyNmwxNyAxMjhxMiA5IDkgOXQ5IC05ek0xMjEgNjEybDI2IC0yMDdsLTI2IC0yMDNxLTIgLTkgLTEwIC05cS05IDAgLTkgMTBsLTIzIDIwMmwyMyAyMDdxMCA5IDkgOXE4IDAgMTAgLTl6TTQwMSAxNTl6TTIxMyA2NTBsMjUgLTI0NWwtMjUgLTIzN3EwIC0xMSAtMTEgLTExcS0xMCAwIC0xMiAxMWwtMjEgMjM3bDIxIDI0NQ0KcTIgMTIgMTIgMTJxMTEgMCAxMSAtMTJ6TTMwNyA2NTdsMjMgLTI1MmwtMjMgLTI0NHEtMiAtMTMgLTE0IC0xM3EtMTMgMCAtMTMgMTNsLTIxIDI0NGwyMSAyNTJxMCAxMyAxMyAxM3ExMiAwIDE0IC0xM3pNNDAxIDYzOWwyMSAtMjM0bC0yMSAtMjQ2cS0yIC0xNiAtMTYgLTE2cS02IDAgLTEwLjUgNC41dC00LjUgMTEuNWwtMjAgMjQ2bDIwIDIzNHEwIDYgNC41IDEwLjV0MTAuNSA0LjVxMTQgMCAxNiAtMTV6TTc4NCAxNjR6TTQ5NSA3ODUNCmwyMSAtMzgwbC0yMSAtMjQ2cTAgLTcgLTUgLTEyLjV0LTEyIC01LjVxLTE2IDAgLTE4IDE4bC0xOCAyNDZsMTggMzgwcTIgMTggMTggMThxNyAwIDEyIC01LjV0NSAtMTIuNXpNNTg5IDg3MWwxOSAtNDY4bC0xOSAtMjQ0cTAgLTggLTUuNSAtMTMuNXQtMTMuNSAtNS41cS0xOCAwIC0yMCAxOWwtMTYgMjQ0bDE2IDQ2OHEyIDE5IDIwIDE5cTggMCAxMy41IC01LjV0NS41IC0xMy41ek02ODcgOTExbDE4IC01MDZsLTE4IC0yNDINCnEtMiAtMjEgLTIyIC0yMXEtMTkgMCAtMjEgMjFsLTE2IDI0MmwxNiA1MDZxMCA5IDYuNSAxNS41dDE0LjUgNi41cTkgMCAxNSAtNi41dDcgLTE1LjV6TTEwNzkgMTY5djB2MHYwek04ODEgOTE1bDE1IC01MTBsLTE1IC0yMzlxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41dC0xNyA3dC04IDE4bC0xNCAyMzlsMTQgNTEwcTAgMTEgNy41IDE4dDE3LjUgN3QxNy41IC03dDcuNSAtMTh6TTk4MCA4OTZsMTQgLTQ5MmwtMTQgLTIzNg0KcTAgLTExIC04IC0xOXQtMTkgLTh0LTE5IDh0LTkgMTlsLTEyIDIzNmwxMiA0OTJxMSAxMiA5IDIwdDE5IDh0MTguNSAtOHQ4LjUgLTIwek0xMTkyIDQwNGwtMTQgLTIzMXYwcTAgLTEzIC05IC0yMnQtMjIgLTl0LTIyIDl0LTEwIDIybC02IDExNGwtNiAxMTdsMTIgNjM2djNxMiAxNSAxMiAyNHE5IDcgMjAgN3E4IDAgMTUgLTVxMTQgLTggMTYgLTI2ek0yMzA0IDQyM3EwIC0xMTcgLTgzIC0xOTkuNXQtMjAwIC04Mi41aC03ODYNCnEtMTMgMiAtMjIgMTF0LTkgMjJ2ODk5cTAgMjMgMjggMzNxODUgMzQgMTgxIDM0cTE5NSAwIDMzOCAtMTMxLjV0MTYwIC0zMjMuNXE1MyAyMiAxMTAgMjJxMTE3IDAgMjAwIC04M3Q4MyAtMjAxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFDMCIgdW5pY29kZT0iJiN4ZjFjMDsiIA0KZD0iTTc2OCA3NjhxMjM3IDAgNDQzIDQzdDMyNSAxMjd2LTE3MHEwIC02OSAtMTAzIC0xMjh0LTI4MCAtOTMuNXQtMzg1IC0zNC41dC0zODUgMzQuNXQtMjgwIDkzLjV0LTEwMyAxMjh2MTcwcTExOSAtODQgMzI1IC0xMjd0NDQzIC00M3pNNzY4IDBxMjM3IDAgNDQzIDQzdDMyNSAxMjd2LTE3MHEwIC02OSAtMTAzIC0xMjh0LTI4MCAtOTMuNXQtMzg1IC0zNC41dC0zODUgMzQuNXQtMjgwIDkzLjV0LTEwMyAxMjh2MTcwcTExOSAtODQgMzI1IC0xMjcNCnQ0NDMgLTQzek03NjggMzg0cTIzNyAwIDQ0MyA0M3QzMjUgMTI3di0xNzBxMCAtNjkgLTEwMyAtMTI4dC0yODAgLTkzLjV0LTM4NSAtMzQuNXQtMzg1IDM0LjV0LTI4MCA5My41dC0xMDMgMTI4djE3MHExMTkgLTg0IDMyNSAtMTI3dDQ0MyAtNDN6TTc2OCAxNTM2cTIwOCAwIDM4NSAtMzQuNXQyODAgLTkzLjV0MTAzIC0xMjh2LTEyOHEwIC02OSAtMTAzIC0xMjh0LTI4MCAtOTMuNXQtMzg1IC0zNC41dC0zODUgMzQuNXQtMjgwIDkzLjUNCnQtMTAzIDEyOHYxMjhxMCA2OSAxMDMgMTI4dDI4MCA5My41dDM4NSAzNC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFDMSIgdW5pY29kZT0iJiN4ZjFjMTsiIA0KZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6DQpNODk0IDQ2NXEzMyAtMjYgODQgLTU2cTU5IDcgMTE3IDdxMTQ3IDAgMTc3IC00OXExNiAtMjIgMiAtNTJxMCAtMSAtMSAtMmwtMiAtMnYtMXEtNiAtMzggLTcxIC0zOHEtNDggMCAtMTE1IDIwdC0xMzAgNTNxLTIyMSAtMjQgLTM5MiAtODNxLTE1MyAtMjYyIC0yNDIgLTI2MnEtMTUgMCAtMjggN2wtMjQgMTJxLTEgMSAtNiA1cS0xMCAxMCAtNiAzNnE5IDQwIDU2IDkxLjV0MTMyIDk2LjVxMTQgOSAyMyAtNnEyIC0yIDIgLTRxNTIgODUgMTA3IDE5Nw0KcTY4IDEzNiAxMDQgMjYycS0yNCA4MiAtMzAuNSAxNTkuNXQ2LjUgMTI3LjVxMTEgNDAgNDIgNDBoMjFoMXEyMyAwIDM1IC0xNXExOCAtMjEgOSAtNjhxLTIgLTYgLTQgLThxMSAtMyAxIC04di0zMHEtMiAtMTIzIC0xNCAtMTkycTU1IC0xNjQgMTQ2IC0yMzh6TTMxOCA1NHE1MiAyNCAxMzcgMTU4cS01MSAtNDAgLTg3LjUgLTg0dC00OS41IC03NHpNNzE2IDk3NHEtMTUgLTQyIC0yIC0xMzJxMSA3IDcgNDRxMCAzIDcgNDNxMSA0IDQgOA0KcS0xIDEgLTEgMnEtMSAyIC0xIDNxLTEgMjIgLTEzIDM2cTAgLTEgLTEgLTJ2LTJ6TTU5MiAzMTNxMTM1IDU0IDI4NCA4MXEtMiAxIC0xMyA5LjV0LTE2IDEzLjVxLTc2IDY3IC0xMjcgMTc2cS0yNyAtODYgLTgzIC0xOTdxLTMwIC01NiAtNDUgLTgzek0xMjM4IDMyOXEtMjQgMjQgLTE0MCAyNHE3NiAtMjggMTI0IC0yOHExNCAwIDE4IDFxMCAxIC0yIDN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDIyIiB1bmljb2RlPSImI3hmMWMyOyIgDQpkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoNCk0yMzMgNzY4di0xMDdoNzBsMTY0IC02NjFoMTU5bDEyOCA0ODVxNyAyMCAxMCA0NnEyIDE2IDIgMjRoNGwzIC0yNHExIC0zIDMuNSAtMjB0NS41IC0yNmwxMjggLTQ4NWgxNTlsMTY0IDY2MWg3MHYxMDdoLTMwMHYtMTA3aDkwbC05OSAtNDM4cS01IC0yMCAtNyAtNDZsLTIgLTIxaC00cTAgMyAtMC41IDYuNXQtMS41IDh0LTEgNi41cS0xIDUgLTQgMjF0LTUgMjVsLTE0NCA1NDVoLTExNGwtMTQ0IC01NDVxLTIgLTkgLTQuNSAtMjQuNQ0KdC0zLjUgLTIxLjVsLTQgLTIxaC00bC0yIDIxcS0yIDI2IC03IDQ2bC05OSA0MzhoOTB2MTA3aC0zMDB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDIzIiB1bmljb2RlPSImI3hmMWMzOyIgDQpkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoNCk00MjkgMTA2di0xMDZoMjgxdjEwNmgtNzVsMTAzIDE2MXE1IDcgMTAgMTYuNXQ3LjUgMTMuNXQzLjUgNGgycTEgLTQgNSAtMTBxMiAtNCA0LjUgLTcuNXQ2IC04dDYuNSAtOC41bDEwNyAtMTYxaC03NnYtMTA2aDI5MXYxMDZoLTY4bC0xOTIgMjczbDE5NSAyODJoNjd2MTA3aC0yNzl2LTEwN2g3NGwtMTAzIC0xNTlxLTQgLTcgLTEwIC0xNi41dC05IC0xMy41bC0yIC0zaC0ycS0xIDQgLTUgMTBxLTYgMTEgLTE3IDIzbC0xMDYgMTU5aDc2djEwNw0KaC0yOTB2LTEwN2g2OGwxODkgLTI3MmwtMTk0IC0yODNoLTY4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNCIgdW5pY29kZT0iJiN4ZjFjNDsiIA0KZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6DQpNNDE2IDEwNnYtMTA2aDMyN3YxMDZoLTkzdjE2N2gxMzdxNzYgMCAxMTggMTVxNjcgMjMgMTA2LjUgODd0MzkuNSAxNDZxMCA4MSAtMzcgMTQxdC0xMDAgODdxLTQ4IDE5IC0xMzAgMTloLTM2OHYtMTA3aDkydi01NTVoLTkyek03NjkgMzg2aC0xMTl2MjY4aDEyMHE1MiAwIDgzIC0xOHE1NiAtMzMgNTYgLTExNXEwIC04OSAtNjIgLTEyMHEtMzEgLTE1IC03OCAtMTV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDI1IiB1bmljb2RlPSImI3hmMWM1OyIgDQpkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoNCk0xMjgwIDMyMHYtMzIwaC0xMDI0djE5MmwxOTIgMTkybDEyOCAtMTI4bDM4NCAzODR6TTQ0OCA1MTJxLTgwIDAgLTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2dC01NiAtMTM2dC0xMzYgLTU2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNiIgdW5pY29kZT0iJiN4ZjFjNjsiIA0KZD0iTTY0MCAxMTUydjEyOGgtMTI4di0xMjhoMTI4ek03NjggMTAyNHYxMjhoLTEyOHYtMTI4aDEyOHpNNjQwIDg5NnYxMjhoLTEyOHYtMTI4aDEyOHpNNzY4IDc2OHYxMjhoLTEyOHYtMTI4aDEyOHpNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDANCnYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTEyOHYtMTI4aC0xMjh2MTI4aC01MTJ2LTE1MzZoMTI4MHpNNzgxIDU5M2wxMDcgLTM0OXE4IC0yNyA4IC01MnEwIC04MyAtNzIuNSAtMTM3LjV0LTE4My41IC01NC41dC0xODMuNSA1NC41dC03Mi41IDEzNy41cTAgMjUgOCA1MnEyMSA2MyAxMjAgMzk2djEyOGgxMjh2LTEyOGg3OQ0KcTIyIDAgMzkgLTEzdDIzIC0zNHpNNjQwIDEyOHE1MyAwIDkwLjUgMTl0MzcuNSA0NXQtMzcuNSA0NXQtOTAuNSAxOXQtOTAuNSAtMTl0LTM3LjUgLTQ1dDM3LjUgLTQ1dDkwLjUgLTE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNyIgdW5pY29kZT0iJiN4ZjFjNzsiIA0KZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6DQpNNjIwIDY4NnEyMCAtOCAyMCAtMzB2LTU0NHEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTIgMCAtMjMgOWwtMTY2IDE2N2gtMTMxcS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxMzFsMTY2IDE2N3ExNiAxNSAzNSA3ek0xMDM3IC0zcTMxIDAgNTAgMjRxMTI5IDE1OSAxMjkgMzYzdC0xMjkgMzYzcS0xNiAyMSAtNDMgMjR0LTQ3IC0xNHEtMjEgLTE3IC0yMy41IC00My41dDE0LjUgLTQ3LjUNCnExMDAgLTEyMyAxMDAgLTI4MnQtMTAwIC0yODJxLTE3IC0yMSAtMTQuNSAtNDcuNXQyMy41IC00Mi41cTE4IC0xNSA0MCAtMTV6TTgyNiAxNDVxMjcgMCA0NyAyMHE4NyA5MyA4NyAyMTl0LTg3IDIxOXEtMTggMTkgLTQ1IDIwdC00NiAtMTd0LTIwIC00NC41dDE4IC00Ni41cTUyIC01NyA1MiAtMTMxdC01MiAtMTMxcS0xOSAtMjAgLTE4IC00Ni41dDIwIC00NC41cTIwIC0xNyA0NCAtMTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDI4IiB1bmljb2RlPSImI3hmMWM4OyIgDQpkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoNCk03NjggNzY4cTUyIDAgOTAgLTM4dDM4IC05MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMzg0cS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoMzg0ek0xMjYwIDc2NnEyMCAtOCAyMCAtMzB2LTU3NnEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTQgMCAtMjMgOWwtMjY1IDI2NnY5MGwyNjUgMjY2cTkgOSAyMyA5cTQgMCAxMiAtMnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MjkiIHVuaWNvZGU9IiYjeGYxYzk7IiANCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgweg0KTTQ4MCA3NjhxOCAxMSAyMSAxMi41dDI0IC02LjVsNTEgLTM4cTExIC04IDEyLjUgLTIxdC02LjUgLTI0bC0xODIgLTI0M2wxODIgLTI0M3E4IC0xMSA2LjUgLTI0dC0xMi41IC0yMWwtNTEgLTM4cS0xMSAtOCAtMjQgLTYuNXQtMjEgMTIuNWwtMjI2IDMwMXEtMTQgMTkgMCAzOHpNMTI4MiA0NjdxMTQgLTE5IDAgLTM4bC0yMjYgLTMwMXEtOCAtMTEgLTIxIC0xMi41dC0yNCA2LjVsLTUxIDM4cS0xMSA4IC0xMi41IDIxdDYuNSAyNGwxODIgMjQzDQpsLTE4MiAyNDNxLTggMTEgLTYuNSAyNHQxMi41IDIxbDUxIDM4cTExIDggMjQgNi41dDIxIC0xMi41ek02NjIgNnEtMTMgMiAtMjAuNSAxM3QtNS41IDI0bDEzOCA4MzFxMiAxMyAxMyAyMC41dDI0IDUuNWw2MyAtMTBxMTMgLTIgMjAuNSAtMTN0NS41IC0yNGwtMTM4IC04MzFxLTIgLTEzIC0xMyAtMjAuNXQtMjQgLTUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MzAiIHVuaWNvZGU9IiYjeGYxY2E7IiANCmQ9Ik0xNDk3IDcwOXYtMTk4cS0xMDEgLTIzIC0xOTggLTIzcS02NSAtMTM2IC0xNjUuNSAtMjcxdC0xODEuNSAtMjE1LjV0LTEyOCAtMTA2LjVxLTgwIC00NSAtMTYyIDNxLTI4IDE3IC02MC41IDQzLjV0LTg1IDgzLjV0LTEwMi41IDEyOC41dC0xMDcuNSAxODR0LTEwNS41IDI0NHQtOTEuNSAzMTQuNXQtNzAuNSAzOTBoMjgzcTI2IC0yMTggNzAgLTM5OC41dDEwNC41IC0zMTd0MTIxLjUgLTIzNS41dDE0MCAtMTk1cTE2OSAxNjkgMjg3IDQwNg0KcS0xNDIgNzIgLTIyMyAyMjB0LTgxIDMzM3EwIDE5MiAxMDQgMzE0LjV0Mjg0IDEyMi41cTE3OCAwIDI3MyAtMTA1LjV0OTUgLTI5Ny41cTAgLTE1OSAtNTggLTI4NnEtNyAtMSAtMTkuNSAtM3QtNDYgLTJ0LTYzIDZ0LTYyIDI1LjV0LTUwLjUgNTEuNXEzMSAxMDMgMzEgMTg0cTAgODcgLTI5IDEzMnQtNzkgNDVxLTUzIDAgLTg1IC00OS41dC0zMiAtMTQwLjVxMCAtMTg2IDEwNSAtMjkzLjV0MjY3IC0xMDcuNXE2MiAwIDEyMSAxNHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MzEiIHVuaWNvZGU9IiYjeGYxY2I7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMjE2IDM2N2w2MDMgLTQwMnYzNTlsLTMzNCAyMjN6TTE1NCA1MTFsMTkzIDEyOWwtMTkzIDEyOXYtMjU4ek05NzMgLTM1bDYwMyA0MDJsLTI2OSAxODBsLTMzNCAtMjIzdi0zNTl6TTg5NiA0NThsMjcyIDE4MmwtMjcyIDE4MmwtMjcyIC0xODJ6TTQ4NSA3MzNsMzM0IDIyM3YzNTlsLTYwMyAtNDAyek0xNDQ1IDY0MGwxOTMgLTEyOXYyNTh6TTEzMDcgNzMzbDI2OSAxODBsLTYwMyA0MDJ2LTM1OXpNMTc5MiA5MTN2LTU0Ng0KcTAgLTQxIC0zNCAtNjRsLTgxOSAtNTQ2cS0yMSAtMTMgLTQzIC0xM3QtNDMgMTNsLTgxOSA1NDZxLTM0IDIzIC0zNCA2NHY1NDZxMCA0MSAzNCA2NGw4MTkgNTQ2cTIxIDEzIDQzIDEzdDQzIC0xM2w4MTkgLTU0NnEzNCAtMjMgMzQgLTY0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzMiIgdW5pY29kZT0iJiN4ZjFjYzsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xODAwIDc2NHExMTEgLTQ2IDE3OS41IC0xNDUuNXQ2OC41IC0yMjEuNXEwIC0xNjQgLTExOCAtMjgwLjV0LTI4NSAtMTE2LjVxLTQgMCAtMTEuNSAwLjV0LTEwLjUgMC41aC0xMjA5aC0xaC0yaC01cS0xNzAgMTAgLTI4OCAxMjUuNXQtMTE4IDI4MC41cTAgMTEwIDU1IDIwM3QxNDcgMTQ3cS0xMiAzOSAtMTIgODJxMCAxMTUgODIgMTk2dDE5OSA4MXE5NSAwIDE3MiAtNThxNzUgMTU0IDIyMi41IDI0OHQzMjYuNSA5NA0KcTE2NiAwIDMwNiAtODAuNXQyMjEuNSAtMjE4LjV0ODEuNSAtMzAxcTAgLTYgLTAuNSAtMTh0LTAuNSAtMTh6TTQ2OCA0OThxMCAtMTIyIDg0IC0xOTN0MjA4IC03MXExMzcgMCAyNDAgOTlxLTE2IDIwIC00Ny41IDU2LjV0LTQzLjUgNTAuNXEtNjcgLTY1IC0xNDQgLTY1cS01NSAwIC05My41IDMzLjV0LTM4LjUgODcuNXEwIDUzIDM4LjUgODd0OTEuNSAzNHE0NCAwIDg0LjUgLTIxdDczIC01NXQ2NSAtNzV0NjkgLTgydDc3IC03NXQ5NyAtNTUNCnQxMjEuNSAtMjFxMTIxIDAgMjA0LjUgNzEuNXQ4My41IDE5MC41cTAgMTIxIC04NCAxOTJ0LTIwNyA3MXEtMTQzIDAgLTI0MSAtOTdsOTMgLTEwOHE2NiA2NCAxNDIgNjRxNTIgMCA5MiAtMzN0NDAgLTg0cTAgLTU3IC0zNyAtOTEuNXQtOTQgLTM0LjVxLTQzIDAgLTgyLjUgMjF0LTcyIDU1dC02NS41IDc1dC02OS41IDgydC03Ny41IDc1dC05Ni41IDU1dC0xMTguNSAyMXEtMTIyIDAgLTIwNyAtNzAuNXQtODUgLTE4OS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzMyIgdW5pY29kZT0iJiN4ZjFjZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik04OTYgMTUzNnExODIgMCAzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh0LTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6TTg5NiAxNDA4cS0xOTAgMCAtMzYxIC05MGwxOTQgLTE5NHE4MiAyOCAxNjcgMjh0MTY3IC0yOGwxOTQgMTk0cS0xNzEgOTAgLTM2MSA5MHpNMjE4IDI3OWwxOTQgMTk0DQpxLTI4IDgyIC0yOCAxNjd0MjggMTY3bC0xOTQgMTk0cS05MCAtMTcxIC05MCAtMzYxdDkwIC0zNjF6TTg5NiAtMTI4cTE5MCAwIDM2MSA5MGwtMTk0IDE5NHEtODIgLTI4IC0xNjcgLTI4dC0xNjcgMjhsLTE5NCAtMTk0cTE3MSAtOTAgMzYxIC05MHpNODk2IDI1NnExNTkgMCAyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXQtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41dC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjUNCnQyNzEuNSAtMTEyLjV6TTEzODAgNDczbDE5NCAtMTk0cTkwIDE3MSA5MCAzNjF0LTkwIDM2MWwtMTk0IC0xOTRxMjggLTgyIDI4IC0xNjd0LTI4IC0xNjd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDM0IiB1bmljb2RlPSImI3hmMWNlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NjAgNjQwcTAgLTE3NiAtNjguNSAtMzM2dC0xODQgLTI3NS41dC0yNzUuNSAtMTg0dC0zMzYgLTY4LjV0LTMzNiA2OC41dC0yNzUuNSAxODR0LTE4NCAyNzUuNXQtNjguNSAzMzZxMCAyMTMgOTcgMzk4LjV0MjY1IDMwNS41dDM3NCAxNTF2LTIyOHEtMjIxIC00NSAtMzY2LjUgLTIyMXQtMTQ1LjUgLTQwNnEwIC0xMzAgNTEgLTI0OC41dDEzNi41IC0yMDR0MjA0IC0xMzYuNXQyNDguNSAtNTF0MjQ4LjUgNTF0MjA0IDEzNi41DQp0MTM2LjUgMjA0dDUxIDI0OC41cTAgMjMwIC0xNDUuNSA0MDZ0LTM2Ni41IDIyMXYyMjhxMjA2IC0zMSAzNzQgLTE1MXQyNjUgLTMwNS41dDk3IC0zOTguNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxRDAiIHVuaWNvZGU9IiYjeGYxZDA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTkgNjYycTggMjE3IDExNiA0MDZ0MzA1IDMxOGg1cTAgLTEgLTEgLTNxLTggLTggLTI4IC0zMy41dC01MiAtNzYuNXQtNjAgLTExMC41dC00NC41IC0xMzUuNXQtMTQgLTE1MC41dDM5IC0xNTcuNXQxMDguNSAtMTU0cTUwIC01MCAxMDIgLTY5LjV0OTAuNSAtMTEuNXQ2OS41IDIzLjV0NDcgMzIuNWwxNiAxNnEzOSA1MSA1MyAxMTYuNXQ2LjUgMTIyLjV0LTIxIDEwN3QtMjYuNSA4MGwtMTQgMjlxLTEwIDI1IC0zMC41IDQ5LjV0LTQzIDQxDQp0LTQzLjUgMjkuNXQtMzUgMTlsLTEzIDZsMTA0IDExNXEzOSAtMTcgNzggLTUydDU5IC02MWwxOSAtMjdxMSA0OCAtMTguNSAxMDMuNXQtNDAuNSA4Ny41bC0yMCAzMWwxNjEgMTgzbDE2MCAtMTgxcS0zMyAtNDYgLTUyLjUgLTEwMi41dC0yMi41IC05MC41bC00IC0zM3EyMiAzNyA2MS41IDcyLjV0NjcuNSA1Mi41bDI4IDE3bDEwMyAtMTE1cS00NCAtMTQgLTg1IC01MHQtNjAgLTY1bC0xOSAtMjlxLTMxIC01NiAtNDggLTEzMy41dC03IC0xNzANCnQ1NyAtMTU2LjVxMzMgLTQ1IDc3LjUgLTYwLjV0ODUgLTUuNXQ3NiAyNi41dDU3LjUgMzMuNWwyMSAxNnE2MCA1MyA5Ni41IDExNXQ0OC41IDEyMS41dDEwIDEyMS41dC0xOCAxMTh0LTM3IDEwNy41dC00NS41IDkzdC00NSA3MnQtMzQuNSA0Ny41bC0xMyAxN3EtMTQgMTMgLTcgMTNsMTAgLTNxNDAgLTI5IDYyLjUgLTQ2dDYyIC01MHQ2NCAtNTh0NTguNSAtNjV0NTUuNSAtNzd0NDUuNSAtODh0MzggLTEwM3QyMy41IC0xMTd0MTAuNSAtMTM2DQpxMyAtMjU5IC0xMDggLTQ2NXQtMzEyIC0zMjF0LTQ1NiAtMTE1cS0xODUgMCAtMzUxIDc0dC0yODMuNSAxOTh0LTE4NCAyOTN0LTYwLjUgMzUzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFEMSIgdW5pY29kZT0iJiN4ZjFkMTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik04NzQgLTEwMnYtNjZxLTIwOCA2IC0zODUgMTA5LjV0LTI4MyAyNzUuNWw1OCAzNHEyOSAtNDkgNzMgLTk5bDY1IDU3cTE0OCAtMTY4IDM2OCAtMjEybC0xNyAtODZxNjUgLTEyIDEyMSAtMTN6TTI3NiA0MjhsLTgzIC0yOHEyMiAtNjAgNDkgLTExMmwtNTcgLTMzcS05OCAxODAgLTk4IDM4NXQ5OCAzODVsNTcgLTMzcS0zMCAtNTYgLTQ5IC0xMTJsODIgLTI4cS0zNSAtMTAwIC0zNSAtMjEycTAgLTEwOSAzNiAtMjEyek0xNTI4IDI1MQ0KbDU4IC0zNHEtMTA2IC0xNzIgLTI4MyAtMjc1LjV0LTM4NSAtMTA5LjV2NjZxNTYgMSAxMjEgMTNsLTE3IDg2cTIyMCA0NCAzNjggMjEybDY1IC01N3E0NCA1MCA3MyA5OXpNMTM3NyA4MDVsLTIzMyAtODBxMTQgLTQyIDE0IC04NXQtMTQgLTg1bDIzMiAtODBxLTMxIC05MiAtOTggLTE2OWwtMTg1IDE2MnEtNTcgLTY3IC0xNDcgLTg1bDQ4IC0yNDFxLTUyIC0xMCAtOTggLTEwdC05OCAxMGw0OCAyNDFxLTkwIDE4IC0xNDcgODVsLTE4NSAtMTYyDQpxLTY3IDc3IC05OCAxNjlsMjMyIDgwcS0xNCA0MiAtMTQgODV0MTQgODVsLTIzMyA4MHEzMyA5MyA5OSAxNjlsMTg1IC0xNjJxNTkgNjggMTQ3IDg2bC00OCAyNDBxNDQgMTAgOTggMTB0OTggLTEwbC00OCAtMjQwcTg4IC0xOCAxNDcgLTg2bDE4NSAxNjJxNjYgLTc2IDk5IC0xNjl6TTg3NCAxNDQ4di02NnEtNjUgLTIgLTEyMSAtMTNsMTcgLTg2cS0yMjAgLTQyIC0zNjggLTIxMWwtNjUgNTZxLTM4IC00MiAtNzMgLTk4bC01NyAzMw0KcTEwNiAxNzIgMjgyIDI3NS41dDM4NSAxMDkuNXpNMTcwNSA2NDBxMCAtMjA1IC05OCAtMzg1bC01NyAzM3EyNyA1MiA0OSAxMTJsLTgzIDI4cTM2IDEwMyAzNiAyMTJxMCAxMTIgLTM1IDIxMmw4MiAyOHEtMTkgNTYgLTQ5IDExMmw1NyAzM3E5OCAtMTgwIDk4IC0zODV6TTE1ODUgMTA2M2wtNTcgLTMzcS0zNSA1NiAtNzMgOThsLTY1IC01NnEtMTQ4IDE2OSAtMzY4IDIxMWwxNyA4NnEtNTYgMTEgLTEyMSAxM3Y2NnEyMDkgLTYgMzg1IC0xMDkuNQ0KdDI4MiAtMjc1LjV6TTE3NDggNjQwcTAgMTczIC02Ny41IDMzMXQtMTgxLjUgMjcydC0yNzIgMTgxLjV0LTMzMSA2Ny41dC0zMzEgLTY3LjV0LTI3MiAtMTgxLjV0LTE4MS41IC0yNzJ0LTY3LjUgLTMzMXQ2Ny41IC0zMzF0MTgxLjUgLTI3MnQyNzIgLTE4MS41dDMzMSAtNjcuNXQzMzEgNjcuNXQyNzIgMTgxLjV0MTgxLjUgMjcydDY3LjUgMzMxek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MQ0KdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQyIiB1bmljb2RlPSImI3hmMWQyOyIgDQpkPSJNNTgyIDIyOHEwIC02NiAtOTMgLTY2cS0xMDcgMCAtMTA3IDYzcTAgNjQgOTggNjRxMTAyIDAgMTAyIC02MXpNNTQ2IDY5NHEwIC04NSAtNzQgLTg1cS03NyAwIC03NyA4NHEwIDkwIDc3IDkwcTM2IDAgNTUgLTI1LjV0MTkgLTYzLjV6TTcxMiA3Njl2MTI1cS03OCAtMjkgLTEzNSAtMjlxLTUwIDI5IC0xMTAgMjlxLTg2IDAgLTE0NSAtNTd0LTU5IC0xNDNxMCAtNTAgMjkuNSAtMTAydDczLjUgLTY3di0zcS0zOCAtMTcgLTM4IC04NQ0KcTAgLTUzIDQxIC03N3YtM3EtMTEzIC0zNyAtMTEzIC0xMzlxMCAtNDUgMjAgLTc4LjV0NTQgLTUxdDcyIC0yNS41dDgxIC04cTIyNCAwIDIyNCAxODhxMCA2NyAtNDggOTl0LTEyNiA0NnEtMjcgNSAtNTEuNSAyMC41dC0yNC41IDM5LjVxMCA0NCA0OSA1MnE3NyAxNSAxMjIgNzB0NDUgMTM0cTAgMjQgLTEwIDUycTM3IDkgNDkgMTN6TTc3MSAzNTBoMTM3cS0yIDI3IC0yIDgydjM4N3EwIDQ2IDIgNjloLTEzN3EzIC0yMyAzIC03MXYtMzkyDQpxMCAtNTAgLTMgLTc1ek0xMjgwIDM2NnYxMjFxLTMwIC0yMSAtNjggLTIxcS01MyAwIC01MyA4MnYyMjVoNTJxOSAwIDI2LjUgLTF0MjYuNSAtMXYxMTdoLTEwNXEwIDgyIDMgMTAyaC0xNDBxNCAtMjQgNCAtNTV2LTQ3aC02MHYtMTE3cTM2IDMgMzcgM3EzIDAgMTEgLTAuNXQxMiAtMC41di0yaC0ydi0yMTdxMCAtMzcgMi41IC02NHQxMS41IC01Ni41dDI0LjUgLTQ4LjV0NDMuNSAtMzF0NjYgLTEycTY0IDAgMTA4IDI0ek05MjQgMTA3Mg0KcTAgMzYgLTI0IDYzLjV0LTYwIDI3LjV0LTYwLjUgLTI3dC0yNC41IC02NHEwIC0zNiAyNSAtNjIuNXQ2MCAtMjYuNXQ1OS41IDI3dDI0LjUgNjJ6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzOCIgdW5pY29kZT0iJiN4ZjFkMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik01OTUgMjJxMCAxMDAgLTE2NSAxMDBxLTE1OCAwIC0xNTggLTEwNHEwIC0xMDEgMTcyIC0xMDFxMTUxIDAgMTUxIDEwNXpNNTM2IDc3N3EwIDYxIC0zMCAxMDJ0LTg5IDQxcS0xMjQgMCAtMTI0IC0xNDVxMCAtMTM1IDEyNCAtMTM1cTExOSAwIDExOSAxMzd6TTgwNSAxMTAxdi0yMDJxLTM2IC0xMiAtNzkgLTIycTE2IC00MyAxNiAtODRxMCAtMTI3IC03MyAtMjE2LjV0LTE5NyAtMTEyLjVxLTQwIC04IC01OS41IC0yN3QtMTkuNSAtNTgNCnEwIC0zMSAyMi41IC01MS41dDU4IC0zMnQ3OC41IC0yMnQ4NiAtMjUuNXQ3OC41IC0zNy41dDU4IC02NHQyMi41IC05OC41cTAgLTMwNCAtMzYzIC0zMDRxLTY5IDAgLTEzMCAxMi41dC0xMTYgNDF0LTg3LjUgODJ0LTMyLjUgMTI3LjVxMCAxNjUgMTgyIDIyNXY0cS02NyA0MSAtNjcgMTI2cTAgMTA5IDYzIDEzN3Y0cS03MiAyNCAtMTE5LjUgMTA4LjV0LTQ3LjUgMTY1LjVxMCAxMzkgOTUgMjMxLjV0MjM1IDkyLjVxOTYgMCAxNzggLTQ3DQpxOTggMCAyMTggNDd6TTExMjMgMjIwaC0yMjJxNCA0NSA0IDEzNHY2MDlxMCA5NCAtNCAxMjhoMjIycS00IC0zMyAtNCAtMTI0di02MTNxMCAtODkgNCAtMTM0ek0xNzI0IDQ0MnYtMTk2cS03MSAtMzkgLTE3NCAtMzlxLTYyIDAgLTEwNyAyMHQtNzAgNTB0LTM5LjUgNzh0LTE4LjUgOTJ0LTQgMTAzdjM1MWgydjRxLTcgMCAtMTkgMXQtMTggMXEtMjEgMCAtNTkgLTZ2MTkwaDk2djc2cTAgNTQgLTYgODloMjI3cS02IC00MSAtNiAtMTY1aDE3MQ0Kdi0xOTBxLTE1IDAgLTQzLjUgMnQtNDIuNSAyaC04NXYtMzY1cTAgLTEzMSA4NyAtMTMxcTYxIDAgMTA5IDMzek0xMTQ4IDEzODlxMCAtNTggLTM5IC0xMDEuNXQtOTYgLTQzLjVxLTU4IDAgLTk4IDQzLjV0LTQwIDEwMS41cTAgNTkgMzkuNSAxMDN0OTguNSA0NHE1OCAwIDk2LjUgLTQ0LjV0MzguNSAtMTAyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDM5IiB1bmljb2RlPSImI3hmMWQ0OyIgDQpkPSJNODA5IDUzMmwyNjYgNDk5aC0xMTJsLTE1NyAtMzEycS0yNCAtNDggLTQ0IC05MmwtNDIgOTJsLTE1NSAzMTJoLTEyMGwyNjMgLTQ5M3YtMzI0aDEwMXYzMTh6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFENSIgdW5pY29kZT0iJiN4ZjFkNTsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik04NDIgOTY0cTAgLTgwIC01NyAtMTM2LjV0LTEzNiAtNTYuNXEtNjAgMCAtMTExIDM1cS02MiAtNjcgLTExNSAtMTQ2cS0yNDcgLTM3MSAtMjAyIC04NTlxMSAtMjIgLTEyLjUgLTM4LjV0LTM0LjUgLTE4LjVoLTVxLTIwIDAgLTM1IDEzLjV0LTE3IDMzLjVxLTE0IDEyNiAtMy41IDI0Ny41dDI5LjUgMjE3dDU0IDE4NnQ2OSAxNTUuNXQ3NCAxMjVxNjEgOTAgMTMyIDE2NXEtMTYgMzUgLTE2IDc3cTAgODAgNTYuNSAxMzYuNXQxMzYuNSA1Ni41DQp0MTM2LjUgLTU2LjV0NTYuNSAtMTM2LjV6TTEyMjMgOTUzcTAgLTE1OCAtNzggLTI5MnQtMjEyLjUgLTIxMnQtMjkyLjUgLTc4cS02NCAwIC0xMzEgMTRxLTIxIDUgLTMyLjUgMjMuNXQtNi41IDM5LjVxNSAyMCAyMyAzMS41dDM5IDcuNXE1MSAtMTMgMTA4IC0xM3E5NyAwIDE4NiAzOHQxNTMgMTAydDEwMiAxNTN0MzggMTg2dC0zOCAxODZ0LTEwMiAxNTN0LTE1MyAxMDJ0LTE4NiAzOHQtMTg2IC0zOHQtMTUzIC0xMDJ0LTEwMiAtMTUzDQp0LTM4IC0xODZxMCAtMTE0IDUyIC0yMThxMTAgLTIwIDMuNSAtNDB0LTI1LjUgLTMwdC0zOS41IC0zdC0zMC41IDI2cS02NCAxMjMgLTY0IDI2NXEwIDExOSA0Ni41IDIyN3QxMjQuNSAxODZ0MTg2IDEyNHQyMjYgNDZxMTU4IDAgMjkyLjUgLTc4dDIxMi41IC0yMTIuNXQ3OCAtMjkyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQ2IiB1bmljb2RlPSImI3hmMWQ2OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTI3MCA3MzBxLTggMTkgLTggNTJxMCAyMCAxMSA0OXQyNCA0NXEtMSAyMiA3LjUgNTN0MjIuNSA0M3EwIDEzOSA5Mi41IDI4OC41dDIxNy41IDIwOS41cTEzOSA2NiAzMjQgNjZxMTMzIDAgMjY2IC01NXE0OSAtMjEgOTAgLTQ4dDcxIC01NnQ1NSAtNjh0NDIgLTc0dDMyLjUgLTg0LjV0MjUuNSAtODkuNXQyMiAtOThsMSAtNXE1NSAtODMgNTUgLTE1MHEwIC0xNCAtOSAtNDB0LTkgLTM4cTAgLTEgMS41IC0zLjV0My41IC01dDIgLTMuNQ0KcTc3IC0xMTQgMTIwLjUgLTIxNC41dDQzLjUgLTIwOC41cTAgLTQzIC0xOS41IC0xMDB0LTU1LjUgLTU3cS05IDAgLTE5LjUgNy41dC0xOSAxNy41dC0xOSAyNnQtMTYgMjYuNXQtMTMuNSAyNnQtOSAxNy41cS0xIDEgLTMgMWwtNSAtNHEtNTkgLTE1NCAtMTMyIC0yMjNxMjAgLTIwIDYxLjUgLTM4LjV0NjkgLTQxLjV0MzUuNSAtNjVxLTIgLTQgLTQgLTE2dC03IC0xOHEtNjQgLTk3IC0zMDIgLTk3cS01MyAwIC0xMTAuNSA5dC05OCAyMA0KdC0xMDQuNSAzMHEtMTUgNSAtMjMgN3EtMTQgNCAtNDYgNC41dC00MCAxLjVxLTQxIC00NSAtMTI3LjUgLTY1dC0xNjguNSAtMjBxLTM1IDAgLTY5IDEuNXQtOTMgOXQtMTAxIDIwLjV0LTc0LjUgNDB0LTMyLjUgNjRxMCA0MCAxMCA1OS41dDQxIDQ4LjVxMTEgMiA0MC41IDEzdDQ5LjUgMTJxNCAwIDE0IDJxMiAyIDIgNGwtMiAzcS00OCAxMSAtMTA4IDEwNS41dC03MyAxNTYuNWwtNSAzcS00IDAgLTEyIC0yMHEtMTggLTQxIC01NC41IC03NC41DQp0LTc3LjUgLTM3LjVoLTFxLTQgMCAtNiA0LjV0LTUgNS41cS0yMyA1NCAtMjMgMTAwcTAgMjc1IDI1MiA0NjZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQ3IiB1bmljb2RlPSImI3hmMWQ3OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTU4MCAxMDc1cTAgNDEgLTI1IDY2dC02NiAyNXEtNDMgMCAtNzYgLTI1LjV0LTMzIC02NS41cTAgLTM5IDMzIC02NC41dDc2IC0yNS41cTQxIDAgNjYgMjQuNXQyNSA2NS41ek0xMzIzIDU2OHEwIDI4IC0yNS41IDUwdC02NS41IDIycS0yNyAwIC00OS41IC0yMi41dC0yMi41IC00OS41cTAgLTI4IDIyLjUgLTUwLjV0NDkuNSAtMjIuNXE0MCAwIDY1LjUgMjJ0MjUuNSA1MXpNMTA4NyAxMDc1cTAgNDEgLTI0LjUgNjZ0LTY1LjUgMjUNCnEtNDMgMCAtNzYgLTI1LjV0LTMzIC02NS41cTAgLTM5IDMzIC02NC41dDc2IC0yNS41cTQxIDAgNjUuNSAyNC41dDI0LjUgNjUuNXpNMTcyMiA1NjhxMCAyOCAtMjYgNTB0LTY1IDIycS0yNyAwIC00OS41IC0yMi41dC0yMi41IC00OS41cTAgLTI4IDIyLjUgLTUwLjV0NDkuNSAtMjIuNXEzOSAwIDY1IDIydDI2IDUxek0xNDU2IDk2NXEtMzEgNCAtNzAgNHEtMTY5IDAgLTMxMSAtNzd0LTIyMy41IC0yMDguNXQtODEuNSAtMjg3LjUNCnEwIC03OCAyMyAtMTUycS0zNSAtMyAtNjggLTNxLTI2IDAgLTUwIDEuNXQtNTUgNi41dC00NC41IDd0LTU0LjUgMTAuNXQtNTAgMTAuNWwtMjUzIC0xMjdsNzIgMjE4cS0yOTAgMjAzIC0yOTAgNDkwcTAgMTY5IDk3LjUgMzExdDI2NCAyMjMuNXQzNjMuNSA4MS41cTE3NiAwIDMzMi41IC02NnQyNjIgLTE4Mi41dDEzNi41IC0yNjAuNXpNMjA0OCA0MDRxMCAtMTE3IC02OC41IC0yMjMuNXQtMTg1LjUgLTE5My41bDU1IC0xODFsLTE5OSAxMDkNCnEtMTUwIC0zNyAtMjE4IC0zN3EtMTY5IDAgLTMxMSA3MC41dC0yMjMuNSAxOTEuNXQtODEuNSAyNjR0ODEuNSAyNjR0MjIzLjUgMTkxLjV0MzExIDcwLjVxMTYxIDAgMzAzIC03MC41dDIyNy41IC0xOTJ0ODUuNSAtMjYzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQzIiB1bmljb2RlPSImI3hmMWQ4OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NjQgMTUyNXEzMyAtMjQgMjcgLTY0bC0yNTYgLTE1MzZxLTUgLTI5IC0zMiAtNDVxLTE0IC04IC0zMSAtOHEtMTEgMCAtMjQgNWwtNDUzIDE4NWwtMjQyIC0yOTVxLTE4IC0yMyAtNDkgLTIzcS0xMyAwIC0yMiA0cS0xOSA3IC0zMC41IDIzLjV0LTExLjUgMzYuNXYzNDlsODY0IDEwNTlsLTEwNjkgLTkyNWwtMzk1IDE2MnEtMzcgMTQgLTQwIDU1cS0yIDQwIDMyIDU5bDE2NjQgOTYwcTE1IDkgMzIgOXEyMCAwIDM2IC0xMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NDQiIHVuaWNvZGU9IiYjeGYxZDk7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc2NCAxNTI1cTMzIC0yNCAyNyAtNjRsLTI1NiAtMTUzNnEtNSAtMjkgLTMyIC00NXEtMTQgLTggLTMxIC04cS0xMSAwIC0yNCA1bC01MjcgMjE1bC0yOTggLTMyN3EtMTggLTIxIC00NyAtMjFxLTE0IDAgLTIzIDRxLTE5IDcgLTMwIDIzLjV0LTExIDM2LjV2NDUybC00NzIgMTkzcS0zNyAxNCAtNDAgNTVxLTMgMzkgMzIgNTlsMTY2NCA5NjBxMzUgMjEgNjggLTJ6TTE0MjIgMjZsMjIxIDEzMjNsLTE0MzQgLTgyN2wzMzYgLTEzNw0KbDg2MyA2MzlsLTQ3OCAtNzk3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ0NSIgdW5pY29kZT0iJiN4ZjFkYTsiIA0KZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzIgMCAtMzI3IDcyLjV0LTI2NCAyMDQuNXEtNyAxMCAtNi41IDIyLjV0OC41IDIwLjVsMTM3IDEzOHExMCA5IDI1IDlxMTYgLTIgMjMgLTEycTczIC05NSAxNzkgLTE0N3QyMjUgLTUycTEwNCAwIDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjUNCnQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjVxLTk4IDAgLTE4OCAtMzUuNXQtMTYwIC0xMDEuNWwxMzcgLTEzOHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDEzMCAtMTI5cTEwNyAxMDEgMjQ0LjUgMTU2LjV0Mjg0LjUgNTUuNXExNTYgMCAyOTggLTYxdDI0NSAtMTY0dDE2NCAtMjQ1dDYxIC0yOTh6TTg5NiA5Mjh2LTQ0OHEwIC0xNCAtOSAtMjMNCnQtMjMgLTloLTMyMHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyMjR2MzUycTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ2IiB1bmljb2RlPSImI3hmMWRiOyIgDQpkPSJNNzY4IDEyODBxLTEzMCAwIC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDR0LTUxIC0yNDguNXQ1MSAtMjQ4LjV0MTM2LjUgLTIwNHQyMDQgLTEzNi41dDI0OC41IC01MXQyNDguNSA1MXQyMDQgMTM2LjV0MTM2LjUgMjA0dDUxIDI0OC41dC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzDQp0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ0NyIgdW5pY29kZT0iJiN4ZjFkYzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjgyIC0xMjhxLTQ0IDAgLTEzMi41IDMuNXQtMTMzLjUgMy41cS00NCAwIC0xMzIgLTMuNXQtMTMyIC0zLjVxLTI0IDAgLTM3IDIwLjV0LTEzIDQ1LjVxMCAzMSAxNyA0NnQzOSAxN3Q1MSA3dDQ1IDE1cTMzIDIxIDMzIDE0MGwtMSAzOTFxMCAyMSAtMSAzMXEtMTMgNCAtNTAgNGgtNjc1cS0zOCAwIC01MSAtNHEtMSAtMTAgLTEgLTMxbC0xIC0zNzFxMCAtMTQyIDM3IC0xNjRxMTYgLTEwIDQ4IC0xM3Q1NyAtMy41dDQ1IC0xNQ0KdDIwIC00NS41cTAgLTI2IC0xMi41IC00OHQtMzYuNSAtMjJxLTQ3IDAgLTEzOS41IDMuNXQtMTM4LjUgMy41cS00MyAwIC0xMjggLTMuNXQtMTI3IC0zLjVxLTIzIDAgLTM1LjUgMjF0LTEyLjUgNDVxMCAzMCAxNS41IDQ1dDM2IDE3LjV0NDcuNSA3LjV0NDIgMTVxMzMgMjMgMzMgMTQzbC0xIDU3djgxM3EwIDMgMC41IDI2dDAgMzYuNXQtMS41IDM4LjV0LTMuNSA0MnQtNi41IDM2LjV0LTExIDMxLjV0LTE2IDE4cS0xNSAxMCAtNDUgMTJ0LTUzIDINCnQtNDEgMTR0LTE4IDQ1cTAgMjYgMTIgNDh0MzYgMjJxNDYgMCAxMzguNSAtMy41dDEzOC41IC0zLjVxNDIgMCAxMjYuNSAzLjV0MTI2LjUgMy41cTI1IDAgMzcuNSAtMjJ0MTIuNSAtNDhxMCAtMzAgLTE3IC00My41dC0zOC41IC0xNC41dC00OS41IC00dC00MyAtMTNxLTM1IC0yMSAtMzUgLTE2MGwxIC0zMjBxMCAtMjEgMSAtMzJxMTMgLTMgMzkgLTNoNjk5cTI1IDAgMzggM3ExIDExIDEgMzJsMSAzMjBxMCAxMzkgLTM1IDE2MA0KcS0xOCAxMSAtNTguNSAxMi41dC02NiAxM3QtMjUuNSA0OS41cTAgMjYgMTIuNSA0OHQzNy41IDIycTQ0IDAgMTMyIC0zLjV0MTMyIC0zLjVxNDMgMCAxMjkgMy41dDEyOSAzLjVxMjUgMCAzNy41IC0yMnQxMi41IC00OHEwIC0zMCAtMTcuNSAtNDR0LTQwIC0xNC41dC01MS41IC0zdC00NCAtMTIuNXEtMzUgLTIzIC0zNSAtMTYxbDEgLTk0M3EwIC0xMTkgMzQgLTE0MHExNiAtMTAgNDYgLTEzLjV0NTMuNSAtNC41dDQxLjUgLTE1LjV0MTggLTQ0LjUNCnEwIC0yNiAtMTIgLTQ4dC0zNiAtMjJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ4IiB1bmljb2RlPSImI3hmMWRkOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTEyNzggMTM0N3YtNzNxMCAtMjkgLTE4LjUgLTYxdC00Mi41IC0zMnEtNTAgMCAtNTQgLTFxLTI2IC02IC0zMiAtMzFxLTMgLTExIC0zIC02NHYtMTE1MnEwIC0yNSAtMTggLTQzdC00MyAtMThoLTEwOHEtMjUgMCAtNDMgMTh0LTE4IDQzdjEyMThoLTE0M3YtMTIxOHEwIC0yNSAtMTcuNSAtNDN0LTQzLjUgLTE4aC0xMDhxLTI2IDAgLTQzLjUgMTh0LTE3LjUgNDN2NDk2cS0xNDcgMTIgLTI0NSA1OXEtMTI2IDU4IC0xOTIgMTc5DQpxLTY0IDExNyAtNjQgMjU5cTAgMTY2IDg4IDI4NnE4OCAxMTggMjA5IDE1OXExMTEgMzcgNDE3IDM3aDQ3OXEyNSAwIDQzIC0xOHQxOCAtNDN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ5IiB1bmljb2RlPSImI3hmMWRlOyIgDQpkPSJNMzUyIDEyOHYtMTI4aC0zNTJ2MTI4aDM1MnpNNzA0IDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnpNODY0IDY0MHYtMTI4aC04NjR2MTI4aDg2NHpNMjI0IDExNTJ2LTEyOGgtMjI0djEyOGgyMjR6TTE1MzYgMTI4di0xMjhoLTczNnYxMjhoNzM2ek01NzYgMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1Ng0KcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMjU2ek0xMjE2IDc2OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnpNMTUzNiA2NDB2LTEyOGgtMjI0djEyOGgyMjR6TTE1MzYgMTE1MnYtMTI4aC04NjR2MTI4aDg2NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxRTAiIHVuaWNvZGU9IiYjeGYxZTA7IiANCmQ9Ik0xMjE2IDUxMnExMzMgMCAyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXQtOTMuNSAtMjI2LjV0LTIyNi41IC05My41dC0yMjYuNSA5My41dC05My41IDIyNi41cTAgMTIgMiAzNGwtMzYwIDE4MHEtOTIgLTg2IC0yMTggLTg2cS0xMzMgMCAtMjI2LjUgOTMuNXQtOTMuNSAyMjYuNXQ5My41IDIyNi41dDIyNi41IDkzLjVxMTI2IDAgMjE4IC04NmwzNjAgMTgwcS0yIDIyIC0yIDM0cTAgMTMzIDkzLjUgMjI2LjV0MjI2LjUgOTMuNQ0KdDIyNi41IC05My41dDkzLjUgLTIyNi41dC05My41IC0yMjYuNXQtMjI2LjUgLTkzLjVxLTEyNiAwIC0yMTggODZsLTM2MCAtMTgwcTIgLTIyIDIgLTM0dC0yIC0zNGwzNjAgLTE4MHE5MiA4NiAyMTggODZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDUxIiB1bmljb2RlPSImI3hmMWUxOyIgDQpkPSJNMTI4MCAzNDFxMCA4OCAtNjIuNSAxNTF0LTE1MC41IDYzcS04NCAwIC0xNDUgLTU4bC0yNDEgMTIwcTIgMTYgMiAyM3QtMiAyM2wyNDEgMTIwcTYxIC01OCAxNDUgLTU4cTg4IDAgMTUwLjUgNjN0NjIuNSAxNTF0LTYyLjUgMTUwLjV0LTE1MC41IDYyLjV0LTE1MSAtNjIuNXQtNjMgLTE1MC41cTAgLTcgMiAtMjNsLTI0MSAtMTIwcS02MiA1NyAtMTQ1IDU3cS04OCAwIC0xNTAuNSAtNjIuNXQtNjIuNSAtMTUwLjV0NjIuNSAtMTUwLjUNCnQxNTAuNSAtNjIuNXE4MyAwIDE0NSA1N2wyNDEgLTEyMHEtMiAtMTYgLTIgLTIzcTAgLTg4IDYzIC0xNTAuNXQxNTEgLTYyLjV0MTUwLjUgNjIuNXQ2Mi41IDE1MC41ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTIiIHVuaWNvZGU9IiYjeGYxZTI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNTcxIDk0N3EtMTAgMjUgLTM0IDM1dC00OSAwcS0xMDggLTQ0IC0xOTEgLTEyN3QtMTI3IC0xOTFxLTEwIC0yNSAwIC00OXQzNSAtMzRxMTMgLTUgMjQgLTVxNDIgMCA2MCA0MHEzNCA4NCA5OC41IDE0OC41dDE0OC41IDk4LjVxMjUgMTEgMzUgMzV0MCA0OXpNMTUxMyAxMzAzbDQ2IC00NmwtMjQ0IC0yNDNsNjggLTY4cTE5IC0xOSAxOSAtNDUuNXQtMTkgLTQ1LjVsLTY0IC02NHE4OSAtMTYxIDg5IC0zNDNxMCAtMTQzIC01NS41IC0yNzMuNQ0KdC0xNTAgLTIyNXQtMjI1IC0xNTB0LTI3My41IC01NS41dC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjVxMTgyIDAgMzQzIC04OWw2NCA2NHExOSAxOSA0NS41IDE5dDQ1LjUgLTE5bDY4IC02OHpNMTUyMSAxMzU5cS0xMCAtMTAgLTIyIC0xMHEtMTMgMCAtMjMgMTBsLTkxIDkwcS05IDEwIC05IDIzdDkgMjNxMTAgOSAyMyA5dDIzIC05bDkwIC05MQ0KcTEwIC05IDEwIC0yMi41dC0xMCAtMjIuNXpNMTc1MSAxMTI5cS0xMSAtOSAtMjMgLTl0LTIzIDlsLTkwIDkxcS0xMCA5IC0xMCAyMi41dDEwIDIyLjVxOSAxMCAyMi41IDEwdDIyLjUgLTEwbDkxIC05MHE5IC0xMCA5IC0yM3QtOSAtMjN6TTE3OTIgMTMxMnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Q5IDIzdDIzIDloOTZxMTQgMCAyMyAtOXQ5IC0yM3pNMTYwMCAxNTA0di05NnEwIC0xNCAtOSAtMjN0LTIzIC05DQp0LTIzIDl0LTkgMjN2OTZxMCAxNCA5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTE3NTEgMTQ0OWwtOTEgLTkwcS0xMCAtMTAgLTIyIC0xMHEtMTMgMCAtMjMgMTBxLTEwIDkgLTEwIDIyLjV0MTAgMjIuNWw5MCA5MXExMCA5IDIzIDl0MjMgLTlxOSAtMTAgOSAtMjN0LTkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ1MyIgdW5pY29kZT0iJiN4ZjFlMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik02MDkgNzIwbDI4NyAyMDhsMjg3IC0yMDhsLTEwOSAtMzM2aC0zNTV6TTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXpNMTUxNSAxODZxMTQ5IDIwMyAxNDkgNDU0djNsLTEwMiAtODlsLTI0MCAyMjRsNjMgMzIzDQpsMTM0IC0xMnEtMTUwIDIwNiAtMzg5IDI4Mmw1MyAtMTI0bC0yODcgLTE1OWwtMjg3IDE1OWw1MyAxMjRxLTIzOSAtNzYgLTM4OSAtMjgybDEzNSAxMmw2MiAtMzIzbC0yNDAgLTIyNGwtMTAyIDg5di0zcTAgLTI1MSAxNDkgLTQ1NGwzMCAxMzJsMzI2IC00MGwxMzkgLTI5OGwtMTE2IC02OXExMTcgLTM5IDI0MCAtMzl0MjQwIDM5bC0xMTYgNjlsMTM5IDI5OGwzMjYgNDB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDU0IiB1bmljb2RlPSImI3hmMWU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTQ0OCAyMjR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0yNTYgNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNODMyIDIyNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyMw0KdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNNjQwIDYwOHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTY2IDc2OHEtMjggMCAtNDcgMTl0LTE5IDQ2djEyOWg1MTR2LTEyOXEwIC0yNyAtMTkgLTQ2dC00NiAtMTloLTM4M3pNMTIxNiAyMjR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTINCnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTYwMCAyMjR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzDQp6TTE0MDggNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiAxMDE2di0xM2gtNTE0djEwcTAgMTA0IC0zODIgMTAycS0zODIgLTEgLTM4MiAtMTAydi0xMGgtNTE0djEzcTAgMTcgOC41IDQzdDM0IDY0dDY1LjUgNzUuNXQxMTAuNSA3NnQxNjAgNjcuNXQyMjQgNDcuNXQyOTMuNSAxOC41dDI5MyAtMTguNXQyMjQgLTQ3LjUNCnQxNjAuNSAtNjcuNXQxMTAuNSAtNzZ0NjUuNSAtNzUuNXQzNCAtNjR0OC41IC00M3pNMTc5MiA2MDh2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNzkyIDk2MnYtMTI5cTAgLTI3IC0xOSAtNDZ0LTQ2IC0xOWgtMzg0cS0yNyAwIC00NiAxOXQtMTkgNDZ2MTI5aDUxNHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTUiIHVuaWNvZGU9IiYjeGYxZTU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNzA0IDEyMTZ2LTc2OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl2LTU3NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djUxMmwyNDkgODczcTcgMjMgMzEgMjNoNDI0ek0xMDI0IDEyMTZ2LTcwNGgtMjU2djcwNGgyNTZ6TTE3OTIgMzIwdi01MTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXY1NzZxLTI2IDAgLTQ1IDE5dC0xOSA0NXY3NjhoNDI0cTI0IDAgMzEgLTIzeg0KTTczNiAxNTA0di0yMjRoLTM1MnYyMjRxMCAxNCA5IDIzdDIzIDloMjg4cTE0IDAgMjMgLTl0OSAtMjN6TTE0MDggMTUwNHYtMjI0aC0zNTJ2MjI0cTAgMTQgOSAyM3QyMyA5aDI4OHExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ1NiIgdW5pY29kZT0iJiN4ZjFlNjsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzU1IDEwODNxMzcgLTM4IDM3IC05MC41dC0zNyAtOTAuNWwtNDAxIC00MDBsMTUwIC0xNTBsLTE2MCAtMTYwcS0xNjMgLTE2MyAtMzg5LjUgLTE4Ni41dC00MTEuNSAxMDAuNWwtMzYyIC0zNjJoLTE4MXYxODFsMzYyIDM2MnEtMTI0IDE4NSAtMTAwLjUgNDExLjV0MTg2LjUgMzg5LjVsMTYwIDE2MGwxNTAgLTE1MGw0MDAgNDAxcTM4IDM3IDkxIDM3dDkwIC0zN3QzNyAtOTAuNXQtMzcgLTkwLjVsLTQwMCAtNDAxbDIzNCAtMjM0DQpsNDAxIDQwMHEzOCAzNyA5MSAzN3Q5MCAtMzd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDU3IiB1bmljb2RlPSImI3hmMWU3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTg3MyA3OTZxMCAtODMgLTYzLjUgLTE0Mi41dC0xNTIuNSAtNTkuNXQtMTUyLjUgNTkuNXQtNjMuNSAxNDIuNXEwIDg0IDYzLjUgMTQzdDE1Mi41IDU5dDE1Mi41IC01OXQ2My41IC0xNDN6TTEzNzUgNzk2cTAgLTgzIC02MyAtMTQyLjV0LTE1MyAtNTkuNXEtODkgMCAtMTUyLjUgNTkuNXQtNjMuNSAxNDIuNXEwIDg0IDYzLjUgMTQzdDE1Mi41IDU5cTkwIDAgMTUzIC01OXQ2MyAtMTQzek0xNjAwIDYxNnY2NjdxMCA4NyAtMzIgMTIzLjUNCnQtMTExIDM2LjVoLTExMTJxLTgzIDAgLTExMi41IC0zNHQtMjkuNSAtMTI2di02NzNxNDMgLTIzIDg4LjUgLTQwdDgxIC0yOHQ4MSAtMTguNXQ3MSAtMTF0NzAgLTR0NTguNSAtMC41dDU2LjUgMnQ0NC41IDJxNjggMSA5NSAtMjdxNiAtNiAxMCAtOXEyNiAtMjUgNjEgLTUxcTcgOTEgMTE4IDg3cTUgMCAzNi41IC0xLjV0NDMgLTJ0NDUuNSAtMXQ1MyAxdDU0LjUgNC41dDYxIDguNXQ2MiAxMy41dDY3IDE5LjV0NjcuNSAyN3Q3MiAzNC41eg0KTTE3NjMgNjIxcS0xMjEgLTE0OSAtMzcyIC0yNTJxODQgLTI4NSAtMjMgLTQ2NXEtNjYgLTExMyAtMTgzIC0xNDhxLTEwNCAtMzIgLTE4MiAxNXEtODYgNTEgLTgyIDE2NGwtMSAzMjZ2MXEtOCAyIC0yNC41IDZ0LTIzLjUgNWwtMSAtMzM4cTQgLTExNCAtODMgLTE2NHEtNzkgLTQ3IC0xODMgLTE1cS0xMTcgMzYgLTE4MiAxNTBxLTEwNSAxODAgLTIyIDQ2M3EtMjUxIDEwMyAtMzcyIDI1MnEtMjUgMzcgLTQgNjN0NjAgLTFxNCAtMiAxMS41IC03DQp0MTAuNSAtOHY2OTRxMCA3MiA0NyAxMjN0MTE0IDUxaDEyNTdxNjcgMCAxMTQgLTUxdDQ3IC0xMjN2LTY5NGwyMSAxNXEzOSAyNyA2MCAxdC00IC02M3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTgiIHVuaWNvZGU9IiYjeGYxZTg7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODk2IDExMDJ2LTQzNGgtMTQ1djQzNGgxNDV6TTEyOTQgMTEwMnYtNDM0aC0xNDV2NDM0aDE0NXpNMTI5NCAzNDJsMjUzIDI1NHY3OTVoLTExOTR2LTEwNDloMzI2di0yMTdsMjE3IDIxN2gzOTh6TTE2OTIgMTUzNnYtMTAxM2wtNDM0IC00MzRoLTMyNmwtMjE3IC0yMTdoLTIxN3YyMTdoLTM5OHYxMTU4bDEwOSAyODloMTQ4M3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTkiIHVuaWNvZGU9IiYjeGYxZTk7IiANCmQ9Ik03NzMgMjE3di0xMjdxLTEgLTI5MiAtNiAtMzA1cS0xMiAtMzIgLTUxIC00MHEtNTQgLTkgLTE4MS41IDM4dC0xNjIuNSA4OXEtMTMgMTUgLTE3IDM2cS0xIDEyIDQgMjZxNCAxMCAzNCA0N3QxODEgMjE2cTEgMCA2MCA3MHExNSAxOSAzOS41IDI0LjV0NDkuNSAtMy41cTI0IC0xMCAzNy41IC0yOXQxMi41IC00MnpNNjI0IDQ2OHEtMyAtNTUgLTUyIC03MGwtMTIwIC0zOXEtMjc1IC04OCAtMjkyIC04OHEtMzUgMiAtNTQgMzYNCnEtMTIgMjUgLTE3IDc1cS04IDc2IDEgMTY2LjV0MzAgMTI0LjV0NTYgMzJxMTMgMCAyMDIgLTc3cTcxIC0yOSAxMTUgLTQ3bDg0IC0zNHEyMyAtOSAzNS41IC0zMC41dDExLjUgLTQ4LjV6TTE0NTAgMTcxcS03IC01NCAtOTEuNSAtMTYxdC0xMzUuNSAtMTI3cS0zNyAtMTQgLTYzIDdxLTE0IDEwIC0xODQgMjg3bC00NyA3N3EtMTQgMjEgLTExLjUgNDZ0MTkuNSA0NnEzNSA0MyA4MyAyNnExIC0xIDExOSAtNDBxMjAzIC02NiAyNDIgLTc5LjUNCnQ0NyAtMjAuNXEyOCAtMjIgMjIgLTYxek03NzggODAzcTUgLTEwMiAtNTQgLTEyMnEtNTggLTE3IC0xMTQgNzFsLTM3OCA1OThxLTggMzUgMTkgNjJxNDEgNDMgMjA3LjUgODkuNXQyMjQuNSAzMS41cTQwIC0xMCA0OSAtNDVxMyAtMTggMjIgLTMwNS41dDI0IC0zNzkuNXpNMTQ0MCA2OTVxMyAtMzkgLTI2IC01OXEtMTUgLTEwIC0zMjkgLTg2cS02NyAtMTUgLTkxIC0yM2wxIDJxLTIzIC02IC00NiA0dC0zNyAzMnEtMzAgNDcgMCA4Nw0KcTEgMSA3NSAxMDJxMTI1IDE3MSAxNTAgMjA0dDM0IDM5cTI4IDE5IDY1IDJxNDggLTIzIDEyMyAtMTMzLjV0ODEgLTE2Ny41di0zeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2MCIgdW5pY29kZT0iJiN4ZjFlYTsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xMDI0IDEwMjRoLTM4NHYtMzg0aDM4NHYzODR6TTExNTIgMzg0di0xMjhoLTY0MHYxMjhoNjQwek0xMTUyIDExNTJ2LTY0MGgtNjQwdjY0MGg2NDB6TTE3OTIgMzg0di0xMjhoLTUxMnYxMjhoNTEyek0xNzkyIDY0MHYtMTI4aC01MTJ2MTI4aDUxMnpNMTc5MiA4OTZ2LTEyOGgtNTEydjEyOGg1MTJ6TTE3OTIgMTE1MnYtMTI4aC01MTJ2MTI4aDUxMnpNMjU2IDE5MnY5NjBoLTEyOHYtOTYwcTAgLTI2IDE5IC00NXQ0NSAtMTl0NDUgMTkNCnQxOSA0NXpNMTkyMCAxOTJ2MTA4OGgtMTUzNnYtMTA4OHEwIC0zMyAtMTEgLTY0aDE0ODNxMjYgMCA0NSAxOXQxOSA0NXpNMjA0OCAxNDA4di0xMjE2cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2aC0xNjY0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYxMDg4aDI1NnYxMjhoMTc5MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjEiIHVuaWNvZGU9IiYjeGYxZWI7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMTAyNCAxM3EtMjAgMCAtOTMgNzMuNXQtNzMgOTMuNXEwIDMyIDYyLjUgNTR0MTAzLjUgMjJ0MTAzLjUgLTIydDYyLjUgLTU0cTAgLTIwIC03MyAtOTMuNXQtOTMgLTczLjV6TTEyOTQgMjg0cS0yIDAgLTQwIDI1dC0xMDEuNSA1MHQtMTI4LjUgMjV0LTEyOC41IC0yNXQtMTAxIC01MHQtNDAuNSAtMjVxLTE4IDAgLTkzLjUgNzV0LTc1LjUgOTNxMCAxMyAxMCAyM3E3OCA3NyAxOTYgMTIxdDIzMyA0NHQyMzMgLTQ0dDE5NiAtMTIxDQpxMTAgLTEwIDEwIC0yM3EwIC0xOCAtNzUuNSAtOTN0LTkzLjUgLTc1ek0xNTY3IDU1NnEtMTEgMCAtMjMgOHEtMTM2IDEwNSAtMjUyIDE1NC41dC0yNjggNDkuNXEtODUgMCAtMTcwLjUgLTIydC0xNDkgLTUzdC0xMTMuNSAtNjJ0LTc5IC01M3QtMzEgLTIycS0xNyAwIC05MiA3NXQtNzUgOTNxMCAxMiAxMCAyMnExMzIgMTMyIDMyMCAyMDV0MzgwIDczdDM4MCAtNzN0MzIwIC0yMDVxMTAgLTEwIDEwIC0yMnEwIC0xOCAtNzUgLTkzdC05MiAtNzV6DQpNMTgzOCA4MjdxLTExIDAgLTIyIDlxLTE3OSAxNTcgLTM3MS41IDIzNi41dC00MjAuNSA3OS41dC00MjAuNSAtNzkuNXQtMzcxLjUgLTIzNi41cS0xMSAtOSAtMjIgLTlxLTE3IDAgLTkyLjUgNzV0LTc1LjUgOTNxMCAxMyAxMCAyM3ExODcgMTg2IDQ0NSAyODh0NTI3IDEwMnQ1MjcgLTEwMnQ0NDUgLTI4OHExMCAtMTAgMTAgLTIzcTAgLTE4IC03NS41IC05M3QtOTIuNSAtNzV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDYyIiB1bmljb2RlPSImI3hmMWVjOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTM4NCAwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek03NjggMHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMzg0IDM4NHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNQ0KdC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMTUyIDBxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTc2OCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNQ0KdDM3LjUgOTAuNXpNMzg0IDc2OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTE1MiAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTc2OCA3NjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjUNCnQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUzNiAwdjM4NHEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwdi0zODRxMCAtNTIgMzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMTE1MiA3NjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6DQpNMTUzNiAxMDg4djI1NnEwIDI2IC0xOSA0NXQtNDUgMTloLTEyODBxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0yNTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjgwcTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgNzY4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDE0MDh2LTE1MzZxMCAtNTIgLTM4IC05MHQtOTAgLTM4DQpoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxNTM2cTAgNTIgMzggOTB0OTAgMzhoMTQwOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDYzIiB1bmljb2RlPSImI3hmMWVkOyIgDQpkPSJNMTUxOSA4OTBxMTggLTg0IC00IC0yMDRxLTg3IC00NDQgLTU2NSAtNDQ0aC00NHEtMjUgMCAtNDQgLTE2LjV0LTI0IC00Mi41bC00IC0xOWwtNTUgLTM0NmwtMiAtMTVxLTUgLTI2IC0yNC41IC00Mi41dC00NC41IC0xNi41aC0yNTFxLTIxIDAgLTMzIDE1dC05IDM2cTkgNTYgMjYuNSAxNjh0MjYuNSAxNjh0MjcgMTY3LjV0MjcgMTY3LjVxNSAzNyA0MyAzN2gxMzFxMTMzIC0yIDIzNiAyMXExNzUgMzkgMjg3IDE0NHExMDIgOTUgMTU1IDI0Ng0KcTI0IDcwIDM1IDEzM3ExIDYgMi41IDcuNXQzLjUgMXQ2IC0zLjVxNzkgLTU5IDk4IC0xNjJ6TTEzNDcgMTE3MnEwIC0xMDcgLTQ2IC0yMzZxLTgwIC0yMzMgLTMwMiAtMzE1cS0xMTMgLTQwIC0yNTIgLTQycTAgLTEgLTkwIC0xbC05MCAxcS0xMDAgMCAtMTE4IC05NnEtMiAtOCAtODUgLTUzMHEtMSAtMTAgLTEyIC0xMGgtMjk1cS0yMiAwIC0zNi41IDE2LjV0LTExLjUgMzguNWwyMzIgMTQ3MXE1IDI5IDI3LjUgNDh0NTEuNSAxOWg1OTgNCnEzNCAwIDk3LjUgLTEzdDExMS41IC0zMnExMDcgLTQxIDE2My41IC0xMjN0NTYuNSAtMTk2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2NCIgdW5pY29kZT0iJiN4ZjFlZTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik00NDEgODY0cTMzIDAgNTIgLTI2cTI2NiAtMzY0IDM2MiAtNzc0aC00NDZxLTEyNyA0NDEgLTM2NyA3NDlxLTEyIDE2IC0zIDMzLjV0MjkgMTcuNWgzNzN6TTEwMDAgNTA3cS00OSAtMTk5IC0xMjUgLTM5M3EtNzkgMzEwIC0yNTYgNTk0cTQwIDIyMSA0NCA0NDlxMjExIC0zNDAgMzM3IC02NTB6TTEwOTkgMTIxNnEyMzUgLTMyNCAzODQuNSAtNjk4LjV0MTg0LjUgLTc3My41aC00NTFxLTQxIDY2NSAtNTUzIDE0NzJoNDM1ek0xNzkyIDY0MA0KcTAgLTQyNCAtMTAxIC04MTJxLTY3IDU2MCAtMzU5IDEwODNxLTI1IDMwMSAtMTA2IDU4NHEtNCAxNiA1LjUgMjguNXQyNS41IDEyLjVoMzU5cTIxIDAgMzguNSAtMTN0MjIuNSAtMzNxMTE1IC00MDkgMTE1IC04NTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUYwIiB1bmljb2RlPSImI3hmMWYwOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTE5NzUgNTQ2aC0xMzhxMTQgMzcgNjYgMTc5bDMgOXE0IDEwIDEwIDI2dDkgMjZsMTIgLTU1ek01MzEgNjExbC01OCAyOTVxLTExIDU0IC03NSA1NGgtMjY4bC0yIC0xM3EzMTEgLTc5IDQwMyAtMzM2ek03MTAgOTYwbC0xNjIgLTQzOGwtMTcgODlxLTI2IDcwIC04NSAxMjkuNXQtMTMxIDg4LjVsMTM1IC01MTBoMTc1bDI2MSA2NDFoLTE3NnpNODQ5IDMxOGgxNjZsMTA0IDY0MmgtMTY2ek0xNjE3IDk0NHEtNjkgMjcgLTE0OSAyNw0KcS0xMjMgMCAtMjAxIC01OXQtNzkgLTE1M3EtMSAtMTAyIDE0NSAtMTc0cTQ4IC0yMyA2NyAtNDF0MTkgLTM5cTAgLTMwIC0zMCAtNDZ0LTY5IC0xNnEtODYgMCAtMTU2IDMzbC0yMiAxMWwtMjMgLTE0NHE3NCAtMzQgMTg1IC0zNHExMzAgLTEgMjA4LjUgNTl0ODAuNSAxNjBxMCAxMDYgLTE0MCAxNzRxLTQ5IDI1IC03MSA0MnQtMjIgMzhxMCAyMiAyNC41IDM4LjV0NzAuNSAxNi41cTcwIDEgMTI0IC0yNGwxNSAtOHpNMjA0MiA5NjBoLTEyOA0KcS02NSAwIC04NyAtNTRsLTI0NiAtNTg4aDE3NGwzNSA5NmgyMTJxNSAtMjIgMjAgLTk2aDE1NHpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjYiIHVuaWNvZGU9IiYjeGYxZjE7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTExOSAxMTk1cS0xMjggODUgLTI4MSA4NXEtMTAzIDAgLTE5Ny41IC00MC41dC0xNjIuNSAtMTA4LjV0LTEwOC41IC0xNjJ0LTQwLjUgLTE5N3EwIC0xMDQgNDAuNSAtMTk4dDEwOC41IC0xNjJ0MTYyIC0xMDguNXQxOTggLTQwLjVxMTUzIDAgMjgxIDg1cS0xMzEgMTA3IC0xNzggMjY1LjV0MC41IDMxNi41dDE3Ny41IDI2NXpNMTE1MiAxMTcxcS0xMjYgLTk5IC0xNzIgLTI0OS41dC0wLjUgLTMwMC41dDE3Mi41IC0yNDkNCnExMjcgOTkgMTcyLjUgMjQ5dC0wLjUgMzAwLjV0LTE3MiAyNDkuNXpNMTE4NSAxMTk1cTEzMCAtMTA3IDE3Ny41IC0yNjUuNXQwLjUgLTMxN3QtMTc4IC0yNjQuNXExMjggLTg1IDI4MSAtODVxMTA0IDAgMTk4IDQwLjV0MTYyIDEwOC41dDEwOC41IDE2MnQ0MC41IDE5OHEwIDEwMyAtNDAuNSAxOTd0LTEwOC41IDE2MnQtMTYyLjUgMTA4LjV0LTE5Ny41IDQwLjVxLTE1MyAwIC0yODEgLTg1ek0xOTI2IDQ3M2g3djNoLTE3di0zaDd2LTE3aDN2MTd6DQpNMTk1NSA0NTZoNHYyMGgtNWwtNiAtMTNsLTYgMTNoLTV2LTIwaDN2MTVsNiAtMTNoNGw1IDEzdi0xNXpNMTk0NyAxNnYtMmgtMmgtM3YzaDNoMnYtMXpNMTk0NyA3aDNsLTQgNWgybDEgMXExIDEgMSAzdC0xIDNsLTEgMWgtM2gtNnYtMTNoM3Y1aDF6TTY4NSA3NXEwIDE5IDExIDMxdDMwIDEycTE4IDAgMjkgLTEyLjV0MTEgLTMwLjVxMCAtMTkgLTExIC0zMXQtMjkgLTEycS0xOSAwIC0zMCAxMnQtMTEgMzF6TTExNTggMTE5cTMwIDAgMzUgLTMyDQpoLTcwcTUgMzIgMzUgMzJ6TTE1MTQgNzVxMCAxOSAxMSAzMXQyOSAxMnQyOS41IC0xMi41dDExLjUgLTMwLjVxMCAtMTkgLTExIC0zMXQtMzAgLTEycS0xOCAwIC0yOSAxMnQtMTEgMzF6TTE3ODYgNzVxMCAxOCAxMS41IDMwLjV0MjkuNSAxMi41dDI5LjUgLTEyLjV0MTEuNSAtMzAuNXEwIC0xOSAtMTEuNSAtMzF0LTI5LjUgLTEydC0yOS41IDEyLjV0LTExLjUgMzAuNXpNMTk0NCAzcS0yIDAgLTQgMXEtMSAwIC0zIDJ0LTIgM3EtMSAyIC0xIDQNCnEwIDMgMSA0cTAgMiAyIDRsMSAxcTIgMCAyIDFxMiAxIDQgMXEzIDAgNCAtMWw0IC0ybDIgLTR2LTFxMSAtMiAxIC0zbC0xIC0xdi0zdC0xIC0xbC0xIC0ycS0yIC0yIC00IC0ycS0xIC0xIC00IC0xek01OTkgN2gzMHY4NXEwIDI0IC0xNC41IDM4LjV0LTM5LjUgMTUuNXEtMzIgMCAtNDcgLTI0cS0xNCAyNCAtNDUgMjRxLTI0IDAgLTM5IC0yMHYxNmgtMzB2LTEzNWgzMHY3NXEwIDM2IDMzIDM2cTMwIDAgMzAgLTM2di03NWgyOXY3NQ0KcTAgMzYgMzMgMzZxMzAgMCAzMCAtMzZ2LTc1ek03NjUgN2gyOXY2OHY2N2gtMjl2LTE2cS0xNyAyMCAtNDMgMjBxLTI5IDAgLTQ4IC0yMHQtMTkgLTUxdDE5IC01MXQ0OCAtMjBxMjggMCA0MyAyMHYtMTd6TTk0MyA0OHEwIDM0IC00NyA0MGwtMTQgMnEtMjMgNCAtMjMgMTRxMCAxNSAyNSAxNXEyMyAwIDQzIC0xMWwxMiAyNHEtMjIgMTQgLTU1IDE0cS0yNiAwIC00MSAtMTJ0LTE1IC0zMnEwIC0zMyA0NyAtMzlsMTMgLTJxMjQgLTQgMjQgLTE0DQpxMCAtMTcgLTMxIC0xN3EtMjUgMCAtNDUgMTRsLTEzIC0yM3EyNSAtMTcgNTggLTE3cTI5IDAgNDUuNSAxMnQxNi41IDMyek0xMDczIDE0bC04IDI1cS0xMyAtNyAtMjYgLTdxLTE5IDAgLTE5IDIydjYxaDQ4djI3aC00OHY0MWgtMzB2LTQxaC0yOHYtMjdoMjh2LTYxcTAgLTUwIDQ3IC01MHEyMSAwIDM2IDEwek0xMTU5IDE0NnEtMjkgMCAtNDggLTIwdC0xOSAtNTFxMCAtMzIgMTkuNSAtNTEuNXQ0OS41IC0xOS41cTMzIDAgNTUgMTlsLTE0IDIyDQpxLTE4IC0xNSAtMzkgLTE1cS0zNCAwIC00MSAzM2gxMDF2MTJxMCAzMiAtMTggNTEuNXQtNDYgMTkuNXpNMTMxOCAxNDZxLTIzIDAgLTM1IC0yMHYxNmgtMzB2LTEzNWgzMHY3NnEwIDM1IDI5IDM1cTEwIDAgMTggLTRsOSAyOHEtOSA0IC0yMSA0ek0xMzQ4IDc1cTAgLTMxIDE5LjUgLTUxdDUyLjUgLTIwcTI5IDAgNDggMTZsLTE0IDI0cS0xOCAtMTMgLTM1IC0xMnEtMTggMCAtMjkuNSAxMnQtMTEuNSAzMXQxMS41IDMxdDI5LjUgMTINCnExOSAwIDM1IC0xMmwxNCAyNHEtMjAgMTYgLTQ4IDE2cS0zMyAwIC01Mi41IC0yMHQtMTkuNSAtNTF6TTE1OTMgN2gzMHY2OHY2N2gtMzB2LTE2cS0xNSAyMCAtNDIgMjBxLTI5IDAgLTQ4LjUgLTIwdC0xOS41IC01MXQxOS41IC01MXQ0OC41IC0yMHEyOCAwIDQyIDIwdi0xN3pNMTcyNiAxNDZxLTIzIDAgLTM1IC0yMHYxNmgtMjl2LTEzNWgyOXY3NnEwIDM1IDI5IDM1cTEwIDAgMTggLTRsOSAyOHEtOCA0IC0yMSA0ek0xODY2IDdoMjl2Njh2MTIyDQpoLTI5di03MXEtMTUgMjAgLTQzIDIwdC00Ny41IC0yMC41dC0xOS41IC01MC41dDE5LjUgLTUwLjV0NDcuNSAtMjAuNXEyOSAwIDQzIDIwdi0xN3pNMTk0NCAyN2wtMiAtMWgtM3EtMiAtMSAtNCAtM3EtMyAtMSAtMyAtNHEtMSAtMiAtMSAtNnEwIC0zIDEgLTVxMCAtMiAzIC00cTIgLTIgNCAtM3Q1IC0xcTQgMCA2IDFxMCAxIDIgMmwyIDFxMSAxIDMgNHExIDIgMSA1cTAgNCAtMSA2cS0xIDEgLTMgNHEwIDEgLTIgMmwtMiAxcS0xIDAgLTMgMC41DQp0LTMgMC41ek0yMzA0IDEyODB2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0yMDQ4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2NyIgdW5pY29kZT0iJiN4ZjFmMjsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0zMTMgNzU5cTAgLTUxIC0zNiAtODRxLTI5IC0yNiAtODkgLTI2aC0xN3YyMjBoMTdxNjEgMCA4OSAtMjdxMzYgLTMxIDM2IC04M3pNMjA4OSA4MjRxMCAtNTIgLTY0IC01MmgtMTl2MTAxaDIwcTYzIDAgNjMgLTQ5ek0zODAgNzU5cTAgNzQgLTUwIDEyMC41dC0xMjkgNDYuNWgtOTV2LTMzM2g5NXE3NCAwIDExOSAzOHE2MCA1MSA2MCAxMjh6TTQxMCA1OTNoNjV2MzMzaC02NXYtMzMzek03MzAgNjk0cTAgNDAgLTIwLjUgNjJ0LTc1LjUgNDINCnEtMjkgMTAgLTM5LjUgMTl0LTEwLjUgMjNxMCAxNiAxMy41IDI2LjV0MzQuNSAxMC41cTI5IDAgNTMgLTI3bDM0IDQ0cS00MSAzNyAtOTggMzdxLTQ0IDAgLTc0IC0yNy41dC0zMCAtNjcuNXEwIC0zNSAxOCAtNTUuNXQ2NCAtMzYuNXEzNyAtMTMgNDUgLTE5cTE5IC0xMiAxOSAtMzRxMCAtMjAgLTE0IC0zMy41dC0zNiAtMTMuNXEtNDggMCAtNzEgNDRsLTQyIC00MHE0NCAtNjQgMTE1IC02NHE1MSAwIDgzIDMwLjV0MzIgNzkuNXpNMTAwOCA2MDQNCnY3N3EtMzcgLTM3IC03OCAtMzdxLTQ5IDAgLTgwLjUgMzIuNXQtMzEuNSA4Mi41cTAgNDggMzEuNSA4MS41dDc3LjUgMzMuNXE0MyAwIDgxIC0zOHY3N3EtNDAgMjAgLTgwIDIwcS03NCAwIC0xMjUuNSAtNTAuNXQtNTEuNSAtMTIzLjV0NTEgLTEyMy41dDEyNSAtNTAuNXE0MiAwIDgxIDE5ek0yMjQwIDB2NTI3cS02NSAtNDAgLTE0NC41IC04NHQtMjM3LjUgLTExN3QtMzI5LjUgLTEzNy41dC00MTcuNSAtMTM0LjV0LTUwNCAtMTE4aDE1NjkNCnEyNiAwIDQ1IDE5dDE5IDQ1ek0xMzg5IDc1N3EwIDc1IC01MyAxMjh0LTEyOCA1M3QtMTI4IC01M3QtNTMgLTEyOHQ1MyAtMTI4dDEyOCAtNTN0MTI4IDUzdDUzIDEyOHpNMTU0MSA1ODRsMTQ0IDM0MmgtNzFsLTkwIC0yMjRsLTg5IDIyNGgtNzFsMTQyIC0zNDJoMzV6TTE3MTQgNTkzaDE4NHY1NmgtMTE5djkwaDExNXY1NmgtMTE1djc0aDExOXY1N2gtMTg0di0zMzN6TTIxMDUgNTkzaDgwbC0xMDUgMTQwcTc2IDE2IDc2IDk0cTAgNDcgLTMxIDczDQp0LTg3IDI2aC05N3YtMzMzaDY1djEzM2g5ek0yMzA0IDEyNzR2LTEyNjhxMCAtNTYgLTM4LjUgLTk1dC05My41IC0zOWgtMjA0MHEtNTUgMCAtOTMuNSAzOXQtMzguNSA5NXYxMjY4cTAgNTYgMzguNSA5NXQ5My41IDM5aDIwNDBxNTUgMCA5My41IC0zOXQzOC41IC05NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxZjMiIHVuaWNvZGU9IiYjeGYxZjM7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTE5IDg1NGg4OWwtNDUgMTA4ek03NDAgMzI4bDc0IDc5bC03MCA3OWgtMTYzdi00OWgxNDJ2LTU1aC0xNDJ2LTU0aDE1OXpNODk4IDQwNmw5OSAtMTEwdjIxN3pNMTE4NiA0NTNxMCAzMyAtNDAgMzNoLTg0di02OWg4M3E0MSAwIDQxIDM2ek0xNDc1IDQ1N3EwIDI5IC00MiAyOWgtODJ2LTYxaDgxcTQzIDAgNDMgMzJ6TTExOTcgOTIzcTAgMjkgLTQyIDI5aC04MnYtNjBoODFxNDMgMCA0MyAzMXpNMTY1NiA4NTRoODlsLTQ0IDEwOHoNCk02OTkgMTAwOXYtMjcxaC02NnYyMTJsLTk0IC0yMTJoLTU3bC05NCAyMTJ2LTIxMmgtMTMybC0yNSA2MGgtMTM1bC0yNSAtNjBoLTcwbDExNiAyNzFoOTZsMTEwIC0yNTd2MjU3aDEwNmw4NSAtMTg0bDc3IDE4NGgxMDh6TTEyNTUgNDUzcTAgLTIwIC01LjUgLTM1dC0xNCAtMjV0LTIyLjUgLTE2LjV0LTI2IC0xMHQtMzEuNSAtNC41dC0zMS41IC0xdC0zMi41IDAuNXQtMjkuNSAwLjV2LTkxaC0xMjZsLTgwIDkwbC04MyAtOTBoLTI1NnYyNzFoMjYwDQpsODAgLTg5bDgyIDg5aDIwN3ExMDkgMCAxMDkgLTg5ek05NjQgNzk0di01NmgtMjE3djI3MWgyMTd2LTU3aC0xNTJ2LTQ5aDE0OHYtNTVoLTE0OHYtNTRoMTUyek0yMzA0IDIzNXYtMjI5cTAgLTU1IC0zOC41IC05NC41dC05My41IC0zOS41aC0yMDQwcS01NSAwIC05My41IDM5LjV0LTM4LjUgOTQuNXY2NzhoMTExbDI1IDYxaDU1bDI1IC02MWgyMTh2NDZsMTkgLTQ2aDExM2wyMCA0N3YtNDdoNTQxdjk5bDEwIDFxMTAgMCAxMCAtMTR2LTg2aDI3OQ0KdjIzcTIzIC0xMiA1NSAtMTh0NTIuNSAtNi41dDYzIDAuNXQ1MS41IDFsMjUgNjFoNTZsMjUgLTYxaDIyN3Y1OGwzNCAtNThoMTgydjM3OGgtMTgwdi00NGwtMjUgNDRoLTE4NXYtNDRsLTIzIDQ0aC0yNDlxLTY5IDAgLTEwOSAtMjJ2MjJoLTE3MnYtMjJxLTI0IDIyIC03MyAyMmgtNjI4bC00MyAtOTdsLTQzIDk3aC0xOTh2LTQ0bC0yMiA0NGgtMTY5bC03OCAtMTc5djM5MXEwIDU1IDM4LjUgOTQuNXQ5My41IDM5LjVoMjA0MA0KcTU1IDAgOTMuNSAtMzkuNXQzOC41IC05NC41di02NzhoLTEyMHEtNTEgMCAtODEgLTIydjIyaC0xNzdxLTU1IDAgLTc4IC0yMnYyMmgtMzE2di0yMnEtMzEgMjIgLTg3IDIyaC0yMDl2LTIycS0yMyAyMiAtOTEgMjJoLTIzNGwtNTQgLTU4bC01MCA1OGgtMzQ5di0zNzhoMzQzbDU1IDU5bDUyIC01OWgyMTF2ODloMjFxNTkgMCA5MCAxM3YtMTAyaDE3NHY5OWg4cTggMCAxMCAtMnQyIC0xMHYtODdoNTI5cTU3IDAgODggMjR2LTI0aDE2OA0KcTYwIDAgOTUgMTd6TTE1NDYgNDY5cTAgLTIzIC0xMiAtNDN0LTM0IC0yOXEyNSAtOSAzNCAtMjZ0OSAtNDZ2LTU0aC02NXY0NXEwIDMzIC0xMiA0My41dC00NiAxMC41aC02OXYtOTloLTY1djI3MWgxNTRxNDggMCA3NyAtMTV0MjkgLTU4ek0xMjY5IDkzNnEwIC0yNCAtMTIuNSAtNDR0LTMzLjUgLTI5cTI2IC05IDM0LjUgLTI1LjV0OC41IC00Ni41di01M2gtNjVxMCA5IDAuNSAyNi41dDAgMjV0LTMgMTguNXQtOC41IDE2dC0xNy41IDguNQ0KdC0yOS41IDMuNWgtNzB2LTk4aC02NHYyNzFsMTUzIC0xcTQ5IDAgNzggLTE0LjV0MjkgLTU3LjV6TTE3OTggMzI3di01NmgtMjE2djI3MWgyMTZ2LTU2aC0xNTF2LTQ5aDE0OHYtNTVoLTE0OHYtNTR6TTEzNzIgMTAwOXYtMjcxaC02NnYyNzFoNjZ6TTIwNjUgMzU3cTAgLTg2IC0xMDIgLTg2aC0xMjZ2NThoMTI2cTM0IDAgMzQgMjVxMCAxNiAtMTcgMjF0LTQxLjUgNXQtNDkuNSAzLjV0LTQyIDIyLjV0LTE3IDU1cTAgMzkgMjYgNjB0NjYgMjENCmgxMzB2LTU3aC0xMTlxLTM2IDAgLTM2IC0yNXEwIC0xNiAxNy41IC0yMC41dDQyIC00dDQ5IC0yLjV0NDIgLTIxLjV0MTcuNSAtNTQuNXpNMjMwNCA0MDd2LTEwMXEtMjQgLTM1IC04OCAtMzVoLTEyNXY1OGgxMjVxMzMgMCAzMyAyNXEwIDEzIC0xMi41IDE5dC0zMSA1LjV0LTQwIDJ0LTQwIDh0LTMxIDI0dC0xMi41IDQ4LjVxMCAzOSAyNi41IDYwdDY2LjUgMjFoMTI5di01N2gtMTE4cS0zNiAwIC0zNiAtMjVxMCAtMjAgMjkgLTIydDY4LjUgLTUNCnQ1Ni41IC0yNnpNMjEzOSAxMDA4di0yNzBoLTkybC0xMjIgMjAzdi0yMDNoLTEzMmwtMjYgNjBoLTEzNGwtMjUgLTYwaC03NXEtMTI5IDAgLTEyOSAxMzNxMCAxMzggMTMzIDEzOGg2M3YtNTlxLTcgMCAtMjggMXQtMjguNSAwLjV0LTIzIC0ydC0yMS41IC02LjV0LTE0LjUgLTEzLjV0LTExLjUgLTIzdC0zIC0zMy41cTAgLTM4IDEzLjUgLTU4dDQ5LjUgLTIwaDI5bDkyIDIxM2g5N2wxMDkgLTI1NnYyNTZoOTlsMTE0IC0xODh2MTg4aDY2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2OSIgdW5pY29kZT0iJiN4ZjFmNDsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik03NDUgNjMwcTAgLTM3IC0yNS41IC02MS41dC02Mi41IC0yNC41cS0yOSAwIC00Ni41IDE2dC0xNy41IDQ0cTAgMzcgMjUgNjIuNXQ2MiAyNS41cTI4IDAgNDYuNSAtMTYuNXQxOC41IC00NS41ek0xNTMwIDc3OXEwIC00MiAtMjIgLTU3dC02NiAtMTVsLTMyIC0xbDE3IDEwN3EyIDExIDEzIDExaDE4cTIyIDAgMzUgLTJ0MjUgLTEyLjV0MTIgLTMwLjV6TTE4ODEgNjMwcTAgLTM2IC0yNS41IC02MXQtNjEuNSAtMjVxLTI5IDAgLTQ3IDE2DQp0LTE4IDQ0cTAgMzcgMjUgNjIuNXQ2MiAyNS41cTI4IDAgNDYuNSAtMTYuNXQxOC41IC00NS41ek01MTMgODAxcTAgNTkgLTM4LjUgODUuNXQtMTAwLjUgMjYuNWgtMTYwcS0xOSAwIC0yMSAtMTlsLTY1IC00MDhxLTEgLTYgMyAtMTF0MTAgLTVoNzZxMjAgMCAyMiAxOWwxOCAxMTBxMSA4IDcgMTN0MTUgNi41dDE3IDEuNXQxOSAtMXQxNCAtMXE4NiAwIDEzNSA0OC41dDQ5IDEzNC41ek04MjIgNDg5bDQxIDI2MXExIDYgLTMgMTF0LTEwIDVoLTc2DQpxLTE0IDAgLTE3IC0zM3EtMjcgNDAgLTk1IDQwcS03MiAwIC0xMjIuNSAtNTR0LTUwLjUgLTEyN3EwIC01OSAzNC41IC05NHQ5Mi41IC0zNXEyOCAwIDU4IDEydDQ4IDMycS00IC0xMiAtNCAtMjFxMCAtMTYgMTMgLTE2aDY5cTE5IDAgMjIgMTl6TTEyNjkgNzUycTAgNSAtNCA5LjV0LTkgNC41aC03N3EtMTEgMCAtMTggLTEwbC0xMDYgLTE1NmwtNDQgMTUwcS01IDE2IC0yMiAxNmgtNzVxLTUgMCAtOSAtNC41dC00IC05LjVxMCAtMiAxOS41IC01OQ0KdDQyIC0xMjN0MjMuNSAtNzBxLTgyIC0xMTIgLTgyIC0xMjBxMCAtMTMgMTMgLTEzaDc3cTExIDAgMTggMTBsMjU1IDM2OHEyIDIgMiA3ek0xNjQ5IDgwMXEwIDU5IC0zOC41IDg1LjV0LTEwMC41IDI2LjVoLTE1OXEtMjAgMCAtMjIgLTE5bC02NSAtNDA4cS0xIC02IDMgLTExdDEwIC01aDgycTEyIDAgMTYgMTNsMTggMTE2cTEgOCA3IDEzdDE1IDYuNXQxNyAxLjV0MTkgLTF0MTQgLTFxODYgMCAxMzUgNDguNXQ0OSAxMzQuNXpNMTk1OCA0ODkNCmw0MSAyNjFxMSA2IC0zIDExdC0xMCA1aC03NnEtMTQgMCAtMTcgLTMzcS0yNiA0MCAtOTUgNDBxLTcyIDAgLTEyMi41IC01NHQtNTAuNSAtMTI3cTAgLTU5IDM0LjUgLTk0dDkyLjUgLTM1cTI5IDAgNTkgMTJ0NDcgMzJxMCAtMSAtMiAtOXQtMiAtMTJxMCAtMTYgMTMgLTE2aDY5cTE5IDAgMjIgMTl6TTIxNzYgODk4djFxMCAxNCAtMTMgMTRoLTc0cS0xMSAwIC0xMyAtMTFsLTY1IC00MTZsLTEgLTJxMCAtNSA0IC05LjV0MTAgLTQuNWg2Ng0KcTE5IDAgMjEgMTl6TTM5MiA3NjRxLTUgLTM1IC0yNiAtNDZ0LTYwIC0xMWwtMzMgLTFsMTcgMTA3cTIgMTEgMTMgMTFoMTlxNDAgMCA1OCAtMTEuNXQxMiAtNDguNXpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NzAiIHVuaWNvZGU9IiYjeGYxZjU7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTU5NyA2MzNxMCAtNjkgLTIxIC0xMDZxLTE5IC0zNSAtNTIgLTM1cS0yMyAwIC00MSA5djIyNHEyOSAzMCA1NyAzMHE1NyAwIDU3IC0xMjJ6TTIwMzUgNjY5aC0xMTBxNiA5OCA1NiA5OHE1MSAwIDU0IC05OHpNNDc2IDUzNHEwIDU5IC0zMyA5MS41dC0xMDEgNTcuNXEtMzYgMTMgLTUyIDI0dC0xNiAyNXEwIDI2IDM4IDI2cTU4IDAgMTI0IC0zM2wxOCAxMTJxLTY3IDMyIC0xNDkgMzJxLTc3IDAgLTEyMyAtMzhxLTQ4IC0zOSAtNDggLTEwOQ0KcTAgLTU4IDMyLjUgLTkwLjV0OTkuNSAtNTYuNXEzOSAtMTQgNTQuNSAtMjUuNXQxNS41IC0yNy41cTAgLTMxIC00OCAtMzFxLTI5IDAgLTcwIDEyLjV0LTcyIDMwLjVsLTE4IC0xMTNxNzIgLTQxIDE2OCAtNDFxODEgMCAxMjkgMzdxNTEgNDEgNTEgMTE3ek03NzEgNzQ5bDE5IDExMWgtOTZ2MTM1bC0xMjkgLTIxbC0xOCAtMTE0bC00NiAtOGwtMTcgLTEwM2g2MnYtMjE5cTAgLTg0IDQ0IC0xMjBxMzggLTMwIDExMSAtMzBxMzIgMCA3OSAxMXYxMTgNCnEtMzIgLTcgLTQ0IC03cS00MiAwIC00MiA1MHYxOTdoNzd6TTEwODcgNzI0djEzOXEtMTUgMyAtMjggM3EtMzIgMCAtNTUuNSAtMTZ0LTMzLjUgLTQ2bC0xMCA1NmgtMTMxdi00NzFoMTUwdjMwNnEyNiAzMSA4MiAzMXExNiAwIDI2IC0yek0xMTI0IDM4OWgxNTB2NDcxaC0xNTB2LTQ3MXpNMTc0NiA2MzhxMCAxMjIgLTQ1IDE3OXEtNDAgNTIgLTExMSA1MnEtNjQgMCAtMTE3IC01NmwtOCA0N2gtMTMydi02NDVsMTUwIDI1djE1MQ0KcTM2IC0xMSA2OCAtMTFxODMgMCAxMzQgNTZxNjEgNjUgNjEgMjAyek0xMjc4IDk4NnEwIDMzIC0yMyA1NnQtNTYgMjN0LTU2IC0yM3QtMjMgLTU2dDIzIC01Ni41dDU2IC0yMy41dDU2IDIzLjV0MjMgNTYuNXpNMjE3NiA2MjlxMCAxMTMgLTQ4IDE3NnEtNTAgNjQgLTE0NCA2NHEtOTYgMCAtMTUxLjUgLTY2dC01NS41IC0xODBxMCAtMTI4IDYzIC0xODhxNTUgLTU1IDE2MSAtNTVxMTAxIDAgMTYwIDQwbC0xNiAxMDNxLTU3IC0zMSAtMTI4IC0zMQ0KcS00MyAwIC02MyAxOXEtMjMgMTkgLTI4IDY2aDI0OHEyIDE0IDIgNTJ6TTIzMDQgMTI4MHYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTIwNDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMjA0OHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDcxIiB1bmljb2RlPSImI3hmMWY2OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTE1NTggNjg0cTYxIC0zNTYgMjk4IC01NTZxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC00NDhxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODAuNSA3NC41dC03NS41IDE4MC41ek0xMDI0IC0xNzZxMTYgMCAxNiAxNnQtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXpNMjAyNiAxNDI0cTggLTEwIDcuNSAtMjMuNXQtMTAuNSAtMjIuNQ0KbC0xODcyIC0xNjIycS0xMCAtOCAtMjMuNSAtN3QtMjEuNSAxMWwtODQgOTZxLTggMTAgLTcuNSAyMy41dDEwLjUgMjEuNWwxODYgMTYxcS0xOSAzMiAtMTkgNjZxNTAgNDIgOTEgODh0ODUgMTE5LjV0NzQuNSAxNTguNXQ1MCAyMDZ0MTkuNSAyNjBxMCAxNTIgMTE3IDI4Mi41dDMwNyAxNTguNXEtOCAxOSAtOCAzOXEwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMjAgLTggLTM5cTEyNCAtMTggMjE5IC04Mi41dDE0OCAtMTU3LjUNCmw0MTggMzYzcTEwIDggMjMuNSA3dDIxLjUgLTExeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MiIgdW5pY29kZT0iJiN4ZjFmNzsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xMDQwIC0xNjBxMCAxNiAtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXExNiAwIDE2IDE2ek01MDMgMzE1bDg3NyA3NjBxLTQyIDg4IC0xMzIuNSAxNDYuNXQtMjIzLjUgNTguNXEtOTMgMCAtMTY5LjUgLTMxLjV0LTEyMS41IC04MC41dC02OSAtMTAzdC0yNCAtMTA1cTAgLTM4NCAtMTM3IC02NDV6TTE4NTYgMTI4DQpxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC00NDhxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODAuNSA3NC41dC03NS41IDE4MC41bDE0OSAxMjloNzU3cS0xNjYgMTg3IC0yMjcgNDU5bDExMSA5N3E2MSAtMzU2IDI5OCAtNTU2ek0xOTQyIDE1MjBsODQgLTk2cTggLTEwIDcuNSAtMjMuNXQtMTAuNSAtMjIuNWwtMTg3MiAtMTYyMnEtMTAgLTggLTIzLjUgLTd0LTIxLjUgMTFsLTg0IDk2cS04IDEwIC03LjUgMjMuNXQxMC41IDIxLjVsMTg2IDE2MQ0KcS0xOSAzMiAtMTkgNjZxNTAgNDIgOTEgODh0ODUgMTE5LjV0NzQuNSAxNTguNXQ1MCAyMDZ0MTkuNSAyNjBxMCAxNTIgMTE3IDI4Mi41dDMwNyAxNTguNXEtOCAxOSAtOCAzOXEwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMjAgLTggLTM5cTEyNCAtMTggMjE5IC04Mi41dDE0OCAtMTU3LjVsNDE4IDM2M3ExMCA4IDIzLjUgN3QyMS41IC0xMXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NzMiIHVuaWNvZGU9IiYjeGYxZjg7IiBob3Jpei1hZHYteD0iMTQwOCIgDQpkPSJNNTEyIDE2MHY3MDRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNzA0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek03NjggMTYwdjcwNHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi03MDRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTEwMjQgMTYwdjcwNHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi03MDQNCnEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMycS02NiAwIC0xMTMgNTguNXQtNDcgMTQxLjV2OTUyaC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgzMDlsNzAgMTY3DQpxMTUgMzcgNTQgNjN0NzkgMjZoMzIwcTQwIDAgNzkgLTI2dDU0IC02M2w3MCAtMTY3aDMwOXExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3NCIgdW5pY29kZT0iJiN4ZjFmOTsiIA0KZD0iTTExNTAgNDYydi0xMDlxMCAtNTAgLTM2LjUgLTg5dC05NCAtNjAuNXQtMTE4IC0zMi41dC0xMTcuNSAtMTFxLTIwNSAwIC0zNDIuNSAxMzl0LTEzNy41IDM0NnEwIDIwMyAxMzYgMzM5dDMzOSAxMzZxMzQgMCA3NS41IC00LjV0OTMgLTE4dDkyLjUgLTM0dDY5IC01Ni41dDI4IC04MXYtMTA5cTAgLTE2IC0xNiAtMTZoLTExOHEtMTYgMCAtMTYgMTZ2NzBxMCA0MyAtNjUuNSA2Ny41dC0xMzcuNSAyNC41cS0xNDAgMCAtMjI4LjUgLTkxLjUNCnQtODguNSAtMjM3LjVxMCAtMTUxIDkxLjUgLTI0OS41dDIzMy41IC05OC41cTY4IDAgMTM4IDI0dDcwIDY2djcwcTAgNyA0LjUgMTEuNXQxMC41IDQuNWgxMTlxNiAwIDExIC00LjV0NSAtMTEuNXpNNzY4IDEyODBxLTEzMCAwIC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDR0LTUxIC0yNDguNXQ1MSAtMjQ4LjV0MTM2LjUgLTIwNHQyMDQgLTEzNi41dDI0OC41IC01MXQyNDguNSA1MXQyMDQgMTM2LjV0MTM2LjUgMjA0dDUxIDI0OC41DQp0LTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3NSIgdW5pY29kZT0iJiN4ZjFmYTsiIA0KZD0iTTk3MiA3NjFxMCAxMDggLTUzLjUgMTY5dC0xNDcuNSA2MXEtNjMgMCAtMTI0IC0zMC41dC0xMTAgLTg0LjV0LTc5LjUgLTEzN3QtMzAuNSAtMTgwcTAgLTExMiA1My41IC0xNzN0MTUwLjUgLTYxcTk2IDAgMTc2IDY2LjV0MTIyLjUgMTY2dDQyLjUgMjAzLjV6TTE1MzYgNjQwcTAgLTExMSAtMzcgLTE5N3QtOTguNSAtMTM1dC0xMzEuNSAtNzQuNXQtMTQ1IC0yNy41cS02IDAgLTE1LjUgLTAuNXQtMTYuNSAtMC41cS05NSAwIC0xNDIgNTMNCnEtMjggMzMgLTMzIDgzcS01MiAtNjYgLTEzMS41IC0xMTB0LTE3My41IC00NHEtMTYxIDAgLTI0OS41IDk1LjV0LTg4LjUgMjY5LjVxMCAxNTcgNjYgMjkwdDE3OSAyMTAuNXQyNDYgNzcuNXE4NyAwIDE1NSAtMzUuNXQxMDYgLTk5LjVsMiAxOWwxMSA1NnExIDYgNS41IDEydDkuNSA2aDExOHE1IDAgMTMgLTExcTUgLTUgMyAtMTZsLTEyMCAtNjE0cS01IC0yNCAtNSAtNDhxMCAtMzkgMTIuNSAtNTJ0NDQuNSAtMTNxMjggMSA1NyA1LjV0NzMgMjQNCnQ3NyA1MHQ1NyA4OS41dDI0IDEzN3EwIDI5MiAtMTc0IDQ2NnQtNDY2IDE3NHEtMTMwIDAgLTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxcTIyOCAwIDQwNSAxNDRxMTEgOSAyNCA4dDIxIC0xMmw0MSAtNDlxOCAtMTIgNyAtMjRxLTIgLTEzIC0xMiAtMjJxLTEwMiAtODMgLTIyNy41IC0xMjh0LTI1OC41IC00NXEtMTU2IDAgLTI5OCA2MQ0KdC0yNDUgMTY0dC0xNjQgMjQ1dC02MSAyOTh0NjEgMjk4dDE2NCAyNDV0MjQ1IDE2NHQyOTggNjFxMzQ0IDAgNTU2IC0yMTJ0MjEyIC01NTZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDc2IiB1bmljb2RlPSImI3hmMWZiOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE2OTggMTQ0MnE5NCAtOTQgOTQgLTIyNi41dC05NCAtMjI1LjVsLTIyNSAtMjIzbDEwNCAtMTA0cTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMjEwIC0yMTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTA1IDEwNWwtNjAzIC02MDNxLTM3IC0zNyAtOTAgLTM3aC0yMDNsLTI1NiAtMTI4bC02NCA2NGwxMjggMjU2djIwM3EwIDUzIDM3IDkwbDYwMyA2MDNsLTEwNSAxMDVxLTEwIDEwIC0xMCAyM3QxMCAyM2wyMTAgMjEwcTEwIDEwIDIzIDEwDQp0MjMgLTEwbDEwNCAtMTA0bDIyMyAyMjVxOTMgOTQgMjI1LjUgOTR0MjI2LjUgLTk0ek01MTIgNjRsNTc2IDU3NmwtMTkyIDE5MmwtNTc2IC01NzZ2LTE5MmgxOTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMWZjIiB1bmljb2RlPSImI3hmMWZjOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE2MTUgMTUzNnE3MCAwIDEyMi41IC00Ni41dDUyLjUgLTExNi41cTAgLTYzIC00NSAtMTUxcS0zMzIgLTYyOSAtNDY1IC03NTJxLTk3IC05MSAtMjE4IC05MXEtMTI2IDAgLTIxNi41IDkyLjV0LTkwLjUgMjE5LjVxMCAxMjggOTIgMjEybDYzOCA1NzlxNTkgNTQgMTMwIDU0ek03MDYgNTAycTM5IC03NiAxMDYuNSAtMTMwdDE1MC41IC03NmwxIC03MXE0IC0yMTMgLTEyOS41IC0zNDd0LTM0OC41IC0xMzRxLTEyMyAwIC0yMTggNDYuNQ0KdC0xNTIuNSAxMjcuNXQtODYuNSAxODN0LTI5IDIyMHE3IC01IDQxIC0zMHQ2MiAtNDQuNXQ1OSAtMzYuNXQ0NiAtMTdxNDEgMCA1NSAzN3EyNSA2NiA1Ny41IDExMi41dDY5LjUgNzZ0ODggNDcuNXQxMDMgMjUuNXQxMjUgMTAuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NzgiIHVuaWNvZGU9IiYjeGYxZmQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTc5MiAxMjh2LTM4NGgtMTc5MnYzODRxNDUgMCA4NSAxNHQ1OSAyNy41dDQ3IDM3LjVxMzAgMjcgNTEuNSAzOHQ1Ni41IDExcTI0IDAgNDQgLTd0MzEgLTE1dDMzIC0yN3EyOSAtMjUgNDcgLTM4dDU4IC0yN3Q4NiAtMTRxNDUgMCA4NSAxNC41dDU4IDI3dDQ4IDM3LjVxMjEgMTkgMzIuNSAyN3QzMSAxNXQ0My41IDdxMzUgMCA1Ni41IC0xMXQ1MS41IC0zOHEyOCAtMjQgNDcgLTM3LjV0NTkgLTI3LjV0ODUgLTE0dDg1IDE0dDU5IDI3LjUNCnQ0NyAzNy41cTMwIDI3IDUxLjUgMzh0NTYuNSAxMXEzNCAwIDU1LjUgLTExdDUxLjUgLTM4cTI4IC0yNCA0NyAtMzcuNXQ1OSAtMjcuNXQ4NSAtMTR6TTE3OTIgNDQ4di0xOTJxLTI0IDAgLTQ0IDd0LTMxIDE1dC0zMyAyN3EtMjkgMjUgLTQ3IDM4dC01OCAyN3QtODUgMTRxLTQ2IDAgLTg2IC0xNHQtNTggLTI3dC00NyAtMzhxLTIyIC0xOSAtMzMgLTI3dC0zMSAtMTV0LTQ0IC03cS0zNSAwIC01Ni41IDExdC01MS41IDM4cS0yOSAyNSAtNDcgMzgNCnQtNTggMjd0LTg2IDE0cS00NSAwIC04NSAtMTQuNXQtNTggLTI3dC00OCAtMzcuNXEtMjEgLTE5IC0zMi41IC0yN3QtMzEgLTE1dC00My41IC03cS0zNSAwIC01Ni41IDExdC01MS41IDM4cS0yOCAyNCAtNDcgMzcuNXQtNTkgMjcuNXQtODUgMTRxLTQ2IDAgLTg2IC0xNHQtNTggLTI3dC00NyAtMzhxLTMwIC0yNyAtNTEuNSAtMzh0LTU2LjUgLTExdjE5MnEwIDgwIDU2IDEzNnQxMzYgNTZoNjR2NDQ4aDI1NnYtNDQ4aDI1NnY0NDhoMjU2di00NDgNCmgyNTZ2NDQ4aDI1NnYtNDQ4aDY0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek01MTIgMTMxMnEwIC03NyAtMzYgLTExOC41dC05MiAtNDEuNXEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjVxMCAyOSA5LjUgNTF0MjMuNSAzNHQzMSAyOHQzMSAzMS41dDIzLjUgNDQuNXQ5LjUgNjdxMzggMCA4MyAtNzR0NDUgLTE1MHpNMTAyNCAxMzEycTAgLTc3IC0zNiAtMTE4LjV0LTkyIC00MS41cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNQ0KcTAgMjkgOS41IDUxdDIzLjUgMzR0MzEgMjh0MzEgMzEuNXQyMy41IDQ0LjV0OS41IDY3cTM4IDAgODMgLTc0dDQ1IC0xNTB6TTE1MzYgMTMxMnEwIC03NyAtMzYgLTExOC41dC05MiAtNDEuNXEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjVxMCAyOSA5LjUgNTF0MjMuNSAzNHQzMSAyOHQzMSAzMS41dDIzLjUgNDQuNXQ5LjUgNjdxMzggMCA4MyAtNzR0NDUgLTE1MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NzkiIHVuaWNvZGU9IiYjeGYxZmU7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMjA0OCAwdi0xMjhoLTIwNDh2MTUzNmgxMjh2LTE0MDhoMTkyMHpNMTY2NCAxMDI0bDI1NiAtODk2aC0xNjY0djU3Nmw0NDggNTc2bDU3NiAtNTc2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MCIgdW5pY29kZT0iJiN4ZjIwMDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik03NjggNjQ2bDU0NiAtNTQ2cS0xMDYgLTEwOCAtMjQ3LjUgLTE2OHQtMjk4LjUgLTYwcS0yMDkgMCAtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN2LTc2MnpNOTU1IDY0MGg3NzNxMCAtMTU3IC02MCAtMjk4LjV0LTE2OCAtMjQ3LjV6TTE2NjQgNzY4aC03Njh2NzY4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDgxIiB1bmljb2RlPSImI3hmMjAxOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTIwNDggMHYtMTI4aC0yMDQ4djE1MzZoMTI4di0xNDA4aDE5MjB6TTE5MjAgMTI0OHYtNDM1cTAgLTIxIC0xOS41IC0yOS41dC0zNS41IDcuNWwtMTIxIDEyMWwtNjMzIC02MzNxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMjMzIDIzM2wtNDE2IC00MTZsLTE5MiAxOTJsNTg1IDU4NXExMCAxMCAyMyAxMHQyMyAtMTBsMjMzIC0yMzNsNDY0IDQ2NGwtMTIxIDEyMXEtMTYgMTYgLTcuNSAzNS41dDI5LjUgMTkuNWg0MzVxMTQgMCAyMyAtOQ0KdDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MiIgdW5pY29kZT0iJiN4ZjIwMjsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMjkyIDgzMnEwIC02IDEwIC00MXExMCAtMjkgMjUgLTQ5LjV0NDEgLTM0dDQ0IC0yMHQ1NSAtMTYuNXEzMjUgLTkxIDMyNSAtMzMycTAgLTE0NiAtMTA1LjUgLTI0Mi41dC0yNTQuNSAtOTYuNXEtNTkgMCAtMTExLjUgMTguNXQtOTEuNSA0NS41dC03NyA3NC41dC02MyA4Ny41dC01My41IDEwMy41dC00My41IDEwM3QtMzkuNSAxMDYuNXQtMzUuNSA5NXEtMzIgODEgLTYxLjUgMTMzLjV0LTczLjUgOTYuNXQtMTA0IDY0dC0xNDIgMjANCnEtOTYgMCAtMTgzIC01NS41dC0xMzggLTE0NC41dC01MSAtMTg1cTAgLTE2MCAxMDYuNSAtMjc5LjV0MjYzLjUgLTExOS41cTE3NyAwIDI1OCA5NXE1NiA2MyA4MyAxMTZsODQgLTE1MnEtMTUgLTM0IC00NCAtNzBsMSAtMXEtMTMxIC0xNTIgLTM4OCAtMTUycS0xNDcgMCAtMjY5LjUgNzl0LTE5MC41IDIwNy41dC02OCAyNzQuNXEwIDEwNSA0My41IDIwNnQxMTYgMTc2LjV0MTcyIDEyMS41dDIwNC41IDQ2cTg3IDAgMTU5IC0xOXQxMjMuNSAtNTANCnQ5NSAtODB0NzIuNSAtOTl0NTguNSAtMTE3dDUwLjUgLTEyNC41dDUwIC0xMzAuNXQ1NSAtMTI3cTk2IC0yMDAgMjMzIC0yMDBxODEgMCAxMzguNSA0OC41dDU3LjUgMTI4LjVxMCA0MiAtMTkgNzJ0LTUwLjUgNDZ0LTcyLjUgMzEuNXQtODQuNSAyN3QtODcuNSAzNHQtODEgNTJ0LTY1IDgydC0zOSAxMjIuNXEtMyAxNiAtMyAzM3EwIDExMCA4Ny41IDE5MnQxOTguNSA3OHE3OCAtMyAxMjAuNSAtMTQuNXQ5MC41IC01My41aC0xDQpxMTIgLTExIDIzIC0yNC41dDI2IC0zNnQxOSAtMjcuNWwtMTI5IC05OXEtMjYgNDkgLTU0IDcwdjFxLTIzIDIxIC05NyAyMXEtNDkgMCAtODQgLTMzdC0zNSAtODN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDgzIiB1bmljb2RlPSImI3hmMjAzOyIgDQpkPSJNMTQzMiA0ODRxMCAxNzMgLTIzNCAyMzlxLTM1IDEwIC01MyAxNi41dC0zOCAyNXQtMjkgNDYuNXEwIDIgLTIgOC41dC0zIDEydC0xIDcuNXEwIDM2IDI0LjUgNTkuNXQ2MC41IDIzLjVxNTQgMCA3MSAtMTVoLTFxMjAgLTE1IDM5IC01MWw5MyA3MXEtMzkgNTQgLTQ5IDY0cS0zMyAyOSAtNjcuNSAzOXQtODUuNSAxMHEtODAgMCAtMTQyIC01Ny41dC02MiAtMTM3LjVxMCAtNyAyIC0yM3ExNiAtOTYgNjQuNSAtMTQwdDE0OC41IC03Mw0KcTI5IC04IDQ5IC0xNS41dDQ1IC0yMS41dDM4LjUgLTM0LjV0MTMuNSAtNDYuNXYtNXExIC01OCAtNDAuNSAtOTN0LTEwMC41IC0zNXEtOTcgMCAtMTY3IDE0NHEtMjMgNDcgLTUxLjUgMTIxLjV0LTQ4IDEyNS41dC01NCAxMTAuNXQtNzQgOTUuNXQtMTAzLjUgNjAuNXQtMTQ3IDI0LjVxLTEwMSAwIC0xOTIgLTU2dC0xNDQgLTE0OHQtNTAgLTE5MnYtMXE0IC0xMDggNTAuNSAtMTk5dDEzMy41IC0xNDcuNXQxOTYgLTU2LjVxMTg2IDAgMjc5IDExMA0KcTIwIDI3IDMxIDUxbC02MCAxMDlxLTQyIC04MCAtOTkgLTExNnQtMTQ2IC0zNnEtMTE1IDAgLTE5MSA4N3QtNzYgMjA0cTAgMTA1IDgyIDE4OXQxODYgODRxMTEyIDAgMTcwIC01My41dDEwNCAtMTcyLjVxOCAtMjEgMjUuNSAtNjguNXQyOC41IC03Ni41dDMxLjUgLTc0LjV0MzguNSAtNzR0NDUuNSAtNjIuNXQ1NS41IC01My41dDY2IC0zM3Q4MCAtMTMuNXExMDcgMCAxODMgNjkuNXQ3NiAxNzQuNXpNMTUzNiAxMTIwdi05NjANCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80ODQiIHVuaWNvZGU9IiYjeGYyMDQ7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMTE1MiA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTkyMCA2NDBxMCAxMDQgLTQwLjUgMTk4LjUNCnQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41aC0zODZxMTE5IC05MCAxODguNSAtMjI0dDY5LjUgLTI4OHQtNjkuNSAtMjg4dC0xODguNSAtMjI0aDM4NnExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTIwNDggNjQwcTAgLTEzMCAtNTEgLTI0OC41dC0xMzYuNSAtMjA0dC0yMDQgLTEzNi41dC0yNDguNSAtNTFoLTc2OHEtMTMwIDAgLTI0OC41IDUxdC0yMDQgMTM2LjUNCnQtMTM2LjUgMjA0dC01MSAyNDguNXQ1MSAyNDguNXQxMzYuNSAyMDR0MjA0IDEzNi41dDI0OC41IDUxaDc2OHExMzAgMCAyNDguNSAtNTF0MjA0IC0xMzYuNXQxMzYuNSAtMjA0dDUxIC0yNDguNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80ODUiIHVuaWNvZGU9IiYjeGYyMDU7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMCA2NDBxMCAxMzAgNTEgMjQ4LjV0MTM2LjUgMjA0dDIwNCAxMzYuNXQyNDguNSA1MWg3NjhxMTMwIDAgMjQ4LjUgLTUxdDIwNCAtMTM2LjV0MTM2LjUgLTIwNHQ1MSAtMjQ4LjV0LTUxIC0yNDguNXQtMTM2LjUgLTIwNHQtMjA0IC0xMzYuNXQtMjQ4LjUgLTUxaC03NjhxLTEzMCAwIC0yNDguNSA1MXQtMjA0IDEzNi41dC0xMzYuNSAyMDR0LTUxIDI0OC41ek0xNDA4IDEyOHExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41DQp0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDg2IiB1bmljb2RlPSImI3hmMjA2OyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTc2MiAzODRoLTMxNHEtNDAgMCAtNTcuNSAzNXQ2LjUgNjdsMTg4IDI1MXEtNjUgMzEgLTEzNyAzMXEtMTMyIDAgLTIyNiAtOTR0LTk0IC0yMjZ0OTQgLTIyNnQyMjYgLTk0cTExNSAwIDIwMyA3Mi41dDExMSAxODMuNXpNNTc2IDUxMmgxODZxLTE4IDg1IC03NSAxNDh6TTEwNTYgNTEybDI4OCAzODRoLTQ4MGwtOTkgLTEzMnExMDUgLTEwMyAxMjYgLTI1MmgxNjV6TTIxNzYgNDQ4cTAgMTMyIC05NCAyMjZ0LTIyNiA5NA0KcS02MCAwIC0xMjEgLTI0bDE3NCAtMjYwcTE1IC0yMyAxMCAtNDl0LTI3IC00MHEtMTUgLTExIC0zNiAtMTFxLTM1IDAgLTUzIDI5bC0xNzQgMjYwcS05MyAtOTUgLTkzIC0yMjVxMCAtMTMyIDk0IC0yMjZ0MjI2IC05NHQyMjYgOTR0OTQgMjI2ek0yMzA0IDQ0OHEwIC0xODUgLTEzMS41IC0zMTYuNXQtMzE2LjUgLTEzMS41dC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCA5NyAzOS41IDE4My41dDEwOS41IDE0OS41bC02NSA5OGwtMzUzIC00NjkNCnEtMTggLTI2IC01MSAtMjZoLTE5N3EtMjMgLTE2NCAtMTQ5IC0yNzR0LTI5NCAtMTEwcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41dDEzMS41IDMxNi41dDMxNi41IDEzMS41cTExNCAwIDIxNSAtNTVsMTM3IDE4M2gtMjI0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMzg0di0xMjhoNDM1bC04NSAxMjhoLTIyMnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnEzMyAwIDUzIC0yOGwyNjcgLTQwMA0KcTkxIDQ0IDE5MiA0NHExODUgMCAzMTYuNSAtMTMxLjV0MTMxLjUgLTMxNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4NyIgdW5pY29kZT0iJiN4ZjIwNzsiIA0KZD0iTTM4NCAzMjBxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE0MDggMzIwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMzYyIDcxNmwtNzIgMzg0cS01IDIzIC0yMi41IDM3LjV0LTQwLjUgMTQuNQ0KaC05MThxLTIzIDAgLTQwLjUgLTE0LjV0LTIyLjUgLTM3LjVsLTcyIC0zODRxLTUgLTMwIDE0IC01M3Q0OSAtMjNoMTA2MnEzMCAwIDQ5IDIzdDE0IDUzek0xMTM2IDEzMjhxMCAyMCAtMTQgMzR0LTM0IDE0aC02NDBxLTIwIDAgLTM0IC0xNHQtMTQgLTM0dDE0IC0zNHQzNCAtMTRoNjQwcTIwIDAgMzQgMTR0MTQgMzR6TTE1MzYgNjAzdi02MDNoLTEyOHYtMTI4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjUNCnQtMzcuNSA5MC41djEyOGgtNzY4di0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41djEyOGgtMTI4djYwM3EwIDExMiAyNSAyMjNsMTAzIDQ1NHE5IDc4IDk3LjUgMTM3dDIzMCA4OXQzMTIuNSAzMHQzMTIuNSAtMzB0MjMwIC04OXQ5Ny41IC0xMzdsMTA1IC00NTRxMjMgLTEwMiAyMyAtMjIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4OCIgdW5pY29kZT0iJiN4ZjIwODsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xNDYzIDcwNHEwIC0zNSAtMjUgLTYwLjV0LTYxIC0yNS41aC03MDJxLTM2IDAgLTYxIDI1LjV0LTI1IDYwLjV0MjUgNjAuNXQ2MSAyNS41aDcwMnEzNiAwIDYxIC0yNS41dDI1IC02MC41ek0xNjc3IDcwNHEwIDg2IC0yMyAxNzBoLTk4MnEtMzYgMCAtNjEgMjV0LTI1IDYwcTAgMzYgMjUgNjF0NjEgMjVoOTA4cS04OCAxNDMgLTIzNSAyMjd0LTMyMCA4NHEtMTc3IDAgLTMyNy41IC04Ny41dC0yMzggLTIzNy41dC04Ny41IC0zMjcNCnEwIC04NiAyMyAtMTcwaDk4MnEzNiAwIDYxIC0yNXQyNSAtNjBxMCAtMzYgLTI1IC02MXQtNjEgLTI1aC05MDhxODggLTE0MyAyMzUuNSAtMjI3dDMyMC41IC04NHExMzIgMCAyNTMgNTEuNXQyMDggMTM5dDEzOSAyMDh0NTIgMjUzLjV6TTIwNDggOTU5cTAgLTM1IC0yNSAtNjB0LTYxIC0yNWgtMTMxcTE3IC04NSAxNyAtMTcwcTAgLTE2NyAtNjUuNSAtMzE5LjV0LTE3NS41IC0yNjN0LTI2Mi41IC0xNzZ0LTMxOS41IC02NS41DQpxLTI0NiAwIC00NDguNSAxMzN0LTMwMS41IDM1MGgtMTg5cS0zNiAwIC02MSAyNXQtMjUgNjFxMCAzNSAyNSA2MHQ2MSAyNWgxMzJxLTE3IDg1IC0xNyAxNzBxMCAxNjcgNjUuNSAzMTkuNXQxNzUuNSAyNjN0MjYyLjUgMTc2dDMyMC41IDY1LjVxMjQ1IDAgNDQ3LjUgLTEzM3QzMDEuNSAtMzUwaDE4OHEzNiAwIDYxIC0yNXQyNSAtNjF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDg5IiB1bmljb2RlPSImI3hmMjA5OyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTk1MyAxMTU4bC0xMTQgLTMyOGwxMTcgLTIxcTE2NSA0NTEgMTY1IDUxOHEwIDU2IC0zOCA1NnEtNTcgMCAtMTMwIC0yMjV6TTY1NCA0NzFsMzMgLTg4cTM3IDQyIDcxIDY3bC0zMyA1LjV0LTM4LjUgN3QtMzIuNSA4LjV6TTM2MiAxMzY3cTAgLTk4IDE1OSAtNTIxcTE3IDEwIDQ5IDEwcTE1IDAgNzUgLTVsLTEyMSAzNTFxLTc1IDIyMCAtMTIzIDIyMHEtMTkgMCAtMjkgLTE3LjV0LTEwIC0zNy41ek0yODMgNjA4cTAgLTM2IDUxLjUgLTExOQ0KdDExNy41IC0xNTN0MTAwIC03MHExNCAwIDI1LjUgMTN0MTEuNSAyN3EwIDI0IC0zMiAxMDJxLTEzIDMyIC0zMiA3MnQtNDcuNSA4OXQtNjEuNSA4MXQtNjIgMzJxLTIwIDAgLTQ1LjUgLTI3dC0yNS41IC00N3pNMTI1IDI3M3EwIC00MSAyNSAtMTA0cTU5IC0xNDUgMTgzLjUgLTIyN3QyODEuNSAtODJxMjI3IDAgMzgyIDE3MHExNTIgMTY5IDE1MiA0MjdxMCA0MyAtMSA2N3QtMTEuNSA2MnQtMzAuNSA1NnEtNTYgNDkgLTIxMS41IDc1LjUNCnQtMjcwLjUgMjYuNXEtMzcgMCAtNDkgLTExcS0xMiAtNSAtMTIgLTM1cTAgLTM0IDIxLjUgLTYwdDU1LjUgLTQwdDc3LjUgLTIzLjV0ODcuNSAtMTEuNXQ4NSAtNHQ3MCAwaDIzcTI0IDAgNDAgLTE5cTE1IC0xOSAxOSAtNTVxLTI4IC0yOCAtOTYgLTU0cS02MSAtMjIgLTkzIC00NnEtNjQgLTQ2IC0xMDguNSAtMTE0dC00NC41IC0xMzdxMCAtMzEgMTguNSAtODguNXQxOC41IC04Ny41bC0zIC0xMnEtNCAtMTIgLTQgLTE0DQpxLTEzNyAxMCAtMTQ2IDIxNnEtOCAtMiAtNDEgLTJxMiAtNyAyIC0yMXEwIC01MyAtNDAuNSAtODkuNXQtOTQuNSAtMzYuNXEtODIgMCAtMTY2LjUgNzh0LTg0LjUgMTU5cTAgMzQgMzMgNjdxNTIgLTY0IDYwIC03NnE3NyAtMTA0IDEzMyAtMTA0cTEyIDAgMjYuNSA4LjV0MTQuNSAyMC41cTAgMzQgLTg3LjUgMTQ1dC0xMTYuNSAxMTFxLTQzIDAgLTcwIC00NC41dC0yNyAtOTAuNXpNMTEgMjY0cTAgMTAxIDQyLjUgMTYzdDEzNi41IDg4DQpxLTI4IDc0IC0yOCAxMDRxMCA2MiA2MSAxMjN0MTIyIDYxcTI5IDAgNzAgLTE1cS0xNjMgNDYyIC0xNjMgNTY3cTAgODAgNDEgMTMwLjV0MTE5IDUwLjVxMTMxIDAgMzI1IC01ODFxNiAtMTcgOCAtMjNxNiAxNiAyOSA3OS41dDQzLjUgMTE4LjV0NTQgMTI3LjV0NjQuNSAxMjN0NzAuNSA4Ni41dDc2LjUgMzZxNzEgMCAxMTIgLTQ5dDQxIC0xMjJxMCAtMTA4IC0xNTkgLTU1MHE2MSAtMTUgMTAwLjUgLTQ2dDU4LjUgLTc4dDI2IC05My41DQp0NyAtMTEwLjVxMCAtMTUwIC00NyAtMjgwdC0xMzIgLTIyNXQtMjExIC0xNTB0LTI3OCAtNTVxLTExMSAwIC0yMjMgNDJxLTE0OSA1NyAtMjU4IDE5MS41dC0xMDkgMjg2LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDkwIiB1bmljb2RlPSImI3hmMjBhOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTc4NSA1MjhoMjA3cS0xNCAtMTU4IC05OC41IC0yNDguNXQtMjE0LjUgLTkwLjVxLTE2MiAwIC0yNTQuNSAxMTZ0LTkyLjUgMzE2cTAgMTk0IDkzIDMxMS41dDIzMyAxMTcuNXExNDggMCAyMzIgLTg3dDk3IC0yNDdoLTIwM3EtNSA2NCAtMzUuNSA5OXQtODEuNSAzNXEtNTcgMCAtODguNSAtNjAuNXQtMzEuNSAtMTc3LjVxMCAtNDggNSAtODR0MTggLTY5LjV0NDAgLTUxLjV0NjYgLTE4cTk1IDAgMTA5IDEzOXpNMTQ5NyA1MjhoMjA2DQpxLTE0IC0xNTggLTk4IC0yNDguNXQtMjE0IC05MC41cS0xNjIgMCAtMjU0LjUgMTE2dC05Mi41IDMxNnEwIDE5NCA5MyAzMTEuNXQyMzMgMTE3LjVxMTQ4IDAgMjMyIC04N3Q5NyAtMjQ3aC0yMDRxLTQgNjQgLTM1IDk5dC04MSAzNXEtNTcgMCAtODguNSAtNjAuNXQtMzEuNSAtMTc3LjVxMCAtNDggNSAtODR0MTggLTY5LjV0MzkuNSAtNTEuNXQ2NS41IC0xOHE0OSAwIDc2LjUgMzh0MzMuNSAxMDF6TTE4NTYgNjQ3cTAgMjA3IC0xNS41IDMwNw0KdC02MC41IDE2MXEtNiA4IC0xMy41IDE0dC0yMS41IDE1dC0xNiAxMXEtODYgNjMgLTY5NyA2M3EtNjI1IDAgLTcxMCAtNjNxLTUgLTQgLTE3LjUgLTExLjV0LTIxIC0xNHQtMTQuNSAtMTQuNXEtNDUgLTYwIC02MCAtMTU5LjV0LTE1IC0zMDguNXEwIC0yMDggMTUgLTMwNy41dDYwIC0xNjAuNXE2IC04IDE1IC0xNXQyMC41IC0xNHQxNy41IC0xMnE0NCAtMzMgMjM5LjUgLTQ5dDQ3MC41IC0xNnE2MTAgMCA2OTcgNjVxNSA0IDE3IDExdDIwLjUgMTQNCnQxMy41IDE2cTQ2IDYwIDYxIDE1OXQxNSAzMDl6TTIwNDggMTQwOHYtMTUzNmgtMjA0OHYxNTM2aDIwNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDkxIiB1bmljb2RlPSImI3hmMjBiOyIgDQpkPSJNOTkyIDkxMnYtNDk2cTAgLTE0IC05IC0yM3QtMjMgLTloLTE2MHEtMTQgMCAtMjMgOXQtOSAyM3Y0OTZxMCAxMTIgLTgwIDE5MnQtMTkyIDgwaC0yNzJ2LTExNTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwcS0xNCAwIC0yMyA5dC05IDIzdjEzNDRxMCAxNCA5IDIzdDIzIDloNDY0cTEzNSAwIDI0OSAtNjYuNXQxODAuNSAtMTgwLjV0NjYuNSAtMjQ5ek0xMzc2IDEzNzZ2LTg4MHEwIC0xMzUgLTY2LjUgLTI0OXQtMTgwLjUgLTE4MC41DQp0LTI0OSAtNjYuNWgtNDY0cS0xNCAwIC0yMyA5dC05IDIzdjk2MHEwIDE0IDkgMjN0MjMgOWgxNjBxMTQgMCAyMyAtOXQ5IC0yM3YtNzY4aDI3MnExMTIgMCAxOTIgODB0ODAgMTkydjg4MHEwIDE0IDkgMjN0MjMgOWgxNjBxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTIiIHVuaWNvZGU9IiYjeGYyMGM7IiANCmQ9Ik0xMzExIDY5NHYtMTE0cTAgLTI0IC0xMy41IC0zOHQtMzcuNSAtMTRoLTIwMnEtMjQgMCAtMzggMTR0LTE0IDM4djExNHEwIDI0IDE0IDM4dDM4IDE0aDIwMnEyNCAwIDM3LjUgLTE0dDEzLjUgLTM4ek04MjEgNDY0djI1MHEwIDUzIC0zMi41IDg1LjV0LTg1LjUgMzIuNWgtMTMzcS02OCAwIC05NiAtNTJxLTI4IDUyIC05NiA1MmgtMTMwcS01MyAwIC04NS41IC0zMi41dC0zMi41IC04NS41di0yNTBxMCAtMjIgMjEgLTIyaDU1DQpxMjIgMCAyMiAyMnYyMzBxMCAyNCAxMy41IDM4dDM4LjUgMTRoOTRxMjQgMCAzOCAtMTR0MTQgLTM4di0yMzBxMCAtMjIgMjEgLTIyaDU0cTIyIDAgMjIgMjJ2MjMwcTAgMjQgMTQgMzh0MzggMTRoOTdxMjQgMCAzNy41IC0xNHQxMy41IC0zOHYtMjMwcTAgLTIyIDIyIC0yMmg1NXEyMSAwIDIxIDIyek0xNDEwIDU2MHYxNTRxMCA1MyAtMzMgODUuNXQtODYgMzIuNWgtMjY0cS01MyAwIC04NiAtMzIuNXQtMzMgLTg1LjV2LTQxMA0KcTAgLTIxIDIyIC0yMWg1NXEyMSAwIDIxIDIxdjE4MHEzMSAtNDIgOTQgLTQyaDE5MXE1MyAwIDg2IDMyLjV0MzMgODUuNXpNMTUzNiAxMTc2di0xMDcycTAgLTk2IC02OCAtMTY0dC0xNjQgLTY4aC0xMDcycS05NiAwIC0xNjQgNjh0LTY4IDE2NHYxMDcycTAgOTYgNjggMTY0dDE2NCA2OGgxMDcycTk2IDAgMTY0IC02OHQ2OCAtMTY0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5MyIgdW5pY29kZT0iJiN4ZjIwZDsiIA0KZD0iTTkxNSA0NTBoLTI5NGwxNDcgNTUxek0xMDAxIDEyOGgzMTFsLTMyNCAxMDI0aC00NDBsLTMyNCAtMTAyNGgzMTFsMzgzIDMxNHpNMTUzNiAxMTIwdi05NjBxMCAtMTE4IC04NSAtMjAzdC0yMDMgLTg1aC05NjBxLTExOCAwIC0yMDMgODV0LTg1IDIwM3Y5NjBxMCAxMTggODUgMjAzdDIwMyA4NWg5NjBxMTE4IDAgMjAzIC04NXQ4NSAtMjAzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5NCIgdW5pY29kZT0iJiN4ZjIwZTsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0yMDQ4IDY0MXEwIC0yMSAtMTMgLTM2LjV0LTMzIC0xOS41bC0yMDUgLTM1NnEzIC05IDMgLTE4cTAgLTIwIC0xMi41IC0zNS41dC0zMi41IC0xOS41bC0xOTMgLTMzN3EzIC04IDMgLTE2cTAgLTIzIC0xNi41IC00MHQtNDAuNSAtMTdxLTI1IDAgLTQxIDE4aC00MDBxLTE3IC0yMCAtNDMgLTIwdC00MyAyMGgtMzk5cS0xNyAtMjAgLTQzIC0yMHEtMjMgMCAtNDAgMTYuNXQtMTcgNDAuNXEwIDggNCAyMGwtMTkzIDMzNQ0KcS0yMCA0IC0zMi41IDE5LjV0LTEyLjUgMzUuNXEwIDkgMyAxOGwtMjA2IDM1NnEtMjAgNSAtMzIuNSAyMC41dC0xMi41IDM1LjVxMCAyMSAxMy41IDM2LjV0MzMuNSAxOS41bDE5OSAzNDRxMCAxIC0wLjUgM3QtMC41IDNxMCAzNiAzNCA1MWwyMDkgMzYzcS00IDEwIC00IDE4cTAgMjQgMTcgNDAuNXQ0MCAxNi41cTI2IDAgNDQgLTIxaDM5NnExNiAyMSA0MyAyMXQ0MyAtMjFoMzk4cTE4IDIxIDQ0IDIxcTIzIDAgNDAgLTE2LjV0MTcgLTQwLjUNCnEwIC02IC00IC0xOGwyMDcgLTM1OHEyMyAtMSAzOSAtMTcuNXQxNiAtMzguNXEwIC0xMyAtNyAtMjdsMTg3IC0zMjRxMTkgLTQgMzEuNSAtMTkuNXQxMi41IC0zNS41ek0xMDYzIC0xNThoMzg5bC0zNDIgMzU0aC0xNDNsLTM0MiAtMzU0aDM2MHExOCAxNiAzOSAxNnQzOSAtMTZ6TTExMiA2NTRxMSAtNCAxIC0xM3EwIC0xMCAtMiAtMTVsMjA4IC0zNjBsMTUgLTZsMTg4IDE5OXYzNDdsLTE4NyAxOTRxLTEzIC04IC0yOSAtMTB6TTk4NiAxNDM4DQpoLTM4OGwxOTAgLTIwMGw1NTQgMjAwaC0yODBxLTE2IC0xNiAtMzggLTE2dC0zOCAxNnpNMTY4OSAyMjZxMSA2IDUgMTFsLTY0IDY4bC0xNyAtNzloNzZ6TTE1ODMgMjI2bDIyIDEwNWwtMjUyIDI2NmwtMjk2IC0zMDdsNjMgLTY0aDQ2M3pNMTQ5NSAtMTQybDE2IDI4bDY1IDMxMGgtNDI3bDMzMyAtMzQzcTggNCAxMyA1ek01NzggLTE1OGg1bDM0MiAzNTRoLTM3M3YtMzM1bDQgLTZxMTQgLTUgMjIgLTEzek01NTIgMjI2aDQwMmw2NCA2Ng0KbC0zMDkgMzIxbC0xNTcgLTE2NnYtMjIxek0zNTkgMjI2aDE2M3YxODlsLTE2OCAtMTc3cTQgLTggNSAtMTJ6TTM1OCAxMDUxcTAgLTEgMC41IC0ydDAuNSAtMnEwIC0xNiAtOCAtMjlsMTcxIC0xNzd2MjY5ek01NTIgMTEyMXYtMzExbDE1MyAtMTU3bDI5NyAzMTRsLTIyMyAyMzZ6TTU1NiAxNDI1bC00IC04di0yNjRsMjA1IDc0bC0xOTEgMjAxcS02IC0yIC0xMCAtM3pNMTQ0NyAxNDM4aC0xNmwtNjIxIC0yMjRsMjEzIC0yMjV6TTEwMjMgOTQ2DQpsLTI5NyAtMzE1bDMxMSAtMzE5bDI5NiAzMDd6TTY4OCA2MzRsLTEzNiAxNDF2LTI4NHpNMTAzOCAyNzBsLTQyIC00NGg4NXpNMTM3NCA2MThsMjM4IC0yNTFsMTMyIDYyNGwtMyA1bC0xIDF6TTE3MTggMTAxOHEtOCAxMyAtOCAyOXYybC0yMTYgMzc2cS01IDEgLTEzIDVsLTQzNyAtNDYzbDMxMCAtMzI3ek01MjIgMTE0MnYyMjNsLTE2MyAtMjgyek01MjIgMTk2aC0xNjNsMTYzIC0yODN2Mjgzek0xNjA3IDE5NmwtNDggLTIyN2wxMzAgMjI3aC04Mg0Kek0xNzI5IDI2NmwyMDcgMzYxcS0yIDEwIC0yIDE0cTAgMSAzIDE2bC0xNzEgMjk2bC0xMjkgLTYxMmw3NyAtODJxNSAzIDE1IDd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMjEwIiB1bmljb2RlPSImI3hmMjEwOyIgDQpkPSJNMCA4NTZxMCAxMzEgOTEuNSAyMjYuNXQyMjIuNSA5NS41aDc0MmwzNTIgMzU4di0xNDcwcTAgLTEzMiAtOTEuNSAtMjI3dC0yMjIuNSAtOTVoLTc4MHEtMTMxIDAgLTIyMi41IDk1dC05MS41IDIyN3Y3OTB6TTEyMzIgMTAybC0xNzYgMTgwdjQyNXEwIDQ2IC0zMiA3OXQtNzggMzNoLTQ4NHEtNDYgMCAtNzggLTMzdC0zMiAtNzl2LTQ5MnEwIC00NiAzMi41IC03OS41dDc3LjUgLTMzLjVoNzcweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5NiIgdW5pY29kZT0iJiN4ZjIxMTsiIA0KZD0iTTkzNCAxMzg2cS0zMTcgLTEyMSAtNTU2IC0zNjIuNXQtMzU4IC01NjAuNXEtMjAgODkgLTIwIDE3NnEwIDIwOCAxMDIuNSAzODQuNXQyNzguNSAyNzl0Mzg0IDEwMi41cTgyIDAgMTY5IC0xOXpNMTIwMyAxMjY3cTkzIC02NSAxNjQgLTE1NXEtMzg5IC0xMTMgLTY3NC41IC00MDAuNXQtMzk2LjUgLTY3Ni41cS05MyA3MiAtMTU1IDE2MnExMTIgMzg2IDM5NSA2NzF0NjY3IDM5OXpNNDcwIC02N3ExMTUgMzU2IDM3OS41IDYyMnQ2MTkuNSAzODQNCnE0MCAtOTIgNTQgLTE5NXEtMjkyIC0xMjAgLTUxNiAtMzQ1dC0zNDMgLTUxOHEtMTAzIDE0IC0xOTQgNTJ6TTE1MzYgLTEyNXEtMTkzIDUwIC0zNjcgMTE1cS0xMzUgLTg0IC0yOTAgLTEwN3ExMDkgMjA1IDI3NCAzNzAuNXQzNjkgMjc1LjVxLTIxIC0xNTIgLTEwMSAtMjg0cTY1IC0xNzUgMTE1IC0zNzB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMjEyIiB1bmljb2RlPSImI3hmMjEyOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTE4OTMgMTE0NGwxNTUgLTEyNzJxLTEzMSAwIC0yNTcgNTdxLTIwMCA5MSAtMzkzIDkxcS0yMjYgMCAtMzc0IC0xNDhxLTE0OCAxNDggLTM3NCAxNDhxLTE5MyAwIC0zOTMgLTkxcS0xMjggLTU3IC0yNTIgLTU3aC01bDE1NSAxMjcycTIyNCAxMjcgNDgyIDEyN3EyMzMgMCAzODcgLTEwNnExNTQgMTA2IDM4NyAxMDZxMjU4IDAgNDgyIC0xMjd6TTEzOTggMTU3cTEyOSAwIDIzMiAtMjguNXQyNjAgLTkzLjVsLTEyNCAxMDIxDQpxLTE3MSA3OCAtMzY4IDc4cS0yMjQgMCAtMzc0IC0xNDFxLTE1MCAxNDEgLTM3NCAxNDFxLTE5NyAwIC0zNjggLTc4bC0xMjQgLTEwMjFxMTA1IDQzIDE2NS41IDY1dDE0OC41IDM5LjV0MTc4IDE3LjVxMjAyIDAgMzc0IC0xMDhxMTcyIDEwOCAzNzQgMTA4ek0xNDM4IDE5MWwtNTUgOTA3cS0yMTEgLTQgLTM1OSAtMTU1cS0xNTIgMTU1IC0zNzQgMTU1cS0xNzYgMCAtMzM2IC02NmwtMTE0IC05NDFxMTI0IDUxIDIyOC41IDc2dDIyMS41IDI1DQpxMjA5IDAgMzc0IC0xMDJxMTcyIDEwNyAzNzQgMTAyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5OCIgdW5pY29kZT0iJiN4ZjIxMzsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xNTAwIDE2NXY3MzNxMCAyMSAtMTUgMzZ0LTM1IDE1aC05M3EtMjAgMCAtMzUgLTE1dC0xNSAtMzZ2LTczM3EwIC0yMCAxNSAtMzV0MzUgLTE1aDkzcTIwIDAgMzUgMTV0MTUgMzV6TTEyMTYgMTY1djUzMXEwIDIwIC0xNSAzNXQtMzUgMTVoLTEwMXEtMjAgMCAtMzUgLTE1dC0xNSAtMzV2LTUzMXEwIC0yMCAxNSAtMzV0MzUgLTE1aDEwMXEyMCAwIDM1IDE1dDE1IDM1ek05MjQgMTY1djQyOXEwIDIwIC0xNSAzNXQtMzUgMTVoLTEwMQ0KcS0yMCAwIC0zNSAtMTV0LTE1IC0zNXYtNDI5cTAgLTIwIDE1IC0zNXQzNSAtMTVoMTAxcTIwIDAgMzUgMTV0MTUgMzV6TTYzMiAxNjV2MzYycTAgMjAgLTE1IDM1dC0zNSAxNWgtMTAxcS0yMCAwIC0zNSAtMTV0LTE1IC0zNXYtMzYycTAgLTIwIDE1IC0zNXQzNSAtMTVoMTAxcTIwIDAgMzUgMTV0MTUgMzV6TTIwNDggMzExcTAgLTE2NiAtMTE4IC0yODR0LTI4NCAtMTE4aC0xMjQ0cS0xNjYgMCAtMjg0IDExOHQtMTE4IDI4NA0KcTAgMTE2IDYzIDIxNC41dDE2OCAxNDguNXEtMTAgMzQgLTEwIDczcTAgMTEzIDgwLjUgMTkzLjV0MTkzLjUgODAuNXExMDIgMCAxODAgLTY3cTQ1IDE4MyAxOTQgMzAwdDMzOCAxMTdxMTQ5IDAgMjc1IC03My41dDE5OS41IC0xOTkuNXQ3My41IC0yNzVxMCAtNjYgLTE0IC0xMjJxMTM1IC0zMyAyMjEgLTE0Mi41dDg2IC0yNDcuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTkiIHVuaWNvZGU9IiYjeGYyMTQ7IiANCmQ9Ik0wIDE1MzZoMTUzNnYtMTM5MmwtNzc2IC0zMzhsLTc2MCAzMzh2MTM5MnpNMTQzNiAyMDl2OTI2aC0xMzM2di05MjZsNjYxIC0yOTR6TTE0MzYgMTIzNXYyMDFoLTEzMzZ2LTIwMWgxMzM2ek0xODEgOTM3di0xMTVoLTM3djExNWgzN3pNMTgxIDc4OXYtMTE1aC0zN3YxMTVoMzd6TTE4MSA2NDF2LTExNWgtMzd2MTE1aDM3ek0xODEgNDkzdi0xMTVoLTM3djExNWgzN3pNMTgxIDM0NXYtMTE1aC0zN3YxMTVoMzd6TTIwNyAyMDJsMTUgMzQNCmwxMDUgLTQ3bC0xNSAtMzN6TTM0MyAxNDJsMTUgMzRsMTA1IC00NmwtMTUgLTM0ek00NzggODJsMTUgMzRsMTA1IC00NmwtMTUgLTM0ek02MTQgMjNsMTUgMzNsMTA0IC00NmwtMTUgLTM0ek03OTcgMTBsMTA1IDQ2bDE1IC0zM2wtMTA1IC00N3pNOTMyIDcwbDEwNSA0NmwxNSAtMzRsLTEwNSAtNDZ6TTEwNjggMTMwbDEwNSA0NmwxNSAtMzRsLTEwNSAtNDZ6TTEyMDMgMTg5bDEwNSA0N2wxNSAtMzRsLTEwNSAtNDZ6TTI1OSAxMzg5di0zNmgtMTE0DQp2MzZoMTE0ek00MjEgMTM4OXYtMzZoLTExNXYzNmgxMTV6TTU4MyAxMzg5di0zNmgtMTE1djM2aDExNXpNNzQ0IDEzODl2LTM2aC0xMTR2MzZoMTE0ek05MDYgMTM4OXYtMzZoLTExNHYzNmgxMTR6TTEwNjggMTM4OXYtMzZoLTExNXYzNmgxMTV6TTEyMzAgMTM4OXYtMzZoLTExNXYzNmgxMTV6TTEzOTEgMTM4OXYtMzZoLTExNHYzNmgxMTR6TTE4MSAxMDQ5di03OWgtMzd2MTE1aDExNXYtMzZoLTc4ek00MjEgMTA4NXYtMzZoLTExNXYzNmgxMTV6DQpNNTgzIDEwODV2LTM2aC0xMTV2MzZoMTE1ek03NDQgMTA4NXYtMzZoLTExNHYzNmgxMTR6TTkwNiAxMDg1di0zNmgtMTE0djM2aDExNHpNMTA2OCAxMDg1di0zNmgtMTE1djM2aDExNXpNMTIzMCAxMDg1di0zNmgtMTE1djM2aDExNXpNMTM1NSA5NzB2NzloLTc4djM2aDExNXYtMTE1aC0zN3pNMTM1NSA4MjJ2MTE1aDM3di0xMTVoLTM3ek0xMzU1IDY3NHYxMTVoMzd2LTExNWgtMzd6TTEzNTUgNTI2djExNWgzN3YtMTE1aC0zN3pNMTM1NSAzNzgNCnYxMTVoMzd2LTExNWgtMzd6TTEzNTUgMjMwdjExNWgzN3YtMTE1aC0zN3pNNzYwIDI2NXEtMTI5IDAgLTIyMSA5MS41dC05MiAyMjEuNXEwIDEyOSA5MiAyMjF0MjIxIDkycTEzMCAwIDIyMS41IC05MnQ5MS41IC0yMjFxMCAtMTMwIC05MS41IC0yMjEuNXQtMjIxLjUgLTkxLjV6TTU5NSA2NDZxMCAtMzYgMTkuNSAtNTYuNXQ0OS41IC0yNXQ2NCAtN3Q2NCAtMnQ0OS41IC05dDE5LjUgLTMwLjVxMCAtNDkgLTExMiAtNDlxLTk3IDAgLTEyMyA1MQ0KaC0zbC0zMSAtNjNxNjcgLTQyIDE2MiAtNDJxMjkgMCA1Ni41IDV0NTUuNSAxNnQ0NS41IDMzdDE3LjUgNTNxMCA0NiAtMjcuNSA2OS41dC02Ny41IDI3dC03OS41IDN0LTY3IDV0LTI3LjUgMjUuNXEwIDIxIDIwLjUgMzN0NDAuNSAxNXQ0MSAzcTM0IDAgNzAuNSAtMTF0NTEuNSAtMzRoM2wzMCA1OHEtMyAxIC0yMSA4LjV0LTIyLjUgOXQtMTkuNSA3dC0yMiA3dC0yMCA0LjV0LTI0IDR0LTIzIDFxLTI5IDAgLTU2LjUgLTV0LTU0IC0xNi41DQp0LTQzIC0zNHQtMTYuNSAtNTMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDAiIHVuaWNvZGU9IiYjeGYyMTU7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNODYzIDUwNHEwIDExMiAtNzkuNSAxOTEuNXQtMTkxLjUgNzkuNXQtMTkxIC03OS41dC03OSAtMTkxLjV0NzkgLTE5MXQxOTEgLTc5dDE5MS41IDc5dDc5LjUgMTkxek0xNzI2IDUwNXEwIDExMiAtNzkgMTkxdC0xOTEgNzl0LTE5MS41IC03OXQtNzkuNSAtMTkxcTAgLTExMyA3OS41IC0xOTJ0MTkxLjUgLTc5dDE5MSA3OS41dDc5IDE5MS41ek0yMDQ4IDEzMTR2LTEzNDhxMCAtNDQgLTMxLjUgLTc1LjV0LTc2LjUgLTMxLjVoLTE4MzINCnEtNDUgMCAtNzYuNSAzMS41dC0zMS41IDc1LjV2MTM0OHEwIDQ0IDMxLjUgNzUuNXQ3Ni41IDMxLjVoNDMxcTQ0IDAgNzYgLTMxLjV0MzIgLTc1LjV2LTE2MWg3NTR2MTYxcTAgNDQgMzIgNzUuNXQ3NiAzMS41aDQzMXE0NSAwIDc2LjUgLTMxLjV0MzEuNSAtNzUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDEiIHVuaWNvZGU9IiYjeGYyMTY7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMTQzMCA5NTN6TTE2OTAgNzQ5cTE0OCAwIDI1MyAtOTguNXQxMDUgLTI0NC41cTAgLTE1NyAtMTA5IC0yNjEuNXQtMjY3IC0xMDQuNXEtODUgMCAtMTYyIDI3LjV0LTEzOCA3My41dC0xMTggMTA2dC0xMDkgMTI2dC0xMDMuNSAxMzIuNXQtMTA4LjUgMTI2LjV0LTExNyAxMDZ0LTEzNiA3My41dC0xNTkgMjcuNXEtMTU0IDAgLTI1MS41IC05MS41dC05Ny41IC0yNDQuNXEwIC0xNTcgMTA0IC0yNTB0MjYzIC05M3ExMDAgMCAyMDggMzcuNQ0KdDE5MyA5OC41cTUgNCAyMSAxOC41dDMwIDI0dDIyIDkuNXExNCAwIDI0LjUgLTEwLjV0MTAuNSAtMjQuNXEwIC0yNCAtNjAgLTc3cS0xMDEgLTg4IC0yMzQuNSAtMTQydC0yNjAuNSAtNTRxLTEzMyAwIC0yNDUuNSA1OHQtMTgwIDE2NXQtNjcuNSAyNDFxMCAyMDUgMTQxLjUgMzQxdDM0Ny41IDEzNnExMjAgMCAyMjYuNSAtNDMuNXQxODUuNSAtMTEzdDE1MS41IC0xNTN0MTM5IC0xNjcuNXQxMzMuNSAtMTUzLjV0MTQ5LjUgLTExMw0KdDE3Mi41IC00My41cTEwMiAwIDE2OC41IDYxLjV0NjYuNSAxNjIuNXEwIDk1IC02NC41IDE1OXQtMTU5LjUgNjRxLTMwIDAgLTgxLjUgLTE4LjV0LTY4LjUgLTE4LjVxLTIwIDAgLTM1LjUgMTV0LTE1LjUgMzVxMCAxOCA4LjUgNTd0OC41IDU5cTAgMTU5IC0xMDcuNSAyNjN0LTI2Ni41IDEwNHEtNTggMCAtMTExLjUgLTE4LjV0LTg0IC00MC41dC01NS41IC00MC41dC0zMyAtMTguNXEtMTUgMCAtMjUuNSAxMC41dC0xMC41IDI1LjUNCnEwIDE5IDI1IDQ2cTU5IDY3IDE0NyAxMDMuNXQxODIgMzYuNXExOTEgMCAzMTggLTEyNS41dDEyNyAtMzE1LjVxMCAtMzcgLTQgLTY2cTU3IDE1IDExNSAxNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDIiIHVuaWNvZGU9IiYjeGYyMTc7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTIxNiA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjh2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV2LTEyOGgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5aDEyOHYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV2MTI4aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek02NDAgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjUNCnQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTUzNiAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTY2NCAxMDg4di01MTJxMCAtMjQgLTE2IC00Mi41dC00MSAtMjEuNWwtMTA0NCAtMTIycTEgLTcgNC41IC0yMS41dDYgLTI2LjV0Mi41IC0yMnEwIC0xNiAtMjQgLTY0aDkyMA0KcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEwMjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDE0IDExIDM5LjV0MjkuNSA1OS41dDIwLjUgMzhsLTE3NyA4MjNoLTIwNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnExNiAwIDI4LjUgLTYuNXQyMCAtMTUuNXQxMyAtMjQuNXQ3LjUgLTI2LjV0NS41IC0yOS41dDQuNSAtMjUuNWgxMjAxcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDMiIHVuaWNvZGU9IiYjeGYyMTg7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTlsLTE0NyAtMTQ2djI5M3EwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1di0yOTNsLTE0NyAxNDZxLTE5IDE5IC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1bDI1NiAtMjU2cTE5IC0xOSA0NSAtMTl0NDUgMTlsMjU2IDI1NnExOSAxOSAxOSA0NXpNNjQwIDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41DQp0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE1MzYgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE2NjQgMTA4OHYtNTEycTAgLTI0IC0xNiAtNDIuNXQtNDEgLTIxLjVsLTEwNDQgLTEyMnExIC03IDQuNSAtMjEuNXQ2IC0yNi41dDIuNSAtMjJxMCAtMTYgLTI0IC02NGg5MjANCnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC0xMDI0cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAxNCAxMSAzOS41dDI5LjUgNTkuNXQyMC41IDM4bC0xNzcgODIzaC0yMDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZxMTYgMCAyOC41IC02LjV0MjAgLTE1LjV0MTMgLTI0LjV0Ny41IC0yNi41dDUuNSAtMjkuNXQ0LjUgLTI1LjVoMTIwMXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA0IiB1bmljb2RlPSImI3hmMjE5OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTIxMiA3NjhsNjIzIC02NjVsLTMwMCA2NjVoLTMyM3pNMTAyNCAtNGwzNDkgNzcyaC02OTh6TTUzOCA4OTZsMjA0IDM4NGgtMjYybC0yODggLTM4NGgzNDZ6TTEyMTMgMTAzbDYyMyA2NjVoLTMyM3pNNjgzIDg5Nmg2ODJsLTIwNCAzODRoLTI3NHpNMTUxMCA4OTZoMzQ2bC0yODggMzg0aC0yNjJ6TTE2NTEgMTM4MmwzODQgLTUxMnExNCAtMTggMTMgLTQxLjV0LTE3IC00MC41bC05NjAgLTEwMjRxLTE4IC0yMCAtNDcgLTIwdC00NyAyMA0KbC05NjAgMTAyNHEtMTYgMTcgLTE3IDQwLjV0MTMgNDEuNWwzODQgNTEycTE4IDI2IDUxIDI2aDExNTJxMzMgMCA1MSAtMjZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA1IiB1bmljb2RlPSImI3hmMjFhOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTE4MTEgLTE5cTE5IDE5IDQ1IDE5dDQ1IC0xOWwxMjggLTEyOGwtOTAgLTkwbC04MyA4M2wtODMgLTgzcS0xOCAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04Mw0KcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMTI4IDEyOGw5MCA5MGw4MyAtODNsODMgODNxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M2w4MyA4M3ExOSAxOSA0NSAxOXQ0NSAtMTlsODMgLTgzbDgzIDgzcTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODNsODMgODNxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M2w4MyA4M3ExOSAxOSA0NSAxOXQ0NSAtMTlsODMgLTgzbDgzIDgzDQpxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M3pNMjM3IDE5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTEyOCAxMjhsOTAgOTBsODMgLTgybDgzIDgycTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODJsNjQgNjR2MjkzbC0yMTAgMzE0cS0xNyAyNiAtNyA1Ni41dDQwIDQwLjVsMTc3IDU4djI5OWgxMjh2MTI4aDI1NnYxMjhoMjU2di0xMjhoMjU2di0xMjhoMTI4di0yOTlsMTc3IC01OHEzMCAtMTAgNDAgLTQwLjV0LTcgLTU2LjVsLTIxMCAtMzE0DQp2LTI5M2wxOSAxOHExOSAxOSA0NSAxOXQ0NSAtMTlsODMgLTgybDgzIDgycTE5IDE5IDQ1IDE5dDQ1IC0xOWwxMjggLTEyOGwtOTAgLTkwbC04MyA4M2wtODMgLTgzcS0xOCAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODMNCnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzek02NDAgMTE1MnYtMTI4bDM4NCAxMjhsMzg0IC0xMjh2MTI4aC0xMjh2MTI4aC01MTJ2LTEyOGgtMTI4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUwNiIgdW5pY29kZT0iJiN4ZjIxYjsiIA0KZD0iTTU3NiAwbDk2IDQ0OGwtOTYgMTI4bC0xMjggNjR6TTgzMiAwbDEyOCA2NDBsLTEyOCAtNjRsLTk2IC0xMjh6TTk5MiAxMDEwcS0yIDQgLTQgNnEtMTAgOCAtOTYgOHEtNzAgMCAtMTY3IC0xOXEtNyAtMiAtMjEgLTJ0LTIxIDJxLTk3IDE5IC0xNjcgMTlxLTg2IDAgLTk2IC04cS0yIC0yIC00IC02cTIgLTE4IDQgLTI3cTIgLTMgNy41IC02LjV0Ny41IC0xMC41cTIgLTQgNy41IC0yMC41dDcgLTIwLjV0Ny41IC0xN3Q4LjUgLTE3dDkgLTE0DQp0MTIgLTEzLjV0MTQgLTkuNXQxNy41IC04dDIwLjUgLTR0MjQuNSAtMnEzNiAwIDU5IDEyLjV0MzIuNSAzMHQxNC41IDM0LjV0MTEuNSAyOS41dDE3LjUgMTIuNWgxMnExMSAwIDE3LjUgLTEyLjV0MTEuNSAtMjkuNXQxNC41IC0zNC41dDMyLjUgLTMwdDU5IC0xMi41cTEzIDAgMjQuNSAydDIwLjUgNHQxNy41IDh0MTQgOS41dDEyIDEzLjV0OSAxNHQ4LjUgMTd0Ny41IDE3dDcgMjAuNXQ3LjUgMjAuNXEyIDcgNy41IDEwLjV0Ny41IDYuNQ0KcTIgOSA0IDI3ek0xNDA4IDEzMXEwIC0xMjEgLTczIC0xOTB0LTE5NCAtNjloLTg3NHEtMTIxIDAgLTE5NCA2OXQtNzMgMTkwcTAgNjEgNC41IDExOHQxOSAxMjUuNXQzNy41IDEyMy41dDYzLjUgMTAzLjV0OTMuNSA3NC41bC05MCAyMjBoMjE0cS0yMiA2NCAtMjIgMTI4cTAgMTIgMiAzMnEtMTk0IDQwIC0xOTQgOTZxMCA1NyAyMTAgOTlxMTcgNjIgNTEuNSAxMzR0NzAuNSAxMTRxMzIgMzcgNzYgMzdxMzAgMCA4NCAtMzF0ODQgLTMxdDg0IDMxDQp0ODQgMzFxNDQgMCA3NiAtMzdxMzYgLTQyIDcwLjUgLTExNHQ1MS41IC0xMzRxMjEwIC00MiAyMTAgLTk5cTAgLTU2IC0xOTQgLTk2cTcgLTgxIC0yMCAtMTYwaDIxNGwtODIgLTIyNXE2MyAtMzMgMTA3LjUgLTk2LjV0NjUuNSAtMTQzLjV0MjkgLTE1MS41dDggLTE0OC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUwNyIgdW5pY29kZT0iJiN4ZjIxYzsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0yMzAxIDUwMHExMiAtMTAzIC0yMiAtMTk4LjV0LTk5IC0xNjMuNXQtMTU4LjUgLTEwNnQtMTk2LjUgLTMxcS0xNjEgMTEgLTI3OS41IDEyNXQtMTM0LjUgMjc0cS0xMiAxMTEgMjcuNSAyMTAuNXQxMTguNSAxNzAuNWwtNzEgMTA3cS05NiAtODAgLTE1MSAtMTk0dC01NSAtMjQ0cTAgLTI3IC0xOC41IC00Ni41dC00NS41IC0xOS41aC0yNTZoLTY5cS0yMyAtMTY0IC0xNDkgLTI3NHQtMjk0IC0xMTBxLTE4NSAwIC0zMTYuNSAxMzEuNQ0KdC0xMzEuNSAzMTYuNXQxMzEuNSAzMTYuNXQzMTYuNSAxMzEuNXE3NiAwIDE1MiAtMjdsMjQgNDVxLTEyMyAxMTAgLTMwNCAxMTBoLTY0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMTI4cTc4IDAgMTQ1IC0xMy41dDExNi41IC0zOC41dDcxLjUgLTM5LjV0NTEgLTM2LjVoNTEyaDExNWwtODUgMTI4aC0yMjJxLTMwIDAgLTQ5IDIyLjV0LTE0IDUyLjVxNCAyMyAyMyAzOHQ0MyAxNWgyNTNxMzMgMCA1MyAtMjhsNzAgLTEwNQ0KbDExNCAxMTRxMTkgMTkgNDYgMTloMTAxcTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTc5bDExNSAtMTcycTEzMSA2MyAyNzUgMzZxMTQzIC0yNiAyNDQgLTEzNC41dDExOCAtMjUzLjV6TTQ0OCAxMjhxMTE1IDAgMjAzIDcyLjV0MTExIDE4My41aC0zMTRxLTM1IDAgLTU1IDMxcS0xOCAzMiAtMSA2M2wxNDcgMjc3cS00NyAxMyAtOTEgMTNxLTEzMiAwIC0yMjYgLTk0dC05NCAtMjI2dDk0IC0yMjYNCnQyMjYgLTk0ek0xODU2IDEyOHExMzIgMCAyMjYgOTR0OTQgMjI2dC05NCAyMjZ0LTIyNiA5NHEtNjAgMCAtMTIxIC0yNGwxNzQgLTI2MHExNSAtMjMgMTAgLTQ5dC0yNyAtNDBxLTE1IC0xMSAtMzYgLTExcS0zNSAwIC01MyAyOWwtMTc0IDI2MHEtOTMgLTk1IC05MyAtMjI1cTAgLTEzMiA5NCAtMjI2dDIyNiAtOTR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA4IiB1bmljb2RlPSImI3hmMjFkOyIgDQpkPSJNMTQwOCAwcTAgLTYzIC02MS41IC0xMTMuNXQtMTY0IC04MXQtMjI1IC00NnQtMjUzLjUgLTE1LjV0LTI1My41IDE1LjV0LTIyNSA0NnQtMTY0IDgxdC02MS41IDExMy41cTAgNDkgMzMgODguNXQ5MSA2Ni41dDExOCA0NC41dDEzMSAyOS41cTI2IDUgNDggLTEwLjV0MjYgLTQxLjVxNSAtMjYgLTEwLjUgLTQ4dC00MS41IC0yNnEtNTggLTEwIC0xMDYgLTIzLjV0LTc2LjUgLTI1LjV0LTQ4LjUgLTIzLjV0LTI3LjUgLTE5LjV0LTguNSAtMTINCnEzIC0xMSAyNyAtMjYuNXQ3MyAtMzN0MTE0IC0zMi41dDE2MC41IC0yNXQyMDEuNSAtMTB0MjAxLjUgMTB0MTYwLjUgMjV0MTE0IDMzdDczIDMzLjV0MjcgMjcuNXEtMSA0IC04LjUgMTF0LTI3LjUgMTl0LTQ4LjUgMjMuNXQtNzYuNSAyNXQtMTA2IDIzLjVxLTI2IDQgLTQxLjUgMjZ0LTEwLjUgNDhxNCAyNiAyNiA0MS41dDQ4IDEwLjVxNzEgLTEyIDEzMSAtMjkuNXQxMTggLTQ0LjV0OTEgLTY2LjV0MzMgLTg4LjV6TTEwMjQgODk2di0zODQNCnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0di0zODRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yNTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRoLTY0cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgzODRxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6TTkyOCAxMjgwcTAgLTkzIC02NS41IC0xNTguNXQtMTU4LjUgLTY1LjV0LTE1OC41IDY1LjV0LTY1LjUgMTU4LjV0NjUuNSAxNTguNXQxNTguNSA2NS41DQp0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA5IiB1bmljb2RlPSImI3hmMjFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyODAgNTEyaDMwNXEtNSAtNiAtMTAgLTEwLjV0LTkgLTcuNWwtMyAtNGwtNjIzIC02MDBxLTE4IC0xOCAtNDQgLTE4dC00NCAxOGwtNjI0IDYwMnEtNSAyIC0yMSAyMGgzNjlxMjIgMCAzOS41IDEzLjV0MjIuNSAzNC41bDcwIDI4MWwxOTAgLTY2N3E2IC0yMCAyMyAtMzN0MzkgLTEzcTIxIDAgMzggMTN0MjMgMzNsMTQ2IDQ4NWw1NiAtMTEycTE4IC0zNSA1NyAtMzV6TTE3OTIgOTQwcTAgLTE0NSAtMTAzIC0zMDBoLTM2OWwtMTExIDIyMQ0KcS04IDE3IC0yNS41IDI3dC0zNi41IDhxLTQ1IC01IC01NiAtNDZsLTEyOSAtNDMwbC0xOTYgNjg2cS02IDIwIC0yMy41IDMzdC0zOS41IDEzdC0zOSAtMTMuNXQtMjIgLTM0LjVsLTExNiAtNDY0aC00MjNxLTEwMyAxNTUgLTEwMyAzMDBxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjVxMjI0IDAgMzUxIC0xMjQNCnQxMjcgLTM0NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InZlbnVzIiB1bmljb2RlPSImI3hmMjIxOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTExNTIgOTYwcTAgLTIyMSAtMTQ3LjUgLTM4NC41dC0zNjQuNSAtMTg3LjV2LTI2MGgyMjRxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMjI0di0yMjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMjI0djI2MHEtMTUwIDE2IC0yNzEuNSAxMDN0LTE4NiAyMjR0LTUyLjUgMjkyDQpxMTEgMTM0IDgwLjUgMjQ5dDE4MiAxODh0MjQ1LjUgODhxMTcwIDE5IDMxOSAtNTR0MjM2IC0yMTJ0ODcgLTMwNnpNMTI4IDk2MHEwIC0xODUgMTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MTEiIHVuaWNvZGU9IiYjeGYyMjI7IiANCmQ9Ik0xNDcyIDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1di00MTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjYybC0zODIgLTM4M3ExMjYgLTE1NiAxMjYgLTM1OXEwIC0xMTcgLTQ1LjUgLTIyMy41dC0xMjMgLTE4NHQtMTg0IC0xMjN0LTIyMy41IC00NS41dC0yMjMuNSA0NS41dC0xODQgMTIzdC0xMjMgMTg0dC00NS41IDIyMy41dDQ1LjUgMjIzLjV0MTIzIDE4NHQxODQgMTIzdDIyMy41IDQ1LjUNCnEyMDMgMCAzNTkgLTEyNmwzODIgMzgyaC0yNjFxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNDE2ek01NzYgMHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxMiIgdW5pY29kZT0iJiN4ZjIyMzsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik04MzAgMTIyMHExNDUgLTcyIDIzMy41IC0yMTAuNXQ4OC41IC0zMDUuNXEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di0xMzJoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTk2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjk2aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTIxNyAyNCAtMzY0LjUgMTg3LjUNCnQtMTQ3LjUgMzg0LjVxMCAxNjcgODguNSAzMDUuNXQyMzMuNSAyMTAuNXEtMTY1IDk2IC0yMjggMjczcS02IDE2IDMuNSAyOS41dDI2LjUgMTMuNWg2OXEyMSAwIDI5IC0yMHE0NCAtMTA2IDE0MCAtMTcxdDIxNCAtNjV0MjE0IDY1dDE0MCAxNzFxOCAyMCAzNyAyMGg2MXExNyAwIDI2LjUgLTEzLjV0My41IC0yOS41cS02MyAtMTc3IC0yMjggLTI3M3pNNTc2IDI1NnExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjUNCnQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTEzIiB1bmljb2RlPSImI3hmMjI0OyIgDQpkPSJNMTAyNCAxNTA0cTAgMTQgOSAyM3QyMyA5aDI4OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI4OHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMzRsLTI1NCAtMjU1cTEyNiAtMTU4IDEyNiAtMzU5cTAgLTIyMSAtMTQ3LjUgLTM4NC41dC0zNjQuNSAtMTg3LjV2LTEzMmg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjQNCnEtMTQgMCAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZ2MTMycS0xNDkgMTYgLTI3MC41IDEwM3QtMTg2LjUgMjIzLjV0LTUzIDI5MS41cTE2IDIwNCAxNjAgMzUzLjV0MzQ3IDE3Mi41cTExOCAxNCAyMjggLTE5dDE5OCAtMTAzbDI1NSAyNTRoLTEzNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNNTc2IDI1NnExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjUNCnQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE0IiB1bmljb2RlPSImI3hmMjI1OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyODAgMTUwNHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yODhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTM0bC0yNTQgLTI1NXExMjYgLTE1OCAxMjYgLTM1OXEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di0xMzJoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTk2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0DQpxLTE0IDAgLTIzIDl0LTkgMjN2OTZoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2djEzMnEtMjE3IDI0IC0zNjQuNSAxODcuNXQtMTQ3LjUgMzg0LjVxMCAyMDEgMTI2IDM1OWwtNTIgNTNsLTEwMSAtMTExcS05IC0xMCAtMjIgLTEwLjV0LTIzIDcuNWwtNDggNDRxLTEwIDggLTEwLjUgMjEuNXQ4LjUgMjMuNWwxMDUgMTE1bC0xMTEgMTEydi0xMzRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDkNCnQtOSAyM3YyODhxMCAyNiAxOSA0NXQ0NSAxOWgyODhxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTMzbDEwNiAtMTA3bDg2IDk0cTkgMTAgMjIgMTAuNXQyMyAtNy41bDQ4IC00NHExMCAtOCAxMC41IC0yMS41dC04LjUgLTIzLjVsLTkwIC05OWw1NyAtNTZxMTU4IDEyNiAzNTkgMTI2dDM1OSAtMTI2bDI1NSAyNTRoLTEzNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNODMyIDI1NnExODUgMCAzMTYuNSAxMzEuNQ0KdDEzMS41IDMxNi41dC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE1IiB1bmljb2RlPSImI3hmMjI2OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTAgMTAwN3ExMiAtMTU1IC01Mi41IC0yOTJ0LTE4NiAtMjI0dC0yNzEuNSAtMTAzdi0yNjBoMjI0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTIyNHYtMjI0cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjIyNGgtNTEydi0yMjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzDQp0MjMgOWgyMjR2MjYwcS0xNTAgMTYgLTI3MS41IDEwM3QtMTg2IDIyNHQtNTIuNSAyOTJxMTcgMjA2IDE2NC41IDM1Ni41dDM1Mi41IDE2OS41cTIwNiAyMSAzNzcgLTk0cTE3MSAxMTUgMzc3IDk0cTIwNSAtMTkgMzUyLjUgLTE2OS41dDE2NC41IC0zNTYuNXpNODk2IDY0N3ExMjggMTMxIDEyOCAzMTN0LTEyOCAzMTNxLTEyOCAtMTMxIC0xMjggLTMxM3QxMjggLTMxM3pNNTc2IDUxMnExMTUgMCAyMTggNTdxLTE1NCAxNjUgLTE1NCAzOTENCnEwIDIyNCAxNTQgMzkxcS0xMDMgNTcgLTIxOCA1N3EtMTg1IDAgLTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6TTExNTIgMTI4djI2MHEtMTM3IDE1IC0yNTYgOTRxLTExOSAtNzkgLTI1NiAtOTR2LTI2MGg1MTJ6TTEyMTYgNTEycTE4NSAwIDMxNi41IDEzMS41dDEzMS41IDMxNi41dC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjVxLTExNSAwIC0yMTggLTU3cTE1NCAtMTY3IDE1NCAtMzkxDQpxMCAtMjI2IC0xNTQgLTM5MXExMDMgLTU3IDIxOCAtNTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE2IiB1bmljb2RlPSImI3hmMjI3OyIgaG9yaXotYWR2LXg9IjE5MjAiIA0KZD0iTTE1MzYgMTEyMHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yODhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTM0bC0yNTQgLTI1NXE3NiAtOTUgMTA3LjUgLTIxNHQ5LjUgLTI0N3EtMzEgLTE4MiAtMTY2IC0zMTJ0LTMxOCAtMTU2cS0yMTAgLTI5IC0zODQuNSA4MHQtMjQxLjUgMzAwcS0xMTcgNiAtMjIxIDU3LjV0LTE3Ny41IDEzM3QtMTEzLjUgMTkyLjV0LTMyIDIzMA0KcTkgMTM1IDc4IDI1MnQxODIgMTkxLjV0MjQ4IDg5LjVxMTE4IDE0IDIyNy41IC0xOXQxOTguNSAtMTAzbDI1NSAyNTRoLTEzNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yODhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTM0bC0yNTQgLTI1NXE1OSAtNzQgOTMgLTE2OXExODIgLTkgMzI4IC0xMjRsMjU1IDI1NGgtMTM0cS0xNCAwIC0yMyA5DQp0LTkgMjN2NjR6TTEwMjQgNzA0cTAgMjAgLTQgNThxLTE2MiAtMjUgLTI3MSAtMTUwdC0xMDkgLTI5MnEwIC0yMCA0IC01OHExNjIgMjUgMjcxIDE1MHQxMDkgMjkyek0xMjggNzA0cTAgLTE2OCAxMTEgLTI5NHQyNzYgLTE0OXEtMyAyOSAtMyA1OXEwIDIxMCAxMzUgMzY5LjV0MzM4IDE5Ni41cS01MyAxMjAgLTE2My41IDE5M3QtMjQ1LjUgNzNxLTE4NSAwIC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXpNMTA4OCAtMTI4DQpxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjVxMCAxNjggLTExMSAyOTR0LTI3NiAxNDlxMyAtMjggMyAtNTlxMCAtMjEwIC0xMzUgLTM2OS41dC0zMzggLTE5Ni41cTUzIC0xMjAgMTYzLjUgLTE5M3QyNDUuNSAtNzN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE3IiB1bmljb2RlPSImI3hmMjI4OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTE2NjQgMTUwNHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yODhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTM0bC0yNTQgLTI1NXE3NiAtOTUgMTA3LjUgLTIxNHQ5LjUgLTI0N3EtMzIgLTE4MCAtMTY0LjUgLTMxMHQtMzEzLjUgLTE1N3EtMjIzIC0zNCAtNDA5IDkwcS0xMTcgLTc4IC0yNTYgLTkzdi0xMzJoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzDQp0LTIzIC05aC05NnYtOTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2OTZoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2djEzMnEtMTU1IDE3IC0yNzkuNSAxMDkuNXQtMTg3IDIzNy41dC0zOS41IDMwN3EyNSAxODcgMTU5LjUgMzIyLjV0MzIwLjUgMTY0LjVxMjI0IDM0IDQxMCAtOTBxMTQ2IDk3IDMyMCA5N3EyMDEgMCAzNTkgLTEyNmwyNTUgMjU0aC0xMzRxLTE0IDAgLTIzIDkNCnQtOSAyM3Y2NHpNODk2IDM5MXExMjggMTMxIDEyOCAzMTN0LTEyOCAzMTNxLTEyOCAtMTMxIC0xMjggLTMxM3QxMjggLTMxM3pNMTI4IDcwNHEwIC0xODUgMTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXExMTcgMCAyMTggNTdxLTE1NCAxNjcgLTE1NCAzOTF0MTU0IDM5MXEtMTAxIDU3IC0yMTggNTdxLTE4NSAwIC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXpNMTIxNiAyNTZxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjUNCnQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41cS0xMTcgMCAtMjE4IC01N3ExNTQgLTE2NyAxNTQgLTM5MXQtMTU0IC0zOTFxMTAxIC01NyAyMTggLTU3eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxOCIgdW5pY29kZT0iJiN4ZjIyOTsiIA0KZD0iTTE0NzIgMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YyNjJsLTIxMyAtMjE0bDE0MCAtMTQwcTkgLTEwIDkgLTIzdC05IC0yMmwtNDYgLTQ2cS05IC05IC0yMiAtOXQtMjMgOWwtMTQwIDE0MWwtNzggLTc5cTEyNiAtMTU2IDEyNiAtMzU5cTAgLTExNyAtNDUuNSAtMjIzLjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjIzLjUgLTQ1LjV0LTIyMy41IDQ1LjUNCnQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjMuNXQ0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyM3QyMjMuNSA0NS41cTIwMyAwIDM1OSAtMTI2bDc4IDc4bC0xNzIgMTcycS05IDEwIC05IDIzdDkgMjJsNDYgNDZxOSA5IDIyIDl0MjMgLTlsMTcyIC0xNzJsMjEzIDIxM2gtMjYxcS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDQxNnpNNTc2IDBxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41DQp0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxOSIgdW5pY29kZT0iJiN4ZjIyYTsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik02NDAgODkycTIxNyAtMjQgMzY0LjUgLTE4Ny41dDE0Ny41IC0zODQuNXEwIC0xNjcgLTg3IC0zMDZ0LTIzNiAtMjEydC0zMTkgLTU0cS0xMzMgMTUgLTI0NS41IDg4dC0xODIgMTg4dC04MC41IDI0OXEtMTIgMTU1IDUyLjUgMjkydDE4NiAyMjR0MjcxLjUgMTAzdjEzMmgtMTYwcS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE2MHYxNjVsLTkyIC05MnEtMTAgLTkgLTIzIC05dC0yMiA5bC00NiA0NnEtOSA5IC05IDIyDQp0OSAyM2wyMDIgMjAxcTE5IDE5IDQ1IDE5dDQ1IC0xOWwyMDIgLTIwMXE5IC0xMCA5IC0yM3QtOSAtMjJsLTQ2IC00NnEtOSAtOSAtMjIgLTl0LTIzIDlsLTkyIDkydi0xNjVoMTYwcTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE2MHYtMTMyek01NzYgLTEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNQ0KdDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTIwIiB1bmljb2RlPSImI3hmMjJiOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTE5MDEgNjIxcTE5IC0xOSAxOSAtNDV0LTE5IC00NWwtMjk0IC0yOTRxLTkgLTEwIC0yMi41IC0xMHQtMjIuNSAxMGwtNDUgNDVxLTEwIDkgLTEwIDIyLjV0MTAgMjIuNWwxODUgMTg1aC0yOTR2LTIyNHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YyMjRoLTEzMnEtMjQgLTIxNyAtMTg3LjUgLTM2NC41dC0zODQuNSAtMTQ3LjVxLTE2NyAwIC0zMDYgODd0LTIxMiAyMzZ0LTU0IDMxOXExNSAxMzMgODggMjQ1LjUNCnQxODggMTgydDI0OSA4MC41cTE1NSAxMiAyOTIgLTUyLjV0MjI0IC0xODZ0MTAzIC0yNzEuNWgxMzJ2MjI0cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN2LTIyNGgyOTRsLTE4NSAxODVxLTEwIDkgLTEwIDIyLjV0MTAgMjIuNWw0NSA0NXE5IDEwIDIyLjUgMTB0MjIuNSAtMTB6TTU3NiAxMjhxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41DQp0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyMSIgdW5pY29kZT0iJiN4ZjIyYzsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMTUyIDk2MHEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di02MTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NjEycS0yMTcgMjQgLTM2NC41IDE4Ny41dC0xNDcuNSAzODQuNXEwIDExNyA0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyM3QyMjMuNSA0NS41dDIyMy41IC00NS41dDE4NCAtMTIzdDEyMyAtMTg0dDQ1LjUgLTIyMy41ek01NzYgNTEycTE4NSAwIDMxNi41IDEzMS41DQp0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjIiIHVuaWNvZGU9IiYjeGYyMmQ7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNMTAyNCA1NzZxMCAxODUgLTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXpNMTE1MiA1NzZxMCAtMTE3IC00NS41IC0yMjMuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjMuNSAtNDUuNXQtMjIzLjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjMuNXQ0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyMw0KdDIyMy41IDQ1LjV0MjIzLjUgLTQ1LjV0MTg0IC0xMjN0MTIzIC0xODR0NDUuNSAtMjIzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTIzIiB1bmljb2RlPSImI3hmMjJlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjQiIHVuaWNvZGU9IiYjeGYyMmY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNSIgdW5pY29kZT0iJiN4ZjIzMDsiIA0KZD0iTTE0NTEgMTQwOHEzNSAwIDYwIC0yNXQyNSAtNjB2LTEzNjZxMCAtMzUgLTI1IC02MHQtNjAgLTI1aC0zOTF2NTk1aDE5OWwzMCAyMzJoLTIyOXYxNDhxMCA1NiAyMy41IDg0dDkxLjUgMjhsMTIyIDF2MjA3cS02MyA5IC0xNzggOXEtMTM2IDAgLTIxNy41IC04MHQtODEuNSAtMjI2di0xNzFoLTIwMHYtMjMyaDIwMHYtNTk1aC03MzVxLTM1IDAgLTYwIDI1dC0yNSA2MHYxMzY2cTAgMzUgMjUgNjB0NjAgMjVoMTM2NnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjYiIHVuaWNvZGU9IiYjeGYyMzE7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNMCA5MzlxMCAxMDggMzcuNSAyMDMuNXQxMDMuNSAxNjYuNXQxNTIgMTIzdDE4NSA3OHQyMDIgMjZxMTU4IDAgMjk0IC02Ni41dDIyMSAtMTkzLjV0ODUgLTI4N3EwIC05NiAtMTkgLTE4OHQtNjAgLTE3N3QtMTAwIC0xNDkuNXQtMTQ1IC0xMDN0LTE4OSAtMzguNXEtNjggMCAtMTM1IDMydC05NiA4OHEtMTAgLTM5IC0yOCAtMTEyLjV0LTIzLjUgLTk1dC0yMC41IC03MXQtMjYgLTcxdC0zMiAtNjIuNXQtNDYgLTc3LjV0LTYyIC04Ni41DQpsLTE0IC01bC05IDEwcS0xNSAxNTcgLTE1IDE4OHEwIDkyIDIxLjUgMjA2LjV0NjYuNSAyODcuNXQ1MiAyMDNxLTMyIDY1IC0zMiAxNjlxMCA4MyA1MiAxNTZ0MTMyIDczcTYxIDAgOTUgLTQwLjV0MzQgLTEwMi41cTAgLTY2IC00NCAtMTkxdC00NCAtMTg3cTAgLTYzIDQ1IC0xMDQuNXQxMDkgLTQxLjVxNTUgMCAxMDIgMjV0NzguNSA2OHQ1NiA5NXQzOCAxMTAuNXQyMCAxMTF0Ni41IDk5LjVxMCAxNzMgLTEwOS41IDI2OS41dC0yODUuNSA5Ni41DQpxLTIwMCAwIC0zMzQgLTEyOS41dC0xMzQgLTMyOC41cTAgLTQ0IDEyLjUgLTg1dDI3IC02NXQyNyAtNDUuNXQxMi41IC0zMC41cTAgLTI4IC0xNSAtNzN0LTM3IC00NXEtMiAwIC0xNyAzcS01MSAxNSAtOTAuNSA1NnQtNjEgOTQuNXQtMzIuNSAxMDh0LTExIDEwNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNyIgdW5pY29kZT0iJiN4ZjIzMjsiIA0KZD0iTTk4NSA1NjJxMTMgMCA5Ny41IC00NHQ4OS41IC01M3EyIC01IDIgLTE1cTAgLTMzIC0xNyAtNzZxLTE2IC0zOSAtNzEgLTY1LjV0LTEwMiAtMjYuNXEtNTcgMCAtMTkwIDYycS05OCA0NSAtMTcwIDExOHQtMTQ4IDE4NXEtNzIgMTA3IC03MSAxOTR2OHEzIDkxIDc0IDE1OHEyNCAyMiA1MiAyMnE2IDAgMTggLTEuNXQxOSAtMS41cTE5IDAgMjYuNSAtNi41dDE1LjUgLTI3LjVxOCAtMjAgMzMgLTg4dDI1IC03NXEwIC0yMSAtMzQuNSAtNTcuNQ0KdC0zNC41IC00Ni41cTAgLTcgNSAtMTVxMzQgLTczIDEwMiAtMTM3cTU2IC01MyAxNTEgLTEwMXExMiAtNyAyMiAtN3ExNSAwIDU0IDQ4LjV0NTIgNDguNXpNNzgyIDMycTEyNyAwIDI0My41IDUwdDIwMC41IDEzNHQxMzQgMjAwLjV0NTAgMjQzLjV0LTUwIDI0My41dC0xMzQgMjAwLjV0LTIwMC41IDEzNHQtMjQzLjUgNTB0LTI0My41IC01MHQtMjAwLjUgLTEzNHQtMTM0IC0yMDAuNXQtNTAgLTI0My41cTAgLTIwMyAxMjAgLTM2OGwtNzkgLTIzMw0KbDI0MiA3N3ExNTggLTEwNCAzNDUgLTEwNHpNNzgyIDE0MTRxMTUzIDAgMjkyLjUgLTYwdDI0MC41IC0xNjF0MTYxIC0yNDAuNXQ2MCAtMjkyLjV0LTYwIC0yOTIuNXQtMTYxIC0yNDAuNXQtMjQwLjUgLTE2MXQtMjkyLjUgLTYwcS0xOTUgMCAtMzY1IDk0bC00MTcgLTEzNGwxMzYgNDA1cS0xMDggMTc4IC0xMDggMzg5cTAgMTUzIDYwIDI5Mi41dDE2MSAyNDAuNXQyNDAuNSAxNjF0MjkyLjUgNjB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTI4IiB1bmljb2RlPSImI3hmMjMzOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyOCAxMjhoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTI4IDY0MGgxMDI0djEyOGgtMTAyNHYtMTI4ek0xNjk2IDE5MnEwIDQwIC0yOCA2OHQtNjggMjh0LTY4IC0yOHQtMjggLTY4dDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjh6TTEyOCAxMTUyaDEwMjR2MTI4aC0xMDI0di0xMjh6TTE2OTYgNzA0cTAgNDAgLTI4IDY4dC02OCAyOHQtNjggLTI4dC0yOCAtNjh0MjggLTY4dDY4IC0yOHQ2OCAyOHQyOCA2OHpNMTY5NiAxMjE2DQpxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek0xNzkyIDM4NHYtMzg0aC0xNzkydjM4NGgxNzkyek0xNzkyIDg5NnYtMzg0aC0xNzkydjM4NGgxNzkyek0xNzkyIDE0MDh2LTM4NGgtMTc5MnYzODRoMTc5MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjkiIHVuaWNvZGU9IiYjeGYyMzQ7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNNzA0IDY0MHEtMTU5IDAgLTI3MS41IDExMi41dC0xMTIuNSAyNzEuNXQxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNXQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41dC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXpNMTY2NCA1MTJoMzUycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMzUydi0zNTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41DQp0LTkuNSAyMi41djM1MmgtMzUycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzUydjM1MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MnpNOTI4IDI4OHEwIC01MiAzOCAtOTB0OTAgLTM4aDI1NnYtMjM4cS02OCAtNTAgLTE3MSAtNTBoLTg3NHEtMTIxIDAgLTE5NCA2OXQtNzMgMTkwcTAgNTMgMy41IDEwMy41dDE0IDEwOXQyNi41IDEwOC41DQp0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTkgMCAzOSAtMTdxNzkgLTYxIDE1NC41IC05MS41dDE2NC41IC0zMC41dDE2NC41IDMwLjV0MTU0LjUgOTEuNXEyMCAxNyAzOSAxN3ExMzIgMCAyMTcgLTk2aC0yMjNxLTUyIDAgLTkwIC0zOHQtMzggLTkwdi0xOTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTMwIiB1bmljb2RlPSImI3hmMjM1OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTcwNCA2NDBxLTE1OSAwIC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXQtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV6TTE3ODEgMzIwbDI0OSAtMjQ5cTkgLTkgOSAtMjNxMCAtMTMgLTkgLTIybC0xMzYgLTEzNnEtOSAtOSAtMjIgLTlxLTE0IDAgLTIzIDlsLTI0OSAyNDlsLTI0OSAtMjQ5cS05IC05IC0yMyAtOXEtMTMgMCAtMjIgOWwtMTM2IDEzNg0KcS05IDkgLTkgMjJxMCAxNCA5IDIzbDI0OSAyNDlsLTI0OSAyNDlxLTkgOSAtOSAyM3EwIDEzIDkgMjJsMTM2IDEzNnE5IDkgMjIgOXExNCAwIDIzIC05bDI0OSAtMjQ5bDI0OSAyNDlxOSA5IDIzIDlxMTMgMCAyMiAtOWwxMzYgLTEzNnE5IC05IDkgLTIycTAgLTE0IC05IC0yM3pNMTI4MyAzMjBsLTE4MSAtMTgxcS0zNyAtMzcgLTM3IC05MXEwIC01MyAzNyAtOTBsODMgLTgzcS0yMSAtMyAtNDQgLTNoLTg3NHEtMTIxIDAgLTE5NCA2OQ0KdC03MyAxOTBxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjV0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTkgMCAzOSAtMTdxMTU0IC0xMjIgMzE5IC0xMjJ0MzE5IDEyMnEyMCAxNyAzOSAxN3EyOCAwIDU3IC02cS0yOCAtMjcgLTQxIC01MHQtMTMgLTU2cTAgLTU0IDM3IC05MXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzEiIHVuaWNvZGU9IiYjeGYyMzY7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMjU2IDUxMmgxNzI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNDQ4aC0yNTZ2MjU2aC0xNTM2di0yNTZoLTI1NnYxMjE2cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNzA0ek04MzIgODMycTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMjA0OCA1NzZ2NjRxMCAxNTkgLTExMi41IDI3MS41dC0yNzEuNSAxMTIuNWgtNzA0DQpxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zODRoMTE1MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzIiIHVuaWNvZGU9IiYjeGYyMzc7IiANCmQ9Ik0xNTM2IDE1MzZsLTE5MiAtNDQ4aDE5MnYtMTkyaC0yNzRsLTU1IC0xMjhoMzI5di0xOTJoLTQxMWwtMzU3IC04MzJsLTM1NyA4MzJoLTQxMXYxOTJoMzI5bC01NSAxMjhoLTI3NHYxOTJoMTkybC0xOTIgNDQ4aDI1NmwzMjMgLTc2OGgzNzhsMzIzIDc2OGgyNTZ6TTc2OCAzMjBsMTA4IDI1NmgtMjE2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzMyIgdW5pY29kZT0iJiN4ZjIzODsiIA0KZD0iTTEwODggMTUzNnExODUgMCAzMTYuNSAtOTMuNXQxMzEuNSAtMjI2LjV2LTg5NnEwIC0xMzAgLTEyNS41IC0yMjJ0LTMwNS41IC05N2wyMTMgLTIwMnExNiAtMTUgOCAtMzV0LTMwIC0yMGgtMTA1NnEtMjIgMCAtMzAgMjB0OCAzNWwyMTMgMjAycS0xODAgNSAtMzA1LjUgOTd0LTEyNS41IDIyMnY4OTZxMCAxMzMgMTMxLjUgMjI2LjV0MzE2LjUgOTMuNWg2NDB6TTc2OCAxOTJxODAgMCAxMzYgNTZ0NTYgMTM2dC01NiAxMzZ0LTEzNiA1Ng0KdC0xMzYgLTU2dC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnpNMTM0NCA3Njh2NTEyaC0xMTUydi01MTJoMTE1MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzQiIHVuaWNvZGU9IiYjeGYyMzk7IiANCmQ9Ik0xMDg4IDE1MzZxMTg1IDAgMzE2LjUgLTkzLjV0MTMxLjUgLTIyNi41di04OTZxMCAtMTMwIC0xMjUuNSAtMjIydC0zMDUuNSAtOTdsMjEzIC0yMDJxMTYgLTE1IDggLTM1dC0zMCAtMjBoLTEwNTZxLTIyIDAgLTMwIDIwdDggMzVsMjEzIDIwMnEtMTgwIDUgLTMwNS41IDk3dC0xMjUuNSAyMjJ2ODk2cTAgMTMzIDEzMS41IDIyNi41dDMxNi41IDkzLjVoNjQwek0yODggMjI0cTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDcNCnQtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd6TTcwNCA3Njh2NTEyaC01NDR2LTUxMmg1NDR6TTEyNDggMjI0cTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3ek0xNDA4IDc2OHY1MTJoLTU3NnYtNTEyaDU3NnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzUiIHVuaWNvZGU9IiYjeGYyM2E7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNTk3IDExMTV2LTExNzNxMCAtMjUgLTEyLjUgLTQyLjV0LTM2LjUgLTE3LjVxLTE3IDAgLTMzIDhsLTQ2NSAyMzNxLTIxIDEwIC0zNS41IDMzLjV0LTE0LjUgNDYuNXYxMTQwcTAgMjAgMTAgMzR0MjkgMTRxMTQgMCA0NCAtMTVsNTExIC0yNTZxMyAtMyAzIC01ek02NjEgMTAxNGw1MzQgLTg2NmwtNTM0IDI2NnY2MDB6TTE3OTIgOTk2di0xMDU0cTAgLTI1IC0xNCAtNDAuNXQtMzggLTE1LjV0LTQ3IDEzbC00NDEgMjIwek0xNzg5IDExMTYNCnEwIC0zIC0yNTYuNSAtNDE5LjV0LTMwMC41IC00ODcuNWwtMzkwIDYzNGwzMjQgNTI3cTE3IDI4IDUyIDI4cTE0IDAgMjYgLTZsNTQxIC0yNzBxNCAtMiA0IC02eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzNiIgdW5pY29kZT0iJiN4ZjIzYjsiIA0KZD0iTTgwOSA1MzJsMjY2IDQ5OWgtMTEybC0xNTcgLTMxMnEtMjQgLTQ4IC00NCAtOTJsLTQyIDkybC0xNTUgMzEyaC0xMjBsMjYzIC00OTN2LTMyNGgxMDF2MzE4ek0xNTM2IDE0MDh2LTE1MzZoLTE1MzZ2MTUzNmgxNTM2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzNyIgdW5pY29kZT0iJiN4ZjIzYzsiIGhvcml6LWFkdi14PSIyMjk2IiANCmQ9Ik00NzggLTEzOXEtOCAtMTYgLTI3IC0zNC41dC0zNyAtMjUuNXEtMjUgLTkgLTUxLjUgMy41dC0yOC41IDMxLjVxLTEgMjIgNDAgNTV0NjggMzhxMjMgNCAzNCAtMjEuNXQyIC00Ni41ek0xODE5IC0xMzlxNyAtMTYgMjYgLTM0LjV0MzggLTI1LjVxMjUgLTkgNTEuNSAzLjV0MjcuNSAzMS41cTIgMjIgLTM5LjUgNTV0LTY4LjUgMzhxLTIyIDQgLTMzIC0yMS41dC0yIC00Ni41ek0xODY3IC0zMHExMyAtMjcgNTYuNSAtNTkuNXQ3Ny41IC00MS41DQpxNDUgLTEzIDgyIDQuNXQzNyA1MC41cTAgNDYgLTY3LjUgMTAwLjV0LTExNS41IDU5LjVxLTQwIDUgLTYzLjUgLTM3LjV0LTYuNSAtNzYuNXpNNDI4IC0zMHEtMTMgLTI3IC01NiAtNTkuNXQtNzcgLTQxLjVxLTQ1IC0xMyAtODIgNC41dC0zNyA1MC41cTAgNDYgNjcuNSAxMDAuNXQxMTUuNSA1OS41cTQwIDUgNjMgLTM3LjV0NiAtNzYuNXpNMTE1OCAxMDk0aDFxLTQxIDAgLTc2IC0xNXEyNyAtOCA0NCAtMzAuNXQxNyAtNDkuNQ0KcTAgLTM1IC0yNyAtNjB0LTY1IC0yNXEtNTIgMCAtODAgNDNxLTUgLTIzIC01IC00MnEwIC03NCA1NiAtMTI2LjV0MTM1IC01Mi41cTgwIDAgMTM2IDUyLjV0NTYgMTI2LjV0LTU2IDEyNi41dC0xMzYgNTIuNXpNMTQ2MiAxMzEycS05OSAxMDkgLTIyMC41IDEzMS41dC0yNDUuNSAtNDQuNXEyNyA2MCA4Mi41IDk2LjV0MTE4IDM5LjV0MTIxLjUgLTE3dDk5LjUgLTc0LjV0NDQuNSAtMTMxLjV6TTIyMTIgNzNxOCAtMTEgLTExIC00Mg0KcTcgLTIzIDcgLTQwcTEgLTU2IC00NC41IC0xMTIuNXQtMTA5LjUgLTkxLjV0LTExOCAtMzdxLTQ4IC0yIC05MiAyMS41dC02NiA2NS41cS02ODcgLTI1IC0xMjU5IDBxLTIzIC00MSAtNjYuNSAtNjV0LTkyLjUgLTIycS04NiAzIC0xNzkuNSA4MC41dC05Mi41IDE2MC41cTIgMjIgNyA0MHEtMTkgMzEgLTExIDQycTYgMTAgMzEgMXExNCAyMiA0MSA1MXEtNyAyOSAyIDM4cTExIDEwIDM5IC00cTI5IDIwIDU5IDM0cTAgMjkgMTMgMzcNCnEyMyAxMiA1MSAtMTZxMzUgNSA2MSAtMnExOCAtNCAzOCAtMTl2NzNxLTExIDAgLTE4IDJxLTUzIDEwIC05NyA0NC41dC01NSA4Ny41cS05IDM4IDAgODFxMTUgNjIgOTMgOTVxMiAxNyAxOSAzNS41dDM2IDIzLjV0MzMgLTcuNXQxOSAtMzAuNWgxM3E0NiAtNSA2MCAtMjNxMyAtMyA1IC03cTEwIDEgMzAuNSAzLjV0MzAuNSAzLjVxLTE1IDExIC0zMCAxN3EtMjMgNDAgLTkxIDQzcTAgNiAxIDEwcS02MiAyIC0xMTguNSAxOC41dC04NC41IDQ3LjUNCnEtMzIgMzYgLTQyLjUgOTJ0LTIuNSAxMTJxMTYgMTI2IDkwIDE3OXEyMyAxNiA1MiA0LjV0MzIgLTQwLjVxMCAtMSAxLjUgLTE0dDIuNSAtMjF0MyAtMjB0NS41IC0xOXQ4LjUgLTEwcTI3IC0xNCA3NiAtMTJxNDggNDYgOTggNzRxLTQwIDQgLTE2MiAtMTRsNDcgNDZxNjEgNTggMTYzIDExMXExNDUgNzMgMjgyIDg2cS0yMCA4IC00MSAxNS41dC00NyAxNHQtNDIuNSAxMC41dC00Ny41IDExdC00MyAxMHE1OTUgMTI2IDkwNCAtMTM5DQpxOTggLTg0IDE1OCAtMjIycTg1IC0xMCAxMjEgOWgxcTUgMyA4LjUgMTB0NS41IDE5dDMgMTkuNXQzIDIxLjVsMSAxNHEzIDI4IDMyIDQwdDUyIC01cTczIC01MiA5MSAtMTc4cTcgLTU3IC0zLjUgLTExM3QtNDIuNSAtOTFxLTI4IC0zMiAtODMuNSAtNDguNXQtMTE1LjUgLTE4LjV2LTEwcS03MSAtMiAtOTUgLTQzcS0xNCAtNSAtMzEgLTE3cTExIC0xIDMyIC0zLjV0MzAgLTMuNXExIDUgNSA4cTE2IDE4IDYwIDIzaDEzcTUgMTggMTkgMzB0MzMgOA0KdDM2IC0yM3QxOSAtMzZxNzkgLTMyIDkzIC05NXE5IC00MCAxIC04MXEtMTIgLTUzIC01NiAtODh0LTk3IC00NHEtMTAgLTIgLTE3IC0ycTAgLTQ5IC0xIC03M3EyMCAxNSAzOCAxOXEyNiA3IDYxIDJxMjggMjggNTEgMTZxMTQgLTkgMTQgLTM3cTMzIC0xNiA1OSAtMzRxMjcgMTMgMzggNHExMCAtMTAgMiAtMzhxMjggLTMwIDQxIC01MXEyMyA4IDMxIC0xek0xOTM3IDEwMjVxMCAtMjkgLTkgLTU0cTgyIC0zMiAxMTIgLTEzMg0KcTQgMzcgLTkuNSA5OC41dC00MS41IDkwLjVxLTIwIDE5IC0zNiAxN3QtMTYgLTIwek0xODU5IDkyNXEzNSAtNDIgNDcuNSAtMTA4LjV0LTAuNSAtMTI0LjVxNjcgMTMgOTcgNDVxMTMgMTQgMTggMjhxLTMgNjQgLTMxIDExNC41dC03OSA2Ni41cS0xNSAtMTUgLTUyIC0yMXpNMTgyMiA5MjFxLTMwIDAgLTQ0IDFxNDIgLTExNSA1MyAtMjM5cTIxIDAgNDMgM3ExNiA2OCAxIDEzNXQtNTMgMTAwek0yNTggODM5cTMwIDEwMCAxMTIgMTMyDQpxLTkgMjUgLTkgNTRxMCAxOCAtMTYuNSAyMHQtMzUuNSAtMTdxLTI4IC0yOSAtNDEuNSAtOTAuNXQtOS41IC05OC41ek0yOTQgNzM3cTI5IC0zMSA5NyAtNDVxLTEzIDU4IC0wLjUgMTI0LjV0NDcuNSAxMDguNXYwcS0zNyA2IC01MiAyMXEtNTEgLTE2IC03OC41IC02NnQtMzEuNSAtMTE1cTkgLTE3IDE4IC0yOHpNNDcxIDY4M3ExNCAxMjQgNzMgMjM1cS0xOSAtNCAtNTUgLTE4bC00NSAtMTl2MXEtNDYgLTg5IC0yMCAtMTk2cTI1IC0zIDQ3IC0zeg0KTTE0MzQgNjQ0cTggLTM4IDE2LjUgLTEwOC41dDExLjUgLTg5LjVxMyAtMTggOS41IC0yMS41dDIzLjUgNC41cTQwIDIwIDYyIDg1LjV0MjMgMTI1LjVxLTI0IDIgLTE0NiA0ek0xMTUyIDEyODVxLTExNiAwIC0xOTkgLTgyLjV0LTgzIC0xOTguNXEwIC0xMTcgODMgLTE5OS41dDE5OSAtODIuNXQxOTkgODIuNXQ4MyAxOTkuNXEwIDExNiAtODMgMTk4LjV0LTE5OSA4Mi41ek0xMzgwIDY0NnEtMTA1IDIgLTIxMSAwdjFxLTEgLTI3IDIuNSAtODYNCnQxMy41IC02NnEyOSAtMTQgOTMuNSAtMTQuNXQ5NS41IDEwLjVxOSAzIDExIDM5dC0wLjUgNjkuNXQtNC41IDQ2LjV6TTExMTIgNDQ3cTggNCA5LjUgNDh0LTAuNSA4OHQtNCA2M3YxcS0yMTIgLTMgLTIxNCAtM3EtNCAtMjAgLTcgLTYydDAgLTgzdDE0IC00NnEzNCAtMTUgMTAxIC0xNnQxMDEgMTB6TTcxOCA2MzZxLTE2IC01OSA0LjUgLTExOC41dDc3LjUgLTg0LjVxMTUgLTggMjQgLTV0MTIgMjFxMyAxNiA4IDkwdDEwIDEwMw0KcS02OSAtMiAtMTM2IC02ek01OTEgNTEwcTMgLTIzIC0zNCAtMzZxMTMyIC0xNDEgMjcxLjUgLTI0MHQzMDUuNSAtMTU0cTE3MiA0OSAzMTAuNSAxNDZ0MjkzLjUgMjUwcS0zMyAxMyAtMzAgMzRxMCAyIDAuNSAzLjV0MS41IDN0MSAyLjV2MXYtMXEtMTcgMiAtNTAgNS41dC00OCA0LjVxLTI2IC05MCAtODIgLTEzMnEtNTEgLTM4IC04MiAxcS01IDYgLTkgMTRxLTcgMTMgLTE3IDYycS0yIC01IC01IC05dC03LjUgLTd0LTggLTUuNXQtOS41IC00DQpsLTEwIC0yLjV0LTEyIC0ybC0xMiAtMS41dC0xMy41IC0xdC0xMy41IC0wLjVxLTEwNiAtOSAtMTYzIDExcS00IC0xNyAtMTAgLTI2LjV0LTIxIC0xNXQtMjMgLTd0LTM2IC0zLjVxLTYgLTEgLTkgLTFxLTE3OSAtMTcgLTIwMyA0MHEtMiAtNjMgLTU2IC01NHEtNDcgOCAtOTEgNTRxLTEyIDEzIC0yMCAyNnEtMTcgMjkgLTI2IDY1cS01OCAtNiAtODcgLTEwcTEgLTIgNCAtMTB6TTUwNyAtMTE4cTMgMTQgMyAzMHEtMTcgNzEgLTUxIDEzMA0KdC03MyA3MHEtNDEgMTIgLTEwMS41IC0xNC41dC0xMDQuNSAtODB0LTM5IC0xMDcuNXEzNSAtNTMgMTAwIC05M3QxMTkgLTQycTUxIC0yIDk0IDI4dDUzIDc5ek01MTAgNTNxMjMgLTYzIDI3IC0xMTlxMTk1IDExMyAzOTIgMTc0cS05OCA1MiAtMTgwLjUgMTIwdC0xNzkuNSAxNjVxLTYgLTQgLTI5IC0xM3EwIC0xIC0xIC00dC0xIC01cTMxIC0xOCAyMiAtMzdxLTEyIC0yMyAtNTYgLTM0cS0xMCAtMTMgLTI5IC0yNGgtMXEtMiAtODMgMSAtMTUwDQpxMTkgLTM0IDM1IC03M3pNNTc5IC0xMTNxNTMyIC0yMSAxMTQ1IDBxLTI1NCAxNDcgLTQyOCAxOTZxLTc2IC0zNSAtMTU2IC01N3EtOCAtMyAtMTYgMHEtNjUgMjEgLTEyOSA0OXEtMjA4IC02MCAtNDE2IC0xODhoLTF2LTFxMSAwIDEgMXpNMTc2MyAtNjdxNCA1NCAyOCAxMjBxMTQgMzggMzMgNzFsLTEgLTFxMyA3NyAzIDE1M3EtMTUgOCAtMzAgMjVxLTQyIDkgLTU2IDMzcS05IDIwIDIyIDM4cS0yIDQgLTIgOXEtMTYgNCAtMjggMTINCnEtMjA0IC0xOTAgLTM4MyAtMjg0cTE5OCAtNTkgNDE0IC0xNzZ6TTIxNTUgLTkwcTUgNTQgLTM5IDEwNy41dC0xMDQgODB0LTEwMiAxNC41cS0zOCAtMTEgLTcyLjUgLTcwLjV0LTUxLjUgLTEyOS41cTAgLTE2IDMgLTMwcTEwIC00OSA1MyAtNzl0OTQgLTI4cTU0IDIgMTE5IDQydDEwMCA5M3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzgiIHVuaWNvZGU9IiYjeGYyM2Q7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTUyNCAtMjVxMCAtNjggLTQ4IC0xMTZ0LTExNiAtNDh0LTExNi41IDQ4dC00OC41IDExNnQ0OC41IDExNi41dDExNi41IDQ4LjV0MTE2IC00OC41dDQ4IC0xMTYuNXpNNzc1IC0yNXEwIC02OCAtNDguNSAtMTE2dC0xMTYuNSAtNDh0LTExNiA0OHQtNDggMTE2dDQ4IDExNi41dDExNiA0OC41dDExNi41IC00OC41dDQ4LjUgLTExNi41ek0wIDE0NjlxNTcgLTYwIDExMC41IC0xMDQuNXQxMjEgLTgydDEzNiAtNjN0MTY2IC00NS41DQp0MjAwIC0zMS41dDI1MCAtMTguNXQzMDQgLTkuNXQzNzIuNSAtMi41cTEzOSAwIDI0NC41IC01dDE4MSAtMTYuNXQxMjQgLTI3LjV0NzEgLTM5LjV0MjQgLTUxLjV0LTE5LjUgLTY0dC01Ni41IC03Ni41dC04OS41IC05MXQtMTE2IC0xMDQuNXQtMTM5IC0xMTlxLTE4NSAtMTU3IC0yODYgLTI0N3EyOSA1MSA3Ni41IDEwOXQ5NCAxMDUuNXQ5NC41IDk4LjV0ODMgOTEuNXQ1NCA4MC41dDEzIDcwdC00NS41IDU1LjV0LTExNi41IDQxdC0yMDQgMjMuNQ0KdC0zMDQgNXEtMTY4IC0yIC0zMTQgNnQtMjU2IDIzdC0yMDQuNSA0MXQtMTU5LjUgNTEuNXQtMTIyLjUgNjIuNXQtOTEuNSA2Ni41dC02OCA3MS41dC01MC41IDY5LjV0LTQwIDY4dC0zNi41IDU5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTM5IiB1bmljb2RlPSImI3hmMjNlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTg5NiAxNDcycS0xNjkgMCAtMzIzIC02NnQtMjY1LjUgLTE3Ny41dC0xNzcuNSAtMjY1LjV0LTY2IC0zMjN0NjYgLTMyM3QxNzcuNSAtMjY1LjV0MjY1LjUgLTE3Ny41dDMyMyAtNjZ0MzIzIDY2dDI2NS41IDE3Ny41dDE3Ny41IDI2NS41dDY2IDMyM3QtNjYgMzIzdC0xNzcuNSAyNjUuNXQtMjY1LjUgMTc3LjV0LTMyMyA2NnpNODk2IDE1MzZxMTgyIDAgMzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4dC03MSAtMzQ4DQp0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6TTQ5NiA3MDRxMTYgMCAxNiAtMTZ2LTQ4MHEwIC0xNiAtMTYgLTE2aC0zMnEtMTYgMCAtMTYgMTZ2NDgwcTAgMTYgMTYgMTZoMzJ6TTg5NiA2NDBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjVxMCAtMzUgLTE3LjUgLTY0dC00Ni41IC00NnYtMTE0cTAgLTE0IC05IC0yMw0KdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTE0cS0yOSAxNyAtNDYuNSA0NnQtMTcuNSA2NHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV6TTg5NiAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTU0NCA5Mjh2LTk2DQpxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN2OTZxMCA5MyA2NS41IDE1OC41dDE1OC41IDY1LjV0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV2LTk2cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzdjk2cTAgMTQ2IC0xMDMgMjQ5dC0yNDkgMTAzdC0yNDkgLTEwM3QtMTAzIC0yNDl6TTE0MDggMTkydjUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMg0KcTAgLTI2IDE5IC00NXQ0NSAtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQwIiB1bmljb2RlPSImI3hmMjQwOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTE5MjAgMTAyNHYtNzY4aC0xNjY0djc2OGgxNjY0ek0yMDQ4IDQ0OGgxMjh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yM3YtOTYwcTAgLTE0IDkgLTIzdDIzIC05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4ek0yMzA0IDgzMnYtMzg0cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41di0xNjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE4NTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzDQp2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0xNjBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQxIiB1bmljb2RlPSImI3hmMjQxOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTI1NiAyNTZ2NzY4aDEyODB2LTc2OGgtMTI4MHpNMjE3NiA5NjBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTM4NHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMTYwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xODU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTE2MHpNMjE3NiA0NDh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDkNCmgtMTg1NnEtMTQgMCAtMjMgLTl0LTkgLTIzdi05NjBxMCAtMTQgOSAtMjN0MjMgLTloMTg1NnExNCAwIDIzIDl0OSAyM3YyODhoMTI4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0MiIgdW5pY29kZT0iJiN4ZjI0MjsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0yNTYgMjU2djc2OGg4OTZ2LTc2OGgtODk2ek0yMTc2IDk2MHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXYtMzg0cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41di0xNjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE4NTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjk2MHEwIDY2IDQ3IDExM3QxMTMgNDdoMTg1NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTYwek0yMTc2IDQ0OHYzODRoLTEyOHYyODhxMCAxNCAtOSAyM3QtMjMgOQ0KaC0xODU2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2MHEwIC0xNCA5IC0yM3QyMyAtOWgxODU2cTE0IDAgMjMgOXQ5IDIzdjI4OGgxMjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQzIiB1bmljb2RlPSImI3hmMjQzOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTI1NiAyNTZ2NzY4aDUxMnYtNzY4aC01MTJ6TTIxNzYgOTYwcTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41di0zODRxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV2LTE2MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTg1NnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0xNjB6TTIxNzYgNDQ4djM4NGgtMTI4djI4OHEwIDE0IC05IDIzdC0yMyA5DQpoLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yM3YtOTYwcTAgLTE0IDkgLTIzdDIzIC05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4aDEyOHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NDQiIHVuaWNvZGU9IiYjeGYyNDQ7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMjE3NiA5NjBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTM4NHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMTYwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xODU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTE2MHpNMjE3NiA0NDh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yMw0Kdi05NjBxMCAtMTQgOSAtMjN0MjMgLTloMTg1NnExNCAwIDIzIDl0OSAyM3YyODhoMTI4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0NSIgdW5pY29kZT0iJiN4ZjI0NTsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMTMzIDQ5M3EzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtMzgybDIwMSAtNDc2cTEwIC0yNSAwIC00OXQtMzQgLTM1bC0xNzcgLTc1cS0yNSAtMTAgLTQ5IDB0LTM1IDM0bC0xOTEgNDUybC0zMTIgLTMxMnEtMTkgLTE5IC00NSAtMTlxLTEyIDAgLTI0IDVxLTQwIDE3IC00MCA1OXYxNTA0cTAgNDIgNDAgNTlxMTIgNSAyNCA1cTI3IDAgNDUgLTE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0NiIgdW5pY29kZT0iJiN4ZjI0NjsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik04MzIgMTQwOHEtMzIwIDAgLTMyMCAtMjI0di00MTZoMTI4di0xMjhoLTEyOHYtNTQ0cTAgLTIyNCAzMjAgLTIyNGg2NHYtMTI4aC02NHEtMjcyIDAgLTM4NCAxNDZxLTExMiAtMTQ2IC0zODQgLTE0NmgtNjR2MTI4aDY0cTMyMCAwIDMyMCAyMjR2NTQ0aC0xMjh2MTI4aDEyOHY0MTZxMCAyMjQgLTMyMCAyMjRoLTY0djEyOGg2NHEyNzIgMCAzODQgLTE0NnExMTIgMTQ2IDM4NCAxNDZoNjR2LTEyOGgtNjR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ3IiB1bmljb2RlPSImI3hmMjQ3OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTIwNDggMTE1MmgtMTI4di0xMDI0aDEyOHYtMzg0aC0zODR2MTI4aC0xMjgwdi0xMjhoLTM4NHYzODRoMTI4djEwMjRoLTEyOHYzODRoMzg0di0xMjhoMTI4MHYxMjhoMzg0di0zODR6TTE3OTIgMTQwOHYtMTI4aDEyOHYxMjhoLTEyOHpNMTI4IDE0MDh2LTEyOGgxMjh2MTI4aC0xMjh6TTI1NiAtMTI4djEyOGgtMTI4di0xMjhoMTI4ek0xNjY0IDB2MTI4aDEyOHYxMDI0aC0xMjh2MTI4aC0xMjgwdi0xMjhoLTEyOHYtMTAyNGgxMjh2LTEyOA0KaDEyODB6TTE5MjAgLTEyOHYxMjhoLTEyOHYtMTI4aDEyOHpNMTI4MCA4OTZoMzg0di03NjhoLTg5NnYyNTZoLTM4NHY3NjhoODk2di0yNTZ6TTUxMiA1MTJoNjQwdjUxMmgtNjQwdi01MTJ6TTE1MzYgMjU2djUxMmgtMjU2di0zODRoLTM4NHYtMTI4aDY0MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NDgiIHVuaWNvZGU9IiYjeGYyNDg7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMjMwNCA3NjhoLTEyOHYtNjQwaDEyOHYtMzg0aC0zODR2MTI4aC04OTZ2LTEyOGgtMzg0djM4NGgxMjh2MTI4aC0zODR2LTEyOGgtMzg0djM4NGgxMjh2NjQwaC0xMjh2Mzg0aDM4NHYtMTI4aDg5NnYxMjhoMzg0di0zODRoLTEyOHYtMTI4aDM4NHYxMjhoMzg0di0zODR6TTIwNDggMTAyNHYtMTI4aDEyOHYxMjhoLTEyOHpNMTQwOCAxNDA4di0xMjhoMTI4djEyOGgtMTI4ek0xMjggMTQwOHYtMTI4aDEyOHYxMjhoLTEyOHpNMjU2IDI1Ng0KdjEyOGgtMTI4di0xMjhoMTI4ek0xNTM2IDM4NGgtMTI4di0xMjhoMTI4djEyOHpNMzg0IDM4NGg4OTZ2MTI4aDEyOHY2NDBoLTEyOHYxMjhoLTg5NnYtMTI4aC0xMjh2LTY0MGgxMjh2LTEyOHpNODk2IC0xMjh2MTI4aC0xMjh2LTEyOGgxMjh6TTIxNzYgLTEyOHYxMjhoLTEyOHYtMTI4aDEyOHpNMjA0OCAxMjh2NjQwaC0xMjh2MTI4aC0zODR2LTM4NGgxMjh2LTM4NGgtMzg0djEyOGgtMzg0di0xMjhoMTI4di0xMjhoODk2djEyOGgxMjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ5IiB1bmljb2RlPSImI3hmMjQ5OyIgDQpkPSJNMTAyNCAyODh2LTQxNmgtOTI4cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDEzNDRxNDAgMCA2OCAtMjh0MjggLTY4di05MjhoLTQxNnEtNDAgMCAtNjggLTI4dC0yOCAtNjh6TTExNTIgMjU2aDM4MXEtMTUgLTgyIC02NSAtMTMybC0xODQgLTE4NHEtNTAgLTUwIC0xMzIgLTY1djM4MXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTAiIHVuaWNvZGU9IiYjeGYyNGE7IiANCmQ9Ik0xNDAwIDI1NmgtMjQ4di0yNDhxMjkgMTAgNDEgMjJsMTg1IDE4NXExMiAxMiAyMiA0MXpNMTEyMCAzODRoMjg4djg5NmgtMTI4MHYtMTI4MGg4OTZ2Mjg4cTAgNDAgMjggNjh0NjggMjh6TTE1MzYgMTMxMnYtMTAyNHEwIC00MCAtMjAgLTg4dC00OCAtNzZsLTE4NCAtMTg0cS0yOCAtMjggLTc2IC00OHQtODggLTIwaC0xMDI0cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDEzNDRxNDAgMCA2OCAtMjh0MjggLTY4DQp6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTUxIiB1bmljb2RlPSImI3hmMjRiOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTE5NTEgNTM4cTAgLTI2IC0xNS41IC00NC41dC0zOC41IC0yMy41cS04IC0yIC0xOCAtMmgtMTUzdjE0MGgxNTNxMTAgMCAxOCAtMnEyMyAtNSAzOC41IC0yMy41dDE1LjUgLTQ0LjV6TTE5MzMgNzUxcTAgLTI1IC0xNSAtNDJ0LTM4IC0yMXEtMyAtMSAtMTUgLTFoLTEzOXYxMjloMTM5cTMgMCA4LjUgLTAuNXQ2LjUgLTAuNXEyMyAtNCAzOCAtMjEuNXQxNSAtNDIuNXpNNzI4IDU4N3YzMDhoLTIyOHYtMzA4cTAgLTU4IC0zOCAtOTQuNQ0KdC0xMDUgLTM2LjVxLTEwOCAwIC0yMjkgNTl2LTExMnE1MyAtMTUgMTIxIC0yM3QxMDkgLTlsNDIgLTFxMzI4IDAgMzI4IDIxN3pNMTQ0MiA0MDN2MTEzcS05OSAtNTIgLTIwMCAtNTlxLTEwOCAtOCAtMTY5IDQxdC02MSAxNDJ0NjEgMTQydDE2OSA0MXExMDEgLTcgMjAwIC01OHYxMTJxLTQ4IDEyIC0xMDAgMTkuNXQtODAgOS41bC0yOCAycS0xMjcgNiAtMjE4LjUgLTE0dC0xNDAuNSAtNjB0LTcxIC04OHQtMjIgLTEwNnQyMiAtMTA2dDcxIC04OA0KdDE0MC41IC02MHQyMTguNSAtMTRxMTAxIDQgMjA4IDMxek0yMTc2IDUxOHEwIDU0IC00MyA4OC41dC0xMDkgMzkuNXYzcTU3IDggODkgNDEuNXQzMiA3OS41cTAgNTUgLTQxIDg4dC0xMDcgMzZxLTMgMCAtMTIgMC41dC0xNCAwLjVoLTQ1NXYtNTEwaDQ5MXE3NCAwIDEyMS41IDM2LjV0NDcuNSA5Ni41ek0yMzA0IDEyODB2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0yMDQ4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwDQp0OTAgMzhoMjA0OHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTUyIiB1bmljb2RlPSImI3hmMjRjOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTg1OCAyOTV2NjkzcS0xMDYgLTQxIC0xNzIgLTEzNS41dC02NiAtMjExLjV0NjYgLTIxMS41dDE3MiAtMTM0LjV6TTEzNjIgNjQxcTAgMTE3IC02NiAyMTEuNXQtMTcyIDEzNS41di02OTRxMTA2IDQxIDE3MiAxMzUuNXQ2NiAyMTEuNXpNMTU3NyA2NDFxMCAtMTU5IC03OC41IC0yOTR0LTIxMy41IC0yMTMuNXQtMjk0IC03OC41cS0xMTkgMCAtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXEwIDE1OSA3OC41IDI5NA0KdDIxMy41IDIxMy41dDI5NCA3OC41dDI5NCAtNzguNXQyMTMuNSAtMjEzLjV0NzguNSAtMjk0ek0xOTYwIDYzNHEwIDEzOSAtNTUuNSAyNjEuNXQtMTQ3LjUgMjA1LjV0LTIxMy41IDEzMXQtMjUyLjUgNDhoLTMwMXEtMTc2IDAgLTMyMy41IC04MXQtMjM1IC0yMzB0LTg3LjUgLTMzNXEwIC0xNzEgODcgLTMxNy41dDIzNiAtMjMxLjV0MzIzIC04NWgzMDFxMTI5IDAgMjUxLjUgNTAuNXQyMTQuNSAxMzV0MTQ3LjUgMjAyLjV0NTUuNSAyNDZ6DQpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTMiIHVuaWNvZGU9IiYjeGYyNGQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTY2NCAtOTZ2MTA4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTEwODhxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMDg4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTA4OHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzkyIDk5MnYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTA4OHE2NiAwIDExMyAtNDd0NDcgLTExMw0Kek0xNDA4IDEzNzZ2LTE2MGgtMTI4djE2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTEwODhxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMDg4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwdi0xMjhoLTE2MHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTA4OHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTQiIHVuaWNvZGU9IiYjeGYyNGU7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTcyOCAxMDg4bC0zODQgLTcwNGg3Njh6TTQ0OCAxMDg4bC0zODQgLTcwNGg3Njh6TTEyNjkgMTI4MHEtMTQgLTQwIC00NS41IC03MS41dC03MS41IC00NS41di0xMjkxaDYwOHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xMzQ0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDYwOHYxMjkxcS00MCAxNCAtNzEuNSA0NS41dC00NS41IDcxLjVoLTQ5MXEtMTQgMCAtMjMgOXQtOSAyM3Y2NA0KcTAgMTQgOSAyM3QyMyA5aDQ5MXEyMSA1NyA3MCA5Mi41dDExMSAzNS41dDExMSAtMzUuNXQ3MCAtOTIuNWg0OTFxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNDkxek0xMDg4IDEyNjRxMzMgMCA1Ni41IDIzLjV0MjMuNSA1Ni41dC0yMy41IDU2LjV0LTU2LjUgMjMuNXQtNTYuNSAtMjMuNXQtMjMuNSAtNTYuNXQyMy41IC01Ni41dDU2LjUgLTIzLjV6TTIxNzYgMzg0cTAgLTczIC00Ni41IC0xMzF0LTExNy41IC05MQ0KdC0xNDQuNSAtNDkuNXQtMTM5LjUgLTE2LjV0LTEzOS41IDE2LjV0LTE0NC41IDQ5LjV0LTExNy41IDkxdC00Ni41IDEzMXEwIDExIDM1IDgxdDkyIDE3NC41dDEwNyAxOTUuNXQxMDIgMTg0dDU2IDEwMHExOCAzMyA1NiAzM3Q1NiAtMzNxNCAtNyA1NiAtMTAwdDEwMiAtMTg0dDEwNyAtMTk1LjV0OTIgLTE3NC41dDM1IC04MXpNODk2IDM4NHEwIC03MyAtNDYuNSAtMTMxdC0xMTcuNSAtOTF0LTE0NC41IC00OS41dC0xMzkuNSAtMTYuNQ0KdC0xMzkuNSAxNi41dC0xNDQuNSA0OS41dC0xMTcuNSA5MXQtNDYuNSAxMzFxMCAxMSAzNSA4MXQ5MiAxNzQuNXQxMDcgMTk1LjV0MTAyIDE4NHQ1NiAxMDBxMTggMzMgNTYgMzN0NTYgLTMzcTQgLTcgNTYgLTEwMHQxMDIgLTE4NHQxMDcgLTE5NS41dDkyIC0xNzQuNXQzNSAtODF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTU1IiB1bmljb2RlPSImI3hmMjUwOyIgDQpkPSJNMTQwOCAxNDA4cTAgLTI2MSAtMTA2LjUgLTQ2MS41dC0yNjYuNSAtMzA2LjVxMTYwIC0xMDYgMjY2LjUgLTMwNi41dDEwNi41IC00NjEuNWg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2cTAgMjYxIDEwNi41IDQ2MS41dDI2Ni41IDMwNi41cS0xNjAgMTA2IC0yNjYuNSAzMDYuNXQtMTA2LjUgNDYxLjVoLTk2cS0xNCAwIC0yMyA5DQp0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnpNODc0IDcwMHE3NyAyOSAxNDkgOTIuNXQxMjkuNSAxNTIuNXQ5Mi41IDIxMHQzNSAyNTNoLTEwMjRxMCAtMTMyIDM1IC0yNTN0OTIuNSAtMjEwdDEyOS41IC0xNTIuNXQxNDkgLTkyLjVxMTkgLTcgMzAuNSAtMjMuNXQxMS41IC0zNi41dC0xMS41IC0zNi41dC0zMC41IC0yMy41cS03NyAtMjkgLTE0OSAtOTIuNQ0KdC0xMjkuNSAtMTUyLjV0LTkyLjUgLTIxMHQtMzUgLTI1M2gxMDI0cTAgMTMyIC0zNSAyNTN0LTkyLjUgMjEwdC0xMjkuNSAxNTIuNXQtMTQ5IDkyLjVxLTE5IDcgLTMwLjUgMjMuNXQtMTEuNSAzNi41dDExLjUgMzYuNXQzMC41IDIzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTU2IiB1bmljb2RlPSImI3hmMjUxOyIgDQpkPSJNMTQwOCAxNDA4cTAgLTI2MSAtMTA2LjUgLTQ2MS41dC0yNjYuNSAtMzA2LjVxMTYwIC0xMDYgMjY2LjUgLTMwNi41dDEwNi41IC00NjEuNWg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2cTAgMjYxIDEwNi41IDQ2MS41dDI2Ni41IDMwNi41cS0xNjAgMTA2IC0yNjYuNSAzMDYuNXQtMTA2LjUgNDYxLjVoLTk2cS0xNCAwIC0yMyA5DQp0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnpNMTI4MCAxNDA4aC0xMDI0cTAgLTY2IDkgLTEyOGgxMDA2cTkgNjEgOSAxMjh6TTEyODAgLTEyOHEwIDEzMCAtMzQgMjQ5LjV0LTkwLjUgMjA4dC0xMjYuNSAxNTJ0LTE0NiA5NC41aC0yMzBxLTc2IC0zMSAtMTQ2IC05NC41dC0xMjYuNSAtMTUydC05MC41IC0yMDh0LTM0IC0yNDkuNWgxMDI0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU1NyIgdW5pY29kZT0iJiN4ZjI1MjsiIA0KZD0iTTE0MDggMTQwOHEwIC0yNjEgLTEwNi41IC00NjEuNXQtMjY2LjUgLTMwNi41cTE2MCAtMTA2IDI2Ni41IC0zMDYuNXQxMDYuNSAtNDYxLjVoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTQ3MnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnEwIDI2MSAxMDYuNSA0NjEuNXQyNjYuNSAzMDYuNXEtMTYwIDEwNiAtMjY2LjUgMzA2LjV0LTEwNi41IDQ2MS41aC05NnEtMTQgMCAtMjMgOQ0KdC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE0NzJxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ6TTEyODAgMTQwOGgtMTAyNHEwIC0yMDYgODUgLTM4NGg4NTRxODUgMTc4IDg1IDM4NHpNMTIyMyAxOTJxLTU0IDE0MSAtMTQ1LjUgMjQxLjV0LTE5NC41IDE0Mi41aC0yMzBxLTEwMyAtNDIgLTE5NC41IC0xNDIuNXQtMTQ1LjUgLTI0MS41aDkxMHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTgiIHVuaWNvZGU9IiYjeGYyNTM7IiANCmQ9Ik0xNDA4IDE0MDhxMCAtMjYxIC0xMDYuNSAtNDYxLjV0LTI2Ni41IC0zMDYuNXExNjAgLTEwNiAyNjYuNSAtMzA2LjV0MTA2LjUgLTQ2MS41aDk2cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE0NzJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZxMCAyNjEgMTA2LjUgNDYxLjV0MjY2LjUgMzA2LjVxLTE2MCAxMDYgLTI2Ni41IDMwNi41dC0xMDYuNSA0NjEuNWgtOTZxLTE0IDAgLTIzIDkNCnQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgxNDcycTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTk2ek04NzQgNzAwcTc3IDI5IDE0OSA5Mi41dDEyOS41IDE1Mi41dDkyLjUgMjEwdDM1IDI1M2gtMTAyNHEwIC0xMzIgMzUgLTI1M3Q5Mi41IC0yMTB0MTI5LjUgLTE1Mi41dDE0OSAtOTIuNXExOSAtNyAzMC41IC0yMy41dDExLjUgLTM2LjV0LTExLjUgLTM2LjV0LTMwLjUgLTIzLjVxLTEzNyAtNTEgLTI0NCAtMTk2DQpoNzAwcS0xMDcgMTQ1IC0yNDQgMTk2cS0xOSA3IC0zMC41IDIzLjV0LTExLjUgMzYuNXQxMS41IDM2LjV0MzAuNSAyMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU1OSIgdW5pY29kZT0iJiN4ZjI1NDsiIA0KZD0iTTE1MDQgLTY0cTE0IDAgMjMgLTl0OSAtMjN2LTEyOHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjEyOHEwIDE0IDkgMjN0MjMgOWgxNDcyek0xMzAgMHEzIDU1IDE2IDEwN3QzMCA5NXQ0NiA4N3Q1My41IDc2dDY0LjUgNjkuNXQ2NiA2MHQ3MC41IDU1dDY2LjUgNDcuNXQ2NSA0M3EtNDMgMjggLTY1IDQzdC02Ni41IDQ3LjV0LTcwLjUgNTV0LTY2IDYwdC02NC41IDY5LjV0LTUzLjUgNzZ0LTQ2IDg3DQp0LTMwIDk1dC0xNiAxMDdoMTI3NnEtMyAtNTUgLTE2IC0xMDd0LTMwIC05NXQtNDYgLTg3dC01My41IC03NnQtNjQuNSAtNjkuNXQtNjYgLTYwdC03MC41IC01NXQtNjYuNSAtNDcuNXQtNjUgLTQzcTQzIC0yOCA2NSAtNDN0NjYuNSAtNDcuNXQ3MC41IC01NXQ2NiAtNjB0NjQuNSAtNjkuNXQ1My41IC03NnQ0NiAtODd0MzAgLTk1dDE2IC0xMDdoLTEyNzZ6TTE1MDQgMTUzNnExNCAwIDIzIC05dDkgLTIzdi0xMjhxMCAtMTQgLTkgLTIzdC0yMyAtOQ0KaC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjEyOHEwIDE0IDkgMjN0MjMgOWgxNDcyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU2MCIgdW5pY29kZT0iJiN4ZjI1NTsiIA0KZD0iTTc2OCAxMTUycS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41di0xMjhoLTMydjkzcTAgNDggLTMyIDgxLjV0LTgwIDMzLjVxLTQ2IDAgLTc5IC0zM3QtMzMgLTc5di00MjlsLTMyIDMwdjE3MnEwIDQ4IC0zMiA4MS41dC04MCAzMy41cS00NiAwIC03OSAtMzN0LTMzIC03OXYtMjI0cTAgLTQ3IDM1IC04MmwzMTAgLTI5NnEzOSAtMzkgMzkgLTEwMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDY0MHEyNiAwIDQ1IDE5dDE5IDQ1djI1DQpxMCA0MSAxMCA3N2wxMDggNDM2cTEwIDM2IDEwIDc3djI0NnEwIDQ4IC0zMiA4MS41dC04MCAzMy41cS00NiAwIC03OSAtMzN0LTMzIC03OXYtMzJoLTMydjEyNXEwIDQwIC0yNSA3Mi41dC02NCA0MC41cS0xNCAyIC0yMyAycS00NiAwIC03OSAtMzN0LTMzIC03OXYtMTI4aC0zMnYxMjJxMCA1MSAtMzIuNSA4OS41dC04Mi41IDQzLjVxLTUgMSAtMTMgMXpNNzY4IDEyODBxODQgMCAxNDkgLTUwcTU3IDM0IDEyMyAzNHE1OSAwIDExMSAtMjcNCnQ4NiAtNzZxMjcgNyA1OSA3cTEwMCAwIDE3MCAtNzEuNXQ3MCAtMTcxLjV2LTI0NnEwIC01MSAtMTMgLTEwOGwtMTA5IC00MzZxLTYgLTI0IC02IC03MXEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtNjQwcS04NCAwIC0xMzggNTguNXQtNTQgMTQyLjVsLTMwOCAyOTZxLTc2IDczIC03NiAxNzV2MjI0cTAgOTkgNzAuNSAxNjkuNXQxNjkuNSA3MC41cTExIDAgMTYgLTFxNiA5NSA3NS41IDE2MHQxNjQuNSA2NXE1MiAwIDk4IC0yMQ0KcTcyIDY5IDE3NCA2OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjEiIHVuaWNvZGU9IiYjeGYyNTY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODgwIDE0MDhxLTQ2IDAgLTc5IC0zM3QtMzMgLTc5di02NTZoLTMydjUyOHEwIDQ2IC0zMyA3OXQtNzkgMzN0LTc5IC0zM3QtMzMgLTc5di01Mjh2LTI1NmwtMTU0IDIwNXEtMzggNTEgLTEwMiA1MXEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC00MyAyNiAtNzdsMzg0IC01MTJxMzggLTUxIDEwMiAtNTFoNjg4cTM0IDAgNjEgMjJ0MzQgNTZsNzYgNDA1cTUgMzIgNSA1OXY0OThxMCA0NiAtMzMgNzl0LTc5IDMzdC03OSAtMzMNCnQtMzMgLTc5di0yNzJoLTMydjUyOHEwIDQ2IC0zMyA3OXQtNzkgMzN0LTc5IC0zM3QtMzMgLTc5di01MjhoLTMydjY1NnEwIDQ2IC0zMyA3OXQtNzkgMzN6TTg4MCAxNTM2cTY4IDAgMTI1LjUgLTM1LjV0ODguNSAtOTYuNXExOSA0IDQyIDRxOTkgMCAxNjkuNSAtNzAuNXQ3MC41IC0xNjkuNXYtMTdxMTA1IDYgMTgwLjUgLTY0dDc1LjUgLTE3NXYtNDk4cTAgLTQwIC04IC04M2wtNzYgLTQwNHEtMTQgLTc5IC03Ni41IC0xMzF0LTE0My41IC01Mg0KaC02ODhxLTYwIDAgLTExNC41IDI3LjV0LTkwLjUgNzQuNWwtMzg0IDUxMnEtNTEgNjggLTUxIDE1NHEwIDEwNiA3NSAxODF0MTgxIDc1cTc4IDAgMTI4IC0zNHY0MzRxMCA5OSA3MC41IDE2OS41dDE2OS41IDcwLjVxMjMgMCA0MiAtNHEzMSA2MSA4OC41IDk2LjV0MTI1LjUgMzUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjIiIHVuaWNvZGU9IiYjeGYyNTc7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTA3MyAtMTI4aC0xNzdxLTE2MyAwIC0yMjYgMTQxcS0yMyA0OSAtMjMgMTAydjVxLTYyIDMwIC05OC41IDg4LjV0LTM2LjUgMTI3LjVxMCAzOCA1IDQ4aC0yNjFxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1aDExM2wtNDQgMTdxLTc0IDI4IC0xMTkuNSA5My41dC00NS41IDE0NS41cTAgMTA2IDc1IDE4MXQxODEgNzVxNDYgMCA5MSAtMTdsNjI4IC0yMzloNDAxcTEwNiAwIDE4MSAtNzV0NzUgLTE4MXYtNjY4DQpxMCAtODggLTU0IC0xNTcuNXQtMTQwIC05MC41bC0zMzkgLTg1cS05MiAtMjMgLTE4NiAtMjN6TTEwMjQgNTgzbC0xNTUgLTcxbC0xNjMgLTc0cS0zMCAtMTQgLTQ4IC00MS41dC0xOCAtNjAuNXEwIC00NiAzMyAtNzl0NzkgLTMzcTI2IDAgNDYgMTBsMzM4IDE1NHEtNDkgMTAgLTgwLjUgNTB0LTMxLjUgOTB2NTV6TTEzNDQgMjcycTAgNDYgLTMzIDc5dC03OSAzM3EtMjYgMCAtNDYgLTEwbC0yOTAgLTEzMnEtMjggLTEzIC0zNyAtMTcNCnQtMzAuNSAtMTd0LTI5LjUgLTIzLjV0LTE2IC0yOXQtOCAtNDAuNXEwIC01MCAzMS41IC04MnQ4MS41IC0zMnEyMCAwIDM4IDlsMzUyIDE2MHEzMCAxNCA0OCA0MS41dDE4IDYwLjV6TTExMTIgMTAyNGwtNjUwIDI0OHEtMjQgOCAtNDYgOHEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC00MCAyMi41IC03M3Q1OS41IC00N2w1MjYgLTIwMHYtNjRoLTY0MHEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41DQp0OTAuNSAtMzcuNWg1MzVsMjMzIDEwNnYxOThxMCA2MyA0NiAxMDZsMTExIDEwMmgtNjl6TTEwNzMgMHE4MiAwIDE1NSAxOWwzMzkgODVxNDMgMTEgNzAgNDUuNXQyNyA3OC41djY2OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNWgtMzA4bC0xMzYgLTEyNnEtMzYgLTMzIC0zNiAtODJ2LTI5NnEwIC00NiAzMyAtNzd0NzkgLTMxdDc5IDM1dDMzIDgxdjIwOGgzMnYtMjA4cTAgLTcwIC01NyAtMTE0cTUyIC04IDg2LjUgLTQ4LjV0MzQuNSAtOTMuNQ0KcTAgLTQyIC0yMyAtNzh0LTYxIC01M2wtMzEwIC0xNDFoOTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTYzIiB1bmljb2RlPSImI3hmMjU4OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTExNTEgMTUzNnE2MSAwIDExNiAtMjh0OTEgLTc3bDU3MiAtNzgxcTExOCAtMTU5IDExOCAtMzU5di0zNTVxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2MTc3bC0yODYgMTQzaC01NDZxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg0MjBsNDIgMTI4aC02ODZxLTEwMCAwIC0xNzMuNSA2Ny41dC04MS41IDE2Ni41cS02NSA3OSAtNjUgMTgydjMyDQpxMCA4MCA1NiAxMzZ0MTM2IDU2aDk1OXpNMTkyMCAtNjR2MzU1cTAgMTU3IC05MyAyODRsLTU3MyA3ODFxLTM5IDUyIC0xMDMgNTJoLTk1OXEtMjYgMCAtNDUgLTE5dC0xOSAtNDVxMCAtMzIgMS41IC00OS41dDkuNSAtNDAuNXQyNSAtNDNxMTAgMzEgMzUuNSA1MHQ1Ni41IDE5aDgzMnYtMzJoLTgzMnEtMjYgMCAtNDUgLTE5dC0xOSAtNDVxMCAtNDQgMyAtNThxOCAtNDQgNDQgLTczdDgxIC0yOWg2NDBoOTFxNDAgMCA2OCAtMjh0MjggLTY4DQpxMCAtMTUgLTUgLTMwbC02NCAtMTkycS0xMCAtMjkgLTM1IC00Ny41dC01NiAtMTguNWgtNDQzcS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi0zMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDU2MXExNiAwIDI5IC03bDMxNyAtMTU4cTI0IC0xMyAzOC41IC0zNnQxNC41IC01MHYtMTk3cTAgLTI2IDE5IC00NXQ0NSAtMTloMzg0cTI2IDAgNDUgMTl0MTkgNDV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY0IiB1bmljb2RlPSImI3hmMjU5OyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTQ1OSAtMjU2cS03NyAwIC0xMzcuNSA0Ny41dC03OS41IDEyMi41bC0xMDEgNDAxcS0xMyA1NyAtMTMgMTA4cTAgNDUgLTUgNjdsLTExNiA0NzdxLTcgMjcgLTcgNTdxMCA5MyA2MiAxNjF0MTU1IDc4cTE3IDg1IDgyLjUgMTM5dDE1Mi41IDU0cTgzIDAgMTQ4IC01MS41dDg1IC0xMzIuNWw4MyAtMzQ4bDEwMyA0MjhxMjAgODEgODUgMTMyLjV0MTQ4IDUxLjVxODkgMCAxNTUuNSAtNTcuNXQ4MC41IC0xNDQuNXE5MiAtMTAgMTUyIC03OQ0KdDYwIC0xNjJxMCAtMjQgLTcgLTU5bC0xMjMgLTUxMnExMCA3IDM3LjUgMjguNXQzOC41IDI5LjV0MzUgMjN0NDEgMjAuNXQ0MS41IDExdDQ5LjUgNS41cTEwNSAwIDE4MCAtNzR0NzUgLTE3OXEwIC02MiAtMjguNSAtMTE4dC03OC41IC05NGwtNTA3IC0zODBxLTY4IC01MSAtMTUzIC01MWgtNjk0ek0xMTA0IDE0MDhxLTM4IDAgLTY4LjUgLTI0dC0zOS41IC02MmwtMTY0IC02ODJoLTEyN2wtMTQ1IDYwMnEtOSAzOCAtMzkuNSA2MnQtNjguNSAyNA0KcS00OCAwIC04MCAtMzN0LTMyIC04MHEwIC0xNSAzIC0yOGwxMzIgLTU0N2gtMjZsLTk5IDQwOHEtOSAzNyAtNDAgNjIuNXQtNjkgMjUuNXEtNDcgMCAtODAgLTMzdC0zMyAtNzlxMCAtMTQgMyAtMjZsMTE2IC00NzhxNyAtMjggOSAtODZ0MTAgLTg4bDEwMCAtNDAxcTggLTMyIDM0IC01Mi41dDU5IC0yMC41aDY5NHE0MiAwIDc2IDI2bDUwNyAzNzlxNTYgNDMgNTYgMTEwcTAgNTIgLTM3LjUgODguNXQtODkuNSAzNi41cS00MyAwIC03NyAtMjYNCmwtMzA3IC0yMzB2MjI3cTAgNCAzMiAxMzh0NjggMjgydDM5IDE2MXE0IDE4IDQgMjlxMCA0NyAtMzIgODF0LTc5IDM0cS0zOSAwIC02OS41IC0yNHQtMzkuNSAtNjJsLTExNiAtNDgyaC0yNmwxNTAgNjI0cTMgMTQgMyAyOHEwIDQ4IC0zMS41IDgydC03OS41IDM0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU2NSIgdW5pY29kZT0iJiN4ZjI1YTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik02NDAgMTQwOHEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXYtNTEydi0zODRsLTE1MSAyMDJxLTQxIDU0IC0xMDcgNTRxLTUyIDAgLTg5IC0zOHQtMzcgLTkwcTAgLTQzIDI2IC03N2wzODQgLTUxMnEzOCAtNTEgMTAyIC01MWg3MThxMjIgMCAzOS41IDEzLjV0MjIuNSAzNC41bDkyIDM2OHEyNCA5NiAyNCAxOTR2MjE3cTAgNDEgLTI4IDcxdC02OCAzMHQtNjggLTI4dC0yOCAtNjhoLTMydjYxcTAgNDggLTMyIDgxLjV0LTgwIDMzLjUNCnEtNDYgMCAtNzkgLTMzdC0zMyAtNzl2LTY0aC0zMnY5MHEwIDU1IC0zNyA5NC41dC05MSAzOS41cS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41di05NmgtMzJ2NTcwcTAgNTUgLTM3IDk0LjV0LTkxIDM5LjV6TTY0MCAxNTM2cTEwNyAwIDE4MS41IC03Ny41dDc0LjUgLTE4NC41di0yMjBxMjIgMiAzMiAycTk5IDAgMTczIC02OXE0NyAyMSA5OSAyMXExMTMgMCAxODQgLTg3cTI3IDcgNTYgN3E5NCAwIDE1OSAtNjcuNXQ2NSAtMTYxLjUNCnYtMjE3cTAgLTExNiAtMjggLTIyNWwtOTIgLTM2OHEtMTYgLTY0IC02OCAtMTA0LjV0LTExOCAtNDAuNWgtNzE4cS02MCAwIC0xMTQuNSAyNy41dC05MC41IDc0LjVsLTM4NCA1MTJxLTUxIDY4IC01MSAxNTRxMCAxMDUgNzQuNSAxODAuNXQxNzkuNSA3NS41cTcxIDAgMTMwIC0zNXY1NDdxMCAxMDYgNzUgMTgxdDE4MSA3NXpNNzY4IDEyOHYzODRoLTMydi0zODRoMzJ6TTEwMjQgMTI4djM4NGgtMzJ2LTM4NGgzMnpNMTI4MCAxMjh2Mzg0aC0zMg0Kdi0zODRoMzJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY2IiB1bmljb2RlPSImI3hmMjViOyIgDQpkPSJNMTI4OCA4ODlxNjAgMCAxMDcgLTIzcTE0MSAtNjMgMTQxIC0yMjZ2LTE3N3EwIC05NCAtMjMgLTE4NmwtODUgLTMzOXEtMjEgLTg2IC05MC41IC0xNDB0LTE1Ny41IC01NGgtNjY4cS0xMDYgMCAtMTgxIDc1dC03NSAxODF2NDAxbC0yMzkgNjI4cS0xNyA0NSAtMTcgOTFxMCAxMDYgNzUgMTgxdDE4MSA3NXE4MCAwIDE0NS41IC00NS41dDkzLjUgLTExOS41bDE3IC00NHYxMTNxMCAxMDYgNzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODENCnYtMjYxcTI3IDUgNDggNXE2OSAwIDEyNy41IC0zNi41dDg4LjUgLTk4LjV6TTEwNzIgODk2cS0zMyAwIC02MC41IC0xOHQtNDEuNSAtNDhsLTc0IC0xNjNsLTcxIC0xNTVoNTVxNTAgMCA5MCAtMzEuNXQ1MCAtODAuNWwxNTQgMzM4cTEwIDIwIDEwIDQ2cTAgNDYgLTMzIDc5dC03OSAzM3pNMTI5MyA3NjFxLTIyIDAgLTQwLjUgLTh0LTI5IC0xNnQtMjMuNSAtMjkuNXQtMTcgLTMwLjV0LTE3IC0zN2wtMTMyIC0yOTBxLTEwIC0yMCAtMTAgLTQ2DQpxMCAtNDYgMzMgLTc5dDc5IC0zM3EzMyAwIDYwLjUgMTh0NDEuNSA0OGwxNjAgMzUycTkgMTggOSAzOHEwIDUwIC0zMiA4MS41dC04MiAzMS41ek0xMjggMTEyMHEwIC0yMiA4IC00NmwyNDggLTY1MHYtNjlsMTAyIDExMXE0MyA0NiAxMDYgNDZoMTk4bDEwNiAyMzN2NTM1cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41di02NDBoLTY0bC0yMDAgNTI2cS0xNCAzNyAtNDcgNTkuNXQtNzMgMjIuNQ0KcS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41ek0xMTgwIC0xMjhxNDQgMCA3OC41IDI3dDQ1LjUgNzBsODUgMzM5cTE5IDczIDE5IDE1NXY5MWwtMTQxIC0zMTBxLTE3IC0zOCAtNTMgLTYxdC03OCAtMjNxLTUzIDAgLTkzLjUgMzQuNXQtNDguNSA4Ni41cS00NCAtNTcgLTExNCAtNTdoLTIwOHYzMmgyMDhxNDYgMCA4MSAzM3QzNSA3OXQtMzEgNzl0LTc3IDMzaC0yOTZxLTQ5IDAgLTgyIC0zNmwtMTI2IC0xMzZ2LTMwOA0KcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNWg2Njh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY3IiB1bmljb2RlPSImI3hmMjVjOyIgaG9yaXotYWR2LXg9IjE5NzMiIA0KZD0iTTg1NyA5OTJ2LTExN3EwIC0xMyAtOS41IC0yMnQtMjIuNSAtOWgtMjk4di04MTJxMCAtMTMgLTkgLTIyLjV0LTIyIC05LjVoLTEzNXEtMTMgMCAtMjIuNSA5dC05LjUgMjN2ODEyaC0yOTdxLTEzIDAgLTIyLjUgOXQtOS41IDIydjExN3EwIDE0IDkgMjN0MjMgOWg3OTNxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xODk1IDk5NWw3NyAtOTYxcTEgLTEzIC04IC0yNHEtMTAgLTEwIC0yMyAtMTBoLTEzNHEtMTIgMCAtMjEgOC41DQp0LTEwIDIwLjVsLTQ2IDU4OGwtMTg5IC00MjVxLTggLTE5IC0yOSAtMTloLTEyMHEtMjAgMCAtMjkgMTlsLTE4OCA0MjdsLTQ1IC01OTBxLTEgLTEyIC0xMCAtMjAuNXQtMjEgLTguNWgtMTM1cS0xMyAwIC0yMyAxMHEtOSAxMCAtOSAyNGw3OCA5NjFxMSAxMiAxMCAyMC41dDIxIDguNWgxNDJxMjAgMCAyOSAtMTlsMjIwIC01MjBxMTAgLTI0IDIwIC01MXEzIDcgOS41IDI0LjV0MTAuNSAyNi41bDIyMSA1MjBxOSAxOSAyOSAxOWgxNDENCnExMyAwIDIyIC04LjV0MTAgLTIwLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY4IiB1bmljb2RlPSImI3hmMjVkOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwNDIgODMzcTAgODggLTYwIDEyMXEtMzMgMTggLTExNyAxOGgtMTIzdi0yODFoMTYycTY2IDAgMTAyIDM3dDM2IDEwNXpNMTA5NCA1NDhsMjA1IC0zNzNxOCAtMTcgLTEgLTMxcS04IC0xNiAtMjcgLTE2aC0xNTJxLTIwIDAgLTI4IDE3bC0xOTQgMzY1aC0xNTV2LTM1MHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xMzRxLTE0IDAgLTIzIDl0LTkgMjN2OTYwcTAgMTQgOSAyM3QyMyA5aDI5NHExMjggMCAxOTAgLTI0cTg1IC0zMSAxMzQgLTEwOQ0KdDQ5IC0xODBxMCAtOTIgLTQyLjUgLTE2NS41dC0xMTUuNSAtMTA5LjVxNiAtMTAgOSAtMTZ6TTg5NiAxMzc2cS0xNTAgMCAtMjg2IC01OC41dC0yMzQuNSAtMTU3dC0xNTcgLTIzNC41dC01OC41IC0yODZ0NTguNSAtMjg2dDE1NyAtMjM0LjV0MjM0LjUgLTE1N3QyODYgLTU4LjV0Mjg2IDU4LjV0MjM0LjUgMTU3dDE1NyAyMzQuNXQ1OC41IDI4NnQtNTguNSAyODZ0LTE1NyAyMzQuNXQtMjM0LjUgMTU3dC0yODYgNTguNXpNMTc5MiA2NDANCnEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU2OSIgdW5pY29kZT0iJiN4ZjI1ZTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik02MDUgMzAzcTE1MyAwIDI1NyAxMDRxMTQgMTggMyAzNmwtNDUgODJxLTYgMTMgLTI0IDE3cS0xNiAyIC0yNyAtMTFsLTQgLTNxLTQgLTQgLTExLjUgLTEwdC0xNy41IC0xMy41dC0yMy41IC0xNC41dC0yOC41IC0xM3QtMzMuNSAtOS41dC0zNy41IC0zLjVxLTc2IDAgLTEyNSA1MHQtNDkgMTI3cTAgNzYgNDggMTI1LjV0MTIyIDQ5LjVxMzcgMCA3MS41IC0xNHQ1MC41IC0yOGwxNiAtMTRxMTEgLTExIDI2IC0xMHExNiAyIDI0IDE0bDUzIDc4DQpxMTMgMjAgLTIgMzlxLTMgNCAtMTEgMTJ0LTMwIDIzLjV0LTQ4LjUgMjh0LTY3LjUgMjIuNXQtODYgMTBxLTE0OCAwIC0yNDYgLTk2LjV0LTk4IC0yNDAuNXEwIC0xNDYgOTcgLTI0MS41dDI0NyAtOTUuNXpNMTIzNSAzMDNxMTUzIDAgMjU3IDEwNHExNCAxOCA0IDM2bC00NSA4MnEtOCAxNCAtMjUgMTdxLTE2IDIgLTI3IC0xMWwtNCAtM3EtNCAtNCAtMTEuNSAtMTB0LTE3LjUgLTEzLjV0LTIzLjUgLTE0LjV0LTI4LjUgLTEzdC0zMy41IC05LjUNCnQtMzcuNSAtMy41cS03NiAwIC0xMjUgNTB0LTQ5IDEyN3EwIDc2IDQ4IDEyNS41dDEyMiA0OS41cTM3IDAgNzEuNSAtMTR0NTAuNSAtMjhsMTYgLTE0cTExIC0xMSAyNiAtMTBxMTYgMiAyNCAxNGw1MyA3OHExMyAyMCAtMiAzOXEtMyA0IC0xMSAxMnQtMzAgMjMuNXQtNDguNSAyOHQtNjcuNSAyMi41dC04NiAxMHEtMTQ3IDAgLTI0NS41IC05Ni41dC05OC41IC0yNDAuNXEwIC0xNDYgOTcgLTI0MS41dDI0NyAtOTUuNXpNODk2IDEzNzYNCnEtMTUwIDAgLTI4NiAtNTguNXQtMjM0LjUgLTE1N3QtMTU3IC0yMzQuNXQtNTguNSAtMjg2dDU4LjUgLTI4NnQxNTcgLTIzNC41dDIzNC41IC0xNTd0Mjg2IC01OC41dDI4NiA1OC41dDIzNC41IDE1N3QxNTcgMjM0LjV0NTguNSAyODZ0LTU4LjUgMjg2dC0xNTcgMjM0LjV0LTIzNC41IDE1N3QtMjg2IDU4LjV6TTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxDQp0LTM0OCAtNzF0LTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjI2MCIgdW5pY29kZT0iJiN4ZjI2MDsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik03MzYgNzM2bDM4NCAtMzg0bC0zODQgLTM4NGwtNjcyIDY3Mmw2NzIgNjcybDE2OCAtMTY4bC05NiAtOTZsLTcyIDcybC00ODAgLTQ4MGw0ODAgLTQ4MGwxOTMgMTkzbC0yODkgMjg3ek0xMzEyIDEzMTJsNjcyIC02NzJsLTY3MiAtNjcybC0xNjggMTY4bDk2IDk2bDcyIC03Mmw0ODAgNDgwbC00ODAgNDgwbC0xOTMgLTE5M2wyODkgLTI4N2wtOTYgLTk2bC0zODQgMzg0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjI2MSIgdW5pY29kZT0iJiN4ZjI2MTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik03MTcgMTgybDI3MSAyNzFsLTI3OSAyNzlsLTg4IC04OGwxOTIgLTE5MWwtOTYgLTk2bC0yNzkgMjc5bDI3OSAyNzlsNDAgLTQwbDg3IDg3bC0xMjcgMTI4bC00NTQgLTQ1NHpNMTA3NSAxOTBsNDU0IDQ1NGwtNDU0IDQ1NGwtMjcxIC0yNzFsMjc5IC0yNzlsODggODhsLTE5MiAxOTFsOTYgOTZsMjc5IC0yNzlsLTI3OSAtMjc5bC00MCA0MGwtODcgLTg4ek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MQ0KdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTcyIiB1bmljb2RlPSImI3hmMjYyOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTY1MSA1MzlxMCAtMzkgLTI3LjUgLTY2LjV0LTY1LjUgLTI3LjVxLTM5IDAgLTY2LjUgMjcuNXQtMjcuNSA2Ni41cTAgMzggMjcuNSA2NS41dDY2LjUgMjcuNXEzOCAwIDY1LjUgLTI3LjV0MjcuNSAtNjUuNXpNMTgwNSA1NDBxMCAtMzkgLTI3LjUgLTY2LjV0LTY2LjUgLTI3LjV0LTY2LjUgMjcuNXQtMjcuNSA2Ni41dDI3LjUgNjZ0NjYuNSAyN3Q2Ni41IC0yN3QyNy41IC02NnpNNzY1IDUzOXEwIDc5IC01Ni41IDEzNnQtMTM2LjUgNTcNCnQtMTM2LjUgLTU2LjV0LTU2LjUgLTEzNi41dDU2LjUgLTEzNi41dDEzNi41IC01Ni41dDEzNi41IDU2LjV0NTYuNSAxMzYuNXpNMTkxOCA1NDBxMCA4MCAtNTYuNSAxMzYuNXQtMTM2LjUgNTYuNXEtNzkgMCAtMTM2IC01Ni41dC01NyAtMTM2LjV0NTYuNSAtMTM2LjV0MTM2LjUgLTU2LjV0MTM2LjUgNTYuNXQ1Ni41IDEzNi41ek04NTAgNTM5cTAgLTExNiAtODEuNSAtMTk3LjV0LTE5Ni41IC04MS41cS0xMTYgMCAtMTk3LjUgODJ0LTgxLjUgMTk3DQp0ODIgMTk2LjV0MTk3IDgxLjV0MTk2LjUgLTgxLjV0ODEuNSAtMTk2LjV6TTIwMDQgNTQwcTAgLTExNSAtODEuNSAtMTk2LjV0LTE5Ny41IC04MS41cS0xMTUgMCAtMTk2LjUgODEuNXQtODEuNSAxOTYuNXQ4MS41IDE5Ni41dDE5Ni41IDgxLjVxMTE2IDAgMTk3LjUgLTgxLjV0ODEuNSAtMTk2LjV6TTEwNDAgNTM3cTAgMTkxIC0xMzUuNSAzMjYuNXQtMzI2LjUgMTM1LjVxLTEyNSAwIC0yMzEgLTYydC0xNjggLTE2OC41dC02MiAtMjMxLjUNCnQ2MiAtMjMxLjV0MTY4IC0xNjguNXQyMzEgLTYycTE5MSAwIDMyNi41IDEzNS41dDEzNS41IDMyNi41ek0xNzA4IDExMTBxLTI1NCAxMTEgLTU1NiAxMTFxLTMxOSAwIC01NzMgLTExMHExMTcgMCAyMjMgLTQ1LjV0MTgyLjUgLTEyMi41dDEyMiAtMTgzdDQ1LjUgLTIyM3EwIDExNSA0My41IDIxOS41dDExOCAxODAuNXQxNzcuNSAxMjN0MjE3IDUwek0yMTg3IDUzN3EwIDE5MSAtMTM1IDMyNi41dC0zMjYgMTM1LjV0LTMyNi41IC0xMzUuNQ0KdC0xMzUuNSAtMzI2LjV0MTM1LjUgLTMyNi41dDMyNi41IC0xMzUuNXQzMjYgMTM1LjV0MTM1IDMyNi41ek0xOTIxIDExMDNoMzgzcS00NCAtNTEgLTc1IC0xMTQuNXQtNDAgLTExNC41cTExMCAtMTUxIDExMCAtMzM3cTAgLTE1NiAtNzcgLTI4OHQtMjA5IC0yMDguNXQtMjg3IC03Ni41cS0xMzMgMCAtMjQ5IDU2dC0xOTYgMTU1cS00NyAtNTYgLTEyOSAtMTc5cS0xMSAyMiAtNTMuNSA4Mi41dC03NC41IDk3LjUNCnEtODAgLTk5IC0xOTYuNSAtMTU1LjV0LTI0OS41IC01Ni41cS0xNTUgMCAtMjg3IDc2LjV0LTIwOSAyMDguNXQtNzcgMjg4cTAgMTg2IDExMCAzMzdxLTkgNTEgLTQwIDExNC41dC03NSAxMTQuNWgzNjVxMTQ5IDEwMCAzNTUgMTU2LjV0NDMyIDU2LjVxMjI0IDAgNDIxIC01NnQzNDggLTE1N3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9ImYyNjMiIHVuaWNvZGU9IiYjeGYyNjM7IiBob3Jpei1hZHYteD0iMTI4MCIgDQpkPSJNNjQwIDYyOXEtMTg4IDAgLTMyMSAxMzN0LTEzMyAzMjBxMCAxODggMTMzIDMyMXQzMjEgMTMzdDMyMSAtMTMzdDEzMyAtMzIxcTAgLTE4NyAtMTMzIC0zMjB0LTMyMSAtMTMzek02NDAgMTMwNnEtOTIgMCAtMTU3LjUgLTY1LjV0LTY1LjUgLTE1OC41cTAgLTkyIDY1LjUgLTE1Ny41dDE1Ny41IC02NS41dDE1Ny41IDY1LjV0NjUuNSAxNTcuNXEwIDkzIC02NS41IDE1OC41dC0xNTcuNSA2NS41ek0xMTYzIDU3NHExMyAtMjcgMTUgLTQ5LjUNCnQtNC41IC00MC41dC0yNi41IC0zOC41dC00Mi41IC0zN3QtNjEuNSAtNDEuNXEtMTE1IC03MyAtMzE1IC05NGw3MyAtNzJsMjY3IC0yNjdxMzAgLTMxIDMwIC03NHQtMzAgLTczbC0xMiAtMTNxLTMxIC0zMCAtNzQgLTMwdC03NCAzMHEtNjcgNjggLTI2NyAyNjhsLTI2NyAtMjY4cS0zMSAtMzAgLTc0IC0zMHQtNzMgMzBsLTEyIDEzcS0zMSAzMCAtMzEgNzN0MzEgNzRsMjY3IDI2N2w3MiA3MnEtMjAzIDIxIC0zMTcgOTQNCnEtMzkgMjUgLTYxLjUgNDEuNXQtNDIuNSAzN3QtMjYuNSAzOC41dC00LjUgNDAuNXQxNSA0OS41cTEwIDIwIDI4IDM1dDQyIDIydDU2IC0ydDY1IC0zNXE1IC00IDE1IC0xMXQ0MyAtMjQuNXQ2OSAtMzAuNXQ5MiAtMjR0MTEzIC0xMXE5MSAwIDE3NCAyNS41dDEyMCA1MC41bDM4IDI1cTMzIDI2IDY1IDM1dDU2IDJ0NDIgLTIydDI4IC0zNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NzQiIHVuaWNvZGU9IiYjeGYyNjQ7IiANCmQ9Ik05MjcgOTU2cTAgLTY2IC00Ni41IC0xMTIuNXQtMTEyLjUgLTQ2LjV0LTExMi41IDQ2LjV0LTQ2LjUgMTEyLjV0NDYuNSAxMTIuNXQxMTIuNSA0Ni41dDExMi41IC00Ni41dDQ2LjUgLTExMi41ek0xMTQxIDU5M3EtMTAgMjAgLTI4IDMydC00Ny41IDkuNXQtNjAuNSAtMjcuNXEtMTAgLTggLTI5IC0yMHQtODEgLTMydC0xMjcgLTIwdC0xMjQgMTh0LTg2IDM2bC0yNyAxOHEtMzEgMjUgLTYwLjUgMjcuNXQtNDcuNSAtOS41dC0yOCAtMzINCnEtMjIgLTQ1IC0yIC03NC41dDg3IC03My41cTgzIC01MyAyMjYgLTY3bC01MSAtNTJxLTE0MiAtMTQyIC0xOTEgLTE5MHEtMjIgLTIyIC0yMiAtNTIuNXQyMiAtNTIuNWw5IC05cTIyIC0yMiA1Mi41IC0yMnQ1Mi41IDIybDE5MSAxOTFxMTE0IC0xMTUgMTkxIC0xOTFxMjIgLTIyIDUyLjUgLTIydDUyLjUgMjJsOSA5cTIyIDIyIDIyIDUyLjV0LTIyIDUyLjVsLTE5MSAxOTBsLTUyIDUycTE0MSAxNCAyMjUgNjdxNjcgNDQgODcgNzMuNXQtMiA3NC41DQp6TTEwOTIgOTU2cTAgMTM0IC05NSAyMjl0LTIyOSA5NXQtMjI5IC05NXQtOTUgLTIyOXQ5NSAtMjI5dDIyOSAtOTV0MjI5IDk1dDk1IDIyOXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTc1IiB1bmljb2RlPSImI3hmMjY1OyIgaG9yaXotYWR2LXg9IjE3MjAiIA0KZD0iTTE1NjUgMTQwOHE2NSAwIDExMCAtNDUuNXQ0NSAtMTEwLjV2LTUxOXEwIC0xNzYgLTY4IC0zMzZ0LTE4Mi41IC0yNzV0LTI3NCAtMTgyLjV0LTMzNC41IC02Ny41cS0xNzYgMCAtMzM1LjUgNjcuNXQtMjc0LjUgMTgyLjV0LTE4MyAyNzV0LTY4IDMzNnY1MTlxMCA2NCA0NiAxMTB0MTEwIDQ2aDE0MDl6TTg2MSAzNDRxNDcgMCA4MiAzM2w0MDQgMzg4cTM3IDM1IDM3IDg1cTAgNDkgLTM0LjUgODMuNXQtODMuNSAzNC41cS00NyAwIC04MiAtMzMNCmwtMzIzIC0zMTBsLTMyMyAzMTBxLTM1IDMzIC04MSAzM3EtNDkgMCAtODMuNSAtMzQuNXQtMzQuNSAtODMuNXEwIC01MSAzNiAtODVsNDA1IC0zODhxMzMgLTMzIDgxIC0zM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NzYiIHVuaWNvZGU9IiYjeGYyNjY7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTQ5NCAtMTAzbC0yOTUgNjk1cS0yNSAtNDkgLTE1OC41IC0zMDUuNXQtMTk4LjUgLTM4OS41cS0xIC0xIC0yNy41IC0wLjV0LTI2LjUgMS41cS04MiAxOTMgLTI1NS41IDU4N3QtMjU5LjUgNTk2cS0yMSA1MCAtNjYuNSAxMDcuNXQtMTAzLjUgMTAwLjV0LTEwMiA0M3EwIDUgLTAuNSAyNHQtMC41IDI3aDU4M3YtNTBxLTM5IC0yIC03OS41IC0xNnQtNjYuNSAtNDN0LTEwIC02NHEyNiAtNTkgMjE2LjUgLTQ5OXQyMzUuNSAtNTQwDQpxMzEgNjEgMTQwIDI2Ni41dDEzMSAyNDcuNXEtMTkgMzkgLTEyNiAyODF0LTEzNiAyOTVxLTM4IDY5IC0yMDEgNzF2NTBsNTEzIC0xdi00N3EtNjAgLTIgLTkzLjUgLTI1dC0xMi41IC02OXEzMyAtNzAgODcgLTE4OS41dDg2IC0xODcuNXExMTAgMjE0IDE3MyAzNjNxMjQgNTUgLTEwIDc5LjV0LTEyOSAyNi41cTEgNyAxIDI1djI0cTY0IDAgMTcwLjUgMC41dDE4MCAxdDkyLjUgMC41di00OXEtNjIgLTIgLTExOSAtMzN0LTkwIC04MQ0KbC0yMTMgLTQ0MnExMyAtMzMgMTI3LjUgLTI5MHQxMjEuNSAtMjc0bDQ0MSAxMDE3cS0xNCAzOCAtNDkuNSA2Mi41dC02NSAzMS41dC01NS41IDh2NTBsNDYwIC00bDEgLTJsLTEgLTQ0cS0xMzkgLTQgLTIwMSAtMTQ1cS01MjYgLTEyMTYgLTU1OSAtMTI5MWgtNDl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTc3IiB1bmljb2RlPSImI3hmMjY3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTk0OSA2NDNxMCAtMjYgLTE2LjUgLTQ1dC00MS41IC0xOXEtMjYgMCAtNDUgMTYuNXQtMTkgNDEuNXEwIDI2IDE3IDQ1dDQyIDE5dDQ0IC0xNi41dDE5IC00MS41ek05NjQgNTg1bDM1MCA1ODFxLTkgLTggLTY3LjUgLTYyLjV0LTEyNS41IC0xMTYuNXQtMTM2LjUgLTEyN3QtMTE3IC0xMTAuNXQtNTAuNSAtNTEuNWwtMzQ5IC01ODBxNyA3IDY3IDYydDEyNiAxMTYuNXQxMzYgMTI3dDExNyAxMTF0NTAgNTAuNXpNMTYxMSA2NDANCnEwIC0yMDEgLTEwNCAtMzcxcS0zIDIgLTE3IDExdC0yNi41IDE2LjV0LTE2LjUgNy41cS0xMyAwIC0xMyAtMTNxMCAtMTAgNTkgLTQ0cS03NCAtMTEyIC0xODQuNSAtMTkwLjV0LTI0MS41IC0xMTAuNWwtMTYgNjdxLTEgMTAgLTE1IDEwcS01IDAgLTggLTUuNXQtMiAtOS41bDE2IC02OHEtNzIgLTE1IC0xNDYgLTE1cS0xOTkgMCAtMzcyIDEwNXExIDIgMTMgMjAuNXQyMS41IDMzLjV0OS41IDE5cTAgMTMgLTEzIDEzcS02IDAgLTE3IC0xNC41DQp0LTIyLjUgLTM0LjV0LTEzLjUgLTIzcS0xMTMgNzUgLTE5MiAxODcuNXQtMTEwIDI0NC41bDY5IDE1cTEwIDMgMTAgMTVxMCA1IC01LjUgOHQtMTAuNSAybC02OCAtMTVxLTE0IDcyIC0xNCAxMzlxMCAyMDYgMTA5IDM3OXEyIC0xIDE4LjUgLTEydDMwIC0xOXQxNy41IC04cTEzIDAgMTMgMTJxMCA2IC0xMi41IDE1LjV0LTMyLjUgMjEuNWwtMjAgMTJxNzcgMTEyIDE4OSAxODl0MjQ0IDEwN2wxNSAtNjdxMiAtMTAgMTUgLTEwcTUgMCA4IDUuNQ0KdDIgMTAuNWwtMTUgNjZxNzEgMTMgMTM0IDEzcTIwNCAwIDM3OSAtMTA5cS0zOSAtNTYgLTM5IC02NXEwIC0xMyAxMiAtMTNxMTEgMCA0OCA2NHExMTEgLTc1IDE4Ny41IC0xODZ0MTA3LjUgLTI0MWwtNTYgLTEycS0xMCAtMiAtMTAgLTE2cTAgLTUgNS41IC04dDkuNSAtMmw1NyAxM3ExNCAtNzIgMTQgLTE0MHpNMTY5NiA2NDBxMCAxNjMgLTYzLjUgMzExdC0xNzAuNSAyNTV0LTI1NSAxNzAuNXQtMzExIDYzLjV0LTMxMSAtNjMuNQ0KdC0yNTUgLTE3MC41dC0xNzAuNSAtMjU1dC02My41IC0zMTF0NjMuNSAtMzExdDE3MC41IC0yNTV0MjU1IC0xNzAuNXQzMTEgLTYzLjV0MzExIDYzLjV0MjU1IDE3MC41dDE3MC41IDI1NXQ2My41IDMxMXpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2IC0xOTF0LTM0OCAtNzF0LTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTENCnQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3OCIgdW5pY29kZT0iJiN4ZjI2ODsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik04OTMgMTUzNnEyNDAgMiA0NTEgLTEyMHEyMzIgLTEzNCAzNTIgLTM3MmwtNzQyIDM5cS0xNjAgOSAtMjk0IC03NC41dC0xODUgLTIyOS41bC0yNzYgNDI0cTEyOCAxNTkgMzExIDI0NS41dDM4MyA4Ny41ek0xNDYgMTEzMWwzMzcgLTY2M3E3MiAtMTQzIDIxMSAtMjE3dDI5MyAtNDVsLTIzMCAtNDUxcS0yMTIgMzMgLTM4NSAxNTcuNXQtMjcyLjUgMzE2dC05OS41IDQxMS41cTAgMjY3IDE0NiA0OTF6TTE3MzIgOTYyDQpxNTggLTE1MCA1OS41IC0zMTAuNXQtNDguNSAtMzA2dC0xNTMgLTI3MnQtMjQ2IC0yMDkuNXEtMjMwIC0xMzMgLTQ5OCAtMTE5bDQwNSA2MjNxODggMTMxIDgyLjUgMjkwLjV0LTEwNi41IDI3Ny41ek04OTYgOTQycTEyNSAwIDIxMy41IC04OC41dDg4LjUgLTIxMy41dC04OC41IC0yMTMuNXQtMjEzLjUgLTg4LjV0LTIxMy41IDg4LjV0LTg4LjUgMjEzLjV0ODguNSAyMTMuNXQyMTMuNSA4OC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3OSIgdW5pY29kZT0iJiN4ZjI2OTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik05MDMgLTI1NnEtMjgzIDAgLTUwNC41IDE1MC41dC0zMjkuNSAzOTguNXEtNTggMTMxIC02NyAzMDF0MjYgMzMyLjV0MTExIDMxMnQxNzkgMjQyLjVsLTExIC0yODFxMTEgMTQgNjggMTUuNXQ3MCAtMTUuNXE0MiA4MSAxNjAuNSAxMzh0MjM0LjUgNTlxLTU0IC00NSAtMTE5LjUgLTE0OC41dC01OC41IC0xNjMuNXEyNSAtOCA2Mi41IC0xMy41dDYzIC03LjV0NjggLTR0NTAuNSAtM3ExNSAtNSA5LjUgLTQ1LjV0LTMwLjUgLTc1LjUNCnEtNSAtNyAtMTYuNSAtMTguNXQtNTYuNSAtMzUuNXQtMTAxIC0zNGwxNSAtMTg5bC0xMzkgNjdxLTE4IC00MyAtNy41IC04MS41dDM2IC02Ni41dDY1LjUgLTQxLjV0ODEgLTYuNXE1MSA5IDk4IDM0LjV0ODMuNSA0NXQ3My41IDE3LjVxNjEgLTQgODkuNSAtMzN0MTkuNSAtNjVxLTEgLTIgLTIuNSAtNS41dC04LjUgLTEyLjV0LTE4IC0xNS41dC0zMS41IC0xMC41dC00Ni41IC0xcS02MCAtOTUgLTE0NC41IC0xMzUuNXQtMjA5LjUgLTI5LjUNCnE3NCAtNjEgMTYyLjUgLTgyLjV0MTY4LjUgLTZ0MTU0LjUgNTJ0MTI4IDg3LjV0ODAuNSAxMDRxNDMgOTEgMzkgMTkyLjV0LTM3LjUgMTg4LjV0LTc4LjUgMTI1cTg3IC0zOCAxMzcgLTc5LjV0NzcgLTExMi41cTE1IDE3MCAtNTcuNSAzNDN0LTIwOS41IDI4NHEyNjUgLTc3IDQxMiAtMjc5LjV0MTUxIC01MTcuNXEyIC0xMjcgLTQwLjUgLTI1NXQtMTIzLjUgLTIzOHQtMTg5IC0xOTZ0LTI0Ny41IC0xMzUuNXQtMjg4LjUgLTQ5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTgwIiB1bmljb2RlPSImI3hmMjZhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE0OTMgMTMwOHEtMTY1IDExMCAtMzU5IDExMHEtMTU1IDAgLTI5MyAtNzN0LTI0MCAtMjAwcS03NSAtOTMgLTExOS41IC0yMTh0LTQ4LjUgLTI2NnYtNDJxNCAtMTQxIDQ4LjUgLTI2NnQxMTkuNSAtMjE4cTEwMiAtMTI3IDI0MCAtMjAwdDI5MyAtNzNxMTk0IDAgMzU5IDExMHEtMTIxIC0xMDggLTI3NC41IC0xNjh0LTMyMi41IC02MHEtMjkgMCAtNDMgMXEtMTc1IDggLTMzMyA4MnQtMjcyIDE5M3QtMTgxIDI4MXQtNjcgMzM5DQpxMCAxODIgNzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzFoM3ExNjggLTEgMzIwLjUgLTYwLjV0MjczLjUgLTE2Ny41ek0xNzkyIDY0MHEwIC0xOTIgLTc3IC0zNjIuNXQtMjEzIC0yOTYuNXEtMTA0IC02MyAtMjIyIC02M3EtMTM3IDAgLTI1NSA4NHExNTQgNTYgMjUzLjUgMjMzdDk5LjUgNDA1cTAgMjI3IC05OSA0MDR0LTI1MyAyMzRxMTE5IDgzIDI1NCA4M3ExMTkgMCAyMjYgLTY1cTEzNSAtMTI1IDIxMC41IC0yOTV0NzUuNSAtMzYxeg0KIiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTgxIiB1bmljb2RlPSImI3hmMjZiOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgNTk5cTAgLTU2IC03IC0xMDRoLTExNTFxMCAtMTQ2IDEwOS41IC0yNDQuNXQyNTcuNSAtOTguNXE5OSAwIDE4NS41IDQ2LjV0MTM2LjUgMTMwLjVoNDIzcS01NiAtMTU5IC0xNzAuNSAtMjgxdC0yNjcuNSAtMTg4LjV0LTMyMSAtNjYuNXEtMTg3IDAgLTM1NiA4M3EtMjI4IC0xMTYgLTM5NCAtMTE2cS0yMzcgMCAtMjM3IDI2M3EwIDExNSA0NSAyNzVxMTcgNjAgMTA5IDIyOXExOTkgMzYwIDQ3NSA2MDYNCnEtMTg0IC03OSAtNDI3IC0zNTRxNjMgMjc0IDI4My41IDQ0OS41dDUwMS41IDE3NS41cTMwIDAgNDUgLTFxMjU1IDExNyA0MzMgMTE3cTY0IDAgMTE2IC0xM3Q5NC41IC00MC41dDY2LjUgLTc2LjV0MjQgLTExNXEwIC0xMTYgLTc1IC0yODZxMTAxIC0xODIgMTAxIC0zOTB6TTE3MjIgMTIzOXEwIDgzIC01MyAxMzJ0LTEzNyA0OXEtMTA4IDAgLTI1NCAtNzBxMTIxIC00NyAyMjIuNSAtMTMxLjV0MTcwLjUgLTE5NS41cTUxIDEzNSA1MSAyMTZ6DQpNMTI4IDJxMCAtODYgNDguNSAtMTMyLjV0MTM0LjUgLTQ2LjVxMTE1IDAgMjY2IDgzcS0xMjIgNzIgLTIxMy41IDE4M3QtMTM3LjUgMjQ1cS05OCAtMjA1IC05OCAtMzMyek02MzIgNzE1aDcyOHEtNSAxNDIgLTExMyAyMzd0LTI1MSA5NXEtMTQ0IDAgLTI1MS41IC05NXQtMTEyLjUgLTIzN3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODIiIHVuaWNvZGU9IiYjeGYyNmM7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMTc5MiAyODh2OTYwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE2MDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTkyMCAxMjQ4di05NjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTczNnYtMTI4aDM1MnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzJxLTE0IDAgLTIzIDl0LTkgMjMNCnY2NHEwIDE0IDkgMjN0MjMgOWgzNTJ2MTI4aC03MzZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjk2MHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODMiIHVuaWNvZGU9IiYjeGYyNmQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTM4IDE0MDhoMTk3cS03MCAtNjQgLTEyNiAtMTQ5cS0zNiAtNTYgLTU5IC0xMTV0LTMwIC0xMjUuNXQtOC41IC0xMjB0MTAuNSAtMTMydDIxIC0xMjZ0MjggLTEzNi41cTQgLTE5IDYgLTI4cTUxIC0yMzggODEgLTMyOXE1NyAtMTcxIDE1MiAtMjc1aC0yNzJxLTQ4IDAgLTgyIDM0dC0zNCA4MnYxMzA0cTAgNDggMzQgODJ0ODIgMzR6TTEzNDYgMTQwOGgzMDhxNDggMCA4MiAtMzR0MzQgLTgydi0xMzA0cTAgLTQ4IC0zNCAtODJ0LTgyIC0zNA0KaC0xNzhxMjEyIDIxMCAxOTYgNTY1bC00NjkgLTEwMXEtMiAtNDUgLTEyIC04MnQtMzEgLTcydC01OS41IC01OS41dC05My41IC0zNi41cS0xMjMgLTI2IC0xOTkgNDBxLTMyIDI3IC01MyA2MXQtNTEuNSAxMjl0LTY0LjUgMjU4cS0zNSAxNjMgLTQ1LjUgMjYzdC01LjUgMTM5dDIzIDc3cTIwIDQxIDYyLjUgNzN0MTAyLjUgNDVxNDUgMTIgODMuNSA2LjV0NjcgLTE3dDU0IC0zNXQ0MyAtNDh0MzQuNSAtNTYuNWw0NjggMTAwDQpxLTY4IDE3NSAtMTgwIDI4N3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODQiIHVuaWNvZGU9IiYjeGYyNmU7IiANCmQ9Ik0xNDAxIC0xMWwtNiAtNnEtMTEzIC0xMTMgLTI1OSAtMTc1cS0xNTQgLTY0IC0zMTcgLTY0cS0xNjUgMCAtMzE3IDY0cS0xNDggNjMgLTI1OSAxNzVxLTExMyAxMTIgLTE3NSAyNThxLTQyIDEwMyAtNTQgMTg5cS00IDI4IDQ4IDM2cTUxIDggNTYgLTIwcTEgLTEgMSAtNHExOCAtOTAgNDYgLTE1OXE1MCAtMTI0IDE1MiAtMjI2cTk4IC05OCAyMjYgLTE1MnExMzIgLTU2IDI3NiAtNTZxMTQzIDAgMjc2IDU2cTEyOCA1NSAyMjUgMTUybDYgNg0KcTEwIDEwIDI1IDZxMTIgLTMgMzMgLTIycTM2IC0zNyAxNyAtNTh6TTkyOSA2MDRsLTY2IC02Nmw2MyAtNjNxMjEgLTIxIC03IC00OXEtMTcgLTE3IC0zMiAtMTdxLTEwIDAgLTE5IDEwbC02MiA2MWwtNjYgLTY2cS01IC01IC0xNSAtNXEtMTUgMCAtMzEgMTZsLTIgMnEtMTggMTUgLTE4IDI5cTAgNyA4IDE3bDY2IDY1bC02NiA2NnEtMTYgMTYgMTQgNDVxMTggMTggMzEgMThxNiAwIDEzIC01bDY1IC02Nmw2NSA2NXExOCAxNyA0OCAtMTMNCnEyNyAtMjcgMTEgLTQ0ek0xNDAwIDU0N3EwIC0xMTggLTQ2IC0yMjhxLTQ1IC0xMDUgLTEyNiAtMTg2cS04MCAtODAgLTE4NyAtMTI2dC0yMjggLTQ2dC0yMjggNDZ0LTE4NyAxMjZxLTgyIDgyIC0xMjUgMTg2cS0xNSAzMyAtMTUgNDBoLTFxLTkgMjcgNDMgNDRxNTAgMTYgNjAgLTEycTM3IC05OSA5NyAtMTY3aDF2MzM5djJxMyAxMzYgMTAyIDIzMnExMDUgMTAzIDI1MyAxMDNxMTQ3IDAgMjUxIC0xMDN0MTA0IC0yNDkNCnEwIC0xNDcgLTEwNC41IC0yNTF0LTI1MC41IC0xMDRxLTU4IDAgLTExMiAxNnEtMjggMTEgLTEzIDYxcTE2IDUxIDQ0IDQzbDE0IC0zcTE0IC0zIDMzIC02dDMwIC0zcTEwNCAwIDE3NiA3MS41dDcyIDE3NC41cTAgMTAxIC03MiAxNzFxLTcxIDcxIC0xNzUgNzFxLTEwNyAwIC0xNzggLTgwcS02NCAtNzIgLTY0IC0xNjB2LTQxM3ExMTAgLTY3IDI0MiAtNjdxOTYgMCAxODUgMzYuNXQxNTYgMTAzLjV0MTAzLjUgMTU1dDM2LjUgMTgzDQpxMCAxOTggLTE0MSAzMzlxLTE0MCAxNDAgLTMzOSAxNDBxLTIwMCAwIC0zNDAgLTE0MHEtNTMgLTUzIC03NyAtODdsLTIgLTJxLTggLTExIC0xMyAtMTUuNXQtMjEuNSAtOS41dC0zOC41IDNxLTIxIDUgLTM2LjUgMTYuNXQtMTUuNSAyNi41djY4MHEwIDE1IDEwLjUgMjYuNXQyNy41IDExLjVoODc3cTMwIDAgMzAgLTU1dC0zMCAtNTVoLTgxMXYtNDgzaDFxNDAgNDIgMTAyIDg0dDEwOCA2MXExMDkgNDYgMjMxIDQ2cTEyMSAwIDIyOCAtNDYNCnQxODcgLTEyNnE4MSAtODEgMTI2IC0xODZxNDYgLTExMiA0NiAtMjI5ek0xMzY5IDExMjhxOSAtOCA5IC0xOHQtNS41IC0xOHQtMTYuNSAtMjFxLTI2IC0yNiAtMzkgLTI2cS05IDAgLTE2IDdxLTEwNiA5MSAtMjA3IDEzM3EtMTI4IDU2IC0yNzYgNTZxLTEzMyAwIC0yNjIgLTQ5cS0yNyAtMTAgLTQ1IDM3cS05IDI1IC04IDM4cTMgMTYgMTYgMjBxMTMwIDU3IDI5OSA1N3ExNjQgMCAzMTYgLTY0cTEzNyAtNTggMjM1IC0xNTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTg1IiB1bmljb2RlPSImI3hmMjcwOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE1NTEgNjBxMTUgNiAyNiAzdDExIC0xNy41dC0xNSAtMzMuNXEtMTMgLTE2IC00NCAtNDMuNXQtOTUuNSAtNjh0LTE0MSAtNzR0LTE4OCAtNTh0LTIyOS41IC0yNC41cS0xMTkgMCAtMjM4IDMxdC0yMDkgNzYuNXQtMTcyLjUgMTA0dC0xMzIuNSAxMDV0LTg0IDg3LjVxLTggOSAtMTAgMTYuNXQxIDEydDggN3QxMS41IDJ0MTEuNSAtNC41cTE5MiAtMTE3IDMwMCAtMTY2cTM4OSAtMTc2IDc5OSAtOTBxMTkwIDQwIDM5MSAxMzV6DQpNMTc1OCAxNzVxMTEgLTE2IDIuNSAtNjkuNXQtMjguNSAtMTAyLjVxLTM0IC04MyAtODUgLTEyNHEtMTcgLTE0IC0yNiAtOXQwIDI0cTIxIDQ1IDQ0LjUgMTIxLjV0Ni41IDk4LjVxLTUgNyAtMTUuNSAxMS41dC0yNyA2dC0yOS41IDIuNXQtMzUgMHQtMzEuNSAtMnQtMzEgLTN0LTIyLjUgLTJxLTYgLTEgLTEzIC0xLjV0LTExIC0xdC04LjUgLTF0LTcgLTAuNWgtNS41aC00LjV0LTMgMC41dC0yIDEuNWwtMS41IDNxLTYgMTYgNDcgNDB0MTAzIDMwDQpxNDYgNyAxMDggMXQ3NiAtMjR6TTEzNjQgNjE4cTAgLTMxIDEzLjUgLTY0dDMyIC01OHQzNy41IC00NnQzMyAtMzJsMTMgLTExbC0yMjcgLTIyNHEtNDAgMzcgLTc5IDc1LjV0LTU4IDU4LjVsLTE5IDIwcS0xMSAxMSAtMjUgMzNxLTM4IC01OSAtOTcuNSAtMTAyLjV0LTEyNy41IC02My41dC0xNDAgLTIzdC0xMzcuNSAyMXQtMTE3LjUgNjUuNXQtODMgMTEzdC0zMSAxNjIuNXEwIDg0IDI4IDE1NHQ3MiAxMTYuNXQxMDYuNSA4M3QxMjIuNSA1Nw0KdDEzMCAzNC41dDExOS41IDE4LjV0OTkuNSA2LjV2MTI3cTAgNjUgLTIxIDk3cS0zNCA1MyAtMTIxIDUzcS02IDAgLTE2LjUgLTF0LTQwLjUgLTEydC01NiAtMjkuNXQtNTYgLTU5LjV0LTQ4IC05NmwtMjk0IDI3cTAgNjAgMjIgMTE5dDY3IDExM3QxMDggOTV0MTUxLjUgNjUuNXQxOTAuNSAyNC41cTEwMCAwIDE4MSAtMjV0MTI5LjUgLTYxLjV0ODEgLTgzdDQ1IC04NnQxMi41IC03My41di01ODl6TTY5MiA1OTdxMCAtODYgNzAgLTEzMw0KcTY2IC00NCAxMzkgLTIycTg0IDI1IDExNCAxMjNxMTQgNDUgMTQgMTAxdjE2MnEtNTkgLTIgLTExMSAtMTJ0LTEwNi41IC0zMy41dC04NyAtNzF0LTMyLjUgLTExNC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU4NiIgdW5pY29kZT0iJiN4ZjI3MTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNTM2IDEyODBxNTIgMCA5MCAtMzh0MzggLTkwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgxMjh6TTExNTIgMTM3NnYtMjg4cTAgLTE0IDkgLTIzdDIzIC05DQpoNjRxMTQgMCAyMyA5dDkgMjN2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN6TTM4NCAxMzc2di0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN6TTE1MzYgLTEyOHYxMDI0aC0xNDA4di0xMDI0aDE0MDh6TTg5NiA0NDhoMjI0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTIyNA0Kdi0yMjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMjI0djIyNHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi0yMjR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTg3IiB1bmljb2RlPSImI3hmMjcyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTExNTIgNDE2di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC01NzZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMgLTl0OSAtMjN6TTEyOCAtMTI4aDE0MDh2MTAyNGgtMTQwOHYtMTAyNHpNNTEyIDEwODh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTI4MCAxMDg4djI4OHEwIDE0IC05IDIzDQp0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTY2NCAxMTUydi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00Nw0KdDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTg4IiB1bmljb2RlPSImI3hmMjczOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTExMTEgMTUxbC00NiAtNDZxLTkgLTkgLTIyIC05dC0yMyA5bC0xODggMTg5bC0xODggLTE4OXEtMTAgLTkgLTIzIC05dC0yMiA5bC00NiA0NnEtOSA5IC05IDIydDkgMjNsMTg5IDE4OGwtMTg5IDE4OHEtOSAxMCAtOSAyM3Q5IDIybDQ2IDQ2cTkgOSAyMiA5dDIzIC05bDE4OCAtMTg4bDE4OCAxODhxMTAgOSAyMyA5dDIyIC05bDQ2IC00NnE5IC05IDkgLTIydC05IC0yM2wtMTg4IC0xODhsMTg4IC0xODhxOSAtMTAgOSAtMjN0LTkgLTIyeg0KTTEyOCAtMTI4aDE0MDh2MTAyNGgtMTQwOHYtMTAyNHpNNTEyIDEwODh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTI4MCAxMDg4djI4OHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTE1MnYtMTI4MA0KcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgxMjhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU4OSIgdW5pY29kZT0iJiN4ZjI3NDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMzAzIDU3MmwtNTEyIC01MTJxLTEwIC05IC0yMyAtOXQtMjMgOWwtMjg4IDI4OHEtOSAxMCAtOSAyM3Q5IDIybDQ2IDQ2cTkgOSAyMiA5dDIzIC05bDIyMCAtMjIwbDQ0NCA0NDRxMTAgOSAyMyA5dDIyIC05bDQ2IC00NnE5IC05IDkgLTIydC05IC0yM3pNMTI4IC0xMjhoMTQwOHYxMDI0aC0xNDA4di0xMDI0ek01MTIgMTA4OHYyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMjg4cTAgLTE0IDkgLTIzDQp0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTEyODAgMTA4OHYyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMjg4cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0xNjY0IDExNTJ2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xNDA4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDEyOHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMgLTQ3DQp0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMTI4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTAiIHVuaWNvZGU9IiYjeGYyNzU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNDQ4IDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1di04OTFsNTM2IDQyOXExNyAxNCA0MCAxNHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTM3OWw1MzYgNDI5cTE3IDE0IDQwIDE0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTE1MnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMzg0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU5MSIgdW5pY29kZT0iJiN4ZjI3NjsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik01MTIgNDQ4cTY2IDAgMTI4IDE1di02NTVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY2NTVxNjIgLTE1IDEyOCAtMTV6TTUxMiAxNTM2cTIxMiAwIDM2MiAtMTUwdDE1MCAtMzYydC0xNTAgLTM2MnQtMzYyIC0xNTB0LTM2MiAxNTB0LTE1MCAzNjJ0MTUwIDM2MnQzNjIgMTUwek01MTIgMTMxMnExNCAwIDIzIDl0OSAyM3QtOSAyM3QtMjMgOXEtMTQ2IDAgLTI0OSAtMTAzdC0xMDMgLTI0OQ0KcTAgLTE0IDkgLTIzdDIzIC05dDIzIDl0OSAyM3EwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTkyIiB1bmljb2RlPSImI3hmMjc3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NDUgMTIzOXExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTE0MSAtMTQxcS0yOCAtMjggLTY4IC0yOGgtMTM0NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDU3NnY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTY0aDUxMnE0MCAwIDY4IC0yOHpNNzY4IDMyMGgyNTZ2LTUxMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djUxMnpNMTYwMCA3NjgNCnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEzNDRxLTQwIDAgLTY4IDI4bC0xNDEgMTQxcS0xMCAxMCAtMTAgMjN0MTAgMjNsMTQxIDE0MXEyOCAyOCA2OCAyOGg1MTJ2MTkyaDI1NnYtMTkyaDU3NnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTMiIHVuaWNvZGU9IiYjeGYyNzg7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMjAyMCAxNTI1cTI4IC0yMCAyOCAtNTN2LTE0MDhxMCAtMjAgLTExIC0zNnQtMjkgLTIzbC02NDAgLTI1NnEtMjQgLTExIC00OCAwbC02MTYgMjQ2bC02MTYgLTI0NnEtMTAgLTUgLTI0IC01cS0xOSAwIC0zNiAxMXEtMjggMjAgLTI4IDUzdjE0MDhxMCAyMCAxMSAzNnQyOSAyM2w2NDAgMjU2cTI0IDExIDQ4IDBsNjE2IC0yNDZsNjE2IDI0NnEzMiAxMyA2MCAtNnpNNzM2IDEzOTB2LTEyNzBsNTc2IC0yMzB2MTI3MHpNMTI4IDExNzMNCnYtMTI3MGw1NDQgMjE3djEyNzB6TTE5MjAgMTA3djEyNzBsLTU0NCAtMjE3di0xMjcweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU5NCIgdW5pY29kZT0iJiN4ZjI3OTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik01MTIgMTUzNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE0NzJxMCAtMjAgLTE3IC0yOGwtNDgwIC0yNTZxLTcgLTQgLTE1IC00cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTQ3MnEwIDIwIDE3IDI4bDQ4MCAyNTZxNyA0IDE1IDR6TTE3NjAgMTUzNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE0NzJxMCAtMjAgLTE3IC0yOGwtNDgwIC0yNTZxLTcgLTQgLTE1IC00cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTQ3Mg0KcTAgMjAgMTcgMjhsNDgwIDI1NnE3IDQgMTUgNHpNNjQwIDE1MzZxOCAwIDE0IC0zbDUxMiAtMjU2cTE4IC0xMCAxOCAtMjl2LTE0NzJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41cS04IDAgLTE0IDNsLTUxMiAyNTZxLTE4IDEwIC0xOCAyOXYxNDcycTAgMTMgOS41IDIyLjV0MjIuNSA5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTk1IiB1bmljb2RlPSImI3hmMjdhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTY0MCA2NDBxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNjQwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDA4IDY0MHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNQ0KdC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNzkyIDY0MHEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTExMCAwIC0yMTEgMThxLTE3MyAtMTczIC00MzUgLTIyOXEtNTIgLTEwIC04NiAtMTNxLTEyIC0xIC0yMiA2dC0xMyAxOHEtNCAxNSAyMCAzN3E1IDUgMjMuNSAyMS41dDI1LjUgMjMuNXQyMy41IDI1LjV0MjQgMzEuNXQyMC41IDM3DQp0MjAgNDh0MTQuNSA1Ny41dDEyLjUgNzIuNXEtMTQ2IDkwIC0yMjkuNSAyMTYuNXQtODMuNSAyNjkuNXEwIDE3NCAxMjAgMzIxLjV0MzI2IDIzM3Q0NTAgODUuNXQ0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTYiIHVuaWNvZGU9IiYjeGYyN2I7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNjQwIDY0MHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTEwMjQgNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTQwOCA2NDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjUNCnQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTg5NiAxMTUycS0yMDQgMCAtMzgxLjUgLTY5LjV0LTI4MiAtMTg3LjV0LTEwNC41IC0yNTVxMCAtMTEyIDcxLjUgLTIxMy41dDIwMS41IC0xNzUuNWw4NyAtNTBsLTI3IC05NnEtMjQgLTkxIC03MCAtMTcycTE1MiA2MyAyNzUgMTcxbDQzIDM4bDU3IC02cTY5IC04IDEzMCAtOHEyMDQgMCAzODEuNSA2OS41dDI4MiAxODcuNQ0KdDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwcTAgLTE3NCAtMTIwIC0zMjEuNXQtMzI2IC0yMzN0LTQ1MCAtODUuNXEtNzAgMCAtMTQ1IDhxLTE5OCAtMTc1IC00NjAgLTI0MnEtNDkgLTE0IC0xMTQgLTIyaC01cS0xNSAwIC0yNyAxMC41dC0xNiAyNy41djFxLTMgNCAtMC41IDEydDIgMTB0NC41IDkuNWw2IDl0NyA4LjV0OCA5cTcgOCAzMSAzNC41dDM0LjUgMzh0MzEgMzkuNXQzMi41IDUxDQp0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MXEwIDEzMCA3MSAyNDguNXQxOTEgMjA0LjV0Mjg2IDEzNi41dDM0OCA1MC41dDM0OCAtNTAuNXQyODYgLTEzNi41dDE5MSAtMjA0LjV0NzEgLTI0OC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU5NyIgdW5pY29kZT0iJiN4ZjI3YzsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik01MTIgMzQ1bDUxMiAyOTV2LTU5MWwtNTEyIC0yOTZ2NTkyek0wIDY0MHYtNTkxbDUxMiAyOTZ6TTUxMiAxNTI3di01OTFsLTUxMiAtMjk2djU5MXpNNTEyIDkzNmw1MTIgMjk1di01OTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTk4IiB1bmljb2RlPSImI3hmMjdkOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3MDkgMTAxOHEtMTAgLTIzNiAtMzMyIC02NTFxLTMzMyAtNDMxIC01NjIgLTQzMXEtMTQyIDAgLTI0MCAyNjNxLTQ0IDE2MCAtMTMyIDQ4MnEtNzIgMjYyIC0xNTcgMjYycS0xOCAwIC0xMjcgLTc2bC03NyA5OHEyNCAyMSAxMDggOTYuNXQxMzAgMTE1LjVxMTU2IDEzOCAyNDEgMTQ2cTk1IDkgMTUzIC01NS41dDgxIC0yMDMuNXE0NCAtMjg3IDY2IC0zNzNxNTUgLTI0OSAxMjAgLTI0OXE1MSAwIDE1NCAxNjFxMTAxIDE2MSAxMDkgMjQ2DQpxMTMgMTM5IC0xMDkgMTM5cS01NyAwIC0xMjEgLTI2cTEyMCAzOTMgNDU5IDM4MnEyNTEgLTggMjM2IC0zMjZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMjdlIiB1bmljb2RlPSImI3hmMjdlOyIgDQpkPSJNMCAxNDA4aDE1MzZ2LTE1MzZoLTE1MzZ2MTUzNnpNMTA4NSAyOTNsLTIyMSA2MzFsMjIxIDI5N2gtNjM0bDIyMSAtMjk3bC0yMjEgLTYzMWwzMTcgLTMwNHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyODAiIHVuaWNvZGU9IiYjeGYyODA7IiANCmQ9Ik0wIDE0MDhoMTUzNnYtMTUzNmgtMTUzNnYxNTM2ek05MDggMTA4OGwtMTIgLTMzbDc1IC04M2wtMzEgLTExNGwyNSAtMjVsMTA3IDU3bDEwNyAtNTdsMjUgMjVsLTMxIDExNGw3NSA4M2wtMTIgMzNoLTk1bC01MyA5NmgtMzJsLTUzIC05NmgtOTV6TTY0MSA5MjVxMzIgMCA0NC41IC0xNnQxMS41IC02M2wxNzQgMjFxMCA1NSAtMTcuNSA5Mi41dC01MC41IDU2dC02OSAyNS41dC04NSA3cS0xMzMgMCAtMTk5IC01Ny41dC02NiAtMTgyLjV2LTcyDQpoLTk2di0xMjhoNzZxMjAgMCAyMCAtOHYtMzgycTAgLTE0IC01IC0yMHQtMTggLTdsLTczIC03di04OGg0NDh2ODZsLTE0OSAxNHEtNiAxIC04LjUgMS41dC0zLjUgMi41dC0wLjUgNHQxIDd0MC41IDEwdjM4N2gxOTFsMzggMTI4aC0yMzFxLTYgMCAtMiA2dDQgOXY4MHEwIDI3IDEuNSA0MC41dDcuNSAyOHQxOS41IDIwdDM2LjUgNS41ek0xMjQ4IDk2djg2bC01NCA5cS03IDEgLTkuNSAyLjV0LTIuNSAzdDEgNy41dDEgMTJ2NTIwaC0yNzUNCmwtMjMgLTEwMWw4MyAtMjJxMjMgLTcgMjMgLTI3di0zNzBxMCAtMTQgLTYgLTE4LjV0LTIwIC02LjVsLTcwIC05di04NmgzNTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMjgxIiB1bmljb2RlPSImI3hmMjgxOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgNjkwcTAgLTU4IC0yOS41IC0xMDUuNXQtNzkuNSAtNzIuNXExMiAtNDYgMTIgLTk2cTAgLTE1NSAtMTA2LjUgLTI4N3QtMjkwLjUgLTIwOC41dC00MDAgLTc2LjV0LTM5OS41IDc2LjV0LTI5MCAyMDguNXQtMTA2LjUgMjg3cTAgNDcgMTEgOTRxLTUxIDI1IC04MiA3My41dC0zMSAxMDYuNXEwIDgyIDU4IDE0MC41dDE0MSA1OC41cTg1IDAgMTQ1IC02M3EyMTggMTUyIDUxNSAxNjJsMTE2IDUyMXEzIDEzIDE1IDIxdDI2IDUNCmwzNjkgLTgxcTE4IDM3IDU0IDU5LjV0NzkgMjIuNXE2MiAwIDEwNiAtNDMuNXQ0NCAtMTA1LjV0LTQ0IC0xMDZ0LTEwNiAtNDR0LTEwNS41IDQzLjV0LTQzLjUgMTA1LjVsLTMzNCA3NGwtMTA0IC00NzJxMzAwIC05IDUxOSAtMTYwcTU4IDYxIDE0MyA2MXE4MyAwIDE0MSAtNTguNXQ1OCAtMTQwLjV6TTQxOCA0OTFxMCAtNjIgNDMuNSAtMTA2dDEwNS41IC00NHQxMDYgNDR0NDQgMTA2dC00NCAxMDUuNXQtMTA2IDQzLjVxLTYxIDAgLTEwNSAtNDQNCnQtNDQgLTEwNXpNMTIyOCAxMzZxMTEgMTEgMTEgMjZ0LTExIDI2cS0xMCAxMCAtMjUgMTB0LTI2IC0xMHEtNDEgLTQyIC0xMjEgLTYydC0xNjAgLTIwdC0xNjAgMjB0LTEyMSA2MnEtMTEgMTAgLTI2IDEwdC0yNSAtMTBxLTExIC0xMCAtMTEgLTI1LjV0MTEgLTI2LjVxNDMgLTQzIDExOC41IC02OHQxMjIuNSAtMjkuNXQ5MSAtNC41dDkxIDQuNXQxMjIuNSAyOS41dDExOC41IDY4ek0xMjI1IDM0MXE2MiAwIDEwNS41IDQ0dDQzLjUgMTA2DQpxMCA2MSAtNDQgMTA1dC0xMDUgNDRxLTYyIDAgLTEwNiAtNDMuNXQtNDQgLTEwNS41dDQ0IC0xMDZ0MTA2IC00NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MDIiIHVuaWNvZGU9IiYjeGYyODI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNjkgNzQxaDFxMTYgMTI2IDU4LjUgMjQxLjV0MTE1IDIxN3QxNjcuNSAxNzZ0MjIzLjUgMTE3LjV0Mjc2LjUgNDNxMjMxIDAgNDE0IC0xMDUuNXQyOTQgLTMwMy41cTEwNCAtMTg3IDEwNCAtNDQydi0xODhoLTExMjVxMSAtMTExIDUzLjUgLTE5Mi41dDEzNi41IC0xMjIuNXQxODkuNSAtNTd0MjEzIC0zdDIwOCA0Ni41dDE3My41IDg0LjV2LTM3N3EtOTIgLTU1IC0yMjkuNSAtOTJ0LTMxMi41IC0zOHQtMzE2IDUzDQpxLTE4OSA3MyAtMzExLjUgMjQ5dC0xMjQuNSAzNzJxLTMgMjQyIDExMSA0MTJ0MzI1IDI2OHEtNDggLTYwIC03OCAtMTI1LjV0LTQ2IC0xNTkuNWg2MzVxOCA3NyAtOCAxNDB0LTQ3IDEwMS41dC03MC41IDY2LjV0LTgwLjUgNDF0LTc1IDIwLjV0LTU2IDguNWwtMjIgMXEtMTM1IC01IC0yNTkuNSAtNDQuNXQtMjIzLjUgLTEwNC41dC0xNzYgLTE0MC41dC0xMzggLTE2My41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYwMyIgdW5pY29kZT0iJiN4ZjI4MzsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0wIDMydjYwOGgyMzA0di02MDhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE5ODRxLTY2IDAgLTExMyA0N3QtNDcgMTEzek02NDAgMjU2di0xMjhoMzg0djEyOGgtMzg0ek0yNTYgMjU2di0xMjhoMjU2djEyOGgtMjU2ek0yMTQ0IDE0MDhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTIyNGgtMjMwNHYyMjRxMCA2NiA0NyAxMTN0MTEzIDQ3aDE5ODR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjA0IiB1bmljb2RlPSImI3hmMjg0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE1ODQgMjQ2bC0yMTggMTExcS03NCAtMTIwIC0xOTYuNSAtMTg5dC0yNjMuNSAtNjlxLTE0NyAwIC0yNzEgNzJ0LTE5NiAxOTZ0LTcyIDI3MHEwIDExMCA0Mi41IDIwOS41dDExNSAxNzJ0MTcyIDExNXQyMDkuNSA0Mi41cTEzMSAwIDI0Ny41IC02MC41dDE5Mi41IC0xNjguNWwyMTUgMTI1cS0xMTAgMTY5IC0yODYuNSAyNjV0LTM3OC41IDk2cS0xNjEgMCAtMzA4IC02M3QtMjUzIC0xNjl0LTE2OSAtMjUzdC02MyAtMzA4dDYzIC0zMDgNCnQxNjkgLTI1M3QyNTMgLTE2OXQzMDggLTYzcTIxMyAwIDM5Ny41IDEwN3QyOTAuNSAyOTJ6TTEwMzAgNjQzbDY5MyAtMzUycS0xMTYgLTI1MyAtMzM0LjUgLTQwMHQtNDkyLjUgLTE0N3EtMTgyIDAgLTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxcTI2MCAwIDQ3MC41IC0xMzMuNXQzMzUuNSAtMzY2LjV6TTE1NDMgNjQwaC0zOXYtMTYwaC05NnYzNTJoMTM2cTMyIDAgNTQuNSAtMjANCnQyOC41IC00OHQxIC01NnQtMjcuNSAtNDh0LTU3LjUgLTIweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjI4NSIgdW5pY29kZT0iJiN4ZjI4NTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNDI3IDgyN2wtNjE0IDM4Nmw5MiAxNTFoODU1ek00MDUgNTYybC0xODQgMTE2djg1OGwxMTgzIC03NDN6TTE0MjQgNjk3bDE0NyAtOTV2LTg1OGwtNTMyIDMzNXpNMTM4NyA3MThsLTUwMCAtODAyaC04NTVsMzU2IDU3MXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyODYiIHVuaWNvZGU9IiYjeGYyODY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNNjQwIDUyOHYyMjRxMCAxNiAtMTYgMTZoLTk2cS0xNiAwIC0xNiAtMTZ2LTIyNHEwIC0xNiAxNiAtMTZoOTZxMTYgMCAxNiAxNnpNMTE1MiA1Mjh2MjI0cTAgMTYgLTE2IDE2aC05NnEtMTYgMCAtMTYgLTE2di0yMjRxMCAtMTYgMTYgLTE2aDk2cTE2IDAgMTYgMTZ6TTE2NjQgNDk2di03NTJoLTY0MHYzMjBxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTMyMGgtNjQwdjc1MnEwIDE2IDE2IDE2aDk2DQpxMTYgMCAxNiAtMTZ2LTExMmgxMjh2NjI0cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ2LTExMmgxMjh2MTEycTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ2LTExMmgxMjh2MTEycTAgNiAyLjUgOS41dDguNSA1dDkuNSAydDExLjUgMHQ5IC0wLjV2MzkxcS0zMiAxNSAtMzIgNTBxMCAyMyAxNi41IDM5dDM4LjUgMTZ0MzguNSAtMTZ0MTYuNSAtMzlxMCAtMzUgLTMyIC01MHYtMTdxNDUgMTAgODMgMTBxMjEgMCA1OS41IC03LjV0NTQuNSAtNy41DQpxMTcgMCA0NyA3LjV0MzcgNy41cTE2IDAgMTYgLTE2di0yMTBxMCAtMTUgLTM1IC0yMS41dC02MiAtNi41cS0xOCAwIC01NC41IDcuNXQtNTUuNSA3LjVxLTQwIDAgLTkwIC0xMnYtMTMzcTEgMCA5IDAuNXQxMS41IDB0OS41IC0ydDguNSAtNXQyLjUgLTkuNXYtMTEyaDEyOHYxMTJxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnYtMTEyaDEyOHYxMTJxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnYtNjI0aDEyOHYxMTJxMCAxNiAxNiAxNmg5Ng0KcTE2IDAgMTYgLTE2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYwNyIgdW5pY29kZT0iJiN4ZjI4NzsiIGhvcml6LWFkdi14PSIyMzA0IiANCmQ9Ik0yMjg4IDczMXExNiAtOCAxNiAtMjd0LTE2IC0yN2wtMzIwIC0xOTJxLTggLTUgLTE2IC01cS05IDAgLTE2IDRxLTE2IDEwIC0xNiAyOHYxMjhoLTg1OHEzNyAtNTggODMgLTE2NXExNiAtMzcgMjQuNSAtNTV0MjQgLTQ5dDI3IC00N3QyNyAtMzR0MzEuNSAtMjZ0MzMgLThoOTZ2OTZxMCAxNCA5IDIzdDIzIDloMzIwcTE0IDAgMjMgLTl0OSAtMjN2LTMyMHEwIC0xNCAtOSAtMjN0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDl0LTkgMjN2OTZoLTk2DQpxLTMyIDAgLTYxIDEwdC01MSAyMy41dC00NSA0MC41dC0zNyA0NnQtMzMuNSA1N3QtMjguNSA1Ny41dC0yOCA2MC41cS0yMyA1MyAtMzcgODEuNXQtMzYgNjV0LTQ0LjUgNTMuNXQtNDYuNSAxN2gtMzYwcS0yMiAtODQgLTkxIC0xMzh0LTE1NyAtNTRxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1cTg4IDAgMTU3IC01NHQ5MSAtMTM4aDEwNHEyNCAwIDQ2LjUgMTd0NDQuNSA1My41dDM2IDY1dDM3IDgxLjVxMTkgNDEgMjggNjAuNQ0KdDI4LjUgNTcuNXQzMy41IDU3dDM3IDQ2dDQ1IDQwLjV0NTEgMjMuNXQ2MSAxMGgxMDdxMjEgNTcgNzAgOTIuNXQxMTEgMzUuNXE4MCAwIDEzNiAtNTZ0NTYgLTEzNnQtNTYgLTEzNnQtMTM2IC01NnEtNjIgMCAtMTExIDM1LjV0LTcwIDkyLjVoLTEwN3EtMTcgMCAtMzMgLTh0LTMxLjUgLTI2dC0yNyAtMzR0LTI3IC00N3QtMjQgLTQ5dC0yNC41IC01NXEtNDYgLTEwNyAtODMgLTE2NWgxMTE0djEyOHEwIDE4IDE2IDI4dDMyIC0xeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYwOCIgdW5pY29kZT0iJiN4ZjI4ODsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMTUwIDc3NHEwIC01NiAtMzkuNSAtOTV0LTk1LjUgLTM5aC0yNTN2MjY5aDI1M3E1NiAwIDk1LjUgLTM5LjV0MzkuNSAtOTUuNXpNMTMyOSA3NzRxMCAxMzAgLTkxLjUgMjIydC0yMjIuNSA5MmgtNDMzdi04OTZoMTgwdjI2OWgyNTNxMTMwIDAgMjIyIDkxLjV0OTIgMjIxLjV6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OA0KdDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MDkiIHVuaWNvZGU9IiYjeGYyODk7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTY0NSA0MzhxMCA1OSAtMzQgMTA2LjV0LTg3IDY4LjVxLTcgLTQ1IC0yMyAtOTJxLTcgLTI0IC0yNy41IC0zOHQtNDQuNSAtMTRxLTEyIDAgLTI0IDNxLTMxIDEwIC00NSAzOC41dC00IDU4LjVxMjMgNzEgMjMgMTQzcTAgMTIzIC02MSAyMjcuNXQtMTY2IDE2NS41dC0yMjggNjFxLTEzNCAwIC0yNDcgLTczdC0xNjcgLTE5NHExMDggLTI4IDE4OCAtMTA2cTIyIC0yMyAyMiAtNTV0LTIyIC01NHQtNTQgLTIydC01NSAyMg0KcS03NSA3NSAtMTgwIDc1cS0xMDYgMCAtMTgxIC03NC41dC03NSAtMTgwLjV0NzUgLTE4MC41dDE4MSAtNzQuNWgxMDQ2cTc5IDAgMTM0LjUgNTUuNXQ1NS41IDEzMy41ek0xNzk4IDQzOHEwIC0xNDIgLTEwMC41IC0yNDJ0LTI0Mi41IC0xMDBoLTEwNDZxLTE2OSAwIC0yODkgMTE5LjV0LTEyMCAyODguNXEwIDE1MyAxMDAgMjY3dDI0OSAxMzZxNjIgMTg0IDIyMSAyOTh0MzU0IDExNHEyMzUgMCA0MDguNSAtMTU4LjV0MTk2LjUgLTM4OS41DQpxMTE2IC0yNSAxOTIuNSAtMTE4LjV0NzYuNSAtMjE0LjV6TTIwNDggNDM4cTAgLTE3NSAtOTcgLTMxOXEtMjMgLTMzIC02NCAtMzNxLTI0IDAgLTQzIDEzcS0yNiAxNyAtMzIgNDguNXQxMiA1Ny41cTcxIDEwNCA3MSAyMzN0LTcxIDIzM3EtMTggMjYgLTEyIDU3dDMyIDQ5dDU3LjUgMTEuNXQ0OS41IC0zMi41cTk3IC0xNDIgOTcgLTMxOHpNMjMwNCA0MzhxMCAtMjQ0IC0xMzQgLTQ0M3EtMjMgLTM0IC02NCAtMzRxLTIzIDAgLTQyIDEzDQpxLTI2IDE4IC0zMi41IDQ5dDExLjUgNTdxMTA4IDE2NCAxMDggMzU4cTAgMTk1IC0xMDggMzU3cS0xOCAyNiAtMTEuNSA1Ny41dDMyLjUgNDguNXEyNiAxOCA1NyAxMnQ0OSAtMzNxMTM0IC0xOTggMTM0IC00NDJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjEwIiB1bmljb2RlPSImI3hmMjhhOyIgDQpkPSJNMTUwMCAtMTNxMCAtODkgLTYzIC0xNTIuNXQtMTUzIC02My41dC0xNTMuNSA2My41dC02My41IDE1Mi41cTAgOTAgNjMuNSAxNTMuNXQxNTMuNSA2My41dDE1MyAtNjMuNXQ2MyAtMTUzLjV6TTEyNjcgMjY4cS0xMTUgLTE1IC0xOTIuNSAtMTAyLjV0LTc3LjUgLTIwNS41cTAgLTc0IDMzIC0xMzhxLTE0NiAtNzggLTM3OSAtNzhxLTEwOSAwIC0yMDEgMjF0LTE1My41IDU0LjV0LTExMC41IDc2LjV0LTc2IDg1dC00NC41IDgzDQp0LTIzLjUgNjYuNXQtNiAzOS41cTAgMTkgNC41IDQyLjV0MTguNSA1NnQzNi41IDU4dDY0IDQzLjV0OTQuNSAxOHQ5NCAtMTcuNXQ2MyAtNDF0MzUuNSAtNTN0MTcuNSAtNDl0NCAtMzMuNXEwIC0zNCAtMjMgLTgxcTI4IC0yNyA4MiAtNDJ0OTMgLTE3bDQwIC0xcTExNSAwIDE5MCA1MXQ3NSAxMzNxMCAyNiAtOSA0OC41dC0zMS41IDQ0LjV0LTQ5LjUgNDF0LTc0IDQ0dC05My41IDQ3LjV0LTExOS41IDU2LjVxLTI4IDEzIC00MyAyMA0KcS0xMTYgNTUgLTE4NyAxMDB0LTEyMi41IDEwMnQtNzIgMTI1LjV0LTIwLjUgMTYyLjVxMCA3OCAyMC41IDE1MHQ2NiAxMzcuNXQxMTIuNSAxMTR0MTY2LjUgNzd0MjIxLjUgMjguNXExMjAgMCAyMjAgLTI2dDE2NC41IC02N3QxMDkuNSAtOTR0NjQgLTEwNS41dDE5IC0xMDMuNXEwIC00NiAtMTUgLTgyLjV0LTM2LjUgLTU4dC00OC41IC0zNnQtNDkgLTE5LjV0LTM5IC01aC04aC0zMnQtMzkgNXQtNDQgMTR0LTQxIDI4dC0zNyA0NnQtMjQgNzAuNQ0KdC0xMCA5Ny41cS0xNSAxNiAtNTkgMjUuNXQtODEgMTAuNWwtMzcgMXEtNjggMCAtMTE3LjUgLTMxdC03MC41IC03MHQtMjEgLTc2cTAgLTI0IDUgLTQzdDI0IC00NnQ1MyAtNTF0OTcgLTUzLjV0MTUwIC01OC41cTc2IC0yNSAxMzguNSAtNTMuNXQxMDkgLTU1LjV0ODMgLTU5dDYwLjUgLTU5LjV0NDEgLTYyLjV0MjYuNSAtNjJ0MTQuNSAtNjMuNXQ2IC02MnQxIC02Mi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxMSIgdW5pY29kZT0iJiN4ZjI4YjsiIA0KZD0iTTcwNCAzNTJ2NTc2cTAgMTQgLTkgMjN0LTIzIDloLTI1NnEtMTQgMCAtMjMgLTl0LTkgLTIzdi01NzZxMCAtMTQgOSAtMjN0MjMgLTloMjU2cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDM1MnY1NzZxMCAxNCAtOSAyM3QtMjMgOWgtMjU2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTU3NnEwIC0xNCA5IC0yM3QyMyAtOWgyNTZxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzDQp0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjEyIiB1bmljb2RlPSImI3hmMjhjOyIgDQpkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNNzY4IDk2cTE0OCAwIDI3MyA3M3QxOTggMTk4dDczIDI3M3QtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczDQp0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczek04NjQgMzIwcS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnpNNDgwIDMyMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjEzIiB1bmljb2RlPSImI3hmMjhkOyIgDQpkPSJNMTA4OCAzNTJ2NTc2cTAgMTQgLTkgMjN0LTIzIDloLTU3NnEtMTQgMCAtMjMgLTl0LTkgLTIzdi01NzZxMCAtMTQgOSAtMjN0MjMgLTloNTc2cTE0IDAgMjMgOXQ5IDIzek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjUNCnQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxNCIgdW5pY29kZT0iJiN4ZjI4ZTsiIA0KZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTc2OCA5NnExNDggMCAyNzMgNzN0MTk4IDE5OHQ3MyAyNzN0LTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3Mw0KdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3pNNDgwIDMyMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMgLTl0OSAtMjN2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC01NzZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE1IiB1bmljb2RlPSImI3hmMjkwOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3NTcgMTI4bDM1IC0zMTNxMyAtMjggLTE2IC01MHEtMTkgLTIxIC00OCAtMjFoLTE2NjRxLTI5IDAgLTQ4IDIxcS0xOSAyMiAtMTYgNTBsMzUgMzEzaDE3MjJ6TTE2NjQgOTY3bDg2IC03NzVoLTE3MDhsODYgNzc1cTMgMjQgMjEgNDAuNXQ0MyAxNi41aDI1NnYtMTI4cTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41djEyOGgzODR2LTEyOHEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjUNCnQ5MC41IDM3LjV0MzcuNSA5MC41djEyOGgyNTZxMjUgMCA0MyAtMTYuNXQyMSAtNDAuNXpNMTI4MCAxMTUydi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV2MjU2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI1NnEwIDE1OSAxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNXQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxNiIgdW5pY29kZT0iJiN4ZjI5MTsiIGhvcml6LWFkdi14PSIyMDQ4IiANCmQ9Ik0xOTIwIDc2OHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNWgtMTVsLTExNSAtNjYycS04IC00NiAtNDQgLTc2dC04MiAtMzBoLTEyODBxLTQ2IDAgLTgyIDMwdC00NCA3NmwtMTE1IDY2MmgtMTVxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjVoMTc5MnpNNDg1IC0zMnEyNiAyIDQzLjUgMjIuNXQxNS41IDQ2LjVsLTMyIDQxNnEtMiAyNiAtMjIuNSA0My41DQp0LTQ2LjUgMTUuNXQtNDMuNSAtMjIuNXQtMTUuNSAtNDYuNWwzMiAtNDE2cTIgLTI1IDIwLjUgLTQydDQzLjUgLTE3aDV6TTg5NiAzMnY0MTZxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXYtNDE2cTAgLTI2IDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEyODAgMzJ2NDE2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjMyIDI3bDMyIDQxNg0KcTIgMjYgLTE1LjUgNDYuNXQtNDMuNSAyMi41dC00Ni41IC0xNS41dC0yMi41IC00My41bC0zMiAtNDE2cS0yIC0yNiAxNS41IC00Ni41dDQzLjUgLTIyLjVoNXEyNSAwIDQzLjUgMTd0MjAuNSA0MnpNNDc2IDEyNDRsLTkzIC00MTJoLTEzMmwxMDEgNDQxcTE5IDg4IDg5IDE0My41dDE2MCA1NS41aDE2N3EwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDVoMTY3cTkwIDAgMTYwIC01NS41dDg5IC0xNDMuNWwxMDEgLTQ0MQ0KaC0xMzJsLTkzIDQxMnEtMTEgNDQgLTQ1LjUgNzJ0LTc5LjUgMjhoLTE2N3EwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1aC0xNjdxLTQ1IDAgLTc5LjUgLTI4dC00NS41IC03MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MTciIHVuaWNvZGU9IiYjeGYyOTI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNOTkxIDUxMmw2NCAyNTZoLTI1NGwtNjQgLTI1NmgyNTR6TTE3NTkgMTAxNmwtNTYgLTIyNHEtNyAtMjQgLTMxIC0yNGgtMzI3bC02NCAtMjU2aDMxMXExNSAwIDI1IC0xMnExMCAtMTQgNiAtMjhsLTU2IC0yMjRxLTUgLTI0IC0zMSAtMjRoLTMyN2wtODEgLTMyOHEtNyAtMjQgLTMxIC0yNGgtMjI0cS0xNiAwIC0yNiAxMnEtOSAxMiAtNiAyOGw3OCAzMTJoLTI1NGwtODEgLTMyOHEtNyAtMjQgLTMxIC0yNGgtMjI1cS0xNSAwIC0yNSAxMg0KcS05IDEyIC02IDI4bDc4IDMxMmgtMzExcS0xNSAwIC0yNSAxMnEtOSAxMiAtNiAyOGw1NiAyMjRxNyAyNCAzMSAyNGgzMjdsNjQgMjU2aC0zMTFxLTE1IDAgLTI1IDEycS0xMCAxNCAtNiAyOGw1NiAyMjRxNSAyNCAzMSAyNGgzMjdsODEgMzI4cTcgMjQgMzIgMjRoMjI0cTE1IDAgMjUgLTEycTkgLTEyIDYgLTI4bC03OCAtMzEyaDI1NGw4MSAzMjhxNyAyNCAzMiAyNGgyMjRxMTUgMCAyNSAtMTJxOSAtMTIgNiAtMjhsLTc4IC0zMTJoMzExDQpxMTUgMCAyNSAtMTJxOSAtMTIgNiAtMjh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE4IiB1bmljb2RlPSImI3hmMjkzOyIgDQpkPSJNODQxIDQ4M2wxNDggLTE0OGwtMTQ5IC0xNDl6TTg0MCAxMDk0bDE0OSAtMTQ5bC0xNDggLTE0OHpNNzEwIC0xMzBsNDY0IDQ2NGwtMzA2IDMwNmwzMDYgMzA2bC00NjQgNDY0di02MTFsLTI1NSAyNTVsLTkzIC05M2wzMjAgLTMyMWwtMzIwIC0zMjFsOTMgLTkzbDI1NSAyNTV2LTYxMXpNMTQyOSA2NDBxMCAtMjA5IC0zMiAtMzY1LjV0LTg3LjUgLTI1N3QtMTQwLjUgLTE2Mi41dC0xODEuNSAtODYuNXQtMjE5LjUgLTI0LjUNCnQtMjE5LjUgMjQuNXQtMTgxLjUgODYuNXQtMTQwLjUgMTYyLjV0LTg3LjUgMjU3dC0zMiAzNjUuNXQzMiAzNjUuNXQ4Ny41IDI1N3QxNDAuNSAxNjIuNXQxODEuNSA4Ni41dDIxOS41IDI0LjV0MjE5LjUgLTI0LjV0MTgxLjUgLTg2LjV0MTQwLjUgLTE2Mi41dDg3LjUgLTI1N3QzMiAtMzY1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE5IiB1bmljb2RlPSImI3hmMjk0OyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTU5NiAxMTNsMTczIDE3MmwtMTczIDE3MnYtMzQ0ek01OTYgODIzbDE3MyAxNzJsLTE3MyAxNzJ2LTM0NHpNNjI4IDY0MGwzNTYgLTM1NmwtNTM5IC01NDB2NzExbC0yOTcgLTI5NmwtMTA4IDEwOGwzNzIgMzczbC0zNzIgMzczbDEwOCAxMDhsMjk3IC0yOTZ2NzExbDUzOSAtNTQweiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYyMCIgdW5pY29kZT0iJiN4ZjI5NTsiIA0KZD0iTTEyODAgMjU2cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNNTEyIDEwMjRxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0xNTM2IDI1NnEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41DQp0MTEyLjUgLTI3MS41ek0xNDQwIDEzNDRxMCAtMjAgLTEzIC0zOGwtMTA1NiAtMTQwOHEtMTkgLTI2IC01MSAtMjZoLTE2MHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMjAgMTMgMzhsMTA1NiAxNDA4cTE5IDI2IDUxIDI2aDE2MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTc2OCAxMDI0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV0LTI3MS41IDExMi41dC0xMTIuNSAyNzEuNXQxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNQ0KdDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjIxIiB1bmljb2RlPSImI3hmMjk2OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwNCA4MzBsNzkyIC0xMDE1bC04NjggNjMwcS0xOCAxMyAtMjUgMzQuNXQwIDQyLjVsMTAxIDMwOHYwek01NjYgODMwaDY2MGwtMzMwIC0xMDE1djB6TTM2OCAxNDQybDE5OCAtNjEyaC00NjJsMTk4IDYxMnE4IDIzIDMzIDIzdDMzIC0yM3pNMTY4OCA4MzBsMTAxIC0zMDhxNyAtMjEgMCAtNDIuNXQtMjUgLTM0LjVsLTg2OCAtNjMwbDc5MiAxMDE1djB6TTE2ODggODMwaC00NjJsMTk4IDYxMnE4IDIzIDMzIDIzdDMzIC0yM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjIiIHVuaWNvZGU9IiYjeGYyOTc7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMzg0IDcwNGgxNjB2MjI0aC0xNjB2LTIyNHpNMTIyMSAzNzJ2OTJxLTEwNCAtMzYgLTI0MyAtMzhxLTEzNSAtMSAtMjU5LjUgNDYuNXQtMjIwLjUgMTIyLjVsMSAtOTZxODggLTgwIDIxMiAtMTI4LjV0MjcyIC00Ny41cTEyOSAwIDIzOCA0OXpNNjQwIDcwNGg2NDB2MjI0aC02NDB2LTIyNHpNMTc5MiA3MzZxMCAtMTg3IC05OSAtMzUycTg5IC0xMDIgODkgLTIyOXEwIC0xNTcgLTEyOS41IC0yNjh0LTMxMy41IC0xMTENCnEtMTIyIDAgLTIyNSA1Mi41dC0xNjEgMTQwLjVxLTE5IC0xIC01NyAtMXQtNTcgMXEtNTggLTg4IC0xNjEgLTE0MC41dC0yMjUgLTUyLjVxLTE4NCAwIC0zMTMuNSAxMTF0LTEyOS41IDI2OHEwIDEyNyA4OSAyMjlxLTk5IDE2NSAtOTkgMzUycTAgMjA5IDEyMCAzODUuNXQzMjYuNSAyNzkuNXQ0NDkuNSAxMDN0NDQ5LjUgLTEwM3QzMjYuNSAtMjc5LjV0MTIwIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjMiIHVuaWNvZGU9IiYjeGYyOTg7IiANCmQ9Ik01MTUgNjI1di0xMjhoLTI1MnYxMjhoMjUyek01MTUgODgwdi0xMjdoLTI1MnYxMjdoMjUyek0xMjczIDM2OXYtMTI4aC0zNDF2MTI4aDM0MXpNMTI3MyA2MjV2LTEyOGgtNjcydjEyOGg2NzJ6TTEyNzMgODgwdi0xMjdoLTY3MnYxMjdoNjcyek0xNDA4IDIwdjEyNDBxMCA4IC02IDE0dC0xNCA2aC0zMmwtMzc4IC0yNTZsLTIxMCAxNzFsLTIxMCAtMTcxbC0zNzggMjU2aC0zMnEtOCAwIC0xNCAtNnQtNiAtMTR2LTEyNDBxMCAtOCA2IC0xNA0KdDE0IC02aDEyNDBxOCAwIDE0IDZ0NiAxNHpNNTUzIDExMzBsMTg1IDE1MGgtNDA2ek05ODMgMTEzMGwyMjEgMTUwaC00MDZ6TTE1MzYgMTI2MHYtMTI0MHEwIC02MiAtNDMgLTEwNXQtMTA1IC00M2gtMTI0MHEtNjIgMCAtMTA1IDQzdC00MyAxMDV2MTI0MHEwIDYyIDQzIDEwNXQxMDUgNDNoMTI0MHE2MiAwIDEwNSAtNDN0NDMgLTEwNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjQiIHVuaWNvZGU9IiYjeGYyOTk7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODk2IDcyMHEtMTA0IDE5NiAtMTYwIDI3OHEtMTM5IDIwMiAtMzQ3IDMxOHEtMzQgMTkgLTcwIDM2cS04OSA0MCAtOTQgMzJ0MzQgLTM4bDM5IC0zMXE2MiAtNDMgMTEyLjUgLTkzLjV0OTQuNSAtMTE2LjV0NzAuNSAtMTEzdDcwLjUgLTEzMXE5IC0xNyAxMyAtMjVxNDQgLTg0IDg0IC0xNTN0OTggLTE1NHQxMTUuNSAtMTUwdDEzMSAtMTIzLjV0MTQ4LjUgLTkwLjVxMTUzIC02NiAxNTQgLTYwcTEgMyAtNDkgMzdxLTUzIDM2IC04MSA1Nw0KcS03NyA1OCAtMTc5IDIxMXQtMTg1IDMxMHpNNTQ5IDE3N3EtNzYgNjAgLTEzMi41IDEyNXQtOTggMTQzLjV0LTcxIDE1NC41dC01OC41IDE4NnQtNTIgMjA5dC02MC41IDI1MnQtNzYuNSAyODlxMjczIDAgNDk3LjUgLTM2dDM3OSAtOTJ0MjcxIC0xNDQuNXQxODUuNSAtMTcyLjV0MTEwIC0xOTguNXQ1NiAtMTk5LjV0MTIuNSAtMTk4LjV0LTkuNSAtMTczdC0yMCAtMTQzLjV0LTEzIC0xMDdsMzIzIC0zMjdoLTEwNGwtMjgxIDI4NQ0KcS0yMiAtMiAtOTEuNSAtMTR0LTEyMS41IC0xOXQtMTM4IC02dC0xNjAuNSAxN3QtMTY3LjUgNTl0LTE3OSAxMTF6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI1IiB1bmljb2RlPSImI3hmMjlhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEzNzQgODc5cS02IDI2IC0yOC41IDM5LjV0LTQ4LjUgNy41cS0yNjEgLTYyIC00MDEgLTYydC00MDEgNjJxLTI2IDYgLTQ4LjUgLTcuNXQtMjguNSAtMzkuNXQ3LjUgLTQ4LjV0MzkuNSAtMjguNXExOTQgLTQ2IDMwMyAtNThxLTIgLTE1OCAtMTUuNSAtMjY5dC0yNi41IC0xNTUuNXQtNDEgLTExNS41bC05IC0yMXEtMTAgLTI1IDEgLTQ5dDM2IC0zNHE5IC00IDIzIC00cTQ0IDAgNjAgNDFsOCAyMHE1NCAxMzkgNzEgMjU5aDQyDQpxMTcgLTEyMCA3MSAtMjU5bDggLTIwcTE2IC00MSA2MCAtNDFxMTQgMCAyMyA0cTI1IDEwIDM2IDM0dDEgNDlsLTkgMjFxLTI4IDcxIC00MSAxMTUuNXQtMjYuNSAxNTUuNXQtMTUuNSAyNjlxMTA5IDEyIDMwMyA1OHEyNiA2IDM5LjUgMjguNXQ3LjUgNDguNXpNMTAyNCAxMDI0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41eg0KTTE2MDAgNjQwcTAgLTE0MyAtNTUuNSAtMjczLjV0LTE1MCAtMjI1dC0yMjUgLTE1MHQtMjczLjUgLTU1LjV0LTI3My41IDU1LjV0LTIyNSAxNTB0LTE1MCAyMjV0LTU1LjUgMjczLjV0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXpNODk2IDE0MDhxLTE1NiAwIC0yOTggLTYxdC0yNDUgLTE2NHQtMTY0IC0yNDV0LTYxIC0yOTh0NjEgLTI5OA0KdDE2NCAtMjQ1dDI0NSAtMTY0dDI5OCAtNjF0Mjk4IDYxdDI0NSAxNjR0MTY0IDI0NXQ2MSAyOTh0LTYxIDI5OHQtMTY0IDI0NXQtMjQ1IDE2NHQtMjk4IDYxek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYyNiIgdW5pY29kZT0iJiN4ZjI5YjsiIA0KZD0iTTE0MzggNzIzcTM0IC0zNSAyOSAtODJsLTQ0IC01NTFxLTQgLTQyIC0zNC41IC03MHQtNzEuNSAtMjhxLTYgMCAtOSAxcS00NCAzIC03Mi41IDM2LjV0LTI1LjUgNzcuNWwzNSA0MjlsLTE0MyAtOHE1NSAtMTEzIDU1IC0yNDBxMCAtMjE2IC0xNDggLTM3MmwtMTM3IDEzN3E5MSAxMDEgOTEgMjM1cTAgMTQ1IC0xMDIuNSAyNDh0LTI0Ny41IDEwM3EtMTM0IDAgLTIzNiAtOTJsLTEzNyAxMzhxMTIwIDExNCAyODQgMTQxbDI2NCAzMDANCmwtMTQ5IDg3bC0xODEgLTE2MXEtMzMgLTMwIC03NyAtMjcuNXQtNzMgMzUuNXQtMjYuNSA3N3QzNC41IDczbDIzOSAyMTNxMjYgMjMgNjAgMjYuNXQ2NCAtMTQuNWw0ODggLTI4M3EzNiAtMjEgNDggLTY4cTE3IC02NyAtMjYgLTExN2wtMjA1IC0yMzJsMzcxIDIwcTQ5IDMgODMgLTMyek0xMjQwIDExODBxLTc0IDAgLTEyNiA1MnQtNTIgMTI2dDUyIDEyNnQxMjYgNTJ0MTI2LjUgLTUydDUyLjUgLTEyNnQtNTIuNSAtMTI2dC0xMjYuNSAtNTJ6DQpNNjEzIC02MnExMDYgMCAxOTYgNjFsMTM5IC0xMzlxLTE0NiAtMTE2IC0zMzUgLTExNnEtMTQ4IDAgLTI3My41IDczdC0xOTguNSAxOTh0LTczIDI3M3EwIDE4OCAxMTYgMzM2bDEzOSAtMTM5cS02MCAtODggLTYwIC0xOTdxMCAtMTQ1IDEwMi41IC0yNDcuNXQyNDcuNSAtMTAyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI3IiB1bmljb2RlPSImI3hmMjljOyIgDQpkPSJNODgwIDMzNnYtMTYwcTAgLTE0IC05IC0yM3QtMjMgLTloLTE2MHEtMTQgMCAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMgLTl0OSAtMjN6TTExMzYgODMycTAgLTUwIC0xNSAtOTB0LTQ1LjUgLTY5dC01MiAtNDR0LTU5LjUgLTM2cS0zMiAtMTggLTQ2LjUgLTI4dC0yNiAtMjR0LTExLjUgLTI5di0zMnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNjBxLTE0IDAgLTIzIDl0LTkgMjN2NjhxMCAzNSAxMC41IDY0LjUNCnQyNCA0Ny41dDM5IDM1LjV0NDEgMjUuNXQ0NC41IDIxcTUzIDI1IDc1IDQzdDIyIDQ5cTAgNDIgLTQzLjUgNzEuNXQtOTUuNSAyOS41cS01NiAwIC05NSAtMjdxLTI5IC0yMCAtODAgLTgzcS05IC0xMiAtMjUgLTEycS0xMSAwIC0xOSA2bC0xMDggODJxLTEwIDcgLTEyIDIwdDUgMjNxMTIyIDE5MiAzNDkgMTkycTEyOSAwIDIzOC41IC04OS41dDEwOS41IC0yMTQuNXpNNzY4IDEyODBxLTEzMCAwIC0yNDguNSAtNTF0LTIwNCAtMTM2LjUNCnQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV0LTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41DQp0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI4IiB1bmljb2RlPSImI3hmMjlkOyIgaG9yaXotYWR2LXg9IjE0MDgiIA0KZD0iTTM2NiAxMjI1cS02NCAwIC0xMTAgNDUuNXQtNDYgMTEwLjVxMCA2NCA0NiAxMDkuNXQxMTAgNDUuNXQxMDkuNSAtNDUuNXQ0NS41IC0xMDkuNXEwIC02NSAtNDUuNSAtMTEwLjV0LTEwOS41IC00NS41ek05MTcgNTgzcTAgLTUwIC0zMCAtNjcuNXQtNjMuNSAtNi41dC00Ny41IDM0bC0zNjcgNDM4cS03IDEyIC0xNCAxNS41dC0xMSAxLjVsLTMgLTNxLTcgLTggNCAtMjFsMTIyIC0xMzlsMSAtMzU0bC0xNjEgLTQ1Nw0KcS02NyAtMTkyIC05MiAtMjM0cS0xNSAtMjYgLTI4IC0zMnEtNTAgLTI2IC0xMDMgLTFxLTI5IDEzIC00MS41IDQzdC05LjUgNTdxMiAxNyAxOTcgNjE4bDUgNDE2bC04NSAtMTY0bDM1IC0yMjJxNCAtMjQgLTEgLTQydC0xNCAtMjcuNXQtMTkgLTE2dC0xNyAtNy41bC03IC0ycS0xOSAtMyAtMzQuNSAzdC0yNCAxNnQtMTQgMjJ0LTcuNSAxOS41dC0yIDkuNWwtNDYgMjk5bDIxMSAzODFxMjMgMzQgMTEzIDM0cTc1IDAgMTA3IC00MGw0MjQgLTUyMQ0KcTcgLTUgMTQgLTE3bDMgLTNsLTEgLTFxNyAtMTMgNyAtMjl6TTUxNCA0MzNxNDMgLTExMyA4OC41IC0yMjV0NjkuNSAtMTY4bDI0IC01NXEzNiAtOTMgNDIgLTEyNXExMSAtNzAgLTM2IC05N3EtMzUgLTIyIC02NiAtMTZ0LTUxIDIydC0yOSAzNWgtMXEtNiAxNiAtOCAyNWwtMTI0IDM1MXpNMTMzOCAtMTU5cTMxIC00OSAzMSAtNTdxMCAtNSAtMyAtN3EtOSAtNSAtMTQuNSAwLjV0LTE1LjUgMjZ0LTE2IDMwLjVxLTExNCAxNzIgLTQyMyA2NjENCnEzIC0xIDcgMXQ3IDRsMyAycTExIDkgMTEgMTd6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI5IiB1bmljb2RlPSImI3hmMjllOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTUwNCA1NDJoMTcxbC0xIDI2NXpNMTUzMCA2NDFxMCA4NyAtNTAuNSAxNDB0LTE0Ni41IDUzaC01NHYtMzg4aDUycTkxIDAgMTQ1IDU3dDU0IDEzOHpNOTU2IDEwMThsMSAtNzU2cTAgLTE0IC05LjUgLTI0dC0yMy41IC0xMGgtMjE2cS0xNCAwIC0yMy41IDEwdC05LjUgMjR2NjJoLTI5MWwtNTUgLTgxcS0xMCAtMTUgLTI4IC0xNWgtMjY3cS0yMSAwIC0zMC41IDE4dDMuNSAzNWw1NTYgNzU3cTkgMTQgMjcgMTRoMzMycTE0IDAgMjQgLTEwDQp0MTAgLTI0ek0xNzgzIDY0MXEwIC0xOTMgLTEyNS41IC0zMDN0LTMyNC41IC0xMTBoLTI3MHEtMTQgMCAtMjQgMTB0LTEwIDI0djc1NnEwIDE0IDEwIDI0dDI0IDEwaDI2OHEyMDAgMCAzMjYgLTEwOXQxMjYgLTMwMnpNMTkzOSA2NDBxMCAtMTEgLTAuNSAtMjl0LTggLTcxLjV0LTIxLjUgLTEwMnQtNDQuNSAtMTA4dC03My41IC0xMDIuNWgtNTFxMzggNDUgNjYuNSAxMDQuNXQ0MS41IDExMnQyMSA5OHQ5IDcyLjVsMSAyN3EwIDggLTAuNSAyMi41DQp0LTcuNSA2MHQtMjAgOTEuNXQtNDEgMTExLjV0LTY2IDEyNC41aDQzcTQxIC00NyA3MiAtMTA3dDQ1LjUgLTExMS41dDIzIC05NnQxMC41IC03MC41ek0yMTIzIDY0MHEwIC0xMSAtMC41IC0yOXQtOCAtNzEuNXQtMjEuNSAtMTAydC00NSAtMTA4dC03NCAtMTAyLjVoLTUxcTM4IDQ1IDY2LjUgMTA0LjV0NDEuNSAxMTJ0MjEgOTh0OSA3Mi41bDEgMjdxMCA4IC0wLjUgMjIuNXQtNy41IDYwdC0xOS41IDkxLjV0LTQwLjUgMTExLjV0LTY2IDEyNC41DQpoNDNxNDEgLTQ3IDcyIC0xMDd0NDUuNSAtMTExLjV0MjMgLTk2dDEwLjUgLTcwLjV6TTIzMDQgNjQwcTAgLTExIC0wLjUgLTI5dC04IC03MS41dC0yMS41IC0xMDJ0LTQ0LjUgLTEwOHQtNzMuNSAtMTAyLjVoLTUxcTM4IDQ1IDY2IDEwNC41dDQxIDExMnQyMSA5OHQ5IDcyLjVsMSAyN3EwIDggLTAuNSAyMi41dC03LjUgNjB0LTE5LjUgOTEuNXQtNDAuNSAxMTEuNXQtNjYgMTI0LjVoNDNxNDEgLTQ3IDcyIC0xMDd0NDUuNSAtMTExLjV0MjMgLTk2DQp0OS41IC03MC41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBMCIgdW5pY29kZT0iJiN4ZjJhMDsiIGhvcml6LWFkdi14PSIxNDA4IiANCmQ9Ik02MTcgLTE1M3EwIDExIC0xMyA1OHQtMzEgMTA3dC0yMCA2OXEtMSA0IC01IDI2LjV0LTguNSAzNnQtMTMuNSAyMS41cS0xNSAxNCAtNTEgMTRxLTIzIDAgLTcwIC01LjV0LTcxIC01LjVxLTM0IDAgLTQ3IDExcS02IDUgLTExIDE1LjV0LTcuNSAyMHQtNi41IDI0dC01IDE4LjVxLTM3IDEyOCAtMzcgMjU1dDM3IDI1NXExIDQgNSAxOC41dDYuNSAyNHQ3LjUgMjB0MTEgMTUuNXExMyAxMSA0NyAxMXEyNCAwIDcxIC01LjV0NzAgLTUuNQ0KcTM2IDAgNTEgMTRxOSA4IDEzLjUgMjEuNXQ4LjUgMzZ0NSAyNi41cTIgOSAyMCA2OXQzMSAxMDd0MTMgNThxMCAyMiAtNDMuNSA1Mi41dC03NS41IDQyLjVxLTIwIDggLTQ1IDhxLTM0IDAgLTk4IC0xOHEtNTcgLTE3IC05Ni41IC00MC41dC03MSAtNjZ0LTQ2IC03MHQtNDUuNSAtOTQuNXEtNiAtMTIgLTkgLTE5cS00OSAtMTA3IC02OCAtMjE2dC0xOSAtMjQ0dDE5IC0yNDR0NjggLTIxNnE1NiAtMTIyIDgzIC0xNjFxNjMgLTkxIDE3OSAtMTI3DQpsNiAtMnE2NCAtMTggOTggLTE4cTI1IDAgNDUgOHEzMiAxMiA3NS41IDQyLjV0NDMuNSA1Mi41ek03NzYgNzYwcS0yNiAwIC00NSAxOXQtMTkgNDUuNXQxOSA0NS41cTM3IDM3IDM3IDkwcTAgNTIgLTM3IDkxcS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5cTc1IC03NSA3NSAtMTgxdC03NSAtMTgxcS0yMSAtMTkgLTQ1IC0xOXpNOTU3IDU3OXEtMjcgMCAtNDUgMTlxLTE5IDE5IC0xOSA0NXQxOSA0NXExMTIgMTE0IDExMiAyNzINCnQtMTEyIDI3MnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXExNTAgLTE1MCAxNTAgLTM2MnQtMTUwIC0zNjJxLTE4IC0xOSAtNDUgLTE5ek0xMTM4IDM5OHEtMjcgMCAtNDUgMTlxLTE5IDE5IC0xOSA0NXQxOSA0NXE5MCA5MSAxMzguNSAyMDh0NDguNSAyNDV0LTQ4LjUgMjQ1dC0xMzguNSAyMDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTlxMTA5IC0xMDkgMTY3IC0yNDl0NTggLTI5NHQtNTggLTI5NHQtMTY3IC0yNDkNCnEtMTggLTE5IC00NSAtMTl6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkExIiB1bmljb2RlPSImI3hmMmExOyIgaG9yaXotYWR2LXg9IjIxNzYiIA0KZD0iTTE5MiAzNTJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN0LTQ3IDExM3QtMTEzIDQ3ek03MDQgMzUycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNNzA0IDg2NHEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTE0NzIgMzUyDQpxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN0LTQ3IDExM3QtMTEzIDQ3ek0xOTg0IDM1MnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTE0NzIgODY0cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNMTk4NCA4NjQNCnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTE5ODQgMTM3NnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTM4NCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek04OTYgMTkycTAgLTgwIC01NiAtMTM2DQp0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0zODQgNzA0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNODk2IDcwNHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTM4NCAxMjE2cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2DQp0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjY0IDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTg5NiAxMjE2cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMjE3NiAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1Ng0KdC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE2NjQgNzA0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMjE3NiA3MDRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjY0IDEyMTZxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2DQp0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTIxNzYgMTIxNnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkEyIiB1bmljb2RlPSImI3hmMmEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyOCAtMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTMyMCAwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTM2NSAzNjVsMjU2IC0yNTZsLTkwIC05MGwtMjU2IDI1NnpNNzA0IDM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1eg0KTTE0MTEgNzA0cTAgLTU5IC0xMS41IC0xMDguNXQtMzcuNSAtOTMuNXQtNDQgLTY3LjV0LTUzIC02NC41cS0zMSAtMzUgLTQ1LjUgLTU0dC0zMy41IC01MHQtMjYuNSAtNjR0LTcuNSAtNzRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5cTEwNiAwIDE4MSA3NXQ3NSAxODFxMCA1NyAxMS41IDEwNS41dDM3IDkxdDQzLjUgNjYuNXQ1MiA2M3E0MCA0NiA1OS41IDcyDQp0MzcuNSA3NC41dDE4IDEwMy41cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1cTAgMTE3IDQ1LjUgMjIzLjV0MTIzIDE4NHQxODQgMTIzdDIyMy41IDQ1LjV0MjIzLjUgLTQ1LjV0MTg0IC0xMjN0MTIzIC0xODR0NDUuNSAtMjIzLjV6TTg5NiA1NzZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDUNCnQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTg0IDcwNHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXEwIDkzIC02NS41IDE1OC41dC0xNTguNSA2NS41cS05MiAwIC0xNTggLTY1LjV0LTY2IC0xNTguNXEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXEwIDE0NiAxMDMgMjQ5dDI0OSAxMDN0MjQ5IC0xMDN0MTAzIC0yNDl6TTE1NzggOTkzcTEwIC0yNSAtMSAtNDl0LTM2IC0zNHEtOSAtNCAtMjMgLTQNCnEtMTkgMCAtMzUuNSAxMXQtMjMuNSAzMHEtNjggMTc4IC0yMjQgMjk1cS0yMSAxNiAtMjUgNDJ0MTIgNDdxMTcgMjEgNDMgMjV0NDcgLTEycTE4MyAtMTM3IDI2NiAtMzUxek0xNzg4IDEwNzRxOSAtMjUgLTEuNSAtNDl0LTM1LjUgLTM0cS0xMSAtNCAtMjMgLTRxLTQ0IDAgLTYwIDQxcS05MiAyMzggLTI5NyAzOTNxLTIyIDE2IC0yNS41IDQydDEyLjUgNDdxMTYgMjIgNDIgMjUuNXQ0NyAtMTIuNXEyMzUgLTE3NSAzNDEgLTQ0OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTMiIHVuaWNvZGU9IiYjeGYyYTM7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTAzMiA1NzZxLTU5IDIgLTg0IDU1cS0xNyAzNCAtNDggNTMuNXQtNjggMTkuNXEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC01NiAzNiAtODlsMTAgLThxMzQgLTMxIDgyIC0zMXEzNyAwIDY4IDE5LjV0NDggNTMuNXEyNSA1MyA4NCA1NXpNMTYwMCA3MDRxMCA1NiAtMzYgODlsLTEwIDhxLTM0IDMxIC04MiAzMXEtMzcgMCAtNjggLTE5LjV0LTQ4IC01My41cS0yNSAtNTMgLTg0IC01NXE1OSAtMiA4NCAtNTUNCnExNyAtMzQgNDggLTUzLjV0NjggLTE5LjVxNTMgMCA5MC41IDM3LjV0MzcuNSA5MC41ek0xMTc0IDkyNXEtMTcgLTM1IC01NSAtNDh0LTczIDRxLTYyIDMxIC0xMzQgMzFxLTUxIDAgLTk5IC0xN3EzIDAgOS41IDAuNXQ5LjUgMC41cTkyIDAgMTcwLjUgLTUwdDExOC41IC0xMzNxMTcgLTM2IDMuNSAtNzMuNXQtNDkuNSAtNTQuNXEtMTggLTkgLTM5IC05cTIxIDAgMzkgLTlxMzYgLTE3IDQ5LjUgLTU0LjV0LTMuNSAtNzMuNQ0KcS00MCAtODMgLTExOC41IC0xMzN0LTE3MC41IC01MGgtNnEtMTYgMiAtNDQgNGwtMjkwIDI3bC0yMzkgLTEyMHEtMTQgLTcgLTI5IC03cS00MCAwIC01NyAzNWwtMTYwIDMyMHEtMTEgMjMgLTQgNDcuNXQyOSAzNy41bDIwOSAxMTlsMTQ4IDI2N3ExNyAxNTUgOTEuNSAyOTEuNXQxOTUuNSAyMzYuNXEzMSAyNSA3MC41IDIxLjV0NjQuNSAtMzQuNXQyMS41IC03MHQtMzQuNSAtNjVxLTcwIC01OSAtMTE3IC0xMjhxMTIzIDg0IDI2NyAxMDENCnE0MCA1IDcxLjUgLTE5dDM1LjUgLTY0cTUgLTQwIC0xOSAtNzEuNXQtNjQgLTM1LjVxLTg0IC0xMCAtMTU5IC01NXE0NiAxMCA5OSAxMHExMTUgMCAyMTggLTUwcTM2IC0xOCA0OSAtNTUuNXQtNSAtNzMuNXpNMjEzNyAxMDg1bDE2MCAtMzIwcTExIC0yMyA0IC00Ny41dC0yOSAtMzcuNWwtMjA5IC0xMTlsLTE0OCAtMjY3cS0xNyAtMTU1IC05MS41IC0yOTEuNXQtMTk1LjUgLTIzNi41cS0yNiAtMjIgLTYxIC0yMnEtNDUgMCAtNzQgMzUNCnEtMjUgMzEgLTIxLjUgNzB0MzQuNSA2NXE3MCA1OSAxMTcgMTI4cS0xMjMgLTg0IC0yNjcgLTEwMXEtNCAtMSAtMTIgLTFxLTM2IDAgLTYzLjUgMjR0LTMxLjUgNjBxLTUgNDAgMTkgNzEuNXQ2NCAzNS41cTg0IDEwIDE1OSA1NXEtNDYgLTEwIC05OSAtMTBxLTExNSAwIC0yMTggNTBxLTM2IDE4IC00OSA1NS41dDUgNzMuNXExNyAzNSA1NSA0OHQ3MyAtNHE2MiAtMzEgMTM0IC0zMXE1MSAwIDk5IDE3cS0zIDAgLTkuNSAtMC41dC05LjUgLTAuNQ0KcS05MiAwIC0xNzAuNSA1MHQtMTE4LjUgMTMzcS0xNyAzNiAtMy41IDczLjV0NDkuNSA1NC41cTE4IDkgMzkgOXEtMjEgMCAtMzkgOXEtMzYgMTcgLTQ5LjUgNTQuNXQzLjUgNzMuNXE0MCA4MyAxMTguNSAxMzN0MTcwLjUgNTBoNmgxcTE0IC0yIDQyIC00bDI5MSAtMjdsMjM5IDEyMHExNCA3IDI5IDdxNDAgMCA1NyAtMzV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE0IiB1bmljb2RlPSImI3hmMmE0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwNTYgNzA0cTAgLTI2IDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDVxMCAxNDYgLTEwMyAyNDl0LTI0OSAxMDN0LTI0OSAtMTAzdC0xMDMgLTI0OXEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1cTAgOTMgNjYgMTU4LjV0MTU4IDY1LjV0MTU4IC02NS41dDY2IC0xNTguNXpNODM1IDEyODBxLTExNyAwIC0yMjMuNSAtNDUuNXQtMTg0IC0xMjN0LTEyMyAtMTg0dC00NS41IC0yMjMuNXEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5DQp0MTkgNDVxMCAxODUgMTMxLjUgMzE2LjV0MzE2LjUgMTMxLjV0MzE2LjUgLTEzMS41dDEzMS41IC0zMTYuNXEwIC01NSAtMTggLTEwMy41dC0zNy41IC03NC41dC01OS41IC03MnEtMzQgLTM5IC01MiAtNjN0LTQzLjUgLTY2LjV0LTM3IC05MXQtMTEuNSAtMTA1LjVxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1cS0yNiAwIC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5cTE1OSAwIDI3MS41IDExMi41dDExMi41IDI3MS41cTAgNDEgNy41IDc0DQp0MjYuNSA2NHQzMy41IDUwdDQ1LjUgNTRxMzUgNDEgNTMgNjQuNXQ0NCA2Ny41dDM3LjUgOTMuNXQxMS41IDEwOC41cTAgMTE3IC00NS41IDIyMy41dC0xMjMgMTg0dC0xODQgMTIzdC0yMjMuNSA0NS41ek01OTEgNTYxbDIyNiAtMjI2bC01NzkgLTU3OXEtMTIgLTEyIC0yOSAtMTJ0LTI5IDEybC0xNjggMTY4cS0xMiAxMiAtMTIgMjl0MTIgMjl6TTE2MTIgMTUyNGwxNjggLTE2OHExMiAtMTIgMTIgLTI5dC0xMiAtMzBsLTIzMyAtMjMzDQpsLTI2IC0yNWwtNzEgLTcxcS02NiAxNTMgLTE5NSAyNThsOTEgOTFsMjA3IDIwN3ExMyAxMiAzMCAxMnQyOSAtMTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE1IiB1bmljb2RlPSImI3hmMmE1OyIgDQpkPSJNODY2IDEwMjFxMCAtMjcgLTEzIC05NHEtMTEgLTUwIC0zMS41IC0xNTB0LTMwLjUgLTE1MHEtMiAtMTEgLTQuNSAtMTIuNXQtMTMuNSAtMi41cS0yMCAtMiAtMzEgLTJxLTU4IDAgLTg0IDQ5LjV0LTI2IDExMy41cTAgODggMzUgMTc0dDEwMyAxMjRxMjggMTQgNTEgMTRxMjggMCAzNi41IC0xNi41dDguNSAtNDcuNXpNMTM1MiA1OTdxMCAxNCAtMzkgNzUuNXQtNTIgNjYuNXEtMjEgOCAtMzQgOHEtOTEgMCAtMjI2IC03N2wtMiAyDQpxMyAyMiAyNy41IDEzNXQyNC41IDE3OHEwIDIzMyAtMjQyIDIzM3EtMjQgMCAtNjggLTZxLTk0IC0xNyAtMTY4LjUgLTg5LjV0LTExMS41IC0xNjYuNXQtMzcgLTE4OXEwIC0xNDYgODAuNSAtMjI1dDIyNy41IC03OXEyNSAwIDI1IC0zdC0xIC01cS00IC0zNCAtMjYgLTExN3EtMTQgLTUyIC01MS41IC0xMDF0LTgyLjUgLTQ5cS00MiAwIC00MiA0N3EwIDI0IDEwLjUgNDcuNXQyNSAzOS41dDI5LjUgMjguNXQyNiAyMHQxMSA4LjVxMCAzIC03IDEwDQpxLTI0IDIyIC01OC41IDM2LjV0LTY1LjUgMTQuNXEtMzUgMCAtNjMuNSAtMzR0LTQxIC03NXQtMTIuNSAtNzVxMCAtODggNTEuNSAtMTQydDEzOC41IC01NHE4MiAwIDE1NSA1M3QxMTcuNSAxMjZ0NjUuNSAxNTNxNiAyMiAxNS41IDY2LjV0MTQuNSA2Ni41cTMgMTIgMTQgMThxMTE4IDYwIDIyNyA2MHE0OCAwIDEyNyAtMThxMSAtMSA0IC0xcTUgMCA5LjUgNC41dDQuNSA4LjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjUNCnQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE2IiB1bmljb2RlPSImI3hmMmE2OyIgaG9yaXotYWR2LXg9IjE1MzUiIA0KZD0iTTc0NCAxMjMxcTAgMjQgLTIgMzguNXQtOC41IDMwdC0yMSAyM3QtMzcuNSA3LjVxLTM5IDAgLTc4IC0yM3EtMTA1IC01OCAtMTU5IC0xOTAuNXQtNTQgLTI2OS41cTAgLTQ0IDguNSAtODUuNXQyNi41IC04MC41dDUyLjUgLTYyLjV0ODEuNSAtMjMuNXE0IDAgMTggLTAuNXQyMCAwdDE2IDN0MTUgOC41dDcgMTZxMTYgNzcgNDggMjMxLjV0NDggMjMxLjVxMTkgOTEgMTkgMTQ2ek0xNDk4IDU3NXEwIC03IC03LjUgLTEzLjV0LTE1LjUgLTYuNQ0KbC02IDFxLTIyIDMgLTYyIDExdC03MiAxMi41dC02MyA0LjVxLTE2NyAwIC0zNTEgLTkzcS0xNSAtOCAtMjEgLTI3cS0xMCAtMzYgLTI0LjUgLTEwNS41dC0yMi41IC0xMDAuNXEtMjMgLTkxIC03MCAtMTc5LjV0LTExMi41IC0xNjQuNXQtMTU0LjUgLTEyM3QtMTg1IC00N3EtMTM1IDAgLTIxNC41IDgzLjV0LTc5LjUgMjE5LjVxMCA1MyAxOS41IDExN3Q2MyAxMTYuNXQ5Ny41IDUyLjVxMzggMCAxMjAgLTMzLjV0ODMgLTYxLjUNCnEwIC0xIC0xNi41IC0xMi41dC0zOS41IC0zMXQtNDYgLTQ0LjV0LTM5IC02MXQtMTYgLTc0cTAgLTMzIDE2LjUgLTUzdDQ4LjUgLTIwcTQ1IDAgODUgMzEuNXQ2Ni41IDc4dDQ4IDEwNS41dDMyLjUgMTA3dDE2IDkwdjlxMCAyIC0zLjUgMy41dC04LjUgMS41aC0xMHQtMTAgLTAuNXQtNiAtMC41cS0yMjcgMCAtMzUyIDEyMi41dC0xMjUgMzQ4LjVxMCAxMDggMzQuNSAyMjF0OTYgMjEwdDE1NiAxNjcuNXQyMDQuNSA4OS41cTUyIDkgMTA2IDkNCnEzNzQgMCAzNzQgLTM2MHEwIC05OCAtMzggLTI3M3QtNDMgLTIxMWwzIC0zcTEwMSA1NyAxODIuNSA4OHQxNjcuNSAzMXEyMiAwIDUzIC0xM3ExOSAtNyA4MCAtMTAyLjV0NjEgLTExNi41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBNyIgdW5pY29kZT0iJiN4ZjJhNzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik04MzEgODYzcTMyIDAgNTkgLTE4bDIyMiAtMTQ4cTYxIC00MCAxMTAgLTk3bDE0NiAtMTcwcTQwIC00NiAyOSAtMTA2bC03MiAtNDEzcS02IC0zMiAtMjkuNSAtNTMuNXQtNTUuNSAtMjUuNWwtNTI3IC01NmwtMzUyIC0zMmgtOXEtMzkgMCAtNjcuNSAyOHQtMjguNSA2OHEwIDM3IDI3IDY0dDY1IDMybDI2MCAzMmgtNDQ4cS00MSAwIC02OS41IDMwdC0yNi41IDcxcTIgMzkgMzIgNjV0NjkgMjZsNDQyIDFsLTUyMSA2NHEtNDEgNSAtNjYgMzcNCnQtMTkgNzNxNiAzNSAzNC41IDU3LjV0NjUuNSAyMi41aDEwbDQ4MSAtNjBsLTM1MSA5NHEtMzggMTAgLTYyIDQxLjV0LTE4IDY4LjVxNiAzNiAzMyA1OC41dDYyIDIyLjVxNiAwIDIwIC0ybDQ0OCAtOTZsMjE3IC0zN3ExIDAgMyAtMC41dDMgLTAuNXEyMyAwIDMwLjUgMjN0LTEyLjUgMzZsLTE4NiAxMjVxLTM1IDIzIC00MiA2My41dDE4IDczLjVxMjcgMzggNzYgMzh6TTc2MSA2NjFsMTg2IC0xMjVsLTIxOCAzN2wtNSAybC0zNiAzOA0KbC0yMzggMjYycS0xIDEgLTIuNSAzLjV0LTIuNSAzLjVxLTI0IDMxIC0xOC41IDcwdDM3LjUgNjRxMzEgMjMgNjggMTcuNXQ2NCAtMzMuNWwxNDIgLTE0N3EtMiAtMSAtNSAtMy41dC00IC00LjVxLTMyIC00NSAtMjMgLTk5dDU1IC04NXpNMTY0OCAxMTE1bDE1IC0yNjZxNCAtNzMgLTExIC0xNDdsLTQ4IC0yMTlxLTEyIC01OSAtNjcgLTg3bC0xMDYgLTU0cTIgNjIgLTM5IDEwOWwtMTQ2IDE3MHEtNTMgNjEgLTExNyAxMDNsLTIyMiAxNDgNCnEtMzQgMjMgLTc2IDIzcS01MSAwIC04OCAtMzdsLTIzNSAzMTJxLTI1IDMzIC0xOCA3My41dDQxIDYzLjVxMzMgMjIgNzEuNSAxNHQ2Mi41IC00MGwyNjYgLTM1MmwtMjYyIDQ1NXEtMjEgMzUgLTEwLjUgNzV0NDcuNSA1OXEzNSAxOCA3Mi41IDZ0NTcuNSAtNDZsMjQxIC00MjBsLTEzNiAzMzdxLTE1IDM1IC00LjUgNzR0NDQuNSA1NnEzNyAxOSA3NiA2dDU2IC01MWwxOTMgLTQxNWwxMDEgLTE5NnE4IC0xNSAyMyAtMTcuNXQyNyA3LjV0MTEgMjYNCmwtMTIgMjI0cS0yIDQxIDI2IDcxdDY5IDMxcTM5IDAgNjcgLTI4LjV0MzAgLTY3LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE4IiB1bmljb2RlPSImI3hmMmE4OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTMzNSAxODBxLTIgMCAtNiAycS04NiA1NyAtMTY4LjUgMTQ1dC0xMzkuNSAxODBxLTIxIDMwIC0yMSA2OXEwIDkgMiAxOXQ0IDE4dDcgMTh0OC41IDE2dDEwLjUgMTd0MTAgMTV0MTIgMTUuNXQxMSAxNC41cTE4NCAyNTEgNDUyIDM2NXEtMTEwIDE5OCAtMTEwIDIxMXEwIDE5IDE3IDI5cTExNiA2NCAxMjggNjRxMTggMCAyOCAtMTZsMTI0IC0yMjlxOTIgMTkgMTkyIDE5cTI2NiAwIDQ5Ny41IC0xMzcuNXQzNzguNSAtMzY5LjUNCnEyMCAtMzEgMjAgLTY5dC0yMCAtNjlxLTkxIC0xNDIgLTIxOC41IC0yNTMuNXQtMjc4LjUgLTE3NS41cTExMCAtMTk4IDExMCAtMjExcTAgLTIwIC0xNyAtMjlxLTExNiAtNjQgLTEyNyAtNjRxLTE5IDAgLTI5IDE2bC0xMjQgMjI5bC02NCAxMTlsLTQ0NCA4MjBsNyA3cS01OCAtMjQgLTk5IC00N3EzIC01IDEyNyAtMjM0dDI0MyAtNDQ5dDExOSAtMjIzcTAgLTcgLTkgLTlxLTEzIC0zIC03MiAtM3EtNTcgMCAtNjAgN2wtNDU2IDg0MQ0KcS0zOSAtMjggLTgyIC02OHEyNCAtNDMgMjE0IC0zOTMuNXQxOTAgLTM1NC41cTAgLTEwIC0xMSAtMTBxLTE0IDAgLTgyLjUgMjJ0LTcyLjUgMjhsLTEwNiAxOTdsLTIyNCA0MTNxLTQ0IC01MyAtNzggLTEwNnEyIC0zIDE4IC0yNXQyMyAtMzRsMTc2IC0zMjdxMCAtMTAgLTEwIC0xMHpNMTE2NSAyODJsNDkgLTkxcTI3MyAxMTEgNDUwIDM4NXEtMTgwIDI3NyAtNDU5IDM4OXE2NyAtNjQgMTAzIC0xNDguNXQzNiAtMTc2LjUNCnEwIC0xMDYgLTQ3IC0yMDAuNXQtMTMyIC0xNTcuNXpNODQ4IDg5NnEwIC0yMCAxNCAtMzR0MzQgLTE0cTg2IDAgMTQ3IC02MXQ2MSAtMTQ3cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCAxMjYgLTg5IDIxNXQtMjE1IDg5cS0yMCAwIC0zNCAtMTR0LTE0IC0zNHpNMTIxNCA5NjFsLTkgNGw3IC03eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBOSIgdW5pY29kZT0iJiN4ZjJhOTsiIGhvcml6LWFkdi14PSIxMjgwIiANCmQ9Ik0xMDUwIDQzMHEwIC0yMTUgLTE0NyAtMzc0cS0xNDggLTE2MSAtMzc4IC0xNjFxLTIzMiAwIC0zNzggMTYxcS0xNDcgMTU5IC0xNDcgMzc0cTAgMTQ3IDY4IDI3MC41dDE4OSAxOTYuNXQyNjggNzNxOTYgMCAxODIgLTMxcS0zMiAtNjIgLTM5IC0xMjZxLTY2IDI4IC0xNDMgMjhxLTE2NyAwIC0yODAuNSAtMTIzdC0xMTMuNSAtMjkxcTAgLTE3MCAxMTIuNSAtMjg4LjV0MjgxLjUgLTExOC41dDI4MSAxMTguNXQxMTIgMjg4LjUNCnEwIDg5IC0zMiAxNjZxNjYgMTMgMTIzIDQ5cTQxIC05OCA0MSAtMjEyek04NDYgNjE5cTAgLTE5MiAtNzkuNSAtMzQ1dC0yMzguNSAtMjUzbC0xNCAtMXEtMjkgMCAtNjIgNXE4MyAzMiAxNDYuNSAxMDIuNXQ5OS41IDE1NC41dDU4LjUgMTg5dDMwIDE5Mi41dDcuNSAxNzguNXEwIDY5IC0zIDEwM3E1NSAtMTYwIDU1IC0zMjZ6TTc5MSA5NDd2LTJxLTczIDIxNCAtMjA2IDQ0MHE4OCAtNTkgMTQyLjUgLTE4Ni41dDYzLjUgLTI1MS41eg0KTTEwMzUgNzQ0cS04MyAwIC0xNjAgNzVxMjE4IDEyMCAyOTAgMjQ3cTE5IDM3IDIxIDU2cS00MiAtOTQgLTEzOS41IC0xNjYuNXQtMjA0LjUgLTk3LjVxLTM1IDU0IC0zNSAxMTNxMCAzNyAxNyA3OXQ0MyA2OHE0NiA0NCAxNTcgNzRxNTkgMTYgMTA2IDU4LjV0NzQgMTAwLjVxNzQgLTEwNSA3NCAtMjUzcTAgLTEwOSAtMjQgLTE3MHEtMzIgLTc3IC04OC41IC0xMzAuNXQtMTMwLjUgLTUzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkFBIiB1bmljb2RlPSImI3hmMmFhOyIgDQpkPSJNMTA1MCA0OTVxMCA3OCAtMjggMTQ3cS00MSAtMjUgLTg1IC0zNHEyMiAtNTAgMjIgLTExNHEwIC0xMTcgLTc3IC0xOTguNXQtMTkzIC04MS41dC0xOTMuNSA4MS41dC03Ny41IDE5OC41cTAgMTE1IDc4IDE5OS41dDE5MyA4NC41cTUzIDAgOTggLTE5cTQgNDMgMjcgODdxLTYwIDIxIC0xMjUgMjFxLTE1NCAwIC0yNTcuNSAtMTA4LjV0LTEwMy41IC0yNjMuNXQxMDMuNSAtMjYxdDI1Ny41IC0xMDZ0MjU3LjUgMTA2LjV0MTAzLjUgMjYwLjV6DQpNODcyIDg1MHEyIC0yNCAyIC03MXEwIC02MyAtNSAtMTIzdC0yMC41IC0xMzIuNXQtNDAuNSAtMTMwdC02OC41IC0xMDZ0LTEwMC41IC03MC41cTIxIC0zIDQyIC0zaDEwcTIxOSAxMzkgMjE5IDQxMXEwIDExNiAtMzggMjI1ek04NzIgODUwcS00IDgwIC00NCAxNzEuNXQtOTggMTMwLjVxOTIgLTE1NiAxNDIgLTMwMnpNMTIwNyA5NTVxMCAxMDIgLTUxIDE3NHEtNDEgLTg2IC0xMjQgLTEwOXEtNjkgLTE5IC0xMDkgLTUzLjV0LTQwIC05OS41DQpxMCAtNDAgMjQgLTc3cTc0IDE3IDE0MC41IDY3dDk1LjUgMTE1cS00IC01MiAtNzQuNSAtMTExLjV0LTEzOC41IC05Ny41cTUyIC01MiAxMTAgLTUycTUxIDAgOTAgMzd0NjAgOTBxMTcgNDIgMTcgMTE3ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNQ0KdDg0LjUgLTIwMy41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBQiIgdW5pY29kZT0iJiN4ZjJhYjsiIA0KZD0iTTEyNzkgMzg4cTAgMjIgLTIyIDI3cS02NyAxNSAtMTE4IDU5dC04MCAxMDhxLTcgMTkgLTcgMjVxMCAxNSAxOS41IDI2dDQzIDE3dDQzIDIwLjV0MTkuNSAzNi41cTAgMTkgLTE4LjUgMzEuNXQtMzguNSAxMi41cS0xMiAwIC0zMiAtOHQtMzEgLThxLTQgMCAtMTIgMnE1IDk1IDUgMTE0cTAgNzkgLTE3IDExNHEtMzYgNzggLTEwMyAxMjEuNXQtMTUyIDQzLjVxLTE5OSAwIC0yNzUgLTE2NXEtMTcgLTM1IC0xNyAtMTE0cTAgLTE5IDUgLTExNA0KcS00IC0yIC0xNCAtMnEtMTIgMCAtMzIgNy41dC0zMCA3LjVxLTIxIDAgLTM4LjUgLTEydC0xNy41IC0zMnEwIC0yMSAxOS41IC0zNS41dDQzIC0yMC41dDQzIC0xN3QxOS41IC0yNnEwIC02IC03IC0yNXEtNjQgLTEzOCAtMTk4IC0xNjdxLTIyIC01IC0yMiAtMjdxMCAtNDYgMTM3IC02OHEyIC01IDYgLTI2dDExLjUgLTMwLjV0MjMuNSAtOS41cTEyIDAgMzcuNSA0LjV0MzkuNSA0LjVxMzUgMCA2NyAtMTV0NTQgLTMyLjV0NTcuNSAtMzIuNQ0KdDc2LjUgLTE1cTQzIDAgNzkgMTV0NTcuNSAzMi41dDUzLjUgMzIuNXQ2NyAxNXExNCAwIDM5LjUgLTR0MzguNSAtNHExNiAwIDIzIDEwdDExIDMwdDYgMjVxMTM3IDIyIDEzNyA2OHpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41DQp0MTAzIC0zODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUMiIHVuaWNvZGU9IiYjeGYyYWM7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNODQ4IDE0MDhxMTM0IDEgMjQwLjUgLTY4LjV0MTYzLjUgLTE5Mi41cTI3IC01OCAyNyAtMTc5cTAgLTQ3IC05IC0xOTFxMTQgLTcgMjggLTdxMTggMCA1MSAxMy41dDUxIDEzLjVxMjkgMCA1NiAtMTh0MjcgLTQ2cTAgLTMyIC0zMS41IC01NHQtNjkgLTMxLjV0LTY5IC0yOXQtMzEuNSAtNDcuNXEwIC0xNSAxMiAtNDNxMzcgLTgyIDEwMi41IC0xNTB0MTQ0LjUgLTEwMXEyOCAtMTIgODAgLTIzcTI4IC02IDI4IC0zNQ0KcTAgLTcwIC0yMTkgLTEwM3EtNyAtMTEgLTExIC0zOXQtMTQgLTQ2LjV0LTMzIC0xOC41cS0yMCAwIC02MiA2LjV0LTY0IDYuNXEtMzcgMCAtNjIgLTVxLTMyIC01IC02MyAtMjIuNXQtNTggLTM4dC01OCAtNDAuNXQtNzYgLTMzLjV0LTk5IC0xMy41cS01MiAwIC05Ni41IDEzLjV0LTc1IDMzLjV0LTU3LjUgNDAuNXQtNTggMzh0LTYyIDIyLjVxLTI2IDUgLTYzIDVxLTI0IDAgLTY1LjUgLTcuNXQtNTguNSAtNy41cS0yNSAwIC0zNSAxOC41DQp0LTE0IDQ3LjV0LTExIDQwcS0yMTkgMzMgLTIxOSAxMDNxMCAyOSAyOCAzNXE1MiAxMSA4MCAyM3E3OCAzMiAxNDQuNSAxMDF0MTAyLjUgMTUwcTEyIDI4IDEyIDQzcTAgMjggLTMxLjUgNDcuNXQtNjkuNSAyOS41dC02OS41IDMxLjV0LTMxLjUgNTIuNXEwIDI3IDI2IDQ1LjV0NTUgMTguNXExNSAwIDQ4IC0xM3Q1MyAtMTNxMTggMCAzMiA3cS05IDE0MiAtOSAxOTBxMCAxMjIgMjcgMTgwcTY0IDEzNyAxNzIgMTk4dDI2NCA2M3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUQiIHVuaWNvZGU9IiYjeGYyYWQ7IiANCmQ9Ik0xMjgwIDM4OHEwIDIyIC0yMiAyN3EtNjcgMTQgLTExOCA1OHQtODAgMTA5cS03IDE0IC03IDI1cTAgMTUgMTkuNSAyNnQ0Mi41IDE3dDQyLjUgMjAuNXQxOS41IDM2LjVxMCAxOSAtMTguNSAzMS41dC0zOC41IDEyLjVxLTExIDAgLTMxIC04dC0zMiAtOHEtNCAwIC0xMiAycTUgNjMgNSAxMTVxMCA3OCAtMTcgMTE0cS0zNiA3OCAtMTAyLjUgMTIxLjV0LTE1Mi41IDQzLjVxLTE5OCAwIC0yNzUgLTE2NXEtMTggLTM4IC0xOCAtMTE1DQpxMCAtMzggNiAtMTE0cS0xMCAtMiAtMTUgLTJxLTExIDAgLTMxLjUgOHQtMzAuNSA4cS0yMCAwIC0zNy41IC0xMi41dC0xNy41IC0zMi41cTAgLTIxIDE5LjUgLTM1LjV0NDIuNSAtMjAuNXQ0Mi41IC0xN3QxOS41IC0yNnEwIC0xMSAtNyAtMjVxLTY0IC0xMzggLTE5OCAtMTY3cS0yMiAtNSAtMjIgLTI3cTAgLTQ3IDEzOCAtNjlxMiAtNSA2IC0yNnQxMSAtMzAuNXQyMyAtOS41cTEzIDAgMzguNSA1dDM4LjUgNXEzNSAwIDY3LjUgLTE1DQp0NTQuNSAtMzIuNXQ1Ny41IC0zMi41dDc2LjUgLTE1cTQzIDAgNzkgMTV0NTcuNSAzMi41dDU0IDMyLjV0NjcuNSAxNXExMyAwIDM5IC00LjV0MzkgLTQuNXExNSAwIDIyLjUgOS41dDExLjUgMzF0NSAyNC41cTEzOCAyMiAxMzggNjl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwDQpxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkFFIiB1bmljb2RlPSImI3hmMmFlOyIgaG9yaXotYWR2LXg9IjIzMDQiIA0KZD0iTTIzMDQgMTUzNnEtNjkgLTQ2IC0xMjUgLTkydC04OSAtODF0LTU5LjUgLTcxLjV0LTM3LjUgLTU3LjV0LTIyIC00NC41dC0xNCAtMjkuNXEtMTAgLTE4IC0zNS41IC0xMzYuNXQtNDguNSAtMTY0LjVxLTE1IC0yOSAtNTAgLTYwLjV0LTY3LjUgLTUwLjV0LTcyLjUgLTQxdC00OCAtMjhxLTQ3IC0zMSAtMTUxIC0yMzFxLTM0MSAxNCAtNjMwIC0xNThxLTkyIC01MyAtMzAzIC0xNzlxNDcgMTYgODYgMzF0NTUgMjJsMTUgNw0KcTcxIDI3IDE2MyA2NC41dDEzMy41IDUzLjV0MTA4IDM0LjV0MTQyLjUgMzEuNXExODYgMzEgNDY1IC03cTEgMCAxMCAtM3ExMSAtNiAxNCAtMTd0LTMgLTIybC0xOTQgLTM0NXEtMTUgLTI5IC00NyAtMjJxLTEyOCAyNCAtMzU0IDI0cS0xNDYgMCAtNDAyIC00NC41dC0zOTIgLTQ2LjVxLTgyIC0xIC0xNDkgMTN0LTEwNyAzN3QtNjEgNDB0LTMzIDM0bC0xIDF2MnEwIDYgNiA2cTEzOCAwIDM3MSA1NXExOTIgMzY2IDM3NC41IDUyNHQzODMuNSAxNTgNCnE1IDAgMTQuNSAtMC41dDM4IC01dDU1IC0xMnQ2MS41IC0yNC41dDYzIC0zOS41dDU0IC01OXQ0MCAtODIuNWwxMDIgMTc3cTIgNCAyMSA0Mi41dDQ0LjUgODYuNXQ2MSAxMDkuNXQ4NCAxMzMuNXQxMDAuNSAxMzdxNjYgODIgMTI4IDE0MS41dDEyMS41IDk2LjV0OTIuNSA1My41dDg4IDM5LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIwIiB1bmljb2RlPSImI3hmMmIwOyIgDQpkPSJNMTMyMiA2NDBxMCAtNDUgLTUgLTc2bC0yMzYgMTRsMjI0IC03OHEtMTkgLTczIC01OCAtMTQxbC0yMTQgMTAzbDE3NyAtMTU4cS00NCAtNjEgLTEwNyAtMTA4bC0xNTcgMTc4bDEwMyAtMjE1cS02MSAtMzcgLTE0MCAtNTlsLTc5IDIyOGwxNCAtMjQwcS0zOCAtNiAtNzYgLTZ0LTc2IDZsMTQgMjM4bC03OCAtMjI2cS03NCAxOSAtMTQwIDU5bDEwMyAyMTVsLTE1NyAtMTc4cS01OSA0MyAtMTA4IDEwOGwxNzggMTU4bC0yMTQgLTEwNA0KcS0zOSA2OSAtNTggMTQxbDIyNCA3OWwtMjM3IC0xNHEtNSA0MiAtNSA3NnEwIDM1IDUgNzdsMjM4IC0xNGwtMjI1IDc5cTE5IDczIDU4IDE0MGwyMTQgLTEwNGwtMTc3IDE1OXE0NiA2MSAxMDcgMTA4bDE1OCAtMTc4bC0xMDMgMjE1cTY3IDM5IDE0MCA1OGw3NyAtMjI0bC0xMyAyMzZxMzYgNiA3NSA2cTM4IDAgNzYgLTZsLTE0IC0yMzdsNzggMjI1cTc0IC0xOSAxNDAgLTU5bC0xMDMgLTIxNGwxNTggMTc4cTYxIC00NyAxMDcgLTEwOA0KbC0xNzcgLTE1OWwyMTMgMTA0cTM3IC02MiA1OCAtMTQxbC0yMjQgLTc4bDIzNyAxNHE1IC0zMSA1IC03N3pNMTM1MiA2NDBxMCAxNjAgLTc4LjUgMjk1LjV0LTIxMyAyMTR0LTI5Mi41IDc4LjVxLTExOSAwIC0yMjcgLTQ2LjV0LTE4Ni41IC0xMjV0LTEyNC41IC0xODcuNXQtNDYgLTIyOXEwIC0xMTkgNDYgLTIyOHQxMjQuNSAtMTg3LjV0MTg2LjUgLTEyNXQyMjcgLTQ2LjVxMTU4IDAgMjkyLjUgNzguNXQyMTMgMjE0dDc4LjUgMjk0LjV6DQpNMTQyNSAxMDIzdi03NjZsLTY1NyAtMzgzbC02NTcgMzgzdjc2Nmw2NTcgMzgzek03NjggLTE4M2w3MDggNDEydjgyM2wtNzA4IDQxMWwtNzA4IC00MTF2LTgyM3pNMTUzNiAxMDg4di04OTZsLTc2OCAtNDQ4bC03NjggNDQ4djg5Nmw3NjggNDQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCMSIgdW5pY29kZT0iJiN4ZjJiMTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0zMzkgMTMxOGg2OTFsLTI2IC03MmgtNjY1cS0xMTAgMCAtMTg4LjUgLTc5dC03OC41IC0xODl2LTc3MXEwIC05NSA2MC41IC0xNjkuNXQxNTMuNSAtOTMuNXEyMyAtNSA5OCAtNXYtNzJoLTQ1cS0xNDAgMCAtMjM5LjUgMTAwdC05OS41IDI0MHY3NzFxMCAxNDAgOTkuNSAyNDB0MjM5LjUgMTAwek0xMTkwIDE1MzZoMjQ3bC00ODIgLTEyOTRxLTIzIC02MSAtNDAuNSAtMTAzLjV0LTQ1IC05OHQtNTQgLTkzLjV0LTY0LjUgLTc4LjUNCnQtNzkuNSAtNjV0LTk1LjUgLTQxdC0xMTYgLTE4LjV2MTk1cTE2MyAyNiAyMjAgMTgycTIwIDUyIDIwIDEwNXEwIDU0IC0yMCAxMDZsLTI4NSA3MzNoMjI4bDE4NyAtNTg1ek0xNjY0IDk3OHYtMTExMWgtNzk1cTM3IDU1IDQ1IDczaDY3OHYxMDM4cTAgODUgLTQ5LjUgMTU1dC0xMjkuNSA5OWwyNSA2N3ExMDEgLTM0IDE2My41IC0xMjMuNXQ2Mi41IC0xOTcuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjIiIHVuaWNvZGU9IiYjeGYyYjI7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODUyIDEyMjdxMCAtMjkgLTE3IC01Mi41dC00NSAtMjMuNXQtNDUgMjMuNXQtMTcgNTIuNXQxNyA1Mi41dDQ1IDIzLjV0NDUgLTIzLjV0MTcgLTUyLjV6TTY4OCAtMTQ5djExNHEwIDMwIC0yMC41IDUxLjV0LTUwLjUgMjEuNXQtNTAgLTIxLjV0LTIwIC01MS41di0xMTRxMCAtMzAgMjAuNSAtNTJ0NDkuNSAtMjJxMzAgMCA1MC41IDIydDIwLjUgNTJ6TTg2MCAtMTQ5djExNHEwIDMwIC0yMCA1MS41dC01MCAyMS41dC01MC41IC0yMS41DQp0LTIwLjUgLTUxLjV2LTExNHEwIC0zMCAyMC41IC01MnQ1MC41IC0yMnEyOSAwIDQ5LjUgMjJ0MjAuNSA1MnpNMTAzNCAtMTQ5djExNHEwIDMwIC0yMC41IDUxLjV0LTUwLjUgMjEuNXQtNTAuNSAtMjEuNXQtMjAuNSAtNTEuNXYtMTE0cTAgLTMwIDIwLjUgLTUydDUwLjUgLTIydDUwLjUgMjJ0MjAuNSA1MnpNMTIwOCAtMTQ5djExNHEwIDMwIC0yMC41IDUxLjV0LTUwLjUgMjEuNXQtNTAuNSAtMjEuNXQtMjAuNSAtNTEuNXYtMTE0DQpxMCAtMzAgMjAuNSAtNTJ0NTAuNSAtMjJ0NTAuNSAyMnQyMC41IDUyek0xNDc2IDUzNXEtODQgLTE2MCAtMjMyIC0yNTkuNXQtMzIzIC05OS41cS0xMjMgMCAtMjI5LjUgNTEuNXQtMTc4LjUgMTM3dC0xMTMgMTk3LjV0LTQxIDIzMnEwIDg4IDIxIDE3NHEtMTA0IC0xNzUgLTEwNCAtMzkwcTAgLTE2MiA2NSAtMzEydDE4NSAtMjUxcTMwIDU3IDkxIDU3cTU2IDAgODYgLTUwcTMyIDUwIDg3IDUwcTU2IDAgODYgLTUwcTMyIDUwIDg3IDUwdDg3IC01MA0KcTMwIDUwIDg2IDUwcTI4IDAgNTIuNSAtMTUuNXQzNy41IC00MC41cTExMiA5NCAxNzcgMjMxLjV0NzMgMjg3LjV6TTEzMjYgNTY0cTAgNzUgLTcyIDc1cS0xNyAwIC00NyAtNnEtOTUgLTE5IC0xNDkgLTE5cS0yMjYgMCAtMjI2IDI0M3EwIDg2IDMwIDIwNHEtODMgLTEyNyAtODMgLTI3NXEwIC0xNTAgODkgLTI2MC41dDIzNSAtMTEwLjVxMTExIDAgMjEwIDcwcTEzIDQ4IDEzIDc5ek04ODQgMTIyM3EwIDUwIC0zMiA4OS41dC04MSAzOS41DQp0LTgxIC0zOS41dC0zMiAtODkuNXEwIC01MSAzMS41IC05MC41dDgxLjUgLTM5LjV0ODEuNSAzOS41dDMxLjUgOTAuNXpNMTUxMyA4ODRxMCA5NiAtMzcuNSAxNzl0LTExMyAxMzd0LTE3My41IDU0cS03NyAwIC0xNDkgLTM1dC0xMjcgLTk0cS00OCAtMTU5IC00OCAtMjY4cTAgLTEwNCA0NS41IC0xNTd0MTQ3LjUgLTUzcTUzIDAgMTQyIDE5cTM2IDYgNTMgNnE1MSAwIDc3LjUgLTI4dDI2LjUgLTgwcTAgLTI2IC00IC00Ng0KcTc1IDY4IDExNy41IDE2NS41dDQyLjUgMjAwLjV6TTE3OTIgNjY3cTAgLTExMSAtMzMuNSAtMjQ5LjV0LTkzLjUgLTIwNC41cS01OCAtNjQgLTE5NSAtMTQyLjV0LTIyOCAtMTA0LjVsLTQgLTF2LTExNHEwIC00MyAtMjkuNSAtNzV0LTcyLjUgLTMycS01NiAwIC04NiA1MHEtMzIgLTUwIC04NyAtNTB0LTg3IDUwcS0zMCAtNTAgLTg2IC01MHEtNTUgMCAtODcgNTBxLTMwIC01MCAtODYgLTUwcS00NyAwIC03NSAzMy41dC0yOCA4MS41DQpxLTkwIC02OCAtMTk4IC02OHEtMTE4IDAgLTIxMSA4MHE1NCAxIDEwNiAyMHEtMTEzIDMxIC0xODIgMTI3cTMyIC03IDcxIC03cTg5IDAgMTY0IDQ2cS0xOTIgMTkyIC0yNDAgMzA2cS0yNCA1NiAtMjQgMTYwcTAgNTcgOSAxMjUuNXQzMS41IDE0Ni41dDU1IDE0MXQ4Ni41IDEwNXQxMjAgNDJxNTkgMCA4MSAtNTJxMTkgMjkgNDIgNTRxMiAzIDEyIDEzdDEzIDE2cTEwIDE1IDIzIDM4dDI1IDQydDI4IDM5cTg3IDExMSAyMTEuNSAxNzcNCnQyNjAuNSA2NnEzNSAwIDYyIC00cTU5IDY0IDE0NiA2NHE4MyAwIDE0MCAtNTdxNSAtNSA1IC0xMnEwIC01IC02IC0xMy41dC0xMi41IC0xNnQtMTYgLTE3bC0xMC41IC0xMC41cTE3IC02IDM2IC0xOHQxOSAtMjRxMCAtNiAtMTYgLTI1cTE1NyAtMTM4IDE5NyAtMzc4cTI1IDMwIDYwIDMwcTQ1IDAgMTAwIC00OXE5MCAtODAgOTAgLTI3OXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjMiIHVuaWNvZGU9IiYjeGYyYjM7IiANCmQ9Ik05MTcgNjMxcTAgMzMgLTYgNjRoLTM2MnYtMTMyaDIxN3EtMTIgLTc2IC03NC41IC0xMjAuNXQtMTQyLjUgLTQ0LjVxLTk5IDAgLTE2OSA3MS41dC03MCAxNzAuNXQ3MCAxNzAuNXQxNjkgNzEuNXE5MyAwIDE1MyAtNTlsMTA0IDEwMXEtMTA4IDEwMCAtMjU3IDEwMHEtMTYwIDAgLTI3MiAtMTEyLjV0LTExMiAtMjcxLjV0MTEyIC0yNzEuNXQyNzIgLTExMi41cTE2NSAwIDI2Ni41IDEwNXQxMDEuNSAyNzB6TTEyNjIgNTg1aDEwOXYxMTANCmgtMTA5djExMGgtMTEwdi0xMTBoLTExMHYtMTEwaDExMHYtMTEwaDExMHYxMTB6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCNCIgdW5pY29kZT0iJiN4ZjJiNDsiIA0KZD0iTTE1MzYgMTAyNHYtODM5cTAgLTQ4IC00OSAtNjJxLTE3NCAtNTIgLTMzOCAtNTJxLTczIDAgLTIxNS41IDI5LjV0LTIyNy41IDI5LjVxLTE2NCAwIC0zNzAgLTQ4di0zMzhoLTE2MHYxMzY4cS02MyAyNSAtMTAxIDgxdC0zOCAxMjRxMCA5MSA2NCAxNTV0MTU1IDY0dDE1NSAtNjR0NjQgLTE1NXEwIC02OCAtMzggLTEyNHQtMTAxIC04MXYtNjhxMTkwIDQ0IDM0MyA0NHE5OSAwIDE5OCAtMTVxMTQgLTIgMTExLjUgLTIyLjV0MTQ5LjUgLTIwLjUNCnE3NyAwIDE2NSAxOHExMSAyIDgwIDIxdDg5IDE5cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjUiIHVuaWNvZGU9IiYjeGYyYjU7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNMTkyIDM4NHE0MCAwIDU2IDMydDAgNjR0LTU2IDMydC01NiAtMzJ0MCAtNjR0NTYgLTMyek0xNjY1IDQ0MnEtMTAgMTMgLTM4LjUgNTB0LTQxLjUgNTR0LTM4IDQ5dC00Mi41IDUzdC00MC41IDQ3dC00NSA0OWwtMTI1IC0xNDBxLTgzIC05NCAtMjA4LjUgLTkydC0yMDUuNSA5OHEtNTcgNjkgLTU2LjUgMTU4dDU4LjUgMTU3bDE3NyAyMDZxLTIyIDExIC01MSAxNi41dC00Ny41IDZ0LTU2LjUgLTAuNXQtNDkgLTFxLTkyIDAgLTE1OCAtNjYNCmwtMTU4IC0xNThoLTE1NXYtNTQ0cTUgMCAyMSAwLjV0MjIgMHQxOS41IC0ydDIwLjUgLTQuNXQxNy41IC04LjV0MTguNSAtMTMuNWwyOTcgLTI5MnExMTUgLTExMSAyMjcgLTExMXE3OCAwIDEyNSA0N3E1NyAtMjAgMTEyLjUgOHQ3Mi41IDg1cTc0IC02IDEyNyA0NHEyMCAxOCAzNiA0NS41dDE0IDUwLjVxMTAgLTEwIDQzIC0xMHE0MyAwIDc3IDIxdDQ5LjUgNTN0MTIgNzEuNXQtMzAuNSA3My41ek0xODI0IDM4NGg5NnY1MTJoLTkzbC0xNTcgMTgwDQpxLTY2IDc2IC0xNjkgNzZoLTE2N3EtODkgMCAtMTQ2IC02N2wtMjA5IC0yNDNxLTI4IC0zMyAtMjggLTc1dDI3IC03NXE0MyAtNTEgMTEwIC01MnQxMTEgNDlsMTkzIDIxOHEyNSAyMyA1My41IDIxLjV0NDcgLTI3dDguNSAtNTYuNXExNiAtMTkgNTYgLTYzdDYwIC02OHEyOSAtMzYgODIuNSAtMTA1LjV0NjQuNSAtODQuNXE1MiAtNjYgNjAgLTE0MHpNMjExMiAzODRxNDAgMCA1NiAzMnQwIDY0dC01NiAzMnQtNTYgLTMydDAgLTY0dDU2IC0zMnoNCk0yMzA0IDk2MHYtNjQwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDM0cS0yNyAtNjUgLTgyIC0xMDYuNXQtMTI1IC01MS41cS0zMyAtNDggLTgwLjUgLTgxLjV0LTEwMi41IC00NS41cS00MiAtNTMgLTEwNC41IC04MS41dC0xMjguNSAtMjQuNXEtNjAgLTM0IC0xMjYgLTM5LjV0LTEyNy41IDE0dC0xMTcgNTMuNXQtMTAzLjUgODFsLTI4NyAyODJoLTM1OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3MnEwIDI2IDE5IDQ1dDQ1IDE5aDQyMQ0KcTE0IDE0IDQ3IDQ4dDQ3LjUgNDh0NDQgNDB0NTAuNSAzNy41dDUxIDI1LjV0NjIgMTkuNXQ2OCA1LjVoMTE3cTk5IDAgMTgxIC01NnE4MiA1NiAxODEgNTZoMTY3cTM1IDAgNjcgLTZ0NTYuNSAtMTQuNXQ1MS41IC0yNi41dDQ0LjUgLTMxdDQzIC0zOS41dDM5IC00MnQ0MSAtNDh0NDEuNSAtNDguNWgzNTVxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCNiIgdW5pY29kZT0iJiN4ZjJiNjsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNzkyIDg4MnYtOTc4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NzhxMCAxNSAxMSAyNHE4IDcgMzkgMzQuNXQ0MS41IDM2dDQ1LjUgMzcuNXQ3MCA1NS41dDk2IDczdDE0My41IDEwN3QxOTIuNSAxNDAuNXE1IDQgNTIuNSA0MHQ3MS41IDUyLjV0NjQgMzV0NjkgMTguNXQ2OSAtMTguNXQ2NSAtMzUuNXQ3MSAtNTJ0NTIgLTQwcTExMCAtODAgMTkyLjUgLTE0MC41dDE0My41IC0xMDcNCnQ5NiAtNzN0NzAgLTU1LjV0NDUuNSAtMzcuNXQ0MS41IC0zNnQzOSAtMzQuNXExMSAtOSAxMSAtMjR6TTEyMjggMjk3cTI2MyAxOTEgMzQ1IDI1MnExMSA4IDEyLjUgMjAuNXQtNi41IDIzLjVsLTM4IDUycS04IDExIC0yMSAxMi41dC0yNCAtNi41cS0yMzEgLTE2OSAtMzQzIC0yNTBxLTUgLTMgLTUyIC0zOXQtNzEuNSAtNTIuNXQtNjQuNSAtMzV0LTY5IC0xOC41dC02OSAxOC41dC02NC41IDM1dC03MS41IDUyLjV0LTUyIDM5DQpxLTE4NiAxMzQgLTM0MyAyNTBxLTExIDggLTI0IDYuNXQtMjEgLTEyLjVsLTM4IC01MnEtOCAtMTEgLTYuNSAtMjMuNXQxMi41IC0yMC41cTgyIC02MSAzNDUgLTI1MnExMCAtOCA1MCAtMzh0NjUgLTQ3dDY0IC0zOS41dDc3LjUgLTMzLjV0NzUuNSAtMTF0NzUuNSAxMXQ3OSAzNC41dDY0LjUgMzkuNXQ2NSA0Ny41dDQ4IDM2LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI3IiB1bmljb2RlPSImI3hmMmI3OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE0NzQgNjIzbDM5IC01MXE4IC0xMSA2LjUgLTIzLjV0LTExLjUgLTIwLjVxLTQzIC0zNCAtMTI2LjUgLTk4LjV0LTE0Ni41IC0xMTN0LTY3IC01MS41cS0zOSAtMzIgLTYwIC00OHQtNjAuNSAtNDF0LTc2LjUgLTM2LjV0LTc0IC0xMS41aC0xaC0xcS0zNyAwIC03NCAxMS41dC03NiAzNi41dC02MSA0MS41dC02MCA0Ny41cS01IDQgLTY1IDUwLjV0LTE0My41IDExMXQtMTIyLjUgOTQuNXEtMTEgOCAtMTIuNSAyMC41dDYuNSAyMy41DQpsMzcgNTJxOCAxMSAyMS41IDEzdDI0LjUgLTdxOTQgLTczIDMwNiAtMjM2cTUgLTQgNDMuNSAtMzV0NjAuNSAtNDYuNXQ1Ni41IC0zMi41dDU4LjUgLTE3aDFoMXEyNCAwIDU4LjUgMTd0NTYuNSAzMi41dDYwLjUgNDYuNXQ0My41IDM1cTI1OCAxOTggMzEzIDI0MnExMSA4IDI0IDYuNXQyMSAtMTIuNXpNMTY2NCAtOTZ2OTI4cS05MCA4MyAtMTU5IDEzOXEtOTEgNzQgLTM4OSAzMDRxLTMgMiAtNDMgMzV0LTYxIDQ4dC01NiAzMi41dC01OSAxNy41DQpoLTFoLTFxLTI0IDAgLTU5IC0xNy41dC01NiAtMzIuNXQtNjEgLTQ4dC00MyAtMzVxLTIxNSAtMTY2IC0zMTUuNSAtMjQ1LjV0LTEyOS41IC0xMDR0LTgyIC03NC41cS0xNCAtMTIgLTIxIC0xOXYtOTI4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTQ3MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzkyIDgzMnYtOTI4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5MjhxMCA1NiA0MSA5NA0KcTEyMyAxMTQgMzUwIDI5MC41dDIzMyAxODEuNXEzNiAzMCA1OSA0Ny41dDYxLjUgNDJ0NzYgMzYuNXQ3NC41IDEyaDFoMXEzNyAwIDc0LjUgLTEydDc2IC0zNi41dDYxLjUgLTQydDU5IC00Ny41cTQzIC0zNiAxNTYgLTEyMnQyMjYgLTE3N3QyMDEgLTE3M3E0MSAtMzggNDEgLTk0eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCOCIgdW5pY29kZT0iJiN4ZjJiODsiIA0KZD0iTTMzMCAxbDIwMiAtMjE0bC0zNCAyMzZsLTIxNiAyMTN6TTU1NiAtMjI1bDI3NCAyMThsLTExIDI0NWwtMzAwIC0yMTV6TTI0NSA0MTNsMjI3IC0yMTNsLTQ4IDMyN2wtMjQ1IDIwNHpNNDk1IDE4OWwzMTcgMjE0bC0xNCAzMjRsLTM1MiAtMjAwek04NDMgMTc4bDk1IC04MGwtMiAyMzlsLTEwMyA3OXEwIC0xIDEgLTguNXQwIC0xMnQtNSAtNy41bC03OCAtNTJsODUgLTcwcTcgLTYgNyAtODh6TTEzOCA5MzBsMjU2IC0yMDBsLTY4IDQ2NQ0KbC0yNzkgMTczek0xMTczIDI2N2wxNSAyMzRsLTIzMCAtMTY0bDIgLTI0MHpNNDE3IDcyMmwzNzMgMTk0bC0xOSA0NDFsLTQyMyAtMTYzek0xMjcwIDM1N2wyMCAyMzNsLTIyNiAxNDJsLTIgLTEwNWwxNDQgLTk1cTYgLTQgNCAtOWwtNyAtMTE5ek0xNDYxIDQ5NmwzMCAyMjJsLTE3OSAtMTI4bC0yMCAtMjI4ek0xMjczIDMyOWwtNzEgNDlsLTggLTExN3EwIC01IC00IC04bC0yMzQgLTE4N3EtNyAtNSAtMTQgMGwtOTggODNsNyAtMTYxDQpxMCAtNSAtNCAtOGwtMjkzIC0yMzRxLTQgLTIgLTYgLTJxLTggMiAtOCAzbC0yMjggMjQycS00IDQgLTU5IDI3N3EtMiA3IDUgMTFsNjEgMzdxLTk0IDg2IC05NSA5MmwtNzIgMzUxcS0yIDcgNiAxMmw5NCA0NXEtMTMzIDEwMCAtMTM1IDEwOGwtOTYgNDY2cS0yIDEwIDcgMTNsNDMzIDEzNXE1IDAgOCAtMWwzMTcgLTE1M3E2IC00IDYgLTlsMjAgLTQ2M3EwIC03IC02IC0xMGwtMTE4IC02MWwxMjYgLTg1cTUgLTIgNSAtOGw1IC0xMjNsMTIxIDc0DQpxNSA0IDExIDBsODQgLTU2bDMgMTEwcTAgNiA1IDlsMjA2IDEyNnE2IDMgMTEgMGwyNDUgLTEzNXE0IC00IDUgLTd0LTYuNSAtNjB0LTE3LjUgLTEyNC41dC0xMCAtNzAuNXEwIC01IC00IC03bC0xOTEgLTE1M3EtNiAtNSAtMTMgMHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjkiIHVuaWNvZGU9IiYjeGYyYjk7IiBob3Jpei1hZHYteD0iMTY2NCIgDQpkPSJNMTIwMSAyOThxMCA1NyAtNS41IDEwN3QtMjEgMTAwLjV0LTM5LjUgODZ0LTY0IDU4dC05MSAyMi41cS02IC00IC0zMy41IC0yMC41dC00Mi41IC0yNC41dC00MC41IC0yMHQtNDkgLTE3dC00Ni41IC01dC00Ni41IDV0LTQ5IDE3dC00MC41IDIwdC00Mi41IDI0LjV0LTMzLjUgMjAuNXEtNTEgMCAtOTEgLTIyLjV0LTY0IC01OHQtMzkuNSAtODZ0LTIxIC0xMDAuNXQtNS41IC0xMDdxMCAtNzMgNDIgLTEyMS41dDEwMyAtNDguNWg1NzYNCnE2MSAwIDEwMyA0OC41dDQyIDEyMS41ek0xMDI4IDg5MnEwIDEwOCAtNzYuNSAxODR0LTE4My41IDc2dC0xODMuNSAtNzZ0LTc2LjUgLTE4NHEwIC0xMDcgNzYuNSAtMTgzdDE4My41IC03NnQxODMuNSA3NnQ3Ni41IDE4M3pNMTY2NCAzNTJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtMjI0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxNDcycTAgNjYgNDcgMTEzdDExMyA0N2gxMjE2DQpxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTIyNGg5NnExNCAwIDIzIC05dDkgLTIzdi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTEyOGg5NnExNCAwIDIzIC05dDkgLTIzdi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTEyOGg5NnExNCAwIDIzIC05dDkgLTIzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCQSIgdW5pY29kZT0iJiN4ZjJiYTsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xMDI4IDg5MnEwIC0xMDcgLTc2LjUgLTE4M3QtMTgzLjUgLTc2dC0xODMuNSA3NnQtNzYuNSAxODNxMCAxMDggNzYuNSAxODR0MTgzLjUgNzZ0MTgzLjUgLTc2dDc2LjUgLTE4NHpNOTgwIDY3MnE0NiAwIDgyLjUgLTE3dDYwIC00Ny41dDM5LjUgLTY3dDI0IC04MXQxMS41IC04Mi41dDMuNSAtNzlxMCAtNjcgLTM5LjUgLTExOC41dC0xMDUuNSAtNTEuNWgtNTc2cS02NiAwIC0xMDUuNSA1MS41dC0zOS41IDExOC41cTAgNDggNC41IDkzLjUNCnQxOC41IDk4LjV0MzYuNSA5MS41dDYzIDY0LjV0OTMuNSAyNmg1cTcgLTQgMzIgLTE5LjV0MzUuNSAtMjF0MzMgLTE3dDM3IC0xNnQzNSAtOXQzOS41IC00LjV0MzkuNSA0LjV0MzUgOXQzNyAxNnQzMyAxN3QzNS41IDIxdDMyIDE5LjV6TTE2NjQgOTI4cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTZ2LTEyOGg5NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2di0xMjhoOTYNCnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2di0yMjRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEyMTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE0NzJxMCA2NiA0NyAxMTN0MTEzIDQ3aDEyMTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTIyNGg5NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE5MnpNMTQwOCAtOTZ2MTQ3MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTEyMTYNCnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTE0NzJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxMjE2cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkJCIiB1bmljb2RlPSImI3hmMmJiOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTEwMjQgNDA1cTAgNjQgLTkgMTE3LjV0LTI5LjUgMTAzdC02MC41IDc4dC05NyAyOC41cS02IC00IC0zMCAtMTh0LTM3LjUgLTIxLjV0LTM1LjUgLTE3LjV0LTQzIC0xNC41dC00MiAtNC41dC00MiA0LjV0LTQzIDE0LjV0LTM1LjUgMTcuNXQtMzcuNSAyMS41dC0zMCAxOHEtNTcgMCAtOTcgLTI4LjV0LTYwLjUgLTc4dC0yOS41IC0xMDN0LTkgLTExNy41dDM3IC0xMDYuNXQ5MSAtNDIuNWg1MTJxNTQgMCA5MSA0Mi41dDM3IDEwNi41eg0KTTg2NyA5MjVxMCA5NCAtNjYuNSAxNjAuNXQtMTYwLjUgNjYuNXQtMTYwLjUgLTY2LjV0LTY2LjUgLTE2MC41dDY2LjUgLTE2MC41dDE2MC41IC02Ni41dDE2MC41IDY2LjV0NjYuNSAxNjAuNXpNMTc5MiA0MTZ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNTc2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDU3NnExNCAwIDIzIDl0OSAyM3pNMTc5MiA2NzZ2NTZxMCAxNSAtMTAuNSAyNS41dC0yNS41IDEwLjVoLTU2OA0KcS0xNSAwIC0yNS41IC0xMC41dC0xMC41IC0yNS41di01NnEwIC0xNSAxMC41IC0yNS41dDI1LjUgLTEwLjVoNTY4cTE1IDAgMjUuNSAxMC41dDEwLjUgMjUuNXpNMTc5MiA5Mjh2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNTc2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDU3NnExNCAwIDIzIDl0OSAyM3pNMjA0OCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0zNTJ2OTZxMCAxNCAtOSAyM3QtMjMgOQ0KaC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi05NmgtNzY4djk2cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2aC0zNTJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE3MjhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkJDIiB1bmljb2RlPSImI3hmMmJjOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTEwMjQgNDA1cTAgLTY0IC0zNyAtMTA2LjV0LTkxIC00Mi41aC01MTJxLTU0IDAgLTkxIDQyLjV0LTM3IDEwNi41dDkgMTE3LjV0MjkuNSAxMDN0NjAuNSA3OHQ5NyAyOC41cTYgLTQgMzAgLTE4dDM3LjUgLTIxLjV0MzUuNSAtMTcuNXQ0MyAtMTQuNXQ0MiAtNC41dDQyIDQuNXQ0MyAxNC41dDM1LjUgMTcuNXQzNy41IDIxLjV0MzAgMThxNTcgMCA5NyAtMjguNXQ2MC41IC03OHQyOS41IC0xMDN0OSAtMTE3LjV6TTg2NyA5MjUNCnEwIC05NCAtNjYuNSAtMTYwLjV0LTE2MC41IC02Ni41dC0xNjAuNSA2Ni41dC02Ni41IDE2MC41dDY2LjUgMTYwLjV0MTYwLjUgNjYuNXQxNjAuNSAtNjYuNXQ2Ni41IC0xNjAuNXpNMTc5MiA0ODB2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTU3NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg1NzZxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiA3MzJ2LTU2cTAgLTE1IC0xMC41IC0yNS41dC0yNS41IC0xMC41aC01NjgNCnEtMTUgMCAtMjUuNSAxMC41dC0xMC41IDI1LjV2NTZxMCAxNSAxMC41IDI1LjV0MjUuNSAxMC41aDU2OHExNSAwIDI1LjUgLTEwLjV0MTAuNSAtMjUuNXpNMTc5MiA5OTJ2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTU3NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg1NzZxMTQgMCAyMyAtOXQ5IC0yM3pNMTkyMCAzMnYxMjE2cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTcyOHEtMTMgMCAtMjIuNSAtOS41DQp0LTkuNSAtMjIuNXYtMTIxNnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDM1MnY5NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi05Nmg3Njh2OTZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtOTZoMzUycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTIwNDggMTI0OHYtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTcyOHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExMw0KdDExMyA0N2gxNzI4cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCRCIgdW5pY29kZT0iJiN4ZjJiZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNTIzIDE5N3EtMjIgMTU1IC04Ny41IDI1Ny41dC0xODQuNSAxMTguNXEtNjcgLTc0IC0xNTkuNSAtMTE1LjV0LTE5NS41IC00MS41dC0xOTUuNSA0MS41dC0xNTkuNSAxMTUuNXEtMTE5IC0xNiAtMTg0LjUgLTExOC41dC04Ny41IC0yNTcuNXExMDYgLTE1MCAyNzEgLTIzNy41dDM1NiAtODcuNXQzNTYgODcuNXQyNzEgMjM3LjV6TTEyODAgODk2cTAgMTU5IC0xMTIuNSAyNzEuNXQtMjcxLjUgMTEyLjV0LTI3MS41IC0xMTIuNQ0KdC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ3LjV0LTE5MC41IC0yODZ0LTI4NS41IC0xOTEuNXQtMzQ5IC03MXEtMTgyIDAgLTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkUiIHVuaWNvZGU9IiYjeGYyYmU7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNODk2IDE1MzZxMTgyIDAgMzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4cTAgLTE4MSAtNzAuNSAtMzQ3dC0xOTAuNSAtMjg2dC0yODYgLTE5MS41dC0zNDkgLTcxLjV0LTM0OSA3MXQtMjg1LjUgMTkxLjV0LTE5MC41IDI4NnQtNzEgMzQ3LjV0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6TTE1MTUgMTg1cTE0OSAyMDUgMTQ5IDQ1NXEwIDE1NiAtNjEgMjk4dC0xNjQgMjQ1dC0yNDUgMTY0dC0yOTggNjF0LTI5OCAtNjENCnQtMjQ1IC0xNjR0LTE2NCAtMjQ1dC02MSAtMjk4cTAgLTI1MCAxNDkgLTQ1NXE2NiAzMjcgMzA2IDMyN3ExMzEgLTEyOCAzMTMgLTEyOHQzMTMgMTI4cTI0MCAwIDMwNiAtMzI3ek0xMjgwIDgzMnEwIDE1OSAtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41dC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjV0MjcxLjUgLTExMi41dDI3MS41IDExMi41dDExMi41IDI3MS41eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMCIgdW5pY29kZT0iJiN4ZjJjMDsiIA0KZD0iTTEyMDEgNzUycTQ3IC0xNCA4OS41IC0zOHQ4OSAtNzN0NzkuNSAtMTE1LjV0NTUgLTE3MnQyMiAtMjM2LjVxMCAtMTU0IC0xMDAgLTI2My41dC0yNDEgLTEwOS41aC04NTRxLTE0MSAwIC0yNDEgMTA5LjV0LTEwMCAyNjMuNXEwIDEzMSAyMiAyMzYuNXQ1NSAxNzJ0NzkuNSAxMTUuNXQ4OSA3M3Q4OS41IDM4cS03OSAxMjUgLTc5IDI3MnEwIDEwNCA0MC41IDE5OC41dDEwOS41IDE2My41dDE2My41IDEwOS41dDE5OC41IDQwLjUNCnQxOTguNSAtNDAuNXQxNjMuNSAtMTA5LjV0MTA5LjUgLTE2My41dDQwLjUgLTE5OC41cTAgLTE0NyAtNzkgLTI3MnpNNzY4IDE0MDhxLTE1OSAwIC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjV0MjcxLjUgLTExMi41dDI3MS41IDExMi41dDExMi41IDI3MS41dC0xMTIuNSAyNzEuNXQtMjcxLjUgMTEyLjV6TTExOTUgLTEyOHE4OCAwIDE1MC41IDcxLjV0NjIuNSAxNzMuNXEwIDIzOSAtNzguNSAzNzd0LTIyNS41IDE0NQ0KcS0xNDUgLTEyNyAtMzM2IC0xMjd0LTMzNiAxMjdxLTE0NyAtNyAtMjI1LjUgLTE0NXQtNzguNSAtMzc3cTAgLTEwMiA2Mi41IC0xNzMuNXQxNTAuNSAtNzEuNWg4NTR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkMxIiB1bmljb2RlPSImI3hmMmMxOyIgaG9yaXotYWR2LXg9IjEyODAiIA0KZD0iTTEwMjQgMjc4cTAgLTY0IC0zNyAtMTA3dC05MSAtNDNoLTUxMnEtNTQgMCAtOTEgNDN0LTM3IDEwN3Q5IDExOHQyOS41IDEwNHQ2MSA3OC41dDk2LjUgMjguNXE4MCAtNzUgMTg4IC03NXQxODggNzVxNTYgMCA5Ni41IC0yOC41dDYxIC03OC41dDI5LjUgLTEwNHQ5IC0xMTh6TTg3MCA3OTdxMCAtOTQgLTY3LjUgLTE2MC41dC0xNjIuNSAtNjYuNXQtMTYyLjUgNjYuNXQtNjcuNSAxNjAuNXQ2Ny41IDE2MC41dDE2Mi41IDY2LjUNCnQxNjIuNSAtNjYuNXQ2Ny41IC0xNjAuNXpNMTE1MiAtOTZ2MTM3NmgtMTAyNHYtMTM3NnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDEzNzZ2LTE0NzJxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTk2MHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTQ3MnEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydi05NnEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2OTZoMzUyDQpxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkMyIiB1bmljb2RlPSImI3hmMmMyOyIgaG9yaXotYWR2LXg9IjIwNDgiIA0KZD0iTTg5NiAzMjRxMCA1NCAtNy41IDEwMC41dC0yNC41IDkwdC01MSA2OC41dC04MSAyNXEtNjQgLTY0IC0xNTYgLTY0dC0xNTYgNjRxLTQ3IDAgLTgxIC0yNXQtNTEgLTY4LjV0LTI0LjUgLTkwdC03LjUgLTEwMC41cTAgLTU1IDMxLjUgLTkzLjV0NzUuNSAtMzguNWg0MjZxNDQgMCA3NS41IDM4LjV0MzEuNSA5My41ek03NjggNzY4cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnQxMzYgNTYNCnQ1NiAxMzZ6TTE3OTIgMjg4djY0cTAgMTQgLTkgMjN0LTIzIDloLTcwNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg3MDRxMTQgMCAyMyA5dDkgMjN6TTE0MDggNTQ0djY0cTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE3OTIgNTQ0djY0cTAgMTQgLTkgMjN0LTIzIDloLTE5MnEtMTQgMCAtMjMgLTl0LTkgLTIzDQp2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3pNMTc5MiA4MDB2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNzA0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDcwNHExNCAwIDIzIDl0OSAyM3pNMTI4IDExNTJoMTc5MnY5NnEwIDE0IC05IDIzdC0yMyA5aC0xNzI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2ek0yMDQ4IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE3MjgNCnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzMiIHVuaWNvZGU9IiYjeGYyYzM7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNODk2IDMyNHEwIC01NSAtMzEuNSAtOTMuNXQtNzUuNSAtMzguNWgtNDI2cS00NCAwIC03NS41IDM4LjV0LTMxLjUgOTMuNXEwIDU0IDcuNSAxMDAuNXQyNC41IDkwdDUxIDY4LjV0ODEgMjVxNjQgLTY0IDE1NiAtNjR0MTU2IDY0cTQ3IDAgODEgLTI1dDUxIC02OC41dDI0LjUgLTkwdDcuNSAtMTAwLjV6TTc2OCA3NjhxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2eg0KTTE3OTIgMzUydi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTE0MDggNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzIwcTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2NjQNCnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiA4NjR2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTcwNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg3MDRxMTQgMCAyMyAtOXQ5IC0yM3pNMTkyMCAzMnYxMTIwaC0xNzkydi0xMTIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTcyOHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0yMDQ4IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDcNCmgtMTcyOHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzQiIHVuaWNvZGU9IiYjeGYyYzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTI1NSA3NDlxMCAzMTggLTEwNSA0NzQuNXQtMzMwIDE1Ni41cS0yMjIgMCAtMzI2IC0xNTd0LTEwNCAtNDc0cTAgLTMxNiAxMDQgLTQ3MS41dDMyNiAtMTU1LjVxNzQgMCAxMzEgMTdxLTIyIDQzIC0zOSA3M3QtNDQgNjV0LTUzLjUgNTYuNXQtNjMgMzZ0LTc3LjUgMTQuNXEtNDYgMCAtNzkgLTE2bC00OSA5N3ExMDUgOTEgMjc2IDkxcTEzMiAwIDIxNS41IC01NHQxNTAuNSAtMTU1cTY3IDE0OSA2NyA0MDJ6TTE2NDUgMTE3aDExNw0KcTMgLTI3IC0yIC02N3QtMjYuNSAtOTV0LTU4IC0xMDAuNXQtMTA3IC03OHQtMTYyLjUgLTMyLjVxLTcxIDAgLTEzMC41IDE5dC0xMDUuNSA1NnQtNzkgNzh0LTY2IDk2cS05NyAtMjcgLTIwNSAtMjdxLTE1MCAwIC0yOTIuNSA1OHQtMjUzIDE1OC41dC0xNzggMjQ5dC02Ny41IDMxNy41cTAgMTcwIDY3LjUgMzE5LjV0MTc4LjUgMjUwLjV0MjUzLjUgMTU5dDI5MS41IDU4cTEyMSAwIDIzOC41IC0zNnQyMTcgLTEwNnQxNzYgLTE2NC41DQp0MTE5LjUgLTIxOXQ0MyAtMjYxLjVxMCAtMTkwIC04MC41IC0zNDcuNXQtMjE4LjUgLTI2NC41cTQ3IC03MCA5My41IC0xMDYuNXQxMDQuNSAtMzYuNXE2MSAwIDk0IDM3LjV0MzggODUuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzUiIHVuaWNvZGU9IiYjeGYyYzU7IiBob3Jpei1hZHYteD0iMjMwNCIgDQpkPSJNNDUzIC0xMDFxMCAtMjEgLTE2IC0zNy41dC0zNyAtMTYuNXEtMSAwIC0xMyAzcS02MyAxNSAtMTYyIDE0MHEtMjI1IDI4NCAtMjI1IDY3NnEwIDM0MSAyMTMgNjE0cTM5IDUxIDk1IDEwMy41dDk0IDUyLjVxMTkgMCAzNSAtMTMuNXQxNiAtMzIuNXEwIC0yNyAtNjMgLTkwcS05OCAtMTAyIC0xNDcgLTE4NHEtMTE5IC0xOTkgLTExOSAtNDQ5cTAgLTI4MSAxMjMgLTQ5MXE1MCAtODUgMTM2IC0xNzNxMiAtMyAxNC41IC0xNnQxOS41IC0yMQ0KdDE3IC0yMC41dDE0LjUgLTIzLjV0NC41IC0yMXpNMTc5NiAzM3EwIC0yOSAtMTcuNSAtNDguNXQtNDYuNSAtMTkuNWgtMTA4MXEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMjkgMTcuNSA0OC41dDQ2LjUgMTkuNWgxMDgxcTI2IDAgNDUgLTE5dDE5IC00NXpNMTU4MSA2NDRxMCAtMTM0IC02NyAtMjMzcS0yNSAtMzggLTY5LjUgLTc4LjV0LTgzLjUgLTYwLjVxLTE2IC0xMCAtMjcgLTEwcS03IDAgLTE1IDZ0LTggMTJxMCA5IDE5IDMwdDQyIDQ2DQp0NDIgNjcuNXQxOSA4OC41cTAgNzYgLTM1IDEzMHEtMjkgNDIgLTQ2IDQycS0zIDAgLTMgLTVxMCAtMTIgNy41IC0zNS41dDcuNSAtMzYuNXEwIC0yMiAtMjEuNSAtMzV0LTQ0LjUgLTEzcS02NiAwIC02NiA3NnEwIDE1IDEuNSA0NHQxLjUgNDRxMCAyNSAtMTAgNDZxLTEzIDI1IC00MiA1My41dC01MSAyOC41cS01IDAgLTcgLTAuNXQtMy41IC0yLjV0LTEuNSAtNnEwIC0yIDE2IC0yNnQxNiAtNTRxMCAtMzcgLTE5IC02OHQtNDYgLTU0DQp0LTUzLjUgLTQ2dC00NS41IC01NHQtMTkgLTY4cTAgLTk4IDQyIC0xNjBxMjkgLTQzIDc5IC02M3ExNiAtNSAxNyAtMTBxMSAtMiAxIC01cTAgLTE2IC0xOCAtMTZxLTYgMCAtMzMgMTFxLTExOSA0MyAtMTk1IDEzOS41dC03NiAyMTguNXEwIDU1IDI0LjUgMTE1LjV0NjAgMTE1dDcwLjUgMTA4LjV0NTkuNSAxMTMuNXQyNC41IDExMS41cTAgNTMgLTI1IDk0cS0yOSA0OCAtNTYgNjRxLTE5IDkgLTE5IDIxcTAgMjAgNDEgMjBxNTAgMCAxMTAgLTI5DQpxNDEgLTE5IDcxIC00NC41dDQ5LjUgLTUxdDMzLjUgLTYyLjV0MjIgLTY5dDE2IC04MHEwIC0xIDMgLTE3LjV0NC41IC0yNXQ1LjUgLTI1dDkgLTI3dDExIC0yMS41dDE0LjUgLTE2LjV0MTguNSAtNS41cTIzIDAgMzcgMTR0MTQgMzdxMCAyNSAtMjAgNjd0LTIwIDUydDEwIDEwcTI3IDAgOTMgLTcwcTcyIC03NiAxMDIuNSAtMTU2dDMwLjUgLTE4NnpNMjMwNCA2MTVxMCAtMjc0IC0xMzggLTUwM3EtMTkgLTMyIC00OCAtNzJ0LTY4IC04Ni41DQp0LTgxIC03N3QtNzQgLTMwLjVxLTE2IDAgLTMxIDE1LjV0LTE1IDMxLjVxMCAxNSAyOSA1MC41dDY4LjUgNzd0NDguNSA1Mi41cTE4MyAyMzAgMTgzIDUzMXEwIDEzMSAtMjAuNSAyMzV0LTcyLjUgMjExcS01OCAxMTkgLTE2MyAyMjhxLTIgMyAtMTMgMTMuNXQtMTYuNSAxNi41dC0xNSAxNy41dC0xNSAyMHQtOS41IDE4LjV0LTQgMTlxMCAxOSAxNiAzNS41dDM1IDE2LjVxNzAgMCAxOTYgLTE2OXE5OCAtMTMxIDE0NiAtMjczdDYwIC0zMTQNCnEyIC00MiAyIC02NHoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzYiIHVuaWNvZGU9IiYjeGYyYzY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTE4OSAyMjlsMTQ3IDY5M3E5IDQ0IC0xMC41IDYzdC01MS41IDdsLTg2NCAtMzMzcS0yOSAtMTEgLTM5LjUgLTI1dC0yLjUgLTI2LjV0MzIgLTE5LjVsMjIxIC02OWw1MTMgMzIzcTIxIDE0IDMyIDZxNyAtNSAtNCAtMTVsLTQxNSAtMzc1djB2MGwtMTYgLTIyOHEyMyAwIDQ1IDIybDEwOCAxMDRsMjI0IC0xNjVxNjQgLTM2IDgxIDM4ek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MQ0KdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkM3IiB1bmljb2RlPSImI3hmMmM3OyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTY0MCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2cTAgNjAgMzUgMTEwdDkzIDcxdjkwN2gxMjh2LTkwN3E1OCAtMjEgOTMgLTcxdDM1IC0xMTB6TTc2OCAxOTJxMCA3NyAtMzQgMTQ0dC05NCAxMTJ2NzY4cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2di03NjhxLTYwIC00NSAtOTQgLTExMnQtMzQgLTE0NHEwIC0xMzMgOTMuNSAtMjI2LjV0MjI2LjUgLTkzLjV0MjI2LjUgOTMuNQ0KdDkzLjUgMjI2LjV6TTg5NiAxOTJxMCAtMTg1IC0xMzEuNSAtMzE2LjV0LTMxNi41IC0xMzEuNXQtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTgyIDEyOCAzMTN2NzExcTAgMTMzIDkzLjUgMjI2LjV0MjI2LjUgOTMuNXQyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXYtNzExcTEyOCAtMTMxIDEyOCAtMzEzek0xMDI0IDc2OHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMDI0di0xMjhoLTE5MnYxMjhoMTkyek0xMDI0IDEyODB2LTEyOGgtMTkyDQp2MTI4aDE5MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzgiIHVuaWNvZGU9IiYjeGYyYzg7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNNjQwIDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZxMCA2MCAzNSAxMTB0OTMgNzF2NjUxaDEyOHYtNjUxcTU4IC0yMSA5MyAtNzF0MzUgLTExMHpNNzY4IDE5MnEwIDc3IC0zNCAxNDR0LTk0IDExMnY3NjhxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTc2OHEtNjAgLTQ1IC05NCAtMTEydC0zNCAtMTQ0cTAgLTEzMyA5My41IC0yMjYuNXQyMjYuNSAtOTMuNXQyMjYuNSA5My41DQp0OTMuNSAyMjYuNXpNODk2IDE5MnEwIC0xODUgLTEzMS41IC0zMTYuNXQtMzE2LjUgLTEzMS41dC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxODIgMTI4IDMxM3Y3MTFxMCAxMzMgOTMuNSAyMjYuNXQyMjYuNSA5My41dDIyNi41IC05My41dDkzLjUgLTIyNi41di03MTFxMTI4IC0xMzEgMTI4IC0zMTN6TTEwMjQgNzY4di0xMjhoLTE5MnYxMjhoMTkyek0xMDI0IDEwMjR2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTI4MHYtMTI4aC0xOTINCnYxMjhoMTkyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDOSIgdW5pY29kZT0iJiN4ZjJjOTsiIGhvcml6LWFkdi14PSIxMDI0IiANCmQ9Ik02NDAgMTkycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnEwIDYwIDM1IDExMHQ5MyA3MXYzOTVoMTI4di0zOTVxNTggLTIxIDkzIC03MXQzNSAtMTEwek03NjggMTkycTAgNzcgLTM0IDE0NHQtOTQgMTEydjc2OHEwIDgwIC01NiAxMzZ0LTEzNiA1NnQtMTM2IC01NnQtNTYgLTEzNnYtNzY4cS02MCAtNDUgLTk0IC0xMTJ0LTM0IC0xNDRxMCAtMTMzIDkzLjUgLTIyNi41dDIyNi41IC05My41dDIyNi41IDkzLjUNCnQ5My41IDIyNi41ek04OTYgMTkycTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41dDIyNi41IDkzLjV0MjI2LjUgLTkzLjV0OTMuNSAtMjI2LjV2LTcxMXExMjggLTEzMSAxMjggLTMxM3pNMTAyNCA3Njh2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTAyNHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMjgwdi0xMjhoLTE5Mg0KdjEyOGgxOTJ6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNBIiB1bmljb2RlPSImI3hmMmNhOyIgaG9yaXotYWR2LXg9IjEwMjQiIA0KZD0iTTY0MCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2cTAgNjAgMzUgMTEwdDkzIDcxdjEzOWgxMjh2LTEzOXE1OCAtMjEgOTMgLTcxdDM1IC0xMTB6TTc2OCAxOTJxMCA3NyAtMzQgMTQ0dC05NCAxMTJ2NzY4cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2di03NjhxLTYwIC00NSAtOTQgLTExMnQtMzQgLTE0NHEwIC0xMzMgOTMuNSAtMjI2LjV0MjI2LjUgLTkzLjV0MjI2LjUgOTMuNQ0KdDkzLjUgMjI2LjV6TTg5NiAxOTJxMCAtMTg1IC0xMzEuNSAtMzE2LjV0LTMxNi41IC0xMzEuNXQtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTgyIDEyOCAzMTN2NzExcTAgMTMzIDkzLjUgMjI2LjV0MjI2LjUgOTMuNXQyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXYtNzExcTEyOCAtMTMxIDEyOCAtMzEzek0xMDI0IDc2OHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMDI0di0xMjhoLTE5MnYxMjhoMTkyek0xMDI0IDEyODB2LTEyOGgtMTkyDQp2MTI4aDE5MnoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQ0IiIHVuaWNvZGU9IiYjeGYyY2I7IiBob3Jpei1hZHYteD0iMTAyNCIgDQpkPSJNNjQwIDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZxMCA3OSA1NiAxMzUuNXQxMzYgNTYuNXQxMzYgLTU2LjV0NTYgLTEzNS41ek03NjggMTkycTAgNzcgLTM0IDE0NHQtOTQgMTEydjc2OHEwIDgwIC01NiAxMzZ0LTEzNiA1NnQtMTM2IC01NnQtNTYgLTEzNnYtNzY4cS02MCAtNDUgLTk0IC0xMTJ0LTM0IC0xNDRxMCAtMTMzIDkzLjUgLTIyNi41dDIyNi41IC05My41dDIyNi41IDkzLjV0OTMuNSAyMjYuNXoNCk04OTYgMTkycTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41dDIyNi41IDkzLjV0MjI2LjUgLTkzLjV0OTMuNSAtMjI2LjV2LTcxMXExMjggLTEzMSAxMjggLTMxM3pNMTAyNCA3Njh2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTAyNHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMjgwdi0xMjhoLTE5MnYxMjhoMTkyeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDQyIgdW5pY29kZT0iJiN4ZjJjYzsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xNDMzIDEyODdxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC02MjYgLTYyNnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC04MiA4MnEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ0IDQ0cS03MiA5MSAtODEuNSAyMDd0NDYuNSAyMTVxLTc0IDcxIC0xNzYgNzFxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0xMjgwaC0yNTZ2MTI4MHEwIDEwNCA0MC41IDE5OC41dDEwOS41IDE2My41dDE2My41IDEwOS41dDE5OC41IDQwLjVxMTA2IDAgMjAxIC00MQ0KdDE2NiAtMTE1cTk0IDM5IDE5NyAyNC41dDE4NSAtNzkuNWw0NCA0NHExMCAxMCAyMyAxMHQyMyAtMTB6TTEzNDQgMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTE2MDAgODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl6TTE4NTYgMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5DQp0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTIxNiA4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xNDA4IDgzMnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV6TTE3MjggODk2cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTA4OCA3NjgNCnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEzNDQgNjQwcS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl6TTE2MDAgNzY4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTIxNiA1MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTkNCnQxOSAtNDV0LTE5IC00NXQtNDUgLTE5ek0xNDcyIDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEwODggNTEycTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTM0NCA1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMjE2IDM4NA0KcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTA4OCAyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDRCIgdW5pY29kZT0iJiN4ZjJjZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xNjY0IDQ0OHYtMTkycTAgLTE2OSAtMTI4IC0yODZ2LTE5NHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMThxLTYzIC0yMiAtMTI4IC0yMmgtNzY4cS02NSAwIC0xMjggMjJ2LTExMHEwIC0xNyAtOS41IC0yOC41dC0yMi41IC0xMS41aC02NHEtMTMgMCAtMjIuNSAxMS41dC05LjUgMjguNXYxODZxLTEyOCAxMTcgLTEyOCAyODZ2MTkyaDE1MzZ6TTcwNCA4NjRxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOQ0KdC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNNzY4IDkyOHEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNNzA0IDk5MnEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNODMyIDk5MnEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNNzY4IDEwNTZxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOQ0KdC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNNzA0IDExMjBxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTE3OTIgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNzI4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2djY0MHEwIDEwNiA3NSAxODF0MTgxIDc1cTEwOCAwIDE4NCAtNzhxNDYgMTkgOTggMTJ0OTMgLTM5bDIyIDIycTExIDExIDIyIDBsNDIgLTQyDQpxMTEgLTExIDAgLTIybC0zMTQgLTMxNHEtMTEgLTExIC0yMiAwbC00MiA0MnEtMTEgMTEgMCAyMmwyMiAyMnEtMzYgNDYgLTQwLjUgMTA0dDIzLjUgMTA4cS0zNyAzNSAtODggMzVxLTUzIDAgLTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV2LTY0MGgxNTA0cTE0IDAgMjMgLTl0OSAtMjN6TTg5NiAxMDU2cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek04MzIgMTEyMHEwIC0xNCAtOSAtMjN0LTIzIC05DQp0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek03NjggMTE4NHEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNOTYwIDExMjBxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTg5NiAxMTg0cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek04MzIgMTI0OHEwIC0xNCAtOSAtMjMNCnQtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek0xMDI0IDExODRxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTk2MCAxMjQ4cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek0xMDg4IDEyNDhxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNFIiB1bmljb2RlPSImI3hmMmNlOyIgDQpkPSJNOTk0IDM0NHEwIC04NiAtMTcgLTE5N3EtMzEgLTIxNSAtNTUgLTMxM3EtMjIgLTkwIC0xNTIgLTkwdC0xNTIgOTBxLTI0IDk4IC01NSAzMTNxLTE3IDExMCAtMTcgMTk3cTAgMTY4IDIyNCAxNjh0MjI0IC0xNjh6TTE1MzYgNzY4cTAgLTI0MCAtMTM0IC00MzR0LTM1MCAtMjgwcS04IC0zIC0xNSAzdC02IDE1cTcgNDggMTAgNjZxNCAzMiA2IDQ3cTEgOSA5IDEycTE1OSA4MSAyNTUuNSAyMzR0OTYuNSAzMzdxMCAxODAgLTkxIDMzMC41DQp0LTI0NyAyMzQuNXQtMzM3IDc0cS0xMjQgLTcgLTIzNyAtNjF0LTE5My41IC0xNDAuNXQtMTI4IC0yMDJ0LTQ2LjUgLTI0MC41cTEgLTE4NCA5OSAtMzM2LjV0MjU3IC0yMzEuNXE3IC0zIDkgLTEycTMgLTIxIDYgLTQ1cTEgLTkgNSAtMzIuNXQ2IC0zNS41cTEgLTkgLTYuNSAtMTV0LTE1LjUgLTJxLTE0OCA1OCAtMjYxIDE2OS41dC0xNzMuNSAyNjR0LTUyLjUgMzE5LjVxNyAxNDMgNjYgMjczLjV0MTU0LjUgMjI3dDIyNSAxNTcuNXQyNzIuNSA3MA0KcTE2NCAxMCAzMTUuNSAtNDYuNXQyNjEgLTE2MC41dDE3NSAtMjUwLjV0NjUuNSAtMzA4LjV6TTk5NCA4MDBxMCAtOTMgLTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNXQtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjV0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV6TTEyODIgNzY4cTAgLTEyMiAtNTMuNSAtMjI4LjV0LTE0Ni41IC0xNzcuNXEtOCAtNiAtMTYgLTJ0LTEwIDE0cS02IDUyIC0yOSA5MnEtNyAxMCAzIDIwDQpxNTggNTQgOTEgMTI3dDMzIDE1NXEwIDExMSAtNTguNSAyMDR0LTE1Ny41IDE0MS41dC0yMTIgMzYuNXEtMTMzIC0xNSAtMjI5IC0xMTN0LTEwOSAtMjMxcS0xMCAtOTIgMjMuNSAtMTc2dDk4LjUgLTE0NHExMCAtMTAgMyAtMjBxLTI0IC00MSAtMjkgLTkzcS0yIC05IC0xMCAtMTN0LTE2IDJxLTk1IDc0IC0xNDguNSAxODN0LTUxLjUgMjM0cTMgMTMxIDY5IDI0NHQxNzcgMTgxLjV0MjQxIDc0LjVxMTQ0IDcgMjY4IC02MHQxOTYuNSAtMTg3LjUNCnQ3Mi41IC0yNjMuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDAiIHVuaWNvZGU9IiYjeGYyZDA7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMjU2IDEyOGgxMjgwdjc2OGgtMTI4MHYtNzY4ek0xNzkyIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQxIiB1bmljb2RlPSImI3hmMmQxOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTE3OTIgMjI0di0xOTJxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDIiIHVuaWNvZGU9IiYjeGYyZDI7IiBob3Jpei1hZHYteD0iMjA0OCIgDQpkPSJNMjU2IDBoNzY4djUxMmgtNzY4di01MTJ6TTEyODAgNTEyaDUxMnY3NjhoLTc2OHYtMjU2aDk2cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0zNTJ6TTIwNDggMTM3NnYtOTYwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC02MDh2LTM1MnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtOTYwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDYwOHYzNTJxMCA2NiA0NyAxMTN0MTEzIDQ3aDk2MHE2NiAwIDExMyAtNDcNCnQ0NyAtMTEzeiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEMyIgdW5pY29kZT0iJiN4ZjJkMzsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik0xMTc1IDIxNWwxNDYgMTQ2cTEwIDEwIDEwIDIzdC0xMCAyM2wtMjMzIDIzM2wyMzMgMjMzcTEwIDEwIDEwIDIzdC0xMCAyM2wtMTQ2IDE0NnEtMTAgMTAgLTIzIDEwdC0yMyAtMTBsLTIzMyAtMjMzbC0yMzMgMjMzcS0xMCAxMCAtMjMgMTB0LTIzIC0xMGwtMTQ2IC0xNDZxLTEwIC0xMCAtMTAgLTIzdDEwIC0yM2wyMzMgLTIzM2wtMjMzIC0yMzNxLTEwIC0xMCAtMTAgLTIzdDEwIC0yM2wxNDYgLTE0NnExMCAtMTAgMjMgLTEwdDIzIDEwDQpsMjMzIDIzM2wyMzMgLTIzM3ExMCAtMTAgMjMgLTEwdDIzIDEwek0xNzkyIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ0IiB1bmljb2RlPSImI3hmMmQ0OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEyNTcgNDI1bC0xNDYgLTE0NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xNjkgMTY5bC0xNjkgLTE2OXEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xNDYgMTQ2cS0xMCAxMCAtMTAgMjN0MTAgMjNsMTY5IDE2OWwtMTY5IDE2OXEtMTAgMTAgLTEwIDIzdDEwIDIzbDE0NiAxNDZxMTAgMTAgMjMgMTB0MjMgLTEwbDE2OSAtMTY5bDE2OSAxNjlxMTAgMTAgMjMgMTB0MjMgLTEwbDE0NiAtMTQ2cTEwIC0xMCAxMCAtMjN0LTEwIC0yMw0KbC0xNjkgLTE2OWwxNjkgLTE2OXExMCAtMTAgMTAgLTIzdC0xMCAtMjN6TTI1NiAxMjhoMTI4MHYxMDI0aC0xMjgwdi0xMDI0ek0xNzkyIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ1IiB1bmljb2RlPSImI3hmMmQ1OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEwNzAgMzU4bDMwNiA1NjRoLTY1NGwtMzA2IC01NjRoNjU0ek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJENiIgdW5pY29kZT0iJiN4ZjJkNjsiIGhvcml6LWFkdi14PSIxNzk0IiANCmQ9Ik0xMjkxIDEwNjBxLTE1IDE3IC0zNSA4LjV0LTI2IC0yOC41dDUgLTM4cTE0IC0xNyA0MCAtMTQuNXQzNCAyMC41dC0xOCA1MnpNODk1IDgxNHEtOCAtOCAtMTkuNSAtOHQtMTguNSA4cS04IDggLTggMTl0OCAxOHE3IDggMTguNSA4dDE5LjUgLThxNyAtNyA3IC0xOHQtNyAtMTl6TTEwNjAgNzQwbC0zNSAtMzVxLTEyIC0xMyAtMjkuNSAtMTN0LTMwLjUgMTNsLTM4IDM4cS0xMiAxMyAtMTIgMzB0MTIgMzBsMzUgMzVxMTIgMTIgMjkuNSAxMg0KdDMwLjUgLTEybDM4IC0zOXExMiAtMTIgMTIgLTI5LjV0LTEyIC0yOS41ek05NTEgODcwcS03IC04IC0xOC41IC04dC0xOS41IDhxLTcgOCAtNyAxOXQ3IDE5cTggOCAxOSA4dDE5IC04dDggLTE5dC04IC0xOXpNMTM1NCA5NjhxLTM0IC02NCAtMTA3LjUgLTg1LjV0LTEyNy41IDE2LjVxLTM4IDI4IC02MSA2Ni41dC0yMSA4Ny41dDM5IDkydDc1LjUgNTN0NzAuNSAtNXQ3MCAtNTFxMiAtMiAxMyAtMTIuNXQxNC41IC0xMy41dDEzIC0xMy41DQp0MTIuNSAtMTUuNXQxMCAtMTUuNXQ4LjUgLTE4dDQgLTE4LjV0MSAtMjF0LTUgLTIydC05LjUgLTI0ek0xNTU1IDQ4NnEzIDIwIC04LjUgMzQuNXQtMjcuNSAyMS41dC0zMyAxN3QtMjMgMjBxLTQwIDcxIC04NCA5OC41dC0xMTMgMTEuNXExOSAxMyA0MCAxOC41dDMzIDQuNWwxMiAtMXEyIDQ1IC0zNCA5MHE2IDIwIDYuNSA0MC41dC0yLjUgMzAuNWwtMyAxMHE0MyAyNCA3MSA2NXQzNCA5MXExMCA4NCAtNDMgMTUwLjV0LTEzNyA3Ni41DQpxLTYwIDcgLTExNCAtMTguNXQtODIgLTc0LjVxLTMwIC01MSAtMzMuNSAtMTAxdDE0LjUgLTg3dDQzLjUgLTY0dDU2LjUgLTQycS00NSA0IC04OCAzNnQtNTcgODhxLTI4IDEwOCAzMiAyMjJxLTE2IDIxIC0yOSAzMnEtNTAgMCAtODkgLTE5cTE5IDI0IDQyIDM3dDM2IDE0bDEzIDFxMCA1MCAtMTMgNzhxLTEwIDIxIC0zMi41IDI4LjV0LTQ3IC0zLjV0LTM3LjUgLTQwcTIgNCA0IDdxLTcgLTI4IC02LjUgLTc1LjV0MTkgLTExN3Q0OC41IC0xMjIuNQ0KcS0yNSAtMTQgLTQ3IC0zNnEtMzUgLTE2IC04NS41IC03MC41dC04NC41IC0xMDEuNWwtMzMgLTQ2cS05MCAtMzQgLTE4MSAtMTI1LjV0LTc1IC0xNjIuNXExIC0xNiAxMSAtMjdxLTE1IC0xMiAtMzAgLTMwcS0yMSAtMjUgLTIxIC01NHQyMS41IC00MHQ2My41IDZxNDEgMTkgNzcgNDkuNXQ1NSA2MC41cS0yIDIgLTYuNSA1dC0yMC41IDcuNXQtMzMgMy41cTIzIDUgNTEgMTIuNXQ0MCAxMHQyNy41IDZ0MjYgNHQyMy41IDAuNXExNCAtNyAyMiAzNA0KcTcgMzcgNyA5MHEwIDEwMiAtNDAgMTUwcTEwNiAtMTAzIDEwMSAtMjE5cS0xIC0yOSAtMTUgLTUwdC0yNyAtMjdsLTEzIC02cS00IC03IC0xOSAtMzJ0LTI2IC00NS41dC0yNi41IC01MnQtMjUgLTYxdC0xNyAtNjN0LTYuNSAtNjYuNXQxMCAtNjNxLTM1IDU0IC0zNyA4MHEtMjIgLTI0IC0zNC41IC0zOXQtMzMuNSAtNDJ0LTMwLjUgLTQ2dC0xNi41IC00MXQtMC41IC0zOHQyNS41IC0yN3E0NSAtMjUgMTQ0IDY0dDE5MC41IDIyMS41DQp0MTIyLjUgMjI4LjVxODYgNTIgMTQ1IDExNS41dDg2IDExOS41cTQ3IC05MyAxNTQgLTE3OHExMDQgLTgzIDE2NyAtODBxMzkgMiA0NiA0M3pNMTc5NCA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2LjUgLTE5MXQtMzQ4LjUgLTcxdC0zNDguNSA3MXQtMjg2LjUgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2LjUgMTkxdDM0OC41IDcxdDM0OC41IC03MXQyODYuNSAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ3IiB1bmljb2RlPSImI3hmMmQ3OyIgDQpkPSJNNTE4IDEzNTN2LTY1NXExMDMgLTEgMTkxLjUgMS41dDEyNS41IDUuNWwzNyAzcTY4IDIgOTAuNSAyNC41dDM5LjUgOTQuNWwzMyAxNDJoMTAzbC0xNCAtMzIybDcgLTMxOWgtMTAzbC0yOSAxMjdxLTE1IDY4IC00NSA5M3QtODQgMjZxLTg3IDggLTM1MiA4di01NTZxMCAtNzggNDMuNSAtMTE1LjV0MTMzLjUgLTM3LjVoMzU3cTM1IDAgNTkuNSAydDU1IDcuNXQ1NCAxOHQ0OC41IDMydDQ2IDUwLjV0MzkgNzNsOTMgMjE2aDg5DQpxLTYgLTM3IC0zMS41IC0yNTJ0LTMwLjUgLTI3NnEtMTQ2IDUgLTI2My41IDh0LTE2Mi41IDRoLTQ0aC02MjhsLTM3NiAtMTJ2MTAybDEyNyAyNXE2NyAxMyA5MS41IDM3dDI1LjUgNzlsOCA2NDNxMyA0MDIgLTggNjQ1cS0yIDYxIC0yNS41IDg0dC05MS41IDM2bC0xMjcgMjR2MTAybDM3NiAtMTJoNzAycTEzOSAwIDM3NCAyN3EtNiAtNjggLTE0IC0xOTQuNXQtMTIgLTIxOS41bC01IC05MmgtOTNsLTMyIDEyNHEtMzEgMTIxIC03NCAxNzkuNQ0KdC0xMTMgNTguNWgtNTQ4cS0yOCAwIC0zNS41IC04LjV0LTcuNSAtMzAuNXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDgiIHVuaWNvZGU9IiYjeGYyZDg7IiANCmQ9Ik05MjIgNzM5di0xODJxMCAtNCAwLjUgLTE1dDAgLTE1bC0xLjUgLTEydC0zLjUgLTExLjV0LTYuNSAtNy41dC0xMSAtNS41dC0xNiAtMS41djMwOXE5IDAgMTYgLTF0MTEgLTV0Ni41IC01LjV0My41IC05LjV0MSAtMTAuNXYtMTMuNXYtMTR6TTEyMzggNjQzdi0xMjFxMCAtMSAwLjUgLTEyLjV0MCAtMTUuNXQtMi41IC0xMS41dC03LjUgLTEwLjV0LTEzLjUgLTNxLTkgMCAtMTQgOXEtNCAxMCAtNCAxNjV2N3Y4LjV2OXQxLjUgOC41bDMuNSA3DQp0NSA1LjV0OCAxLjVxNiAwIDEwIC0xLjV0Ni41IC00LjV0NCAtNnQyIC04LjV0MC41IC04di05LjV2LTl6TTE4MCA0MDdoMTIydjQ3MmgtMTIydi00NzJ6TTYxNCA0MDdoMTA2djQ3MmgtMTU5bC0yOCAtMjIxcS0yMCAxNDggLTMyIDIyMWgtMTU4di00NzJoMTA3djMxMmw0NSAtMzEyaDc2bDQzIDMxOXYtMzE5ek0xMDM5IDcxMnEwIDY3IC01IDkwcS0zIDE2IC0xMSAyOC41dC0xNyAyMC41dC0yNSAxNHQtMjYuNSA4LjV0LTMxIDR0LTI5IDEuNQ0KaC0yOS41aC0xMmgtOTF2LTQ3Mmg1NnExNjkgLTEgMTk3IDI0LjV0MjUgMTgwLjVxLTEgNjIgLTEgMTAwek0xMzU2IDUxNXYxMzNxMCAyOSAtMiA0NXQtOS41IDMzLjV0LTI0LjUgMjV0LTQ2IDcuNXEtNDYgMCAtNzcgLTM0djE1NGgtMTE3di00NzJoMTEwbDcgMzBxMzAgLTM2IDc3IC0zNnE1MCAwIDY2IDMwLjV0MTYgODMuNXpNMTUzNiAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExMw0KdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDEyMTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ5IiB1bmljb2RlPSImI3hmMmQ5OyIgaG9yaXotYWR2LXg9IjIxNzYiIA0KZD0iTTExNDMgLTE5N3EtNiAxIC0xMSA0cS0xMyA4IC0zNiAyM3QtODYgNjV0LTExNi41IDEwNC41dC0xMTIgMTQwdC04OS41IDE3Mi41cS0xNyAzIC0xNzUgMzdxNjYgLTIxMyAyMzUgLTM2MnQzOTEgLTE4NHpNNTAyIDQwOWwxNjggLTI4cS0yNSA3NiAtNDEgMTY3LjV0LTE5IDE0NS41bC00IDUzcS04NCAtODIgLTEyMSAtMjI0cTUgLTY1IDE3IC0xMTR6TTYxMiAxMDE4cS00MyAtNjQgLTc3IC0xNDhxNDQgNDYgNzQgNjh6TTIwNDkgNTg0DQpxMCAxNjEgLTYyIDMwN3QtMTY3LjUgMjUydC0yNTAuNSAxNjguNXQtMzA0IDYyLjVxLTE0NyAwIC0yODEgLTUyLjV0LTI0MCAtMTQ4LjVxLTMwIC01OCAtNDUgLTE2MHE2MCA1MSAxNDMgODMuNXQxNTguNSA0M3QxNDMgMTMuNXQxMDguNSAtMWw0MCAtM3EzMyAtMSA1MyAtMTUuNXQyNC41IC0zM3Q2LjUgLTM3dC0xIC0yOC41cS0xMjYgMTEgLTIyNy41IDAuNXQtMTgzIC00My41dC0xNDIuNSAtNzEuNXQtMTMxIC05OC41DQpxNCAtMzYgMTEuNSAtOTIuNXQzNS41IC0xNzh0NjIgLTE3OS41cTEyMyAtNiAyNDcuNSAxNC41dDIxNC41IDUzLjV0MTYyLjUgNjd0MTA5LjUgNTlsMzcgMjRxMjIgMTYgMzkuNSAyMC41dDMwLjUgLTV0MTcgLTM0LjVxMTQgLTk3IC0zOSAtMTIxcS0yMDggLTk3IC00NjcgLTEzNHEtMTM1IC0yMCAtMzE3IC0xNnE0MSAtOTYgMTEwIC0xNzYuNXQxMzcgLTEyN3QxMzAuNSAtNzl0MTAxLjUgLTQzLjVsMzkgLTEycTE0MyAtMjMgMjYzIDE1DQpxMTk1IDk5IDMxNCAyODl0MTE5IDQxOHpNMjEyMyA2MjFxLTE0IC0xMzUgLTQwIC0yMTJxLTcwIC0yMDggLTE4MS41IC0zNDYuNXQtMzE4LjUgLTI1My41cS00OCAtMzMgLTgyIC00NHEtNzIgLTI2IC0xNjMgLTE2cS0zNiAtMyAtNzMgLTNxLTI4MyAwIC01MDQuNSAxNzN0LTI5NS41IDQ0MnEtMSAwIC00IDAuNXQtNSAwLjVxLTYgLTUwIDIuNSAtMTEyLjV0MjYgLTExNXQzNiAtOTh0MzEuNSAtNzEuNWwxNCAtMjZxOCAtMTIgNTQgLTgyDQpxLTcxIDM4IC0xMjQuNSAxMDYuNXQtNzguNSAxNDB0LTM5LjUgMTM3dC0xNy41IDEwNy41bC0yIDQycS01IDIgLTMzLjUgMTIuNXQtNDguNSAxOHQtNTMgMjAuNXQtNTcuNSAyNXQtNTAgMjUuNXQtNDIuNSAyN3QtMjUgMjUuNXExOSAtMTAgNTAuNSAtMjUuNXQxMTMgLTQ1LjV0MTQ1LjUgLTM4bDIgMzJxMTEgMTQ5IDk0IDI5MHE0MSAyMDIgMTc2IDM2NXEyOCAxMTUgODEgMjE0cTE1IDI4IDMyIDQ1dDQ5IDMycTE1OCA3NCAzMDMuNSAxMDQNCnQzMDIgMTF0MzA2LjUgLTk3cTIyMCAtMTE1IDMzMyAtMzM2dDg3IC00NzR6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRBIiB1bmljb2RlPSImI3hmMmRhOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KZD0iTTEzNDEgNzUycTI5IDQ0IC02LjUgMTI5LjV0LTEyMS41IDE0Mi41cS01OCAzOSAtMTI1LjUgNTMuNXQtMTE4IDQuNXQtNjguNSAtMzdxLTEyIC0yMyAtNC41IC0yOHQ0Mi41IC0xMHEyMyAtMyAzOC41IC01dDQ0LjUgLTkuNXQ1NiAtMTcuNXEzNiAtMTMgNjcuNSAtMzEuNXQ1MyAtMzd0NDAgLTM4LjV0MzAuNSAtMzh0MjIgLTM0LjV0MTYuNSAtMjguNXQxMiAtMTguNXQxMC41IC02dDExIDkuNXpNMTcwNCAxNzgNCnEtNTIgLTEyNyAtMTQ4LjUgLTIyMHQtMjE0LjUgLTE0MS41dC0yNTMgLTYwLjV0LTI2NiAxMy41dC0yNTEgOTF0LTIxMCAxNjEuNXQtMTQxLjUgMjM1LjV0LTQ2LjUgMzAzLjVxMSA0MSA4LjUgODQuNXQxMi41IDY0dDI0IDgwLjV0MjMgNzNxLTUxIC0yMDggMSAtMzk3dDE3MyAtMzE4dDI5MSAtMjA2dDM0NiAtODN0MzQ5IDc0LjV0Mjg5IDI0NC41cTIwIDI3IDE4IDE0cTAgLTQgLTQgLTE0ek0xNDY1IDYyN3EwIC0xMDQgLTQwLjUgLTE5OQ0KdC0xMDguNSAtMTY0dC0xNjIgLTEwOS41dC0xOTggLTQwLjV0LTE5OCA0MC41dC0xNjIgMTA5LjV0LTEwOC41IDE2NHQtNDAuNSAxOTl0NDAuNSAxOTl0MTA4LjUgMTY0dDE2MiAxMDkuNXQxOTggNDAuNXQxOTggLTQwLjV0MTYyIC0xMDkuNXQxMDguNSAtMTY0dDQwLjUgLTE5OXpNMTc1MiA5MTVxLTY1IDE0NyAtMTgwLjUgMjUxdC0yNTMgMTUzLjV0LTI5MiA1My41dC0zMDEgLTM2LjV0LTI3NS41IC0xMjl0LTIyMCAtMjExLjV0LTEzMSAtMjk3DQp0LTEwIC0zNzNxLTQ5IDE2MSAtNTEuNSAzMTEuNXQzNS41IDI3Mi41dDEwOSAyMjd0MTY1LjUgMTgwLjV0MjA3IDEyNnQyMzIgNzF0MjQyLjUgOXQyMzYgLTU0dDIxNiAtMTI0LjV0MTc4IC0xOTdxMzMgLTUwIDYyIC0xMjF0MzEgLTExMnpNMTY5MCA1NzNxMTIgMjQ0IC0xMzYuNSA0MTZ0LTM5Ni41IDI0MHEtOCAwIC0xMCA1dDI0IDhxMTI1IC00IDIzMCAtNTB0MTczIC0xMjB0MTE2IC0xNjguNXQ1OC41IC0xOTl0LTEgLTIwOA0KdC02MS41IC0xOTcuNXQtMTIyLjUgLTE2N3QtMTg1IC0xMTcuNXQtMjQ4LjUgLTQ2LjVxMTA4IDMwIDIwMS41IDgwdDE3NCAxMjN0MTI5LjUgMTc2LjV0NTUgMjI1LjV6IiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRCIiB1bmljb2RlPSImI3hmMmRiOyIgDQpkPSJNMTkyIDI1NnYtMTI4aC0xMTJxLTE2IDAgLTE2IDE2djE2aC00OHEtMTYgMCAtMTYgMTZ2MzJxMCAxNiAxNiAxNmg0OHYxNnEwIDE2IDE2IDE2aDExMnpNMTkyIDUxMnYtMTI4aC0xMTJxLTE2IDAgLTE2IDE2djE2aC00OHEtMTYgMCAtMTYgMTZ2MzJxMCAxNiAxNiAxNmg0OHYxNnEwIDE2IDE2IDE2aDExMnpNMTkyIDc2OHYtMTI4aC0xMTJxLTE2IDAgLTE2IDE2djE2aC00OHEtMTYgMCAtMTYgMTZ2MzJxMCAxNiAxNiAxNmg0OHYxNg0KcTAgMTYgMTYgMTZoMTEyek0xOTIgMTAyNHYtMTI4aC0xMTJxLTE2IDAgLTE2IDE2djE2aC00OHEtMTYgMCAtMTYgMTZ2MzJxMCAxNiAxNiAxNmg0OHYxNnEwIDE2IDE2IDE2aDExMnpNMTkyIDEyODB2LTEyOGgtMTEycS0xNiAwIC0xNiAxNnYxNmgtNDhxLTE2IDAgLTE2IDE2djMycTAgMTYgMTYgMTZoNDh2MTZxMCAxNiAxNiAxNmgxMTJ6TTEyODAgMTQ0MHYtMTQ3MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTgzMnEtNDAgMCAtNjggMjgNCnQtMjggNjh2MTQ3MnEwIDQwIDI4IDY4dDY4IDI4aDgzMnE0MCAwIDY4IC0yOHQyOCAtNjh6TTE1MzYgMjA4di0zMnEwIC0xNiAtMTYgLTE2aC00OHYtMTZxMCAtMTYgLTE2IC0xNmgtMTEydjEyOGgxMTJxMTYgMCAxNiAtMTZ2LTE2aDQ4cTE2IDAgMTYgLTE2ek0xNTM2IDQ2NHYtMzJxMCAtMTYgLTE2IC0xNmgtNDh2LTE2cTAgLTE2IC0xNiAtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYgLTE2di0xNmg0OHExNiAwIDE2IC0xNnpNMTUzNiA3MjB2LTMyDQpxMCAtMTYgLTE2IC0xNmgtNDh2LTE2cTAgLTE2IC0xNiAtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYgLTE2di0xNmg0OHExNiAwIDE2IC0xNnpNMTUzNiA5NzZ2LTMycTAgLTE2IC0xNiAtMTZoLTQ4di0xNnEwIC0xNiAtMTYgLTE2aC0xMTJ2MTI4aDExMnExNiAwIDE2IC0xNnYtMTZoNDhxMTYgMCAxNiAtMTZ6TTE1MzYgMTIzMnYtMzJxMCAtMTYgLTE2IC0xNmgtNDh2LTE2cTAgLTE2IC0xNiAtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYgLTE2di0xNg0KaDQ4cTE2IDAgMTYgLTE2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEQyIgdW5pY29kZT0iJiN4ZjJkYzsiIGhvcml6LWFkdi14PSIxNjY0IiANCmQ9Ik0xNTY2IDQxOWwtMTY3IC0zM2wxODYgLTEwN3EyMyAtMTMgMjkuNSAtMzguNXQtNi41IC00OC41cS0xNCAtMjMgLTM5IC0yOS41dC00OCA2LjVsLTE4NiAxMDZsNTUgLTE2MHExMyAtMzggLTEyIC02My41dC02MC41IC0yMC41dC00OC41IDQybC0xMDIgMzAwbC0yNzEgMTU2di0zMTNsMjA4IC0yMzhxMTYgLTE4IDE3IC0zOXQtMTEgLTM2LjV0LTI4LjUgLTI1dC0zNyAtNS41dC0zNi41IDIybC0xMTIgMTI4di0yMTRxMCAtMjYgLTE5IC00NQ0KdC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyMTRsLTExMiAtMTI4cS0xNiAtMTggLTM2LjUgLTIydC0zNyA1LjV0LTI4LjUgMjV0LTExIDM2LjV0MTcgMzlsMjA4IDIzOHYzMTNsLTI3MSAtMTU2bC0xMDIgLTMwMHEtMTMgLTM3IC00OC41IC00MnQtNjAuNSAyMC41dC0xMiA2My41bDU1IDE2MGwtMTg2IC0xMDZxLTIzIC0xMyAtNDggLTYuNXQtMzkgMjkuNXEtMTMgMjMgLTYuNSA0OC41dDI5LjUgMzguNWwxODYgMTA3bC0xNjcgMzMNCnEtMjkgNiAtNDIgMjl0LTguNSA0Ni41dDI1LjUgNDB0NTAgMTAuNWwzMTAgLTYybDI3MSAxNTdsLTI3MSAxNTdsLTMxMCAtNjJxLTQgLTEgLTEzIC0xcS0yNyAwIC00NCAxOHQtMTkgNDB0MTEgNDN0NDAgMjZsMTY3IDMzbC0xODYgMTA3cS0yMyAxMyAtMjkuNSAzOC41dDYuNSA0OC41dDM5IDMwdDQ4IC03bDE4NiAtMTA2bC01NSAxNjBxLTEzIDM4IDEyIDYzLjV0NjAuNSAyMC41dDQ4LjUgLTQybDEwMiAtMzAwbDI3MSAtMTU2djMxMw0KbC0yMDggMjM4cS0xNiAxOCAtMTcgMzl0MTEgMzYuNXQyOC41IDI1dDM3IDUuNXQzNi41IC0yMmwxMTIgLTEyOHYyMTRxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di0yMTRsMTEyIDEyOHExNiAxOCAzNi41IDIydDM3IC01LjV0MjguNSAtMjV0MTEgLTM2LjV0LTE3IC0zOWwtMjA4IC0yMzh2LTMxM2wyNzEgMTU2bDEwMiAzMDBxMTMgMzcgNDguNSA0MnQ2MC41IC0yMC41dDEyIC02My41bC01NSAtMTYwbDE4NiAxMDYNCnEyMyAxMyA0OCA2LjV0MzkgLTI5LjVxMTMgLTIzIDYuNSAtNDguNXQtMjkuNSAtMzguNWwtMTg2IC0xMDdsMTY3IC0zM3EyNyAtNSA0MCAtMjZ0MTEgLTQzdC0xOSAtNDB0LTQ0IC0xOHEtOSAwIC0xMyAxbC0zMTAgNjJsLTI3MSAtMTU3bDI3MSAtMTU3bDMxMCA2MnEyOSA2IDUwIC0xMC41dDI1LjUgLTQwdC04LjUgLTQ2LjV0LTQyIC0yOXoiIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyREQiIHVuaWNvZGU9IiYjeGYyZGQ7IiBob3Jpei1hZHYteD0iMTc5MiIgDQpkPSJNMTQ3MyA2MDdxNyAxMTggLTMzIDIyNi41dC0xMTMgMTg5dC0xNzcgMTMxdC0yMjEgNTcuNXEtMTE2IDcgLTIyNS41IC0zMnQtMTkyIC0xMTAuNXQtMTM1IC0xNzV0LTU5LjUgLTIyMC41cS03IC0xMTggMzMgLTIyNi41dDExMyAtMTg5dDE3Ny41IC0xMzF0MjIxLjUgLTU3LjVxMTU1IC05IDI5MyA1OXQyMjQgMTk1LjV0OTQgMjgzLjV6TTE3OTIgMTUzNmwtMzQ5IC0zNDhxMTIwIC0xMTcgMTgwLjUgLTI3MnQ1MC41IC0zMjENCnEtMTEgLTE4MyAtMTAyIC0zMzl0LTI0MSAtMjU1LjV0LTMzMiAtMTI0LjVsLTk5OSAtMTMybDM0NyAzNDdxLTEyMCAxMTYgLTE4MC41IDI3MS41dC01MC41IDMyMS41cTExIDE4NCAxMDIgMzQwdDI0MS41IDI1NS41dDMzMi41IDEyNC41cTE2NyAyMiA1MDAgNjZ0NTAwIDY2eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJERSIgdW5pY29kZT0iJiN4ZjJkZTsiIGhvcml6LWFkdi14PSIxNzkyIiANCmQ9Ik05NDggNTA4bDE2MyAtMzI5aC01MWwtMTc1IDM1MGwtMTcxIC0zNTBoLTQ5bDE3OSAzNzRsLTc4IDMzbDIxIDQ5bDI0MCAtMTAybC0yMSAtNTB6TTU2MyAxMTAwbDMwNCAtMTMwbC0xMzAgLTMwNGwtMzA0IDEzMHpNOTA3IDkxNWwyNDAgLTEwM2wtMTAzIC0yMzlsLTIzOSAxMDJ6TTExODggNzY1bDE5MSAtODFsLTgyIC0xOTBsLTE5MCA4MXpNMTY4MCA2NDBxMCAxNTkgLTYyIDMwNHQtMTY3LjUgMjUwLjV0LTI1MC41IDE2Ny41dC0zMDQgNjINCnQtMzA0IC02MnQtMjUwLjUgLTE2Ny41dC0xNjcuNSAtMjUwLjV0LTYyIC0zMDR0NjIgLTMwNHQxNjcuNSAtMjUwLjV0MjUwLjUgLTE2Ny41dDMwNCAtNjJ0MzA0IDYydDI1MC41IDE2Ny41dDE2Ny41IDI1MC41dDYyIDMwNHpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2IC0xOTF0LTM0OCAtNzF0LTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzENCnQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFMCIgdW5pY29kZT0iJiN4ZjJlMDsiIGhvcml6LWFkdi14PSIxOTIwIiANCmQ9Ik0xMzM0IDMwMnEtNCAyNCAtMjcuNSAzNHQtNDkuNSAxMC41dC00OC41IDEyLjV0LTI1LjUgMzhxLTUgNDcgMzMgMTM5LjV0NzUgMTgxdDMyIDEyNy41cS0xNCAxMDEgLTExNyAxMDNxLTQ1IDEgLTc1IC0xNmwtMyAtMmwtNSAtMi41dC00LjUgLTJ0LTUgLTJ0LTUgLTAuNXQtNiAxLjV0LTYgMy41dC02LjUgNXEtMyAyIC05IDguNXQtOSA5dC04LjUgNy41dC05LjUgNy41dC05LjUgNS41dC0xMSA0LjV0LTExLjUgMi41cS0zMCA1IC00OCAtMw0KdC00NSAtMzFxLTEgLTEgLTkgLTguNXQtMTIuNSAtMTF0LTE1IC0xMHQtMTYuNSAtNS41dC0xNyAzcS01NCAyNyAtODQgNDBxLTQxIDE4IC05NCAtNXQtNzYgLTY1cS0xNiAtMjggLTQxIC05OC41dC00My41IC0xMzIuNXQtNDAgLTEzNHQtMjEuNSAtNzNxLTIyIC02OSAxOC41IC0xMTl0MTEwLjUgLTQ2cTMwIDIgNTAuNSAxNXQzOC41IDQ2cTcgMTMgNzkgMTk5LjV0NzcgMTk0LjVxNiAxMSAyMS41IDE4dDI5LjUgMHEyNyAtMTUgMjEgLTUzDQpxLTIgLTE4IC01MSAtMTM5LjV0LTUwIC0xMzIuNXEtNiAtMzggMTkuNSAtNTYuNXQ2MC41IC03dDU1IDQ5LjVxNCA4IDQ1LjUgOTJ0ODEuNSAxNjMuNXQ0NiA4OC41cTIwIDI5IDQxIDI4cTI5IDAgMjUgLTM4cS0yIC0xNiAtNjUuNSAtMTQ3LjV0LTcwLjUgLTE1OS41cS0xMiAtNTMgMTMgLTEwM3Q3NCAtNzRxMTcgLTkgNTEgLTE1LjV0NzEuNSAtOHQ2Mi41IDE0dDIwIDQ4LjV6TTM4MyA4NnEzIC0xNSAtNSAtMjcuNXQtMjMgLTE1LjUNCnEtMTQgLTMgLTI2LjUgNXQtMTUuNSAyM3EtMyAxNCA1IDI3dDIyIDE2dDI3IC01dDE2IC0yM3pNOTUzIC0xNzdxMTIgLTE3IDguNSAtMzcuNXQtMjAuNSAtMzIuNXQtMzcuNSAtOHQtMzIuNSAyMXEtMTEgMTcgLTcuNSAzNy41dDIwLjUgMzIuNXQzNy41IDh0MzEuNSAtMjF6TTE3NyA2MzVxLTE4IC0yNyAtNDkuNSAtMzN0LTU3LjUgMTNxLTI2IDE4IC0zMiA1MHQxMiA1OHExOCAyNyA0OS41IDMzdDU3LjUgLTEycTI2IC0xOSAzMiAtNTAuNQ0KdC0xMiAtNTguNXpNMTQ2NyAtNDJxMTkgLTI4IDEzIC02MS41dC0zNCAtNTIuNXQtNjAuNSAtMTN0LTUxLjUgMzR0LTEzIDYxdDMzIDUzcTI4IDE5IDYwLjUgMTN0NTIuNSAtMzR6TTE1NzkgNTYycTY5IC0xMTMgNDIuNSAtMjQ0LjV0LTEzNC41IC0yMDcuNXEtOTAgLTYzIC0xOTkgLTYwcS0yMCAtODAgLTg0LjUgLTEyN3QtMTQzLjUgLTQ0LjV0LTE0MCA1Ny41cS0xMiAtOSAtMTMgLTEwcS0xMDMgLTcxIC0yMjUgLTQ4LjV0LTE5MyAxMjYuNQ0KcS01MCA3MyAtNTMgMTY0cS04MyAxNCAtMTQyLjUgNzAuNXQtODAuNSAxMjh0LTIgMTUydDgxIDEzOC41cS0zNiA2MCAtMzggMTI4dDI0LjUgMTI1dDc5LjUgOTguNXQxMjEgNTAuNXEzMiA4NSA5OSAxNDh0MTQ2LjUgOTEuNXQxNjggMTd0MTU5LjUgLTY2LjVxNzIgMjEgMTQwIDE3LjV0MTI4LjUgLTM2dDEwNC41IC04MHQ2Ny41IC0xMTV0MTcuNSAtMTQwLjVxNTIgLTE2IDg3IC01N3Q0NS41IC04OXQtNS41IC05OS41dC01OCAtODcuNXoNCk00NTUgMTIyMnExNCAtMjAgOS41IC00NC41dC0yNC41IC0zOC41cS0xOSAtMTQgLTQzLjUgLTkuNXQtMzcuNSAyNC41cS0xNCAyMCAtOS41IDQ0LjV0MjQuNSAzOC41cTE5IDE0IDQzLjUgOS41dDM3LjUgLTI0LjV6TTYxNCAxNTAzcTQgLTE2IC01IC0zMC41dC0yNiAtMTguNXQtMzEgNS41dC0xOCAyNi41cS0zIDE3IDYuNSAzMXQyNS41IDE4cTE3IDQgMzEgLTUuNXQxNyAtMjYuNXpNMTgwMCA1NTVxNCAtMjAgLTYuNSAtMzd0LTMwLjUgLTIxDQpxLTE5IC00IC0zNiA2LjV0LTIxIDMwLjV0Ni41IDM3dDMwLjUgMjJxMjAgNCAzNi41IC03LjV0MjAuNSAtMzAuNXpNMTEzNiAxNDQ4cTE2IC0yNyA4LjUgLTU4LjV0LTM1LjUgLTQ3LjVxLTI3IC0xNiAtNTcuNSAtOC41dC00Ni41IDM0LjVxLTE2IDI4IC04LjUgNTl0MzQuNSA0OHQ1OCA5dDQ3IC0zNnpNMTg4MiA3OTJxNCAtMTUgLTQgLTI3LjV0LTIzIC0xNi41cS0xNSAtMyAtMjcuNSA1LjV0LTE1LjUgMjIuNXEtMyAxNSA1IDI4dDIzIDE2DQpxMTQgMyAyNi41IC01dDE1LjUgLTIzek0xNjkxIDEwMzNxMTUgLTIyIDEwLjUgLTQ5dC0yNi41IC00M3EtMjIgLTE1IC00OSAtMTB0LTQyIDI3dC0xMCA0OXQyNyA0M3Q0OC41IDExdDQxLjUgLTI4eiIgLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFMSIgdW5pY29kZT0iJiN4ZjJlMTsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkUyIiB1bmljb2RlPSImI3hmMmUyOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTMiIHVuaWNvZGU9IiYjeGYyZTM7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFNCIgdW5pY29kZT0iJiN4ZjJlNDsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkU1IiB1bmljb2RlPSImI3hmMmU1OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTYiIHVuaWNvZGU9IiYjeGYyZTY7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFNyIgdW5pY29kZT0iJiN4ZjJlNzsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjk4IiB1bmljb2RlPSImI3hmMmU4OyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTkiIHVuaWNvZGU9IiYjeGYyZTk7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFQSIgdW5pY29kZT0iJiN4ZjJlYTsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkVCIiB1bmljb2RlPSImI3hmMmViOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUMiIHVuaWNvZGU9IiYjeGYyZWM7IiBob3Jpei1hZHYteD0iMTc5MiIgDQogLz4NCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFRCIgdW5pY29kZT0iJiN4ZjJlZDsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkVFIiB1bmljb2RlPSImI3hmMmVlOyIgaG9yaXotYWR2LXg9IjE3OTIiIA0KIC8+DQogICAgPGdseXBoIGdseXBoLW5hbWU9Imxlc3NlcXVhbCIgdW5pY29kZT0iJiN4ZjUwMDsiIGhvcml6LWFkdi14PSIxNzkyIiANCiAvPg0KICA8L2ZvbnQ+DQo8L2RlZnM+PC9zdmc+DQo="},function(A,M,t){var g=t(56),I=t(215);"string"==typeof(I=I.__esModule?I.default:I)&&(I=[[A.i,I,""]]);var e={insert:"head",singleton:!1};g(I,e);A.exports=I.locals||{}},function(A,M,t){var g=t(57),I=t(109),e=t(216),i=t(217),T=t(218),E=t(219);M=g(!1);var N=I(e),n=I(e,{hash:"#iefix"}),D=I(i),C=I(T),r=I(E,{hash:"#iconfont"});M.push([A.i,'@font-face {font-family: "iconfont";\r\n  src: url('+N+"); /* IE9 */\r\n  src: url("+n+") format('embedded-opentype'), \r\n  url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAWwAAsAAAAAC7QAAAViAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDdAqJTIdvATYCJAMgCxIABCAFhG0Hexv8CREVpMGRfXFgnrR3yGVcg8V7C46keQ4e/t+p3qf3BHkKSAphCVmp03abk9oFYA3IHpDtMaEzwr+d4wSQoVrUadshHY+ufeGv7xj+gOy6BnmyMmqAgLS4DMZg4tb/3LvX5vHA5rVnucyxbVk4JgcU0N7UiaIwC/8A/ML4F/MqdnCqyZn82l2HADRN9EdMnzk/xEEB8wQgNm9Y14ETUaEKCAJHamVsVYjzMHGMM43XwbnO74tfSDhgYErgpsVrZySZnDc775dRIXKcjIjaMwDXsSCB/oCifXamKYX0Qv2R6Hei4gTAE39RQt7MB/nWfCyf6ryr8/5CIVFKRaJWEf0XDywUNiYSAwHCAkTFDJ8M25A3FQIL8gECBflWVrE4RoXgxCmKQELnXQgM6Lyfs7Mix2zxgFoQF4J4D5CMd0TujhgEiuapSruuJrAcMTqoKK+Snu8HvudVwInr0DVuQ3SRXl7vCt2cy7luJtNLBSpCHYvxIYTRRRUXZauqJlJGfMOJuVymsjUmdItbr+trOXQqK7KYT2msJUY6v54yUgStXnw607tG4yptt0QEU6PYWlOq4KKI3hdlhajrTGfCCn/liVpns9XVOXdGGqJDIUJ/8Uk19oturItfdlt1xw1XrA9vfrTOvOzSnu03Xlofy7kdmVtqj4viatehsg8+aFXvvx+WfvjhcvOjj+Ju+ra24m5N3VyB1unRLStcMrckRfrO3xJSVAsE+5cK0S1xN3c1i+ytj5H73BtuqVUX39xd33hrj7VuW80TY1zzwQz3pgqJPXXqViEufYR2uC991M1LrCG6WevruwltEtd+OJMm9nDTt8Algwjt1M+/30JD9eLE29wWjg+yRodINDnrrG1CrQmSjVabFV+cqtfqzWxjae05tcYCpz1dZExXI1uW3jvt4idurTDm1hht1r7VJw6bNveekWztF5MTZNhsxsydcm2RMdPaYG1qP5QurkwYiSZ7vbXdTMpkg7v/34r9ap2dPqRmlyesw01GEEYZH3moKT/pL1/UyclmRTBV7rCsCbJy8cmPd02YW2yr/+Be5U8EcrtlH5GM26WOm7Ou6LK5xwbO3//465JDInx6Mf417347ao4v6w+LhR2K9v+/mzb7srIhvN0TnvEpfPV07zhl06ZUzxPJJPPqmGer5oknSqDFMuLFf3jDy/4o9ev9kvfeo6gGZ9t77xfz4J9lw70/HtaVf5fkSEqRDn/uH28XC0q/hKA+mDmMm76Ktv9uL7F/3+7UeojYnfx+VDlr1pLIO7376V4U7Asisb/7/tCPlsyaVRmIRAazqEV+iHsOx4BCAQrxBgrvy+fkWADZx/gahaflk3KqQxepUwBke1bkA3mb7HeeTGPrX/1+ipeN/89x/zrezybtPcHhF8D4tKJ+Gg4GoNlnhUT1yvtwQeWol7pQcCooFpricC3uFwxAo4FzwRbwZZuSSpYJAofKAAxsGkHi0B2t8P3BxGU4WDhMAk0/Zu12KWcnEqGKgL6cSkDgcRcYlPIUSDzeQCv8F2BSxW9g4QkJ0m2fnRy547RtnzG2ggN0f2B6CkpqZdvNfkU9upbDXIf4iZyMF6q8jEevMCC3sSJ961pEgWLycEluQ+cIItMSe8kXInFeFCrrSXlPfrLtDEMtgQag8wcYPRIo01tsJ37+FdJGTosLyr5pPyGWmMFBJVci0FeigCo7lsLkm1YTFlCAumYSD1wyA3IiREDMnrSEeiK3qBGI5gpWTWFFef8Sf6T7AA0ec0qljXWeH9s3Qf+a+6erJ3+MI02rrambza05OQnFQ/w1kqnRuSz1jBg2/tu9LAh682tsQ3SVkwkAAA==') format('woff2'),\r\n  url("+D+") format('woff'),\r\n  url("+C+") format('truetype'), \r\n  url("+r+') format(\'svg\'); /* iOS 4.1- */\r\n}\r\n\r\n.iconfont {\r\n  font-family: "iconfont" !important;\r\n  font-size: 16px;\r\n  font-style: normal;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n.iconqingxiLOGO:before {\r\n  content: "\\e7b4";\r\n}\r\n\r\n.iconqingxilogo:before {\r\n  content: "\\e7af";\r\n}\r\n\r\n.iconai23:before {\r\n  content: "\\e68a";\r\n}\r\n\r\n.iconiconstop:before {\r\n  content: "\\e612";\r\n}\r\n\r\n.iconexit-full-screen:before {\r\n  content: "\\e657";\r\n}\r\n\r\n.iconzanting:before {\r\n  content: "\\e605";\r\n}\r\n\r\n.iconquanping:before {\r\n  content: "\\e655";\r\n}\r\n\r\n',""]),A.exports=M},function(A,M,t){"use strict";t.r(M),M.default="data:application/vnd.ms-fontobject;base64,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AQEAAikC4P1AAWAAAAEAAP/AA74DQgAPAAATIR4BFxEOAQchLgEnET4B9AIXTGUBAWVM/elMZQICZQNBAmVM/eZMZQICZUwCGkxlAAAEAAD/wAPAA0EAEAAhADMARAAAEzMyNj0BNCYiBgcVIyIGFBYTMxUeATI2PQE0JisBIgYUFgUyNjc1MzI2NCYrASIGHQEUFhMzPgE0JisBNS4BIgYdARQWYO8QFBIbEgHTDhISDtMBEhsSFBDvDhISAlsNEgHTDhISDu8QFBIS7w4SEg7TARIbEhQCDRUP7w4SEg7TEhwS/qfUDRISDfAPFRIcEvMSDtMSHBIVD+8OEgJLARIbEtQNExMN8A8UAAACAAAAAANgAuAADwAfAAABMx4BFxEOAQcjLgEnET4BJTMeARcRDgEHIy4BJxE+AQKogBgfAQEfGIAYHwEBH/5IgBgfAQEfGIAYHwEBHwLgAR8Y/a8YHwEBHxgCURgfAQEfGP2vGB8BAR8YAlEYHwAABAAA/9UDqwMrABMAJwA7AE8AADcVHgEXMz4BNCYnIyImPQEuASIGATM+ATc1LgEiBgcVFAYrAQ4BFBYBNS4BJyMOARQWFzMyFh0BHgEyNgEjDgEHFR4BMjY3NTQ2OwE+ATQmVQJINoASGRkSgBIYARgkGAJVgDZIAgEYJBgBGBKAEhkZARICSDaAEhkZEoASGAEYJBj9q4A2SAIBGCQYARgSgBIZGdWANkgCARgkGAEYEoASGRn+7gJINoASGRkSgBIYARgkGAJVgDZIAgEYJBgBGBKAEhkZARICSDaAEhkZEoASGAEYJBgAAAAAABIA3gABAAAAAAAAABUAAAABAAAAAAABAAgAFQABAAAAAAACAAcAHQABAAAAAAADAAgAJAABAAAAAAAEAAgALAABAAAAAAAFAAsANAABAAAAAAAGAAgAPwABAAAAAAAKACsARwABAAAAAAALABMAcgADAAEECQAAACoAhQADAAEECQABABAArwADAAEECQACAA4AvwADAAEECQADABAAzQADAAEECQAEABAA3QADAAEECQAFABYA7QADAAEECQAGABABAwADAAEECQAKAFYBEwADAAEECQALACYBaQpDcmVhdGVkIGJ5IGljb25mb250Cmljb25mb250UmVndWxhcmljb25mb250aWNvbmZvbnRWZXJzaW9uIDEuMGljb25mb250R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20ACgBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AAoAaQBjAG8AbgBmAG8AbgB0AFIAZQBnAHUAbABhAHIAaQBjAG8AbgBmAG8AbgB0AGkAYwBvAG4AZgBvAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbgBmAG8AbgB0AEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAgEDAQQBBQEGAQcBCAEJAApxaW5neGlMT0dPCnFpbmd4aWxvZ28EYWkyMwhpY29uc3RvcBBleGl0LWZ1bGwtc2NyZWVuB3phbnRpbmcIcXVhbnBpbmcAAAA="},function(A,M,t){"use strict";t.r(M),M.default="data:font/woff;base64,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"},function(A,M,t){"use strict";t.r(M),M.default="data:font/ttf;base64,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"},function(A,M,t){"use strict";t.r(M),M.default="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8IS0tDQoyMDEzLTktMzA6IENyZWF0ZWQuDQotLT4NCjxzdmc+DQo8bWV0YWRhdGE+DQpDcmVhdGVkIGJ5IGljb25mb250DQo8L21ldGFkYXRhPg0KPGRlZnM+DQoNCjxmb250IGlkPSJpY29uZm9udCIgaG9yaXotYWR2LXg9IjEwMjQiID4NCiAgPGZvbnQtZmFjZQ0KICAgIGZvbnQtZmFtaWx5PSJpY29uZm9udCINCiAgICBmb250LXdlaWdodD0iNTAwIg0KICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIg0KICAgIHVuaXRzLXBlci1lbT0iMTAyNCINCiAgICBhc2NlbnQ9Ijg5NiINCiAgICBkZXNjZW50PSItMTI4Ig0KICAvPg0KICAgIDxtaXNzaW5nLWdseXBoIC8+DQogICAgDQogICAgPGdseXBoIGdseXBoLW5hbWU9InFpbmd4aUxPR08iIHVuaWNvZGU9IiYjNTkzMTY7IiBkPSJNMjc1LjQgNDA3bC0wLjEtMS42aC05Ny4ybC0wLjgtMTguN2g5OWwtMS45LTQ2LjhjLTAuMi01LjEtMS40LTkuMS0zLjYtMTItMi4yLTIuNy01LjQtNC05LjUtNGwtMTEyIDEuOSAwLjkgMjEuM2gxMDAuNWwwLjcgMTguMWgtMTAwbDEuOSA0NS41YzAuMiA0LjYgMS40IDguNCAzLjYgMTEuNCAyLjIgMy4xIDUuNCA0LjYgOS42IDQuNmg5NC40YzguNCAwIDE0LjktOC44IDE0LjUtMTkuN3pNMjk0LjIgNDI2LjdoOS44YzguNCAwIDE0LjgtOC44IDE0LjQtMTkuNEwzMTUgMzI0aC0yNWw0LjIgMTAyLjd6TTQzMi41IDM1MC4xbDMuMiA3Ny41aDguNGM5LjIgMCAxNi4yLTkuNSAxNS44LTIxLjNsLTIuOC02OS41Yy0wLjEtMi42LTAuOS01LTIuNC03LjQtMS4zLTItMi44LTMuNi00LjMtNC42LTQuNC0xLjgtOC42LTIuMi0xMi41LTEuMy00LjEgMC43LTcuOSAyLjUtMTEuMyA1LjMtMy4xIDMuMS02LjMgNi4yLTkuNSA5LjMtMy4yIDMuMS02LjYgNi41LTEwLjEgMTAuMi0zLjYgMy43LTcuMyA3LjctMTEuMyAxMS45LTguMSA4LjQtMTUuNyAxNi40LTIzIDI0LTcuNCA3LjUtMTEuNyAxMi42LTEyLjkgMTUuNGwtMy4xLTc0LjhoLTI0bDMuNyA4OS4zYzAuMSAzLjUgMSA3LjcgMy41IDEwLjQgMi43IDIuNyA1LjIgNC4yIDcuOSA1LjEgMy44IDEuMiAxMC45IDEgMTYuMS00LjhsNjguNi03NC43ek02MTAuMyA0MDUuNHYtMC4ySDQ5OS45bC0yLjUtNjBoODYuNWwwLjggMjBoLTYwLjVsMC44IDIwaDg0LjRsLTItNDhjLTAuMy03LjMtNS4yLTEzLjMtMTAuOS0xMy4zSDQ4MS45Yy0yIDAtNC4yIDEuMS02LjYgMy40LTIuMyAyLjItMy40IDYuNS0zLjEgMTIuNmwyLjkgNzAuOGMwLjIgNC41IDEuNCA4LjIgMy42IDExLjIgMi4yIDMuMiA1LjQgNC44IDkuNiA0LjhoMTA2LjJjOS4yIDAgMTYuMi05LjUgMTUuOC0yMS4zek03NTAuNCA0MjcuMmwtMC45LTIxLjNoLTk4LjlsLTAuOC0xOC43aDk5bC0xLjktNDYuOGMtMC4yLTUuMS0xLjQtOS4xLTMuNi0xMi0yLjItMi43LTUuNC00LTkuNS00SDYyMi4zbDAuOSAyMS4zaDEwMGwwLjggMjBINjI0bDEuOSA0NS41YzAuMiA0LjYgMS40IDguNCAzLjYgMTEuNCAyLjIgMy4xIDUuNCA0LjYgOS42IDQuNmgxMTEuM3pNODgzLjcgNDA1LjlINzY0bDAuOSAyMS4zSDg2OGM5LjIgMCAxNi4yLTkuNSAxNS43LTIxLjN6TTg2MC4xIDM4Ny4ybC0wLjktMjEuNWgtNzEuOGwtMC44LTE4LjZoOTlsLTAuOS0yMi43aC0xMjRsMi41IDYyLjh6TTEwMjEuNSA0MDUuOUg5MDEuOGwwLjkgMjEuM2gxMDMuMWM5LjIgMCAxNi4yLTkuNSAxNS43LTIxLjN6TTk5Ny45IDM4Ny4ybC0wLjktMjEuNWgtNzEuOWwtMC43LTE4LjZoOTlsLTEtMjIuN0g4OTguNWwyLjUgNjIuOHpNMTU4LjIgNDUxLjNsLTE2LjUtMTguNmMtMC44LTAuOS0xLjktMS40LTMtMS40SDExM2MtMS4yIDAtMC41LTcyLjEtMS4zLTczLjJsLTE3LjMtMjEuNGMtMi43LTMuNC03LjUtMS4xLTcuNSAzLjZsMC4xIDExM2MwLjEgNC4yIDMuNCA3IDYuNSA3bDYxLjgtMC4xYzMuOSAwLjEgNS44LTUuNyAyLjktOC45ek03OSAzMjIuNGwtMTEuNy0xMy4xYy0zLjktNC40LTEwLjMtMS0xMC4zIDUuNGwwLjQgMTA5LjVjMCA0LTIuNyA3LjMtNi4xIDcuM2wtNDQuNi0wLjFjLTUuNCAwLTguMSA3LjctNC40IDEyLjNsMTIuMSAxNC44YzEuMiAxLjQgMi43IDIuMiA0LjQgMi4ybDU2LjItMC4zYzMuNCAwIDYuMS0zLjMgNi4xLTcuM0w4MSAzMjcuN2MwLTItMC43LTMuOS0yLTUuM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4NCg0KICAgIA0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxaW5neGlsb2dvIiB1bmljb2RlPSImIzU5MzExOyIgZD0iTTk1MS4yIDc3Mi40bC05Mi44LTc0LjVjLTQuNS01LjEtMTAuNS04LTE2LjgtOEg2ODYuN2MtNi43IDAtMi42LTQzNS4xLTcuNC00NDEuM2wtNzcuMS0xMjAuNGMtMTUuMi0xOS00Mi4xLTYuMS00Mi4xIDIwLjJsMC44IDYzNS41YzAuNiAyMy4zIDE4LjkgMzkuNiAzNi4zIDM5LjZsMzM3LjItMC42YzIyLjItMC4xIDMyLjktMzIuMyAxNi44LTUwLjV6TTQ5NiA0Ny42bC01NS44LTczLjhjLTIyLTI0LjctNTMtNS45LTUyLjggMzAuMmwtMC44IDYzNS41YzAuMiAyMi44IDYuNCA1MC45LTI2LjMgNTEuM2wtMjYwLjgtMC41Yy0zMC4zLTAuMS00NS44IDIzLjUtMjQuNyA0OS40TDE0Mi43IDgxM2M2LjUgOCAxNS40IDEyLjUgMjQuOCAxMi40bDMwNi4xLTEuN2MxOC45LTAuMSAzNC4xLTE4LjQgMzQuMS00MC45bC0wLjgtNzA1LjRjLTAuMS0xMS4zLTQtMjIuMS0xMC45LTI5Ljh6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+DQoNCiAgICANCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWkyMyIgdW5pY29kZT0iJiM1OTAxODsiIGQ9Ik0yNTYuMDc5ODE4IDczNS42MzQ2MTYgMjU2LjA3OTgxOCAzMi4zNjY0MDggODA4LjY0OTgxNSAzODQuMDE2MzczWiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPg0KDQogICAgDQogICAgPGdseXBoIGdseXBoLW5hbWU9Imljb25zdG9wIiB1bmljb2RlPSImIzU4ODk4OyIgZD0iTTI0My42MTEzNDQgODMzLjQwMjMxM2w1MzUuNDAzMDEzIDBjOTguNTY1ODc2IDAgMTc4LjQ2NDYwMS04MC4yNjUwNjggMTc4LjQ2NDYwMS0xNzkuMjgzMjQ2bDAtNTM3Ljg0OTczOGMwLTk5LjAwODk2OC03OS44OTg3MjUtMTc5LjI4MzI0Ni0xNzguNDY0NjAxLTE3OS4yODMyNDZMMjQzLjYxMTM0NC02My4wMTM5MTdjLTk4LjU1NjY2NyAwLTE3OC40NTUzOTEgODAuMjc0Mjc4LTE3OC40NTUzOTEgMTc5LjI4MzI0NmwwIDUzNy44NDk3MzhDNjUuMTU1OTUyIDc1My4xMzcyNDUgMTQ1LjA1NDY3NyA4MzMuNDAyMzEzIDI0My42MTEzNDQgODMzLjQwMjMxM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4NCg0KICAgIA0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJleGl0LWZ1bGwtc2NyZWVuIiB1bmljb2RlPSImIzU4OTY3OyIgZD0iTTk1Ljk0NCA1MjQuOTE4aDIzOS40ODdjMTkuODUxIDAgMzYgMTYuMTQ5IDM2IDM2djIzOS40ODhjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMycy0zMi0xNC4zMjctMzItMzJ2LTIxMS40ODhoLTIxMS40ODdjLTE3LjY3MyAwLTMyLTE0LjMyNy0zMi0zMiAwLTE3LjY3MiAxNC4zMjctMzIgMzItMzJ6TTk1Ljk0NCAxNzkuOTg0aDIxMS40ODd2LTIxMS40ODdjMC0xNy42NzMgMTQuMzI3LTMyIDMyLTMyczMyIDE0LjMyNyAzMiAzMnYyMzkuNDg3YzAgMTkuODUxLTE2LjE0OSAzNi0zNiAzNmgtMjM5LjQ4N2MtMTcuNjczIDAtMzItMTQuMzI3LTMyLTMyczE0LjMyNy0zMiAzMi0zMnpNNjg0LjUxMy02My40MDJjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjIxMS40ODdoMjExLjQ4N2MxNy42NzMgMCAzMiAxNC4zMjcgMzIgMzJzLTE0LjMyNyAzMi0zMiAzMmgtMjM5LjQ4N2MtMTkuODUxIDAtMzYtMTYuMTQ5LTM2LTM2di0yMzkuNDg3YzAtMTcuNjczIDE0LjMyNy0zMiAzMi0zMnpNNjg4LjUxMyA1MjQuMzYxaDIzOS40ODdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMycy0xNC4zMjcgMzItMzIgMzJoLTIxMS40ODd2MjExLjQ4OGMwIDE3LjY3My0xNC4zMjcgMzItMzIgMzJzLTMyLTE0LjMyNy0zMi0zMnYtMjM5LjQ4OGMwLTE5Ljg1IDE2LjE0OS0zNiAzNi0zNnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4NCg0KICAgIA0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ6YW50aW5nIiB1bmljb2RlPSImIzU4ODg1OyIgZD0iTTY4MCA3MzZoMTI4YzMwLjkyOCAwIDU2LTI1LjA3MiA1Ni01NnYtNTkzYzAtMzAuOTI4LTI1LjA3Mi01Ni01Ni01Nkg2ODBjLTMwLjkyOCAwLTU2IDI1LjA3Mi01NiA1NlY2ODBjMCAzMC45MjggMjUuMDcyIDU2IDU2IDU2eiBtLTQ2NCAwaDEyOGMzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZ2LTU5M2MwLTMwLjkyOC0yNS4wNzItNTYtNTYtNTZIMjE2Yy0zMC45MjggMC01NiAyNS4wNzItNTYgNTZWNjgwYzAgMzAuOTI4IDI1LjA3MiA1NiA1NiA1NnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4NCg0KICAgIA0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxdWFucGluZyIgdW5pY29kZT0iJiM1ODk2NTsiIGQ9Ik04NS4zMzMzMzMgMjEzLjMzMzMzM3YtMTI4YTEyOCAxMjggMCAwIDEgMTI4LTEyOGgxMjhhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSAwIDg1LjMzMzMzNEgyMTMuMzMzMzMzYTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAtNDIuNjY2NjY2IDQyLjY2NjY2NnYxMjhhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS04NS4zMzMzMzQgMHogbTU5Ny4zMzMzMzQtMjU2aDEyOGExMjggMTI4IDAgMCAxIDEyOCAxMjh2MTI4YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDEtODUuMzMzMzM0IDB2LTEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwLTQyLjY2NjY2Ni00Mi42NjY2NjZoLTEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDAtODUuMzMzMzM0eiBtMjU2IDU5Ny4zMzMzMzRWNjgyLjY2NjY2N2ExMjggMTI4IDAgMCAxLTEyOCAxMjhoLTEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDAtODUuMzMzMzM0aDEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDQyLjY2NjY2Ni00Mi42NjY2NjZ2LTEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDg1LjMzMzMzNCAwek0zNDEuMzMzMzMzIDgxMC42NjY2NjdIMjEzLjMzMzMzM2ExMjggMTI4IDAgMCAxLTEyOC0xMjh2LTEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDg1LjMzMzMzNCAwVjY4Mi42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMCA0Mi42NjY2NjYgNDIuNjY2NjY2aDEyOGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDAgODUuMzMzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPg0KDQogICAgDQoNCg0KICA8L2ZvbnQ+DQo8L2RlZnM+PC9zdmc+DQo="},function(A,M,t){var g=t(56),I=t(221);"string"==typeof(I=I.__esModule?I.default:I)&&(I=[[A.i,I,""]]);var e={insert:"head",singleton:!1};g(I,e);A.exports=I.locals||{}},function(A,M,t){(M=t(57)(!1)).push([A.i,"input[type=range] {\r\n    -webkit-appearance: none;\r\n}\r\ninput[type=range]::-webkit-slider-thumb {\r\n    -webkit-appearance: none;\r\n}    \r\ninput[type=range]::-webkit-slider-runnable-track {\r\n    height: 15px;\r\n    border-radius: 10px; /*将轨道设为圆角的*/\r\n}\r\ninput[type=range]:focus {\r\n    outline: none;\r\n}\r\ninput[type=range]::-webkit-slider-thumb {\r\n    -webkit-appearance: none;\r\n    height: 15px;\r\n    width: 15px;\r\n    margin-top: -2px; /*使滑块超出轨道部分的偏移量相等*/\r\n    background: #ffffff; \r\n    border-radius: 50%; /*外观设置为圆形*/\r\n}\r\n.conter{\r\n    position: absolute;\r\n    left: 50%;\r\n    top: 50%;\r\n    transform: translate(-50%,-50%);\r\n}\r\n.Loding{\r\n    margin: 0 auto;\r\n    margin-bottom: 5px;\r\n    border:3px solid #f3f3f3;\r\n    border-radius:50%;\r\n    border-top:3px solid #2e8e9a;\r\n    width:25px;\r\n    height:25px;\r\n    /* animation-name:load; */\r\n    animation:load .5s linear infinite;\r\n\r\n}\r\n.LodingTitle {\r\n    margin-top: 20px;\r\n    color: #fff;\r\n    font-size: 14px;\r\n}\r\n@keyframes load{\r\n    0%{\r\n        transform: rotate(0deg);\r\n    }\r\n    100%{\r\n        transform:rotate(360deg);\r\n    }\r\n}\r\n/* 中间大播放按钮样式 */\r\n.bigPlayBox{\r\n    position: absolute;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%,-50%);\r\n    background-color: rgba(0,0,0,.5);\r\n    cursor: pointer;\r\n    width: 80px;\r\n    height:80px;\r\n    border-radius: 40px;\r\n    text-align: center;\r\n    line-height: 80px;\r\n    font-size: 36px;\r\n    color: #fff;\r\n    z-index: 9;\r\n}",""]),A.exports=M},function(A,M,t){"use strict";t.r(M),t.d(M,"default",(function(){return hA}));var g=function(){function A(A){this.gl=A,this.texture=null}var M=A.prototype;return M.create=function(A,M){var t=this.gl;this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),1==A&&t.texImage2D(t.TEXTURE_2D,1,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,M),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},M.bind=function(A,M,t){var g=this.gl;g.activeTexture([g.TEXTURE0,g.TEXTURE1,g.TEXTURE2,g.TEXTURE3][A]),g.bindTexture(g.TEXTURE_2D,this.texture),g.uniform1i(g.getUniformLocation(M,t),A)},M.fill=function(A,M,t){var g=this.gl;g.bindTexture(g.TEXTURE_2D,this.texture),g.texImage2D(g.TEXTURE_2D,0,g.LUMINANCE,A,M,0,g.LUMINANCE,g.UNSIGNED_BYTE,t)},A}(),I=function(){function A(A){this.enableTextTexture=0,this.canvas=A,this.gl=A.getContext("webgl")||A.getContext("experimental-webgl"),this.textCtx=null}var M=A.prototype;return M.destroy=function(){this.gl&&this.gl.commit&&this.gl.commit()},M.makeTextCanvas=function(A,M,t){return textCtx.canvas.width=M,textCtx.canvas.height=t,textCtx.font="10px monospace",textCtx.textAlign="center",textCtx.textBaseline="middle",textCtx.fillStyle="rgba(100, 0, 0, 0.6)",textCtx.clearRect(0,0,textCtx.canvas.width,textCtx.canvas.height),textCtx.fillText(A,M/2,t/2),textCtx.canvas},M.initGL=function(A){if(this.gl){var M=this.gl;M.pixelStorei(M.UNPACK_ALIGNMENT,1);var t=M.createProgram(),I=["attribute highp vec4 aVertexPosition;","attribute vec2 aTextureCoord;","varying highp vec2 vTextureCoord;","void main(void) {"," gl_Position = aVertexPosition;"," vTextureCoord = aTextureCoord;","}"].join("\n"),e=M.createShader(M.VERTEX_SHADER);M.shaderSource(e,I),M.compileShader(e);var i=["precision highp float;","varying lowp vec2 vTextureCoord;","uniform sampler2D YTexture;","uniform sampler2D UTexture;","uniform sampler2D VTexture;","uniform sampler2D TTexture;","const mat4 YUV2RGB = mat4","("," 1.1643828125, 0, 1.59602734375, -.87078515625,"," 1.1643828125, -.39176171875, -.81296875, .52959375,"," 1.1643828125, 2.017234375, 0, -1.081390625,"," 0, 0, 0, 1",");","void main(void) {"," gl_FragColor = mix(vec4( texture2D(YTexture, vTextureCoord).x, texture2D(UTexture, vTextureCoord).x, texture2D(VTexture, vTextureCoord).x, 1) * YUV2RGB, texture2D(TTexture, vTextureCoord), 0.1);","}"].join("\n"),T=M.createShader(M.FRAGMENT_SHADER);M.shaderSource(T,i),M.compileShader(T),M.attachShader(t,e),M.attachShader(t,T),M.linkProgram(t),M.useProgram(t),M.getProgramParameter(t,M.LINK_STATUS)||console.log("[ER] Shader link failed.");var E=M.getAttribLocation(t,"aVertexPosition");M.enableVertexAttribArray(E);var N=M.getAttribLocation(t,"aTextureCoord");M.enableVertexAttribArray(N);var n=M.createBuffer();M.bindBuffer(M.ARRAY_BUFFER,n),M.bufferData(M.ARRAY_BUFFER,new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0]),M.STATIC_DRAW),M.vertexAttribPointer(E,3,M.FLOAT,!1,0,0);var D=M.createBuffer();M.bindBuffer(M.ARRAY_BUFFER,D),M.bufferData(M.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),M.STATIC_DRAW),M.vertexAttribPointer(N,2,M.FLOAT,!1,0,0),1==this.enableTextTexture&&(void 0!==document&&(this.textCtx=document.createElement("canvas").getContext("2d")),console.log("textCtx:"+this.textCtx),null!=this.textCtx?(this.textCtx.canvas.width=256,this.textCtx.canvas.height=256,this.textCtx.font="10px monospace",this.textCtx.textAlign="center",this.textCtx.textBaseline="middle",this.textCtx.fillStyle="rgba(100, 0, 0, 0.6)",this.textCtx.clearRect(0,0,this.textCtx.canvas.width,this.textCtx.canvas.height),this.textCtx.fillText("Hello",this.textCtx.canvas.width/2,this.textCtx.canvas.height/2),M.t=new g(M),M.t.create(1,this.textCtx.canvas),console.log("create textctx ok.")):console.log("create textctx fail.")),M.y=new g(M),M.y.create(0,null),M.u=new g(M),M.u.create(0,null),M.v=new g(M),M.v.create(0,null),M.y.bind(0,t,"YTexture"),M.u.bind(1,t,"UTexture"),M.v.bind(2,t,"VTexture"),1==this.enableTextTexture&&this.textCtx&&M.t.bind(3,t,"TTexture")}else console.log("[ER] WebGL not supported.")},M.renderFrame=function(A,M,t,g,I){if(this.gl){var e=this.gl;e.viewport(0,0,e.canvas.width,e.canvas.height),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),A&&(e.y.fill(M,t,A.subarray(0,g)),e.u.fill(M>>1,t>>1,A.subarray(g,g+I)),e.v.fill(M>>1,t>>1,A.subarray(g+I,A.length))),1==this.enableTextTexture&&this.textCtx&&e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,this.textCtx.canvas),e.drawArrays(e.TRIANGLE_STRIP,0,4)}else console.log("[ER] Render frame failed due to WebGL not supported.")},M.renderVideoFrame=function(A,M,t){if(M<1||t<1){var g=this.gl,I=new Uint8Array(g.canvas.width*g.canvas.height*3/2),e=0,i=g.canvas.width*g.canvas.height,T=g.canvas.width*g.canvas.height*5/4,E=I.byteLength;for(e=i;e<T;e++)I[e]=128;for(e=T;e<E;e++)I[e]=128;var N=g.canvas.width*g.canvas.height,n=g.canvas.width/2*(g.canvas.height/2);this.renderFrame(I,g.canvas.width,g.canvas.height,N,n)}else if(null!=A){N=M*t,n=M/2*(t/2);this.renderFrame(A,M,t,N,n)}},A}(),e=t(0),i=t(17),T=t(29),E=t(7),N=t.n(E),n=t(1),D={};!function(){var A=self.navigator.userAgent.toLowerCase(),M=/(edge)\/([\w.]+)/.exec(A)||/(opr)[\/]([\w.]+)/.exec(A)||/(chrome)[ \/]([\w.]+)/.exec(A)||/(iemobile)[\/]([\w.]+)/.exec(A)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(A)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(A)||/(webkit)[ \/]([\w.]+)/.exec(A)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(A)||/(msie) ([\w.]+)/.exec(A)||A.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(A)||A.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(A)||[],t=/(ipad)/.exec(A)||/(ipod)/.exec(A)||/(windows phone)/.exec(A)||/(iphone)/.exec(A)||/(kindle)/.exec(A)||/(android)/.exec(A)||/(windows)/.exec(A)||/(mac)/.exec(A)||/(linux)/.exec(A)||/(cros)/.exec(A)||[],g={browser:M[5]||M[3]||M[1]||"",version:M[2]||M[4]||"0",majorVersion:M[4]||M[2]||"0",platform:t[0]||""},I={};if(g.browser){I[g.browser]=!0;var e=g.majorVersion.split(".");I.version={major:parseInt(g.majorVersion,10),string:g.version},e.length>1&&(I.version.minor=parseInt(e[1],10)),e.length>2&&(I.version.build=parseInt(e[2],10))}if(g.platform&&(I[g.platform]=!0),(I.chrome||I.opr||I.safari)&&(I.webkit=!0),I.rv||I.iemobile){I.rv&&delete I.rv;g.browser="msie",I.msie=!0}if(I.edge){delete I.edge;g.browser="msedge",I.msedge=!0}if(I.opr){g.browser="opera",I.opera=!0}if(I.safari&&I.android){g.browser="android",I.android=!0}for(var i in I.name=g.browser,I.platform=g.platform,D)D.hasOwnProperty(i)&&delete D[i];Object.assign(D,I)}();var C=D,r={ERROR:"error",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",METADATA_ARRIVED:"metadata_arrived",SCRIPTDATA_ARRIVED:"scriptdata_arrived",STATISTICS_INFO:"statistics_info"};function c(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var o=function(){function A(){}var M,t,g;return A.getConfig=function(){return{globalTag:n.a.GLOBAL_TAG,forceGlobalTag:n.a.FORCE_GLOBAL_TAG,enableVerbose:n.a.ENABLE_VERBOSE,enableDebug:n.a.ENABLE_DEBUG,enableInfo:n.a.ENABLE_INFO,enableWarn:n.a.ENABLE_WARN,enableError:n.a.ENABLE_ERROR,enableCallback:n.a.ENABLE_CALLBACK}},A.applyConfig=function(A){n.a.GLOBAL_TAG=A.globalTag,n.a.FORCE_GLOBAL_TAG=A.forceGlobalTag,n.a.ENABLE_VERBOSE=A.enableVerbose,n.a.ENABLE_DEBUG=A.enableDebug,n.a.ENABLE_INFO=A.enableInfo,n.a.ENABLE_WARN=A.enableWarn,n.a.ENABLE_ERROR=A.enableError,n.a.ENABLE_CALLBACK=A.enableCallback},A._notifyChange=function(){var M=A.emitter;if(M.listenerCount("change")>0){var t=A.getConfig();M.emit("change",t)}},A.registerListener=function(M){A.emitter.addListener("change",M)},A.removeListener=function(M){A.emitter.removeListener("change",M)},A.addLogListener=function(M){n.a.emitter.addListener("log",M),n.a.emitter.listenerCount("log")>0&&(n.a.ENABLE_CALLBACK=!0,A._notifyChange())},A.removeLogListener=function(M){n.a.emitter.removeListener("log",M),0===n.a.emitter.listenerCount("log")&&(n.a.ENABLE_CALLBACK=!1,A._notifyChange())},M=A,g=[{key:"forceGlobalTag",get:function(){return n.a.FORCE_GLOBAL_TAG},set:function(M){n.a.FORCE_GLOBAL_TAG=M,A._notifyChange()}},{key:"globalTag",get:function(){return n.a.GLOBAL_TAG},set:function(M){n.a.GLOBAL_TAG=M,A._notifyChange()}},{key:"enableAll",get:function(){return n.a.ENABLE_VERBOSE&&n.a.ENABLE_DEBUG&&n.a.ENABLE_INFO&&n.a.ENABLE_WARN&&n.a.ENABLE_ERROR},set:function(M){n.a.ENABLE_VERBOSE=M,n.a.ENABLE_DEBUG=M,n.a.ENABLE_INFO=M,n.a.ENABLE_WARN=M,n.a.ENABLE_ERROR=M,A._notifyChange()}},{key:"enableDebug",get:function(){return n.a.ENABLE_DEBUG},set:function(M){n.a.ENABLE_DEBUG=M,A._notifyChange()}},{key:"enableVerbose",get:function(){return n.a.ENABLE_VERBOSE},set:function(M){n.a.ENABLE_VERBOSE=M,A._notifyChange()}},{key:"enableInfo",get:function(){return n.a.ENABLE_INFO},set:function(M){n.a.ENABLE_INFO=M,A._notifyChange()}},{key:"enableWarn",get:function(){return n.a.ENABLE_WARN},set:function(M){n.a.ENABLE_WARN=M,A._notifyChange()}},{key:"enableError",get:function(){return n.a.ENABLE_ERROR},set:function(M){n.a.ENABLE_ERROR=M,A._notifyChange()}}],(t=null)&&c(M.prototype,t),g&&c(M,g),A}();o.emitter=new N.a;var B=o,Q=t(13),a=t(36),h=function(){function A(){}return A.init=function(){for(var M in A.types={avc1:[],avcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[],".mp3":[]},A.types)A.types.hasOwnProperty(M)&&(A.types[M]=[M.charCodeAt(0),M.charCodeAt(1),M.charCodeAt(2),M.charCodeAt(3)]);var t=A.constants={};t.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]),t.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),t.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),t.STSC=t.STCO=t.STTS,t.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),t.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),t.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),t.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),t.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),t.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])},A.box=function(A){for(var M=8,t=null,g=Array.prototype.slice.call(arguments,1),I=g.length,e=0;e<I;e++)M+=g[e].byteLength;(t=new Uint8Array(M))[0]=M>>>24&255,t[1]=M>>>16&255,t[2]=M>>>8&255,t[3]=255&M,t.set(A,4);for(var i=8,T=0;T<I;T++)t.set(g[T],i),i+=g[T].byteLength;return t},A.generateInitSegment=function(M){var t=A.box(A.types.ftyp,A.constants.FTYP),g=A.moov(M),I=new Uint8Array(t.byteLength+g.byteLength);return I.set(t,0),I.set(g,t.byteLength),I},A.moov=function(M){var t=A.mvhd(M.timescale,M.duration),g=A.trak(M),I=A.mvex(M);return A.box(A.types.moov,t,g,I)},A.mvhd=function(M,t){return A.box(A.types.mvhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,M>>>24&255,M>>>16&255,M>>>8&255,255&M,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))},A.trak=function(M){return A.box(A.types.trak,A.tkhd(M),A.mdia(M))},A.tkhd=function(M){var t=M.id,g=M.duration,I=M.presentWidth,e=M.presentHeight;return A.box(A.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,0,g>>>24&255,g>>>16&255,g>>>8&255,255&g,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,I>>>8&255,255&I,0,0,e>>>8&255,255&e,0,0]))},A.mdia=function(M){return A.box(A.types.mdia,A.mdhd(M),A.hdlr(M),A.minf(M))},A.mdhd=function(M){var t=M.timescale,g=M.duration;return A.box(A.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,g>>>24&255,g>>>16&255,g>>>8&255,255&g,85,196,0,0]))},A.hdlr=function(M){var t=null;return t="audio"===M.type?A.constants.HDLR_AUDIO:A.constants.HDLR_VIDEO,A.box(A.types.hdlr,t)},A.minf=function(M){var t=null;return t="audio"===M.type?A.box(A.types.smhd,A.constants.SMHD):A.box(A.types.vmhd,A.constants.VMHD),A.box(A.types.minf,t,A.dinf(),A.stbl(M))},A.dinf=function(){return A.box(A.types.dinf,A.box(A.types.dref,A.constants.DREF))},A.stbl=function(M){return A.box(A.types.stbl,A.stsd(M),A.box(A.types.stts,A.constants.STTS),A.box(A.types.stsc,A.constants.STSC),A.box(A.types.stsz,A.constants.STSZ),A.box(A.types.stco,A.constants.STCO))},A.stsd=function(M){return"audio"===M.type?"mp3"===M.codec?A.box(A.types.stsd,A.constants.STSD_PREFIX,A.mp3(M)):A.box(A.types.stsd,A.constants.STSD_PREFIX,A.mp4a(M)):A.box(A.types.stsd,A.constants.STSD_PREFIX,A.avc1(M))},A.mp3=function(M){var t=M.channelCount,g=M.audioSampleRate,I=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,g>>>8&255,255&g,0,0]);return A.box(A.types[".mp3"],I)},A.mp4a=function(M){var t=M.channelCount,g=M.audioSampleRate,I=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,g>>>8&255,255&g,0,0]);return A.box(A.types.mp4a,I,A.esds(M))},A.esds=function(M){var t=M.config||[],g=t.length,I=new Uint8Array([0,0,0,0,3,23+g,0,1,0,4,15+g,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([g]).concat(t).concat([6,1,2]));return A.box(A.types.esds,I)},A.avc1=function(M){var t=M.avcc,g=M.codecWidth,I=M.codecHeight,e=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,g>>>8&255,255&g,I>>>8&255,255&I,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return A.box(A.types.avc1,e,A.box(A.types.avcC,t))},A.mvex=function(M){return A.box(A.types.mvex,A.trex(M))},A.trex=function(M){var t=M.id,g=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return A.box(A.types.trex,g)},A.moof=function(M,t){return A.box(A.types.moof,A.mfhd(M.sequenceNumber),A.traf(M,t))},A.mfhd=function(M){var t=new Uint8Array([0,0,0,0,M>>>24&255,M>>>16&255,M>>>8&255,255&M]);return A.box(A.types.mfhd,t)},A.traf=function(M,t){var g=M.id,I=A.box(A.types.tfhd,new Uint8Array([0,0,0,0,g>>>24&255,g>>>16&255,g>>>8&255,255&g])),e=A.box(A.types.tfdt,new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t])),i=A.sdtp(M),T=A.trun(M,i.byteLength+16+16+8+16+8+8);return A.box(A.types.traf,I,e,T,i)},A.sdtp=function(M){for(var t=M.samples||[],g=t.length,I=new Uint8Array(4+g),e=0;e<g;e++){var i=t[e].flags;I[e+4]=i.isLeading<<6|i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy}return A.box(A.types.sdtp,I)},A.trun=function(M,t){var g=M.samples||[],I=g.length,e=12+16*I,i=new Uint8Array(e);t+=8+e,i.set([0,0,15,1,I>>>24&255,I>>>16&255,I>>>8&255,255&I,t>>>24&255,t>>>16&255,t>>>8&255,255&t],0);for(var T=0;T<I;T++){var E=g[T].duration,N=g[T].size,n=g[T].flags,D=g[T].cts;i.set([E>>>24&255,E>>>16&255,E>>>8&255,255&E,N>>>24&255,N>>>16&255,N>>>8&255,255&N,n.isLeading<<2|n.dependsOn,n.isDependedOn<<6|n.hasRedundancy<<4|n.isNonSync,0,0,D>>>24&255,D>>>16&255,D>>>8&255,255&D],12+16*T)}return A.box(A.types.trun,i)},A.mdat=function(M){return A.box(A.types.mdat,M)},A}();h.init();var s=h,y=function(){function A(){}return A.getSilentFrame=function(A,M){if("mp4a.40.2"===A){if(1===M)return new Uint8Array([0,200,0,128,35,128]);if(2===M)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===M)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===M)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===M)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===M)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===M)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===M)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===M)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}return null},A}();function w(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var j=function(A,M,t,g,I){this.dts=A,this.pts=M,this.duration=t,this.originalDts=g,this.isSyncPoint=I,this.fileposition=null},L=function(){function A(){this.beginDts=0,this.endDts=0,this.beginPts=0,this.endPts=0,this.originalBeginDts=0,this.originalEndDts=0,this.syncPoints=[],this.firstSample=null,this.lastSample=null}return A.prototype.appendSyncPoint=function(A){A.isSyncPoint=!0,this.syncPoints.push(A)},A}(),d=function(){function A(){this._list=[]}var M=A.prototype;return M.clear=function(){this._list=[]},M.appendArray=function(A){var M=this._list;0!==A.length&&(M.length>0&&A[0].originalDts<M[M.length-1].originalDts&&this.clear(),Array.prototype.push.apply(M,A))},M.getLastSyncPointBeforeDts=function(A){if(0==this._list.length)return null;var M=this._list,t=0,g=M.length-1,I=0,e=0,i=g;for(A<M[0].dts&&(t=0,e=i+1);e<=i;){if((I=e+Math.floor((i-e)/2))===g||A>=M[I].dts&&A<M[I+1].dts){t=I;break}M[I].dts<A?e=I+1:i=I-1}return this._list[t]},A}(),x=function(){function A(A){this._type=A,this._list=[],this._lastAppendLocation=-1}var M,t,g,I=A.prototype;return I.isEmpty=function(){return 0===this._list.length},I.clear=function(){this._list=[],this._lastAppendLocation=-1},I._searchNearestSegmentBefore=function(A){var M=this._list;if(0===M.length)return-2;var t=M.length-1,g=0,I=0,e=t,i=0;if(A<M[0].originalBeginDts)return i=-1;for(;I<=e;){if((g=I+Math.floor((e-I)/2))===t||A>M[g].lastSample.originalDts&&A<M[g+1].originalBeginDts){i=g;break}M[g].originalBeginDts<A?I=g+1:e=g-1}return i},I._searchNearestSegmentAfter=function(A){return this._searchNearestSegmentBefore(A)+1},I.append=function(A){var M=this._list,t=A,g=this._lastAppendLocation,I=0;-1!==g&&g<M.length&&t.originalBeginDts>=M[g].lastSample.originalDts&&(g===M.length-1||g<M.length-1&&t.originalBeginDts<M[g+1].originalBeginDts)?I=g+1:M.length>0&&(I=this._searchNearestSegmentBefore(t.originalBeginDts)+1),this._lastAppendLocation=I,this._list.splice(I,0,t)},I.getLastSegmentBefore=function(A){var M=this._searchNearestSegmentBefore(A);return M>=0?this._list[M]:null},I.getLastSampleBefore=function(A){var M=this.getLastSegmentBefore(A);return null!=M?M.lastSample:null},I.getLastSyncPointBefore=function(A){for(var M=this._searchNearestSegmentBefore(A),t=this._list[M].syncPoints;0===t.length&&M>0;)M--,t=this._list[M].syncPoints;return t.length>0?t[t.length-1]:null},M=A,(t=[{key:"type",get:function(){return this._type}},{key:"length",get:function(){return this._list.length}}])&&w(M.prototype,t),g&&w(M,g),A}(),Y=t(2);function u(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var S=function(){function A(A){this.TAG="MP4Remuxer",this._config=A,this._isLive=!0===A.isLive,this._dtsBase=-1,this._dtsBaseInited=!1,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=void 0,this._videoNextDts=void 0,this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._audioMeta=null,this._videoMeta=null,this._adjustPts=0,this._lastAdjustVideoPts=0,this._lastVideoPts=0,this._audioSegmentInfoList=new x("audio"),this._videoSegmentInfoList=new x("video"),this._onInitSegment=null,this._onMediaSegment=null,this._forceFirstIDR=!(!C.chrome||!(C.version.major<50||50===C.version.major&&C.version.build<2661)),this._fillSilentAfterSeek=C.msedge||C.msie,this._mp3UseMpegAudio=!C.firefox,this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}var M,t,g,I=A.prototype;return I.destroy=function(){this._dtsBase=-1,this._dtsBaseInited=!1,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList.clear(),this._audioSegmentInfoList=null,this._videoSegmentInfoList.clear(),this._videoSegmentInfoList=null,this._onInitSegment=null,this._onMediaSegment=null},I.bindDataSource=function(A){return A.onDataAvailable=this.remux.bind(this),A.onTrackMetadata=this._onTrackMetadataReceived.bind(this),this},I.insertDiscontinuity=function(){this._audioNextDts=this._videoNextDts=void 0},I.changeSpeed=function(A){this._adjustPts=A,console.log("ChangeSpeed: "+A)},I.seek=function(A){this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear(),this._dtsBase=-1,this._dtsBaseInited=!1,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=void 0,this._videoNextDts=void 0,this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._adjustPts=0,this._lastAdjustVideoPts=0,this._lastVideoPts=0},I.remux=function(A,M){if(!this._onMediaSegment)throw new Y.a("MP4Remuxer: onMediaSegment callback must be specificed!");if(!this._dtsBaseInited&&!this._calculateDtsBase(A,M))return M.samples=[],void(A.samples=[]);this._remuxVideo(M),this._remuxAudio(A)},I._onTrackMetadataReceived=function(A,M){var t=null,g="mp4",I=M.codec;if("audio"===A)this._audioMeta=M,"mp3"===M.codec&&this._mp3UseMpegAudio?(g="mpeg",I="",t=new Uint8Array):t=s.generateInitSegment(M);else{if("video"!==A)return;this._videoMeta=M,t=s.generateInitSegment(M)}if(!this._onInitSegment)throw new Y.a("MP4Remuxer: onInitSegment callback must be specified!");this._onInitSegment(A,{type:A,data:t.buffer,codec:I,container:A+"/"+g,mediaDuration:M.duration})},I._calculateDtsBase=function(A,M){if(!this._dtsBaseInited)return A.samples&&A.samples.length&&(this._audioDtsBase=A.samples[0].dts),M.samples&&M.samples.length&&(this._videoDtsBase=M.samples[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase),this._dtsBaseInited=!0,!(this._dtsBase<0)},I.flushStashedSamples=function(){var A=this._videoStashedLastSample,M=this._audioStashedLastSample,t={type:"video",id:1,sequenceNumber:0,samples:[],length:0};null!=A&&(t.samples.push(A),t.length=A.length);var g={type:"audio",id:2,sequenceNumber:0,samples:[],length:0};null!=M&&(g.samples.push(M),g.length=M.length),this._videoStashedLastSample=null,this._audioStashedLastSample=null,this._remuxVideo(t,!0),this._remuxAudio(g,!0)},I._remuxAudio=function(A,M){if(null!=this._audioMeta){var t,g=A,I=g.samples,e=void 0,i=-1,T=this._audioMeta.refSampleDuration,E="mp3"===this._audioMeta.codec&&this._mp3UseMpegAudio,N=this._dtsBaseInited&&void 0===this._audioNextDts,D=!1;if(I&&0!==I.length&&(1!==I.length||M)){var r=0,c=null,o=0;E?(r=0,o=g.length):(r=8,o=8+g.length);var B=null;if(I.length>1&&(o-=(B=I.pop()).length),null!=this._audioStashedLastSample){var Q=this._audioStashedLastSample;this._audioStashedLastSample=null,I.unshift(Q),o+=Q.length}null!=B&&(this._audioStashedLastSample=B);var a=I[0].dts-this._dtsBase;if(this._audioNextDts)e=a-this._audioNextDts;else if(this._audioSegmentInfoList.isEmpty())e=0,this._fillSilentAfterSeek&&!this._videoSegmentInfoList.isEmpty()&&"mp3"!==this._audioMeta.originalCodec&&(D=!0);else{var h=this._audioSegmentInfoList.getLastSampleBefore(a);if(null!=h){var w=a-(h.originalDts+h.duration);w<=3&&(w=0),e=a-(h.dts+h.duration+w)}else e=0}if(D){var d=a-e,x=this._videoSegmentInfoList.getLastSegmentBefore(a);if(null!=x&&x.beginDts<d){var Y=y.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);if(Y){var u=x.beginDts,S=d-x.beginDts;n.a.v(this.TAG,"InsertPrefixSilentAudio: dts: "+u+", duration: "+S),I.unshift({unit:Y,dts:u,pts:u}),o+=Y.byteLength}}else D=!1}for(var l=[],z=0;z<I.length;z++){var U=I[z],f=U.unit,O=U.dts-this._dtsBase,F=O-e;-1===i&&(i=F);var m=0;if(z!==I.length-1)m=I[z+1].dts-this._dtsBase-e-F;else if(null!=B)m=B.dts-this._dtsBase-e-F;else m=l.length>=1?l[l.length-1].duration:Math.floor(T);var R=!1,k=null;if(m>1.5*T&&"mp3"!==this._audioMeta.codec&&this._fillAudioTimestampGap&&!C.safari){R=!0;var p=Math.abs(m-T),b=Math.ceil(p/T),G=F+T;n.a.w(this.TAG,"Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\ndts: "+(F+m)+" ms, expected: "+(F+Math.round(T))+" ms, delta: "+Math.round(p)+" ms, generate: "+b+" framessampleDuration: "+m+" ms, refSampleDuration: "+T);var J=y.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);null==J&&(n.a.w(this.TAG,"Unable to generate silent frame for "+this._audioMeta.originalCodec+" with "+this._audioMeta.channelCount+" channels, repeat last frame"),J=f),k=[];for(var H=0;H<b;H++){var X=Math.round(G);if(k.length>0){var v=k[k.length-1];v.duration=X-v.dts}var V={dts:X,pts:X,cts:0,unit:J,size:J.byteLength,duration:0,originalDts:O,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};k.push(V),o+=V.size,G+=T}var W=k[k.length-1];W.duration=F+m-W.dts,m=Math.round(T)}l.push({dts:F,pts:F,cts:0,unit:U.unit,size:U.unit.byteLength,duration:m,originalDts:O,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),R&&l.push.apply(l,k)}E?c=new Uint8Array(o):((c=new Uint8Array(o))[0]=o>>>24&255,c[1]=o>>>16&255,c[2]=o>>>8&255,c[3]=255&o,c.set(s.types.mdat,4));for(var P=0;P<l.length;P++){var Z=l[P].unit;c.set(Z,r),r+=Z.byteLength}var K=l[l.length-1];t=K.dts+K.duration,this._audioNextDts=t;var q=new L;q.beginDts=i,q.endDts=t,q.beginPts=i,q.endPts=t,q.originalBeginDts=l[0].originalDts,q.originalEndDts=K.originalDts+K.duration,q.firstSample=new j(l[0].dts,l[0].pts,l[0].duration,l[0].originalDts,!1),q.lastSample=new j(K.dts,K.pts,K.duration,K.originalDts,!1),this._isLive||this._audioSegmentInfoList.append(q),g.samples=l,g.sequenceNumber++;var _=null;_=E?new Uint8Array:s.moof(g,i),g.samples=[],g.length=0;var $={type:"audio",data:this._mergeBoxes(_,c).buffer,sampleCount:l.length,info:q};E&&N&&($.timestampOffset=i),this._onMediaSegment("audio",$)}}},I._remuxVideo=function(A,M){if(null!=this._videoMeta){var t,g,I=A,e=I.samples,i=void 0,T=-1,E=-1;if(e&&0!==e.length&&(1!==e.length||M)){var N=8,n=null,D=8+A.length,C=null;if(e.length>1&&(D-=(C=e.pop()).length),null!=this._videoStashedLastSample){var r=this._videoStashedLastSample;this._videoStashedLastSample=null,e.unshift(r),D+=r.length}null!=C&&(this._videoStashedLastSample=C);var c=e[0].dts-this._dtsBase;if(this._videoNextDts)i=c-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())i=0;else{var o=this._videoSegmentInfoList.getLastSampleBefore(c);if(null!=o){var B=c-(o.originalDts+o.duration);B<=3&&(B=0),i=c-(o.dts+o.duration+B)}else i=0}for(var Q=new L,a=[],h=0;h<e.length;h++){var y=e[h],w=y.dts-this._dtsBase,d=y.isKeyframe,x=w-i,Y=y.cts,u=x+Y;-1===T&&(T=x,E=u);var S=0;if(h!==e.length-1)S=e[h+1].dts-this._dtsBase-i-x;else if(null!=C)S=C.dts-this._dtsBase-i-x;else S=a.length>=1?a[a.length-1].duration:Math.floor(this._videoMeta.refSampleDuration);if(d){var l=new j(x,u,S,y.dts,!0);l.fileposition=y.fileposition,Q.appendSyncPoint(l)}a.push({dts:x,pts:u,cts:Y,units:y.units,size:y.length,isKeyframe:d,duration:S,originalDts:w,flags:{isLeading:0,dependsOn:d?2:1,isDependedOn:d?1:0,hasRedundancy:0,isNonSync:d?0:1}})}(n=new Uint8Array(D))[0]=D>>>24&255,n[1]=D>>>16&255,n[2]=D>>>8&255,n[3]=255&D,n.set(s.types.mdat,4);for(var z=0;z<a.length;z++)for(var U=a[z].units;U.length;){var f=U.shift().data;n.set(f,N),N+=f.byteLength}var O=a[a.length-1];if(t=O.dts+O.duration,g=O.pts+O.duration,this._videoNextDts=t,Q.beginDts=T,Q.endDts=t,Q.beginPts=E,Q.endPts=g,Q.originalBeginDts=a[0].originalDts,Q.originalEndDts=O.originalDts+O.duration,Q.firstSample=new j(a[0].dts,a[0].pts,a[0].duration,a[0].originalDts,a[0].isKeyframe),Q.lastSample=new j(O.dts,O.pts,O.duration,O.originalDts,O.isKeyframe),this._isLive||this._videoSegmentInfoList.append(Q),I.samples=a,I.sequenceNumber++,this._forceFirstIDR){var F=a[0].flags;F.dependsOn=2,F.isNonSync=0}var m=s.moof(I,T);I.samples=[],I.length=0,this._onMediaSegment("video",{type:"video",data:this._mergeBoxes(m,n).buffer,sampleCount:a.length,info:Q})}}},I._mergeBoxes=function(A,M){var t=new Uint8Array(A.byteLength+M.byteLength);return t.set(A,0),t.set(M,A.byteLength),t},M=A,(t=[{key:"onInitSegment",get:function(){return this._onInitSegment},set:function(A){this._onInitSegment=A}},{key:"onMediaSegment",get:function(){return this._onMediaSegment},set:function(A){this._onMediaSegment=A}}])&&u(M.prototype,t),g&&u(M,g),A}(),l=t(5);function z(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var U=function(){function A(){this._firstCheckpoint=0,this._lastCheckpoint=0,this._intervalBytes=0,this._totalBytes=0,this._lastSecondBytes=0,self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now}var M,t,g,I=A.prototype;return I.reset=function(){this._firstCheckpoint=this._lastCheckpoint=0,this._totalBytes=this._intervalBytes=0,this._lastSecondBytes=0},I.addBytes=function(A){0===this._firstCheckpoint?(this._firstCheckpoint=this._now(),this._lastCheckpoint=this._firstCheckpoint,this._intervalBytes+=A,this._totalBytes+=A):this._now()-this._lastCheckpoint<1e3?(this._intervalBytes+=A,this._totalBytes+=A):(this._lastSecondBytes=this._intervalBytes,this._intervalBytes=A,this._totalBytes+=A,this._lastCheckpoint=this._now())},M=A,(t=[{key:"currentKBps",get:function(){this.addBytes(0);var A=(this._now()-this._lastCheckpoint)/1e3;return 0==A&&(A=1),this._intervalBytes/A/1024}},{key:"lastSecondKBps",get:function(){return this.addBytes(0),0!==this._lastSecondBytes?this._lastSecondBytes/1024:this._now()-this._lastCheckpoint>=500?this.currentKBps:0}},{key:"averageKBps",get:function(){var A=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/A/1024}}])&&z(M.prototype,t),g&&z(M,g),A}();function f(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var O=0,F=1,m=2,R=3,k=4,p="Exception",b="HttpStatusCodeInvalid",G="EarlyEof",J="UnrecoverableEarlyEof",H=function(){function A(A){this._type=A||"undefined",this._status=O,this._needStash=!1,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}var M,t,g,I=A.prototype;return I.destroy=function(){this._status=O,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null},I.isWorking=function(){return this._status===F||this._status===m},I.open=function(A,M){throw new Y.c("Unimplemented abstract function!")},I.abort=function(){throw new Y.c("Unimplemented abstract function!")},M=A,(t=[{key:"type",get:function(){return this._type}},{key:"status",get:function(){return this._status}},{key:"needStashBuffer",get:function(){return this._needStash}},{key:"onContentLengthKnown",get:function(){return this._onContentLengthKnown},set:function(A){this._onContentLengthKnown=A}},{key:"onURLRedirect",get:function(){return this._onURLRedirect},set:function(A){this._onURLRedirect=A}},{key:"onDataArrival",get:function(){return this._onDataArrival},set:function(A){this._onDataArrival=A}},{key:"onError",get:function(){return this._onError},set:function(A){this._onError=A}},{key:"onComplete",get:function(){return this._onComplete},set:function(A){this._onComplete=A}}])&&f(M.prototype,t),g&&f(M,g),A}();var X=function(A){var M,t;function g(M,t){var g;return(g=A.call(this,"fetch-stream-loader")||this).TAG="FetchStreamLoader",g._seekHandler=M,g._config=t,g._needStash=!0,g._callbackFunc=t.callbackFunc,g._requestAbort=!1,g._contentLength=null,g._receivedLength=0,g._retryConnectTimes=0,g._fetchUrl=null,g._fetchParam=null,g._triggerReconnectingNotify=!0,g._triggerReconnectSuccessNotify=!0,g}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.isSupported=function(){try{var A=C.msedge&&C.version.minor>=15048,M=!C.msedge||A;return self.fetch&&self.ReadableStream&&M}catch(A){return!1}};var I=g.prototype;return I.destroy=function(){this.isWorking()&&this.abort(),A.prototype.destroy.call(this)},I.fetchStream=function(){var A=this,M=this._fetchParam;this._retryConnectTimes++,this._triggerReconnectingNotify&&(this._triggerReconnectingNotify=!1,this._onDataArrival&&this._onDataArrival(null,-this._retryConnectTimes,0)),this._triggerReconnectSuccessNotify=!0,self.fetch(this._fetchUrl,M).then((function(M){if(A._requestAbort)return A._requestAbort=!1,void(A._status=O);if(M.ok&&M.status>=200&&M.status<=299){if(M.url!==A._fetchUrl&&A._onURLRedirect){console.log("full");var t=A._seekHandler.removeURLParameters(M.url);A._onURLRedirect(t)}var g=M.headers.get("Content-Length");return null!=g&&(A._contentLength=parseInt(g),0!==A._contentLength&&A._onContentLengthKnown&&A._onContentLengthKnown(A._contentLength)),A._triggerReconnectingNotify=!0,A._pump.call(A,M.body.getReader())}A._status=R,A._onError,e.d("fetch-stream: code:"+M.status+"   msg:"+M.statusText),A._callbackFunc({code:M.status,msg:M.statusText});var I=A;e.i(3e3).then((function(){console.log("Reconnecting..."),I.fetchStream()}))})).catch((function(M){if(A._status=R,!A._onError)throw M;A._onError(p,{code:-1,msg:M.message});var t=A;e.i(3e3).then((function(){t.fetchStream()}))}))},I.open=function(A,M){this._dataSource=A,this._range=M;var t=A.url;this._config.reuseRedirectedURL&&null!=A.redirectedURL&&(t=A.redirectedURL);var g=this._seekHandler.getConfig(t,M),I=new self.Headers;if("object"==typeof g.headers){var e=g.headers;for(var i in e)e.hasOwnProperty(i)&&I.append(i,e[i])}var T={method:"GET",headers:I,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};if("object"==typeof this._config.headers)for(var E in this._config.headers)I.append(E,this._config.headers[E]);!1===A.cors&&(T.mode="same-origin"),A.withCredentials&&(T.credentials="include"),A.referrerPolicy&&(T.referrerPolicy=A.referrerPolicy),this._status=F,this._fetchUrl=g.url,this._fetchParam=T,this.fetchStream()},I.abort=function(){this._requestAbort=!0},I._pump=function(A){var M=this;return A.read().then((function(t){if(t.done)if(null!==M._contentLength&&M._receivedLength<M._contentLength){M._status=R;var g=G,I={code:-1,msg:"Fetch stream meet Early-EOF"};if(!M._onError)throw new Y.d(I.msg);M._onError(g,I),null!==M._contentLength&&M._receivedLength===M._contentLength&&M._receivedLength>0?(e.h(!1),M._onComplete(M._range.from,M._range.from+M._receivedLength-1)):M._onComplete(-1,-1)}else M._status=k,M._onComplete&&(null!==M._contentLength&&M._receivedLength===M._contentLength&&M._receivedLength>0?(e.h(!1),M._onComplete(M._range.from,M._range.from+M._receivedLength-1)):M._onComplete(-1,-1));else{if(!0===M._requestAbort)return M._requestAbort=!1,M._status=k,A.cancel();M._status=m;var i=t.value.buffer,T=M._range.from+M._receivedLength;M._receivedLength+=i.byteLength,M._onDataArrival&&M._onDataArrival(i,T,M._receivedLength),M._triggerReconnectSuccessNotify&&(M._triggerReconnectSuccessNotify=!1,M._onDataArrival&&(M._onDataArrival(null,M._retryConnectTimes,0),M._retryConnectTimes++)),M._pump(A)}})).catch((function(A){console.log("fetch-stream-loader:: errCode:"+A.code+"   msg:"+A.message),M._onComplete(-1,-1)}))},g}(H);var v=function(A){var M,t;function g(M,t){var g;return(g=A.call(this,"xhr-moz-chunked-loader")||this).TAG="MozChunkedLoader",g._seekHandler=M,g._config=t,g._needStash=!0,g._xhr=null,g._requestAbort=!1,g._contentLength=null,g._receivedLength=0,g}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.isSupported=function(){try{var A=new XMLHttpRequest;return A.open("GET","https://example.com",!0),A.responseType="moz-chunked-arraybuffer","moz-chunked-arraybuffer"===A.responseType}catch(A){return n.a.w("MozChunkedLoader",A.message),!1}};var I=g.prototype;return I.destroy=function(){this.isWorking()&&this.abort(),this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onloadend=null,this._xhr.onerror=null,this._xhr=null),A.prototype.destroy.call(this)},I.open=function(A,M){this._dataSource=A,this._range=M;var t=A.url;this._config.reuseRedirectedURL&&null!=A.redirectedURL&&(t=A.redirectedURL);var g=this._seekHandler.getConfig(t,M);this._requestURL=g.url;var I=this._xhr=new XMLHttpRequest;if(I.open("GET",g.url,!0),I.responseType="moz-chunked-arraybuffer",I.onreadystatechange=this._onReadyStateChange.bind(this),I.onprogress=this._onProgress.bind(this),I.onloadend=this._onLoadEnd.bind(this),I.onerror=this._onXhrError.bind(this),A.withCredentials&&(I.withCredentials=!0),"object"==typeof g.headers){var e=g.headers;for(var i in e)e.hasOwnProperty(i)&&I.setRequestHeader(i,e[i])}if("object"==typeof this._config.headers){var T=this._config.headers;for(var E in T)T.hasOwnProperty(E)&&I.setRequestHeader(E,T[E])}this._status=F,I.send()},I.abort=function(){this._requestAbort=!0,this._xhr&&this._xhr.abort(),this._status=k},I._onReadyStateChange=function(A){var M=A.target;if(2===M.readyState){if(null!=M.responseURL&&M.responseURL!==this._requestURL&&this._onURLRedirect){var t=this._seekHandler.removeURLParameters(M.responseURL);this._onURLRedirect(t)}if(0!==M.status&&(M.status<200||M.status>299)){if(this._status=R,!this._onError)throw new Y.d("MozChunkedLoader: Http code invalid, "+M.status+" "+M.statusText);this._onError(b,{code:M.status,msg:M.statusText})}else this._status=m}},I._onProgress=function(A){if(this._status!==R){null===this._contentLength&&null!==A.total&&0!==A.total&&(this._contentLength=A.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));var M=A.target.response,t=this._range.from+this._receivedLength;this._receivedLength+=M.byteLength,this._onDataArrival&&this._onDataArrival(M,t,this._receivedLength)}},I._onLoadEnd=function(A){!0!==this._requestAbort?this._status!==R&&(this._status=k,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1)):this._requestAbort=!1},I._onXhrError=function(A){this._status=R;var M=0,t=null;if(this._contentLength&&A.loaded<this._contentLength?(M=G,t={code:-1,msg:"Moz-Chunked stream meet Early-Eof"}):(M=p,t={code:-1,msg:A.constructor.name+" "+A.type}),!this._onError)throw new Y.d(t.msg);this._onError(M,t)},g}(H);function V(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var W=function(A){var M,t;function g(M,t){var g;return(g=A.call(this,"xhr-range-loader")||this).TAG="RangeLoader",g._seekHandler=M,g._config=t,g._needStash=!1,g._chunkSizeKBList=[128,256,384,512,768,1024,1536,2048,3072,4096,5120,6144,7168,8192],g._currentChunkSizeKB=384,g._currentSpeedNormalized=0,g._zeroSpeedChunkCount=0,g._xhr=null,g._speedSampler=new U,g._requestAbort=!1,g._waitForTotalLength=!1,g._totalLengthReceived=!1,g._currentRequestURL=null,g._currentRedirectedURL=null,g._currentRequestRange=null,g._totalLength=null,g._contentLength=null,g._receivedLength=0,g._lastTimeLoaded=0,g}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.isSupported=function(){try{var A=new XMLHttpRequest;return A.open("GET","https://example.com",!0),A.responseType="arraybuffer","arraybuffer"===A.responseType}catch(A){return n.a.w("RangeLoader",A.message),!1}};var I,e,i,T=g.prototype;return T.destroy=function(){this.isWorking()&&this.abort(),this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr=null),A.prototype.destroy.call(this)},T.open=function(A,M){this._dataSource=A,this._range=M,this._status=F;var t=!1;null!=this._dataSource.filesize&&0!==this._dataSource.filesize&&(t=!0,this._totalLength=this._dataSource.filesize),this._totalLengthReceived||t?this._openSubRange():(this._waitForTotalLength=!0,this._internalOpen(this._dataSource,{from:0,to:-1}))},T._openSubRange=function(){var A=1024*this._currentChunkSizeKB,M=this._range.from+this._receivedLength,t=M+A;null!=this._contentLength&&t-this._range.from>=this._contentLength&&(t=this._range.from+this._contentLength-1),this._currentRequestRange={from:M,to:t},this._internalOpen(this._dataSource,this._currentRequestRange)},T._internalOpen=function(A,M){this._lastTimeLoaded=0;var t=A.url;this._config.reuseRedirectedURL&&(null!=this._currentRedirectedURL?t=this._currentRedirectedURL:null!=A.redirectedURL&&(t=A.redirectedURL));var g=this._seekHandler.getConfig(t,M);this._currentRequestURL=g.url;var I=this._xhr=new XMLHttpRequest;if(I.open("GET",g.url,!0),I.responseType="arraybuffer",I.onreadystatechange=this._onReadyStateChange.bind(this),I.onprogress=this._onProgress.bind(this),I.onload=this._onLoad.bind(this),I.onerror=this._onXhrError.bind(this),A.withCredentials&&(I.withCredentials=!0),"object"==typeof g.headers){var e=g.headers;for(var i in e)e.hasOwnProperty(i)&&I.setRequestHeader(i,e[i])}if("object"==typeof this._config.headers){var T=this._config.headers;for(var E in T)T.hasOwnProperty(E)&&I.setRequestHeader(E,T[E])}I.send()},T.abort=function(){this._requestAbort=!0,this._internalAbort(),this._status=k},T._internalAbort=function(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)},T._onReadyStateChange=function(A){var M=A.target;if(2===M.readyState){if(null!=M.responseURL){var t=this._seekHandler.removeURLParameters(M.responseURL);M.responseURL!==this._currentRequestURL&&t!==this._currentRedirectedURL&&(this._currentRedirectedURL=t,this._onURLRedirect&&this._onURLRedirect(t))}if(M.status>=200&&M.status<=299){if(this._waitForTotalLength)return;this._status=m}else{if(this._status=R,!this._onError)throw new Y.d("RangeLoader: Http code invalid, "+M.status+" "+M.statusText);this._onError(b,{code:M.status,msg:M.statusText})}}},T._onProgress=function(A){if(this._status!==R){if(null===this._contentLength){var M=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,M=!0;var t=A.total;this._internalAbort(),null!=t&0!==t&&(this._totalLength=t)}if(-1===this._range.to?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,M)return void this._openSubRange();this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}var g=A.loaded-this._lastTimeLoaded;this._lastTimeLoaded=A.loaded,this._speedSampler.addBytes(g)}},T._normalizeSpeed=function(A){var M=this._chunkSizeKBList,t=M.length-1,g=0,I=0,e=t;if(A<M[0])return M[0];for(;I<=e;){if((g=I+Math.floor((e-I)/2))===t||A>=M[g]&&A<M[g+1])return M[g];M[g]<A?I=g+1:e=g-1}},T._onLoad=function(A){if(this._status!==R)if(this._waitForTotalLength)this._waitForTotalLength=!1;else{this._lastTimeLoaded=0;var M=this._speedSampler.lastSecondKBps;if(0===M&&(this._zeroSpeedChunkCount++,this._zeroSpeedChunkCount>=3&&(M=this._speedSampler.currentKBps)),0!==M){var t=this._normalizeSpeed(M);this._currentSpeedNormalized!==t&&(this._currentSpeedNormalized=t,this._currentChunkSizeKB=t)}var g=A.target.response,I=this._range.from+this._receivedLength;this._receivedLength+=g.byteLength;var e=!1;null!=this._contentLength&&this._receivedLength<this._contentLength?this._openSubRange():e=!0,this._onDataArrival&&this._onDataArrival(g,I,this._receivedLength),e&&(this._status=k,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1))}},T._onXhrError=function(A){this._status=R;var M=0,t=null;if(this._contentLength&&this._receivedLength>0&&this._receivedLength<this._contentLength?(M=G,t={code:-1,msg:"RangeLoader meet Early-Eof"}):(M=p,t={code:-1,msg:A.constructor.name+" "+A.type}),!this._onError)throw new Y.d(t.msg);this._onError(M,t)},I=g,(e=[{key:"currentSpeed",get:function(){return this._speedSampler.lastSecondKBps}}])&&V(I.prototype,e),i&&V(I,i),g}(H);var P=function(A){var M,t;function g(M,t){var g;return(g=A.call(this,"websocket-loader")||this).TAG="WebSocketLoader",g._needStash=!0,g._ws=null,g._requestAbort=!1,g._callbackFunc=t.callbackFunc,g._receivedLength=0,g._retryConnectTimes=0,g._triggerReconnectingNotify=!0,g._triggerReconnectSuccessNotify=!0,g}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.isSupported=function(){try{return void 0!==self.WebSocket}catch(A){return!1}};var I=g.prototype;return I.destroy=function(){this._ws&&this.abort(),A.prototype.destroy.call(this)},I.open=function(A){try{this._retryConnectTimes++,this._triggerReconnectingNotify&&(this._triggerReconnectingNotify=!1,this._onDataArrival&&this._onDataArrival(null,-this._retryConnectTimes,0)),this._triggerReconnectSuccessNotify=!0;var M=this._ws=new self.WebSocket(A.url);M.binaryType="arraybuffer",M.onopen=this._onWebSocketOpen.bind(this),M.onclose=this._onWebSocketClose.bind(this),M.onmessage=this._onWebSocketMessage.bind(this),M.onerror=this._onWebSocketError.bind(this),this._status=F}catch(A){this._status=R;var t={code:A.code,msg:A.message};if(!this._onError)throw new Y.d(t.msg);this._onError(p,t)}},I.abort=function(){var A=this._ws;!A||0!==A.readyState&&1!==A.readyState||(this._requestAbort=!0,A.close()),this._ws=null,this._status=k},I._onWebSocketOpen=function(A){this._status=m},I._onWebSocketClose=function(A){!0!==this._requestAbort?(this._status=k,this._onComplete&&this._onComplete(-1,-1)):this._requestAbort=!1},I._ab2str=function(A,M){var t=new Blob([A]),g=new FileReader;g.readAsText(t,"utf-8"),g.onload=function(){M&&M.call(null,g.result)}},I._onWebSocketMessage=function(A){var M=this,t=this;if(this._ab2str(A.data,(function(A){"Unauthorized"===A&&t._callbackFunc({code:410,msg:"Unauthorized"})})),A.data instanceof ArrayBuffer)this._dispatchArrayBuffer(A.data);else if(A.data instanceof Blob){var g=new FileReader;g.onload=function(){M._dispatchArrayBuffer(g.result)},g.readAsArrayBuffer(A.data)}else{this._status=R;var I={code:-1,msg:"Unsupported WebSocket message type: "+A.data.constructor.name};if(!this._onError)throw new Y.d(I.msg);this._onError(p,I)}},I._dispatchArrayBuffer=function(A){var M=A,t=this._receivedLength;this._receivedLength+=M.byteLength,this._onDataArrival&&this._onDataArrival(M,t,this._receivedLength),this._triggerReconnectSuccessNotify&&(this._triggerReconnectSuccessNotify=!1,this._onDataArrival&&(this._onDataArrival(null,this._retryConnectTimes,0),this._retryConnectTimes++))},I._onWebSocketError=function(A){this._status=R;var M={code:A.code,msg:A.message};if(!this._onError)throw new Y.d(M.msg);this._onError(p,M)},g}(H),Z=function(){function A(A){this._zeroStart=A||!1}var M=A.prototype;return M.getConfig=function(A,M){var t,g={};0!==M.from||-1!==M.to?(t=-1!==M.to?"bytes="+M.from.toString()+"-"+M.to.toString():"bytes="+M.from.toString()+"-",g.Range=t):this._zeroStart&&(g.Range="bytes=0-");return{url:A,headers:g}},M.removeURLParameters=function(A){return A},A}(),K=function(){function A(A,M){this._startName=A,this._endName=M}var M=A.prototype;return M.getConfig=function(A,M){var t=A;if(0!==M.from||-1!==M.to){var g=!0;-1===t.indexOf("?")&&(t+="?",g=!1),g&&(t+="&"),t+=this._startName+"="+M.from.toString(),-1!==M.to&&(t+="&"+this._endName+"="+M.to.toString())}return{url:t,headers:{}}},M.removeURLParameters=function(A){var M=A.split("?")[0],t=void 0,g=A.indexOf("?");-1!==g&&(t=A.substring(g+1));var I="";if(null!=t&&t.length>0)for(var e=t.split("&"),i=0;i<e.length;i++){var T=e[i].split("="),E=i>0;T[0]!==this._startName&&T[0]!==this._endName&&(E&&(I+="&"),I+=e[i])}return 0===I.length?M:M+"?"+I},A}();var q=function(A){var M,t;function g(M,t){var g;return(g=A.call(this,"m3u8-loader")||this).TAG="M3U8Loader",g._needStash=!0,g.url="",g.startPlayTime=0,g._requestAbort=!1,g._receivedLength=0,g._callbackFunc=t.callbackFunc,g.getNextFileFlag=!0,g.pauseDisplay=!1,g.totalDuration=0,g.seeking=!1,g}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.isSupported=function(){return!0};var I=g.prototype;return I.destroy=function(){this.abort(),A.prototype.destroy.call(this)},I.GetM3u8TotalDuration=function(){return this.totalDuration},I.createDownloadWorker=function(){var A;if(!this.downloadWorker)if("undefined"!=typeof Worker)try{A=this.downloadWorker=i(223),this.onwmsg=this.onWorkerMessage.bind(this);var M={cmd:e.u,url:this.url,time:this.startPlayTime};A.postMessage(M),A.addEventListener("message",this.onwmsg),A.onerror=function(A){}}catch(A){console.log("Create download Worker fail: "+A),this.downloadWorker=void 0}else console.log("Unsupport worker...")},I.setStartPlaySecs=function(A){this.startPlayTime=A},I.open=function(A){try{this.url=A.url,this.createDownloadWorker(),this._status=F}catch(A){this._status=R;var M={code:A.code,msg:A.message};if(!this._onError)throw new Y.d(M.msg);this._onError(p,M)}},I.abort=function(){var A={cmd:e.k};this.downloadWorker&&void 0!==this.downloadWorker&&this.downloadWorker.postMessage(A),this._status=k},I._onWebSocketOpen=function(A){this._status=m},I._onWebSocketClose=function(A){!0!==this._requestAbort?(this._status=k,this._onComplete&&this._onComplete(0,this._receivedLength-1)):this._requestAbort=!1},I.seek=function(A,M){this.pauseDisplay=!1;var t={cmd:e.z,type:M,time:A};this.downloadWorker&&void 0!==this.downloadWorker&&(this.downloadWorker.postMessage(t),this.seeking=!0)},I.pause=function(){this.pauseDisplay=!0;var A={cmd:e.v};this.downloadWorker&&void 0!==this.downloadWorker&&this.downloadWorker.postMessage(A)},I.resume=function(){this.pauseDisplay=!1;var A={cmd:e.y};this.downloadWorker&&void 0!==this.downloadWorker&&this.downloadWorker.postMessage(A)},I.onWorkerMessage=function(A){var M=A.data;switch(M.cmd){case e.u:var t={cmd:e.q,t:0};this.downloadWorker.postMessage(t);break;case e.r:this.getNextFileFlag=!0;break;case e.p:this.playComplete=!0;break;case e.n:console.log("disconnect..");t={cmd:e.w};this.downloadWorker.postMessage(t);break;case e.k:M.workerId==e.b?(this.downloadWorker.terminate(),this.downloadWorker=null):M.workerId==e.a?(this.decodeWorker.terminate(),this.decodeWorker=null,this.soundPlayer&&(this.soundPlayer.destroy(),delete this.soundPlayer,this.soundPlayer=null),this.webGLPlayer&&this.webGLPlayer.renderVideoFrame(null,0,0)):M.workerId==e.e&&(this.renderWorker.terminate(),this.renderWorker=null);break;case e.o:if(M.workerId==e.b){var g=M.dat,I=this._receivedLength;this._receivedLength+=g.byteLength,this._onDataArrival&&this._onDataArrival(g,I,this._receivedLength);break}if(M.workerId==e.a){if(this.pauseDisplay)break;1==M.mediaType?(this.canvas.width=M.width,this.canvas.height=M.height,this.webGLPlayer.renderVideoFrame(M.dat,M.width,M.height),this.OnUpdatePlayInfo(M.playTimeSec,M.frameNum)):2==M.mediaType&&(null==this.soundPlayer&&this.OpenAudioPlayer(M.fmt,M.ch,M.samplerate),null!=this.soundPlayer&&this.soundPlayer.play(M.dat))}break;case e.s:this.totalDuration=M.duration,e.h(M.live);break;case e.q:this.pauseDisplay||this.getNextFileFlag&&(this.downloadWorker.postMessage(M),this.getNextFileFlag=!1);break;case e.z:this.seeking=!1;break;case 410:this._callbackFunc(M);break;case e.x:this._onDataArrival&&(this._receivedLength=0,this._onDataArrival(null,M.fileSequence,0))}},I._dispatchArrayBuffer=function(A){var M=A,t=this._receivedLength;this._receivedLength+=M.byteLength,this._onDataArrival&&this._onDataArrival(M,t,this._receivedLength)},I._onWebSocketError=function(A){this._status=R;var M={code:A.code,msg:A.message};if(!this._onError)throw new Y.d(M.msg);this._onError(p,M)},g}(H);function _(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var $=function(){function A(A,M,t,g){this.TAG="IOController",this._config=M,this._extraData=t,this._stashInitialSize=393216,null!=M.stashInitialSize&&M.stashInitialSize>0&&(this._stashInitialSize=M.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=3145728,this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,!1===M.enableStashBuffer&&(this._enableStash=!1),"soft"===M.decodeType&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=A,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(A.url),this._refTotalLength=A.filesize?A.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new U,this._speedNormalizeList=[64,128,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader(g)}var M,t,g,I=A.prototype;return I.destroy=function(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null},I.isWorking=function(){return this._loader&&this._loader.isWorking()&&!this._paused},I.isPaused=function(){return this._paused},I._selectSeekHandler=function(){var A=this._config;if("range"===A.seekType)this._seekHandler=new Z(this._config.rangeLoadZeroStart);else if("param"===A.seekType){var M=A.seekParamStart||"bstart",t=A.seekParamEnd||"bend";this._seekHandler=new K(M,t)}else{if("custom"!==A.seekType)throw new Y.b("Invalid seekType in config: "+A.seekType);if("function"!=typeof A.customSeekHandler)throw new Y.b("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new A.customSeekHandler}},I._selectLoader=function(){if(null!=this._config.customLoader)this._loaderClass=this._config.customLoader;else if("m3u8"===this._config.streamType)this._loaderClass=q;else if(this._isWebSocketURL)this._loaderClass=P;else if(X.isSupported())this._loaderClass=X;else if(v.isSupported())this._loaderClass=v;else{if(!W.isSupported())throw new Y.d("Your browser doesn't support xhr with arraybuffer responseType!");this._loaderClass=W}},I._IsM3u8Loader=function(){return this._loaderClass==q},I._GetM3u8Loader=function(){return this._loaderClass==q?this._loader:null},I._createLoader=function(A){this._loader=new this._loaderClass(this._seekHandler,this._config),!1===this._loader.needStashBuffer&&(this._enableStash=!1),this._loaderClass==q&&this._loader.setStartPlaySecs(A),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)},I.open=function(A){this._currentRange={from:0,to:-1},A&&(this._currentRange.from=A),this._speedSampler.reset(),A||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))},I.abort=function(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)},I.pause=function(){this.isWorking()&&(this._loader.abort(),0!==this._stashUsed?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)},I.resume=function(){if(this._paused){this._paused=!1;var A=this._resumeFrom;this._resumeFrom=0,this._internalSeek(A,!0)}},I.seek=function(A){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(A,!0)},I._internalSeek=function(A,M){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(M),this._loader.destroy(),this._loader=null;var t={from:A,to:-1};this._currentRange={from:t.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,t),this._onSeeked&&this._onSeeked()},I.updateUrl=function(A){if(!A||"string"!=typeof A||0===A.length)throw new Y.b("Url must be a non-empty string!");this._dataSource.url=A},I._expandBuffer=function(A){for(var M=this._stashSize;M+1048576<A;)M*=2;if((M+=1048576)!==this._bufferSize){var t=new ArrayBuffer(M);if(this._stashUsed>0){var g=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(t,0,M).set(g,0)}this._stashBuffer=t,this._bufferSize=M}},I._normalizeSpeed=function(A){var M=this._speedNormalizeList,t=M.length-1,g=0,I=0,e=t;if(A<M[0])return M[0];for(;I<=e;){if((g=I+Math.floor((e-I)/2))===t||A>=M[g]&&A<M[g+1])return M[g];M[g]<A?I=g+1:e=g-1}},I._adjustStashSize=function(A){var M=0;(M=this._config.isLive||A<512?A:A>=512&&A<=1024?Math.floor(1.5*A):2*A)>8192&&(M=8192);var t=1024*M+1048576;this._bufferSize<t&&this._expandBuffer(t),this._stashSize=1024*M},I._dispatchChunks=function(A,M){return null===A?this._IsM3u8Loader()?void(M>1&&this._onComplete&&this._onComplete(-1)):this._onDataArrival(A,M):(this._currentRange.to=M+A.byteLength-1,this._onDataArrival(A,M))},I._onURLRedirect=function(A){this._redirectedURL=A,this._onRedirect&&this._onRedirect(A)},I._onContentLengthKnown=function(A){A&&this._fullRequestFlag&&(this._totalLength=A,this._fullRequestFlag=!1)},I._onLoaderChunkArrival=function(A,M,t){if(!this._onDataArrival)throw new Y.a("IOController: No existing consumer (onDataArrival) callback!");if(!this._paused)if(this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,this._onRecoveredEarlyEof&&this._onRecoveredEarlyEof()),null===A&&t<1)this._dispatchChunks(A,M);else{this._speedSampler.addBytes(A.byteLength);var g=this._speedSampler.lastSecondKBps;if(0!==g){var I=this._normalizeSpeed(g);this._speedNormalized!==I&&(this._speedNormalized=I,this._adjustStashSize(I))}if(this._enableStash)if(0===this._stashUsed&&0===this._stashByteStart&&(this._stashByteStart=M),this._stashUsed+A.byteLength<=this._stashSize){new Uint8Array(this._stashBuffer,0,this._stashSize).set(new Uint8Array(A),this._stashUsed),this._stashUsed+=A.byteLength}else{var e=new Uint8Array(this._stashBuffer,0,this._bufferSize);if(this._stashUsed>0){var i=this._stashBuffer.slice(0,this._stashUsed),T=this._dispatchChunks(i,this._stashByteStart);if(T<i.byteLength){if(T>0){var E=new Uint8Array(i,T);e.set(E,0),this._stashUsed=E.byteLength,this._stashByteStart+=T}}else this._stashUsed=0,this._stashByteStart+=T;this._stashUsed+A.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+A.byteLength),e=new Uint8Array(this._stashBuffer,0,this._bufferSize)),e.set(new Uint8Array(A),this._stashUsed),this._stashUsed+=A.byteLength}else{var N=this._dispatchChunks(A,M);if(N<A.byteLength){var n=A.byteLength-N;n>this._bufferSize&&(this._expandBuffer(n),e=new Uint8Array(this._stashBuffer,0,this._bufferSize)),e.set(new Uint8Array(A,N),0),this._stashUsed+=n,this._stashByteStart=M+N}}}else if(0===this._stashUsed){var D=this._dispatchChunks(A,M);if(D<A.byteLength){var C=A.byteLength-D;C>this._bufferSize&&this._expandBuffer(C),new Uint8Array(this._stashBuffer,0,this._bufferSize).set(new Uint8Array(A,D),0),this._stashUsed+=C,this._stashByteStart=M+D}}else{this._stashUsed+A.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+A.byteLength);var r=new Uint8Array(this._stashBuffer,0,this._bufferSize);r.set(new Uint8Array(A),this._stashUsed),this._stashUsed+=A.byteLength;var c=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart);if(c<this._stashUsed&&c>0){var o=new Uint8Array(this._stashBuffer,c);r.set(o,0)}this._stashUsed-=c,this._stashByteStart+=c}}},I._flushStashBuffer=function(A){if(this._stashUsed>0){var M=this._stashBuffer.slice(0,this._stashUsed),t=this._dispatchChunks(M,this._stashByteStart),g=M.byteLength-t;if(t<M.byteLength){if(!A){if(t>0){var I=new Uint8Array(this._stashBuffer,0,this._bufferSize),e=new Uint8Array(M,t);I.set(e,0),this._stashUsed=e.byteLength,this._stashByteStart+=t}return 0}n.a.w(this.TAG,g+" bytes unconsumed data remain when flush buffer, dropped")}return this._stashUsed=0,this._stashByteStart=0,g}return 0},I._onLoaderComplete=function(A,M){this._flushStashBuffer(!0),A!=M||-1!=M?this._onComplete&&this._onComplete(this._extraData):this._onComplete&&this._onComplete(-1)},I._onLoaderError=function(A,M){switch(n.a.e(this.TAG,"Loader error, code = "+M.code+", msg = "+M.msg),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,A=J),A){case G:if(!this._config.isLive&&this._totalLength){var t=this._currentRange.to+1;return void(t<this._totalLength&&(n.a.w(this.TAG,"Connection lost, trying reconnect..."),this._isEarlyEofReconnecting=!0,this._internalSeek(t,!1)))}A=J}if(!this._onError)throw new Y.d("IOException: "+M.msg);this._onError(A,M)},M=A,(t=[{key:"status",get:function(){return this._loader.status}},{key:"extraData",get:function(){return this._extraData},set:function(A){this._extraData=A}},{key:"onDataArrival",get:function(){return this._onDataArrival},set:function(A){this._onDataArrival=A}},{key:"onSeeked",get:function(){return this._onSeeked},set:function(A){this._onSeeked=A}},{key:"onError",get:function(){return this._onError},set:function(A){this._onError=A}},{key:"onComplete",get:function(){return this._onComplete},set:function(A){this._onComplete=A}},{key:"onRedirect",get:function(){return this._onRedirect},set:function(A){this._onRedirect=A}},{key:"onRecoveredEarlyEof",get:function(){return this._onRecoveredEarlyEof},set:function(A){this._onRecoveredEarlyEof=A}},{key:"currentURL",get:function(){return this._dataSource.url}},{key:"hasRedirect",get:function(){return null!=this._redirectedURL||null!=this._dataSource.redirectedURL}},{key:"currentRedirectedURL",get:function(){return this._redirectedURL||this._dataSource.redirectedURL}},{key:"currentSpeed",get:function(){return this._loaderClass===W?this._loader.currentSpeed:this._speedSampler.lastSecondKBps}},{key:"averageKBps",get:function(){return this._speedSampler.averageKBps}},{key:"loaderType",get:function(){return this._loader.type}}])&&_(M.prototype,t),g&&_(M,g),A}(),AA={IO_ERROR:"io_error",DEMUX_ERROR:"demux_error",INIT_SEGMENT:"init_segment",MEDIA_SEGMENT:"media_segment",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",METADATA_ARRIVED:"metadata_arrived",SCRIPTDATA_ARRIVED:"scriptdata_arrived",STATISTICS_INFO:"statistics_info",RECOMMEND_SEEKPOINT:"recommend_seekpoint",RECONNECT_ING:"reconnect_ing",RECONNECT_SUCCESS:"reconnect_success"},MA=t(58),tA=function(){function A(A,M){this.TAG="TransmuxingController",this._emitter=new N.a,this._config=M,A.segments||(A.segments=[{duration:A.duration,filesize:A.filesize,url:A.url}]),"boolean"!=typeof A.cors&&(A.cors=!0),"boolean"!=typeof A.withCredentials&&(A.withCredentials=!1),this._mediaDataSource=A,this._currentSegmentIndex=0;var t=0;this._mediaDataSource.segments.forEach((function(g){g.timestampBase=t,t+=g.duration,g.cors=A.cors,g.withCredentials=A.withCredentials,M.referrerPolicy&&(g.referrerPolicy=M.referrerPolicy)})),isNaN(t)||this._mediaDataSource.duration===t||(this._mediaDataSource.duration=t),this._mediaInfo=null,this._demuxer=null,this._remuxer=null,this._ioctl=null,this._pendingSeekTime=null,this._pendingResolveSeekPoint=null,this._statisticsReporter=null,this._callbackMediaData=null,this._callbackUserPtr=null,this._isM3u8=!1,this._reconnectTimes=0}var M=A.prototype;return M.destroy=function(){this._mediaInfo=null,this._mediaDataSource=null,this._statisticsReporter&&this._disableStatisticsReporter(),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null),this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&(this._remuxer.destroy(),this._remuxer=null),this._emitter.removeAllListeners(),this._emitter=null},M.on=function(A,M){this._emitter.addListener(A,M)},M.off=function(A,M){this._emitter.removeListener(A,M)},M.setMediaSourceCallback=function(A,M){this._callbackMediaData=A,this._callbackUserPtr=M},M.start=function(){this._loadSegment(0),this._enableStatisticsReporter()},M._loadSegment=function(A,M){this._currentSegmentIndex=A;var t=this._mediaDataSource.segments[A],g=this._ioctl=new $(t,this._config,A,this._mediaDataSource.startPlaySecs);g.onError=this._onIOException.bind(this),g.onSeeked=this._onIOSeeked.bind(this),g.onComplete=this._onIOComplete.bind(this),g.onRedirect=this._onIORedirect.bind(this),g.onRecoveredEarlyEof=this._onIORecoveredEarlyEof.bind(this),M?this._demuxer.bindDataSource(this._ioctl):g.onDataArrival=this._onInitChunkArrival.bind(this),g.open(M),this._isM3u8=g._IsM3u8Loader()},M.stop=function(){this._internalAbort(),this._disableStatisticsReporter()},M._internalAbort=function(){this._ioctl&&(this._ioctl.destroy(),this._ioctl=null)},M.pauseOrResume=function(A){null!=this._demuxer&&(this._isM3u8||(A?this._demuxer.pause():(this._remuxer.seek(0),this._demuxer.resume())))},M.pause=function(){this._ioctl&&this._ioctl.isWorking()&&(this._ioctl.pause(),this._disableStatisticsReporter())},M.resume=function(){this._ioctl&&this._ioctl.isPaused()&&(this._ioctl.resume(),this._enableStatisticsReporter())},M.changeSpeed=function(A){this._remuxer&&this._remuxer.changeSpeed(A)},M.seekToSecs=function(A,M){var t=this._ioctl._GetM3u8Loader();t&&(t.seek(A,M),this._demuxer&&this._demuxer.resetMediaPts(1)),this._remuxer&&this._remuxer.seek(0),t&&this._demuxer&&this._demuxer.resetMediaPts(0)},M.seek=function(A){if(null!=this._mediaInfo&&this._mediaInfo.isSeekable()){var M=this._searchSegmentIndexContains(A);if(M===this._currentSegmentIndex){var t=this._mediaInfo.segments[M];if(null==t)this._pendingSeekTime=A;else{var g=t.getNearestKeyframe(A);this._remuxer.seek(g.milliseconds),this._ioctl.seek(g.fileposition),this._pendingResolveSeekPoint=g.milliseconds}}else{var I=this._mediaInfo.segments[M];if(null==I)this._pendingSeekTime=A,this._internalAbort(),this._remuxer.seek(),this._remuxer.insertDiscontinuity(),this._loadSegment(M);else{var e=I.getNearestKeyframe(A);this._internalAbort(),this._remuxer.seek(A),this._remuxer.insertDiscontinuity(),this._demuxer.resetMediaInfo(),this._demuxer.timestampBase=this._mediaDataSource.segments[M].timestampBase,this._loadSegment(M,e.fileposition),this._pendingResolveSeekPoint=e.milliseconds,this._reportSegmentMediaInfo(M)}}this._enableStatisticsReporter()}},M._searchSegmentIndexContains=function(A){for(var M=this._mediaDataSource.segments,t=M.length-1,g=0;g<M.length;g++)if(A<M[g].timestampBase){t=g-1;break}return t},M._onInitChunkArrival=function(A,M){var t=this;if(this._isM3u8){if(null==A&&M<0)return void this._emitter.emit(AA.RECONNECT_ING,M);if(null==A&&M>0)return;var g=0;if(M>0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,this._demuxer.append(A,M,0),g=A.length;else{this._demuxer=new MA.a(this._config,this._callbackMediaData,this._callbackUserPtr),this._remuxer||(this._remuxer=new S(this._config));var I=this._mediaDataSource;null==I.duration||isNaN(I.duration)||(this._demuxer.overridedDuration=I.duration),"boolean"==typeof I.hasAudio&&(this._demuxer.overridedHasAudio=I.hasAudio),"boolean"==typeof I.hasVideo&&(this._demuxer.overridedHasVideo=I.hasVideo),this._demuxer.timestampBase=I.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onMetaDataArrived=this._onMetaDataArrived.bind(this),this._demuxer.onScriptDataArrived=this._onScriptDataArrived.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this),this._demuxer.append(A,M,0),g=A.length}return g}var e=null,i=0;if(null==A&&M<0)this._emitter.emit(AA.RECONNECT_ING,M);else if(!(null==A&&M>0)){if(M>0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,i=this._demuxer.parseChunks(A,M);else if((e=a.a.probe(A)).match){this._demuxer=new a.a(e,this._config,this._callbackMediaData,this._callbackUserPtr),this._remuxer||(this._remuxer=new S(this._config));var T=this._mediaDataSource;null==T.duration||isNaN(T.duration)||(this._demuxer.overridedDuration=T.duration),"boolean"==typeof T.hasAudio&&(this._demuxer.overridedHasAudio=T.hasAudio),"boolean"==typeof T.hasVideo&&(this._demuxer.overridedHasVideo=T.hasVideo),this._demuxer.timestampBase=T.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onMetaDataArrived=this._onMetaDataArrived.bind(this),this._demuxer.onScriptDataArrived=this._onScriptDataArrived.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this),i=this._demuxer.parseChunks(A,M),this._reconnectTimes++,this._reconnectTimes>0&&this._emitter.emit(AA.RECONNECT_SUCCESS,this._reconnectTimes)}else e=null,n.a.e(this.TAG,"Non-FLV, Unsupported media type!"),Promise.resolve().then((function(){t._internalAbort()})),this._emitter.emit(AA.DEMUX_ERROR,l.a.FORMAT_UNSUPPORTED,"Non-FLV, Unsupported media type"),i=0;return i}},M._GetM3u8Loader=function(){if(null==this._ioctl)return null;var A=this._ioctl._GetM3u8Loader();return A||null},M._GetM3u8TotalDuration=function(){if(null==this._ioctl)return 0;var A=this._ioctl._GetM3u8Loader();return A?A.GetM3u8TotalDuration():0},M._onMediaInfo=function(A){var M=this;null==this._mediaInfo&&(this._mediaInfo=Object.assign({},A),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,Q.a.prototype));var t=Object.assign({},A);Object.setPrototypeOf(t,Q.a.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=t,this._reportSegmentMediaInfo(this._currentSegmentIndex),null!=this._pendingSeekTime&&Promise.resolve().then((function(){var A=M._pendingSeekTime;M._pendingSeekTime=null,M.seek(A)}))},M._onMetaDataArrived=function(A){this._emitter.emit(AA.METADATA_ARRIVED,A)},M._onScriptDataArrived=function(A){this._emitter.emit(AA.SCRIPTDATA_ARRIVED,A)},M._onIOSeeked=function(){this._remuxer.insertDiscontinuity()},M._onIOComplete=function(A){var M=A+1;if(this._ioctl&&this._ioctl._IsM3u8Loader()){this._ioctl._GetM3u8Loader();e.c()&&(console.log("M3u8: Reconnect Success"),this._emitter.emit(AA.RECONNECT_SUCCESS,2),this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&(this._remuxer.destroy(),this._remuxer=null),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null),this.start())}else if(M<this._mediaDataSource.segments.length){if(this._internalAbort(),this._remuxer&&this._remuxer.flushStashedSamples(),-1===A){this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&(this._remuxer.destroy(),this._remuxer=null),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null);var t=this;e.i(3e3).then((function(){t.start()}))}}else if(this._remuxer&&(this._remuxer.flushStashedSamples(),this._emitter.emit(AA.LOADING_COMPLETE),this._disableStatisticsReporter()),-1===A){this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&(this._remuxer.destroy(),this._remuxer=null),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null);var g=this;e.i(3e3).then((function(){g.start()}))}},M._onIORedirect=function(A){var M=this._ioctl.extraData;this._mediaDataSource.segments[M].redirectedURL=A},M._onIORecoveredEarlyEof=function(){this._emitter.emit(AA.RECOVERED_EARLY_EOF)},M._onIOException=function(A,M){n.a.e(this.TAG,"IOException: type = "+A+", code = "+M.code+", msg = "+M.msg),this._emitter.emit(AA.IO_ERROR,A,M),this._disableStatisticsReporter()},M._onDemuxException=function(A,M){n.a.e(this.TAG,"DemuxException: type = "+A+", info = "+M),this._emitter.emit(AA.DEMUX_ERROR,A,M)},M._onRemuxerInitSegmentArrival=function(A,M){this._emitter.emit(AA.INIT_SEGMENT,A,M)},M._onRemuxerMediaSegmentArrival=function(A,M){if(null==this._pendingSeekTime&&(this._emitter.emit(AA.MEDIA_SEGMENT,A,M),null!=this._pendingResolveSeekPoint&&"video"===A)){var t=M.info.syncPoints,g=this._pendingResolveSeekPoint;this._pendingResolveSeekPoint=null,C.safari&&t.length>0&&t[0].originalDts===g&&(g=t[0].pts),this._emitter.emit(AA.RECOMMEND_SEEKPOINT,g)}},M._enableStatisticsReporter=function(){null==this._statisticsReporter&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))},M._disableStatisticsReporter=function(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)},M._reportSegmentMediaInfo=function(A){var M=this._mediaInfo.segments[A],t=Object.assign({},M);t.duration=this._mediaInfo.duration,t.segmentCount=this._mediaInfo.segmentCount,delete t.segments,delete t.keyframesIndex,this._emitter.emit(AA.MEDIA_INFO,t)},M._reportStatisticsInfo=function(){var A={};null!=this._ioctl&&(A.url=this._ioctl.currentURL,A.hasRedirect=this._ioctl.hasRedirect,A.hasRedirect&&(A.redirectedURL=this._ioctl.currentRedirectedURL),A.speed=this._ioctl.currentSpeed,A.loaderType=this._ioctl.loaderType,A.currentSegmentIndex=this._currentSegmentIndex,A.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(AA.STATISTICS_INFO,A))},A}(),gA=function(){function A(){}return A.install=function(){Object.setPrototypeOf=Object.setPrototypeOf||function(A,M){return A.__proto__=M,A},Object.assign=Object.assign||function(A){if(null==A)throw new TypeError("Cannot convert undefined or null to object");for(var M=Object(A),t=1;t<arguments.length;t++){var g=arguments[t];if(null!=g)for(var I in g)g.hasOwnProperty(I)&&(M[I]=g[I])}return M},"function"!=typeof self.Promise&&t(114).polyfill()},A}();gA.install();var IA=gA,eA=function(A){var M=null,t=function(M,t){A.postMessage({msg:"logcat_callback",data:{type:M,logcat:t}})}.bind(this);function g(M,t){var g={msg:AA.INIT_SEGMENT,data:{type:M,data:t}};A.postMessage(g,[t.data])}function I(M,t){var g={msg:AA.MEDIA_SEGMENT,data:{type:M,data:t}};A.postMessage(g,[t.data])}function e(){var M={msg:AA.LOADING_COMPLETE};A.postMessage(M)}function i(){var M={msg:AA.RECOVERED_EARLY_EOF};A.postMessage(M)}function T(M){var t={msg:AA.MEDIA_INFO,data:M};A.postMessage(t)}function E(M){var t={msg:AA.METADATA_ARRIVED,data:M};A.postMessage(t)}function N(M){var t={msg:AA.SCRIPTDATA_ARRIVED,data:M};A.postMessage(t)}function n(M){var t={msg:AA.STATISTICS_INFO,data:M};A.postMessage(t)}function D(M,t){A.postMessage({msg:AA.IO_ERROR,data:{type:M,info:t}})}function C(M,t){A.postMessage({msg:AA.DEMUX_ERROR,data:{type:M,info:t}})}function r(M){A.postMessage({msg:AA.RECOMMEND_SEEKPOINT,data:M})}IA.install(),A.addEventListener("message",(function(c){switch(c.data.cmd){case"init":(M=new tA(c.data.param[0],c.data.param[1])).on(AA.IO_ERROR,D.bind(this)),M.on(AA.DEMUX_ERROR,C.bind(this)),M.on(AA.INIT_SEGMENT,g.bind(this)),M.on(AA.MEDIA_SEGMENT,I.bind(this)),M.on(AA.LOADING_COMPLETE,e.bind(this)),M.on(AA.RECOVERED_EARLY_EOF,i.bind(this)),M.on(AA.MEDIA_INFO,T.bind(this)),M.on(AA.METADATA_ARRIVED,E.bind(this)),M.on(AA.SCRIPTDATA_ARRIVED,N.bind(this)),M.on(AA.STATISTICS_INFO,n.bind(this)),M.on(AA.RECOMMEND_SEEKPOINT,r.bind(this));break;case"destroy":M&&(M.destroy(),M=null),A.postMessage({msg:"destroyed"});break;case"start":M.start();break;case"stop":M.stop();break;case"seek":M.seek(c.data.param);break;case"pause":M.pause();break;case"resume":M.resume();break;case"logging_config":var o=c.data.param;B.applyConfig(o),!0===o.enableCallback?B.addLogListener(t):B.removeLogListener(t)}}))},iA={ERROR:"error",SOURCE_OPEN:"source_open",UPDATE_END:"update_end",BUFFER_FULL:"buffer_full",CB_PLAY_INFO:"play_info",CHANGE_SPEED:"change_speed"},TA=function(){function A(A,M,g,I,e){this.TAG="Transmuxer",this._emitter=new N.a,this._config=M,this.soundPlayer=null,this._webGLPlayer=null,this._mediaCanvas=g,this.pauseDisplay=!1,this.enableAudio=!1,this.audioFmt=0,this.audioSamplerate=0,this.audioChannelNum=2,this.initAudioPlayer=!1,this.totalDuration=0,this.initDuration=0,this.currentPlayTime=0,"m3u8"===A.type&&(this.currentPlayTime=A.startPlaySecs);var i=navigator.userAgent;this.isAndroid=i.indexOf("Android")>-1||i.indexOf("Adr")>-1,this.isiOS=!!i.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),this.isiPad=!1;var T=navigator.userAgent;if(("iPad"==T.match(/iPad/i)||T.indexOf("Macintosh;")>-1&&T.indexOf("AppleWebKit/"))&&(this.isiPad=!0),this._callbackUserPtr=I,this._callbackWasmTypePtr=e,M.enableWorker&&"undefined"!=typeof Worker)try{var E=t(115);this._worker=E(eA),this._workerDestroying=!1,this._worker.addEventListener("message",this._onWorkerMessage.bind(this)),this._worker.postMessage({cmd:"init",param:[A,M]}),this.e={onLoggingConfigChanged:this._onLoggingConfigChanged.bind(this)},B.registerListener(this.e.onLoggingConfigChanged),this._worker.postMessage({cmd:"logging_config",param:B.getConfig()})}catch(t){n.a.e(this.TAG,"Error while initialize transmuxing worker, fallback to inline transmuxing"),this._worker=null,this._controller=new tA(A,M)}else this._controller=new tA(A,M);if(this._controller){var D=this._controller;D.on(AA.IO_ERROR,this._onIOError.bind(this)),D.on(AA.DEMUX_ERROR,this._onDemuxError.bind(this)),D.on(AA.INIT_SEGMENT,this._onInitSegment.bind(this)),D.on(AA.MEDIA_SEGMENT,this._onMediaSegment.bind(this)),D.on(AA.LOADING_COMPLETE,this._onLoadingComplete.bind(this)),D.on(AA.RECOVERED_EARLY_EOF,this._onRecoveredEarlyEof.bind(this)),D.on(AA.MEDIA_INFO,this._onMediaInfo.bind(this)),D.on(AA.METADATA_ARRIVED,this._onMetaDataArrived.bind(this)),D.on(AA.SCRIPTDATA_ARRIVED,this._onScriptDataArrived.bind(this)),D.on(AA.STATISTICS_INFO,this._onStatisticsInfo.bind(this)),D.on(AA.RECOMMEND_SEEKPOINT,this._onRecommendSeekpoint.bind(this)),D.on(AA.RECONNECT_ING,this._onReconnecting.bind(this)),D.on(AA.RECONNECT_SUCCESS,this._onReconnectSuccess.bind(this))}}var M=A.prototype;return M.destroy=function(){this._worker?this._workerDestroying||(this._workerDestroying=!0,this._worker.postMessage({cmd:"destroy"}),B.removeListener(this.e.onLoggingConfigChanged),this.e=null):(this._controller.destroy(),this._controller=null),this._emitter.removeAllListeners(),this._emitter=null,this.soundPlayer&&(this.soundPlayer.destroy(),delete this.soundPlayer,this.soundPlayer=null)},M.on=function(A,M){this._emitter.addListener(A,M)},M.off=function(A,M){this._emitter.removeListener(A,M)},M.hasWorker=function(){return null!=this._worker},M.OpenAudioPlayer=function(A,M,t){if(null==this.soundPlayer){1;var g="16bitInt";g="16bitInt",this.soundPlayer=new T.a,this.soundPlayer.init({encoding:g,channels:M,sampleRate:t,flushingTime:1e3}),this.initAudioPlayer=!0}},M.createDecodeWorker=function(){var A;if(this.decodeWorker=null,"undefined"!=typeof Worker)try{A=this.decodeWorker=i(60),this.onwmsg=this.onWorkerMessage.bind(this);var M={cmd:e.u,url:e.f(),isFlv:!this._controller._isM3u8};A.postMessage(M),A.addEventListener("message",this.onwmsg),A.onerror=function(A){}}catch(A){console.log("Create Decode Worker fail: "+A),this.w=void 0}else this.decodeWorker=null;this.decodeWorker&&null==this._webGLPlayer&&(this._webGLPlayer=new I(this._mediaCanvas),this._webGLPlayer.initGL({preserveDrawingBuffer:!1}))},M.getCurrentPlayTime=function(){return this.currentPlayTime},M.getTotalDuration=function(){return this._controller?this._controller._GetM3u8TotalDuration():this.totalDuration},M._onMediaDataCallback=function(A,M,t,g,I,i,T,E,N,n){if(g<1&&!M&&1===T)console.log("_onMediaDataCallback...  Exception...");else if(M){null==A.decodeWorker&&(A.createDecodeWorker(),A._callbackWasmTypePtr&&A._callbackWasmTypePtr(A._callbackUserPtr,!0));var D=new Uint8Array(i);if(A.decodeWorker){var C={cmd:e.o,mediaType:t,codecId:g,frameType:I,samplerate:E,channelNum:N,bitPerSample:n,playTimeSec:E,dat:D};A.decodeWorker.postMessage(C,[C.dat.buffer])}}else A._callbackWasmTypePtr&&A._callbackWasmTypePtr(A._callbackUserPtr,!1)},M.onWorkerMessage=function(A){var M=A.data;switch(M.cmd){case e.n:var t={cmd:e.w};this.downloadWorker.postMessage(t);break;case e.k:M.workerId==e.b?(this.downloadWorker.terminate(),this.downloadWorker=null):M.workerId==e.a?(this.decodeWorker.terminate(),this.decodeWorker=null,this.soundPlayer&&(this.soundPlayer.destroy(),delete this.soundPlayer,this.soundPlayer=null),this._webGLPlayer&&this._webGLPlayer.renderVideoFrame(null,0,0)):M.workerId==e.e&&(this.renderWorker.terminate(),this.renderWorker=null);break;case e.m:this.enableAudio&&this.openAudio();break;case e.o:if(M.workerId==e.b)this.decodeWorker;else if(M.workerId==e.a){if(this.pauseDisplay)break;if(1==M.mediaType){if(this._mediaCanvas.width=M.width,this._mediaCanvas.height=M.height,M.playTimeSec>0){var g=Math.floor((M.playTimeSec+1e3)/1e3);this.currentPlayTime!==g&&(this.initDuration>0&&(this.currentPlayTime+=g-this.initDuration),this.initDuration!==g&&(this.initDuration=g,this._emitter&&this._emitter.emit(iA.CB_PLAY_INFO)))}this._webGLPlayer.renderVideoFrame(M.dat,M.width,M.height)}else 2==M.mediaType&&(null==this.soundPlayer&&(null!=this.soundPlayer||this.isiOS||this.isiPad?(this.audioFmt=M.fmt,this.audioSamplerate=M.samplerate,this.audioChannelNum=M.ch,44100==this.audioSamplerate&&(this.audioFmt=1)):this.OpenAudioPlayer(M.fmt,M.samplerate>=16e3?2:M.ch,M.samplerate)),this.enableAudio&&this.soundPlayer&&this.initAudioPlayer&&this.soundPlayer.play(M.dat))}break;case e.l:this.avQueue.length>0&&this.pauseDisplay}},M.openAudio=function(){var A={cmd:e.t};if(this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(A),this.enableAudio=!0,null==this.soundPlayer&&(this.isiOS||this.isiPad)){if(!(this.audioSamplerate>0))return!1;this.OpenAudioPlayer(this.audioFmt,this.audioSamplerate>=16e3?2:this.audioChannelNum,this.audioSamplerate)}return!0},M.closeAudio=function(){var A={cmd:e.j};return this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(A),this.soundPlayer&&this.initAudioPlayer&&this.soundPlayer.clearAudioBuffer(),this.enableAudio=!1,!0},M.open=function(){this._worker?this._worker.postMessage({cmd:"start"}):(this._controller.setMediaSourceCallback(this._onMediaDataCallback,this),this._controller.start())},M.close=function(){var A={cmd:e.k};this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(A),this._webGLPlayer&&this._webGLPlayer.renderVideoFrame(null,0,0),this._worker?this._worker.postMessage({cmd:"stop"}):this._controller.stop()},M.changeSpeed=function(A){this._controller&&this._controller.changeSpeed(A)},M.seekToSecs=function(A,M){var t={cmd:e.z,type:M,time:A};this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(t),this._controller.seekToSecs(A,M)},M.seek=function(A){this._worker?this._worker.postMessage({cmd:"seek",param:A}):this._controller.seek(A)},M.isPaused=function(){return this.pauseDisplay},M.pause=function(){this.pauseDisplay=!0;var A={cmd:e.v};if(this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(A),this._controller){var M=this._controller._GetM3u8Loader();M?M.pause():this._controller.pauseOrResume(!0)}this._worker&&this._worker.postMessage({cmd:"pause"})},M.resume=function(){this.pauseDisplay=!1;var A={cmd:e.y};if(this.decodeWorker&&void 0!==this.decodeWorker&&this.decodeWorker.postMessage(A),this._controller){var M=this._controller._GetM3u8Loader();M?M.resume():this._controller.pauseOrResume(!1)}this._worker?this._worker.postMessage({cmd:"resume"}):this._controller.resume()},M._onReconnecting=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.RECONNECT_ING,A)}))},M._onReconnectSuccess=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.RECONNECT_SUCCESS,A)}))},M._onInitSegment=function(A,M){var t=this;Promise.resolve().then((function(){t._emitter.emit(AA.INIT_SEGMENT,A,M)}))},M._onMediaSegment=function(A,M){var t=this;Promise.resolve().then((function(){t._emitter.emit(AA.MEDIA_SEGMENT,A,M)}))},M._onLoadingComplete=function(){var A=this;Promise.resolve().then((function(){A._emitter.emit(AA.LOADING_COMPLETE)}))},M._onRecoveredEarlyEof=function(){var A=this;Promise.resolve().then((function(){A._emitter.emit(AA.RECOVERED_EARLY_EOF)}))},M._onMediaInfo=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.MEDIA_INFO,A)}))},M._onMetaDataArrived=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.METADATA_ARRIVED,A)}))},M._onScriptDataArrived=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.SCRIPTDATA_ARRIVED,A)}))},M._onStatisticsInfo=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.STATISTICS_INFO,A)}))},M._onIOError=function(A,M){var t=this;Promise.resolve().then((function(){t._emitter.emit(AA.IO_ERROR,A,M)}))},M._onDemuxError=function(A,M){var t=this;Promise.resolve().then((function(){t._emitter.emit(AA.DEMUX_ERROR,A,M)}))},M._onRecommendSeekpoint=function(A){var M=this;Promise.resolve().then((function(){M._emitter.emit(AA.RECOMMEND_SEEKPOINT,A)}))},M._onLoggingConfigChanged=function(A){this._worker&&this._worker.postMessage({cmd:"logging_config",param:A})},M._onWorkerMessage=function(A){var M=A.data,t=M.data;if("destroyed"===M.msg||this._workerDestroying)return this._workerDestroying=!1,this._worker.terminate(),void(this._worker=null);switch(M.msg){case AA.INIT_SEGMENT:case AA.MEDIA_SEGMENT:this._emitter.emit(M.msg,t.type,t.data);break;case AA.LOADING_COMPLETE:case AA.RECOVERED_EARLY_EOF:this._emitter.emit(M.msg);break;case AA.MEDIA_INFO:Object.setPrototypeOf(t,Q.a.prototype),this._emitter.emit(M.msg,t);break;case AA.METADATA_ARRIVED:case AA.SCRIPTDATA_ARRIVED:case AA.STATISTICS_INFO:this._emitter.emit(M.msg,t);break;case AA.IO_ERROR:case AA.DEMUX_ERROR:this._emitter.emit(M.msg,t.type,t.info);break;case AA.RECOMMEND_SEEKPOINT:this._emitter.emit(M.msg,t);break;case"logcat_callback":n.a.emitter.emit("log",t.type,t.logcat);break;case AA.RECONNECT_ING:case AA.RECONNECT_SUCCESS:console.log("no process...  reconnectSuccess")}},A}(),EA=function(){function A(A){this.TAG="MSEController",this._config=A,this._emitter=new N.a,this._currentPlayTime=0,this._hlsSeekTime=0,this._lastPlayTime=0,this._pause=!1,this._config.isLive&&null==this._config.autoCleanupSourceBuffer&&(this._config.autoCleanupSourceBuffer=!0),this.e={onSourceOpen:this._onSourceOpen.bind(this),onSourceEnded:this._onSourceEnded.bind(this),onSourceClose:this._onSourceClose.bind(this),onSourceBufferError:this._onSourceBufferError.bind(this),onSourceBufferUpdateEnd:this._onSourceBufferUpdateEnd.bind(this)},this._mediaSource=null,this._mediaSourceObjectURL=null,this._mediaElement=null,this._isBufferFull=!1,this._hasPendingEos=!1,this._seek=!1,this._requireSetMediaDuration=!1,this._pendingMediaDuration=0,this._pendingSourceBufferInit=[],this._mimeTypes={video:null,audio:null},this._sourceBuffers={video:null,audio:null},this._lastInitSegments={video:null,audio:null},this._pendingSegments={video:[],audio:[]},this._pendingRemoveRanges={video:[],audio:[]},this._idrList=new d}var M=A.prototype;return M.destroy=function(){(this._mediaElement||this._mediaSource)&&this.detachMediaElement(),this.e=null,this._emitter.removeAllListeners(),this._emitter=null},M.on=function(A,M){this._emitter.addListener(A,M)},M.off=function(A,M){this._emitter.removeListener(A,M)},M.setSeekPlayTime=function(A){this._mediaElement&&(this._lastPlayTime=Math.floor(this._mediaElement.currentTime)),this._hlsSeekTime=A},M.pause=function(){this._pause=!0},M.resume=function(){this._pause=!1},M.attachMediaElement=function(A){if(this._mediaSource)throw new Y.a("MediaSource has been attached to an HTMLMediaElement!");var M=this._mediaSource=new window.MediaSource;M.addEventListener("sourceopen",this.e.onSourceOpen),M.addEventListener("sourceended",this.e.onSourceEnded),M.addEventListener("sourceclose",this.e.onSourceClose),this._mediaElement=A,this._mediaSourceObjectURL=window.URL.createObjectURL(this._mediaSource),A.src=this._mediaSourceObjectURL;var t=this;A.addEventListener("timeupdate",(function(){var M=Math.floor(A.currentTime);t._hlsSeekTime>0&&(M=M-t._lastPlayTime+t._hlsSeekTime),t._currentPlayTime!=M&&(t._currentPlayTime=M,t._emitter&&t._emitter.emit(iA.CB_PLAY_INFO))}),!1),A.addEventListener("pause",(function(){})),A.addEventListener("play",(function(){}))},M.getCurrentPlayTime=function(){return this._currentPlayTime},M.getTotalDuration=function(){return this._mediaElement.duration},M.detachMediaElement=function(){if(this._mediaSource){var A=this._mediaSource;for(var M in this._sourceBuffers){var t=this._pendingSegments[M];t.splice(0,t.length),this._pendingSegments[M]=null,this._pendingRemoveRanges[M]=null,this._lastInitSegments[M]=null;var g=this._sourceBuffers[M];if(g){if("closed"!==A.readyState){try{A.removeSourceBuffer(g)}catch(A){n.a.e(this.TAG,A.message)}g.removeEventListener("error",this.e.onSourceBufferError),g.removeEventListener("updateend",this.e.onSourceBufferUpdateEnd)}this._mimeTypes[M]=null,this._sourceBuffers[M]=null}}if("open"===A.readyState)try{A.endOfStream()}catch(A){n.a.e(this.TAG,A.message)}A.removeEventListener("sourceopen",this.e.onSourceOpen),A.removeEventListener("sourceended",this.e.onSourceEnded),A.removeEventListener("sourceclose",this.e.onSourceClose),this._pendingSourceBufferInit=[],this._isBufferFull=!1,this._idrList.clear(),this._mediaSource=null}this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src"),this._mediaElement=null),this._mediaSourceObjectURL&&(window.URL.revokeObjectURL(this._mediaSourceObjectURL),this._mediaSourceObjectURL=null)},M.appendInitSegment=function(A,M){if(!this._mediaSource||"open"!==this._mediaSource.readyState)return this._pendingSourceBufferInit.push(A),void this._pendingSegments[A.type].push(A);var t=A,g=""+t.container;t.codec&&t.codec.length>0&&(g+=";codecs="+t.codec);var I=!1;if(n.a.v(this.TAG,"Received Initialization Segment, mimeType: "+g),this._lastInitSegments[t.type]=t,g!==this._mimeTypes[t.type]){if(this._mimeTypes[t.type])n.a.v(this.TAG,"Notice: "+t.type+" mimeType changed, origin: "+this._mimeTypes[t.type]+", target: "+g);else{I=!0;try{var e=this._sourceBuffers[t.type]=this._mediaSource.addSourceBuffer(g);e.addEventListener("error",this.e.onSourceBufferError),e.addEventListener("updateend",this.e.onSourceBufferUpdateEnd)}catch(A){return n.a.e(this.TAG,A.message),void this._emitter.emit(iA.ERROR,{code:A.code,msg:A.message})}}this._mimeTypes[t.type]=g}M||this._pendingSegments[t.type].push(t),I||this._sourceBuffers[t.type]&&!this._sourceBuffers[t.type].updating&&this._doAppendSegments(),C.safari&&"audio/mpeg"===t.container&&t.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=t.mediaDuration/1e3,this._updateMediaSourceDuration())},M.appendMediaSegment=function(A){var M=A;this._pendingSegments[M.type].push(M),(this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()||this._seek)&&(this._doCleanupSourceBuffer(),this._seek=!1);var t=this._sourceBuffers[M.type];!t||t.updating||this._hasPendingRemoveRanges()||this._doAppendSegments()},M.reset=function(A){for(var M in this._sourceBuffers){var t=this._sourceBuffers[M];if(t){for(var g=t.buffered,I=!1,e=0;e<g.length;e++){var i=g.start(e),T=g.end(e);I=!0,this._pendingRemoveRanges[M].push({start:i,end:T})}I&&!t.updating&&this._doRemoveRanges()}}this._mediaElement.currentTime=1,A&&this._mediaElement.play()},M.seek=function(A){for(var M in this._sourceBuffers)if(this._sourceBuffers[M]){var t=this._sourceBuffers[M];if("open"===this._mediaSource.readyState)try{t.abort()}catch(A){n.a.e(this.TAG,A.message)}this._idrList.clear();var g=this._pendingSegments[M];if(g.splice(0,g.length),"closed"!==this._mediaSource.readyState){for(var I=0;I<t.buffered.length;I++){var e=t.buffered.start(I),i=t.buffered.end(I);this._pendingRemoveRanges[M].push({start:e,end:i})}if(t.updating||this._doRemoveRanges(),C.safari){var T=this._lastInitSegments[M];T&&(this._pendingSegments[M].push(T),t.updating||this._doAppendSegments())}}}},M.endOfStream=function(){var A=this._mediaSource,M=this._sourceBuffers;A&&"open"===A.readyState?M.video&&M.video.updating||M.audio&&M.audio.updating?this._hasPendingEos=!0:(this._hasPendingEos=!1,A.endOfStream()):A&&"closed"===A.readyState&&this._hasPendingSegments()&&(this._hasPendingEos=!0)},M.getNearestKeyframe=function(A){return this._idrList.getLastSyncPointBeforeDts(A)},M._needCleanupSourceBuffer=function(){if(!this._config.autoCleanupSourceBuffer)return!1;var A=this._mediaElement.currentTime;for(var M in this._sourceBuffers){var t=this._sourceBuffers[M];if(t){var g=t.buffered;if(g.length>=1&&A-g.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}}return!1},M.AdjustPlayTimeToEnd=function(){if(null!=this._emitter&&null!=this._emitter){var A=this._mediaElement.currentTime;for(var M in this._sourceBuffers)if("video"===M){var t=this._sourceBuffers[M];if(t&&!t.updating){var g=t.buffered;if(g.length>0){var I=g.end(g.length-1);I-A>2&&(this._mediaElement.pause(),(I=A+(I-A)/2)>0&&(this._mediaElement.currentTime=I),this._mediaElement.play())}}}}},M.GetSourceBufferStartTime=function(){for(var A in this._sourceBuffers){var M=this._sourceBuffers[A];if(M)for(var t=M.buffered,g=0;g<t.length;g++){var I=t.start(g);return I+(t.end(g)-I)/2}}},M._doCleanupSourceBuffer=function(){var A=this._mediaElement.currentTime;for(var M in this._sourceBuffers){var t=this._sourceBuffers[M];if(t){for(var g=t.buffered,I=!1,e=0;e<g.length;e++){var i=g.start(e),T=g.end(e);if(i<=A&&A<T+3){if(A-i>=this._config.autoCleanupMaxBackwardDuration){I=!0;var E=A-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[M].push({start:i,end:E})}}else T<A&&(I=!0,this._pendingRemoveRanges[M].push({start:i,end:T}))}I&&!t.updating&&this._doRemoveRanges()}}},M.__ClearAllSourceBuffer=function(){for(var A in console.log("Clear all source buffer..."),this._sourceBuffers){var M=this._sourceBuffers[A];if(M){for(var t=M.buffered,g=!1,I=0;I<t.length;I++){var e=t.start(I),i=t.end(I);g=!0,this._pendingRemoveRanges[A].push({start:e,end:i})}g&&!M.updating&&this._doRemoveRanges()}}},M._updateMediaSourceDuration=function(){var A=this._sourceBuffers;if(0!==this._mediaElement.readyState&&"open"===this._mediaSource.readyState&&!(A.video&&A.video.updating||A.audio&&A.audio.updating)){var M=this._mediaSource.duration,t=this._pendingMediaDuration;t>0&&(isNaN(M)||t>M)&&(n.a.v(this.TAG,"Update MediaSource duration from "+M+" to "+t),this._mediaSource.duration=t),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}},M._doRemoveRanges=function(){for(var A in this._pendingRemoveRanges)if(this._sourceBuffers[A]&&!this._sourceBuffers[A].updating)for(var M=this._sourceBuffers[A],t=this._pendingRemoveRanges[A];t.length&&!M.updating;){var g=t.shift();M.remove(g.start,g.end)}},M._doAppendSegments=function(){var A=this._pendingSegments;for(var M in e.c()&&!this._pause&&this.AdjustPlayTimeToEnd(),A)if(this._sourceBuffers[M]&&!this._sourceBuffers[M].updating&&A[M].length>0){var t=A[M].shift();if(t.timestampOffset){var g=this._sourceBuffers[M].timestampOffset,I=t.timestampOffset/1e3;Math.abs(g-I)>.1&&(n.a.v(this.TAG,"Update MPEG audio timestampOffset from "+g+" to "+I),this._sourceBuffers[M].timestampOffset=I),delete t.timestampOffset}if(!t.data||0===t.data.byteLength)continue;try{this._sourceBuffers[M].appendBuffer(t.data),this._isBufferFull=!1,"video"===M&&t.hasOwnProperty("info")&&this._idrList.appendArray(t.info.syncPoints)}catch(A){this._pendingSegments[M].unshift(t),this.__ClearAllSourceBuffer(),22===A.code?(this._isBufferFull||this._emitter.emit(iA.BUFFER_FULL),this._isBufferFull=!0):(n.a.e(this.TAG,A.message),this._emitter.emit(iA.ERROR,{code:A.code,msg:A.message}))}}},M._onSourceOpen=function(){if(n.a.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._pendingSourceBufferInit.length>0)for(var A=this._pendingSourceBufferInit;A.length;){var M=A.shift();this.appendInitSegment(M,!0)}this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(iA.SOURCE_OPEN)},M._onSourceEnded=function(){n.a.v(this.TAG,"MediaSource onSourceEnded")},M._onSourceClose=function(){n.a.v(this.TAG,"MediaSource onSourceClose"),this._mediaSource&&null!=this.e&&(this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.e.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.e.onSourceClose))},M._hasPendingSegments=function(){var A=this._pendingSegments;return A.video.length>0||A.audio.length>0},M._hasPendingRemoveRanges=function(){var A=this._pendingRemoveRanges;return A.video.length>0||A.audio.length>0},M._onSourceBufferUpdateEnd=function(){this._requireSetMediaDuration?this._updateMediaSourceDuration():this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(iA.UPDATE_END)},M._onSourceBufferError=function(A){n.a.e(this.TAG,"SourceBuffer Error: "+A)},A}(),NA="NetworkError",nA="MediaError",DA=(l.a.FORMAT_ERROR,l.a.FORMAT_UNSUPPORTED,l.a.CODEC_UNSUPPORTED,{enableWorker:!1,enableStashBuffer:!0,stashInitialSize:void 0,isLive:!1,lazyLoad:!0,lazyLoadMaxDuration:180,lazyLoadRecoverDuration:30,deferLoadAfterSourceOpen:!0,autoCleanupMaxBackwardDuration:180,autoCleanupMinBackwardDuration:120,statisticsInfoReportInterval:600,fixAudioTimestampGap:!0,accurateSeek:!1,seekType:"range",seekParamStart:"bstart",seekParamEnd:"bend",rangeLoadZeroStart:!1,customSeekHandler:void 0,reuseRedirectedURL:!1,headers:void 0,customLoader:void 0});function CA(){return Object.assign({},DA)}function rA(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var cA=function(){function A(A,M){if(this.TAG="FlvPlayer",this._type="FlvPlayer",this._emitter=new N.a,this._IsWasm=!1,this.callbackFunc=null,this.callbackPlayTimeFunc=null,this.callbackConnectStatusFunc=null,this.callbackUserPtr=null,this.needCallPlay=!1,this.waitingForData=!1,this.playTally=0,this._config=CA(),"object"==typeof M&&Object.assign(this._config,M),"soft"===M.decodeType&&(this._IsWasm=!0),"flv"!==A.type.toLowerCase()&&"m3u8"!==A.type.toLowerCase())throw new Y.b("FlvPlayer requires an flv MediaDataSource input!");this.isFlv=!0,"m3u8"===A.type.toLowerCase()&&(this.isFlv=!1),!0===A.isLive&&(this._config.isLive=!0),this.e={onvLoadedMetadata:this._onvLoadedMetadata.bind(this),onvSeeking:this._onvSeeking.bind(this),onvCanPlay:this._onvCanPlay.bind(this),onvStalled:this._onvStalled.bind(this),onvProgress:this._onvProgress.bind(this),onvWaiting:this._onvWaiting.bind(this),onvPlaying:this._onvPlaying.bind(this)},self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now,this._pendingSeekTime=null,this._requestSetTime=!1,this._seekpointRecord=null,this._progressChecker=null,this._mediaDataSource=A,this._mediaCanvas=null,this._mediaElement=null,this._msectl=null,this._transmuxer=null,this._initFlag=!1,this._msectlInitSegmentVideoParams=null,this._msectlInitSegmentAudioParams=null,this._msectlResetComplete=!0,this._mseSourceOpened=!1,this._hasPendingLoad=!1,this._receivedCanPlay=!1,this._mediaInfo=null,this._statisticsInfo=null;var t=C.chrome&&(C.version.major<50||50===C.version.major&&C.version.build<2661);this._alwaysSeekKeyframe=!!(t||C.msedge||C.msie),this._alwaysSeekKeyframe&&(this._config.accurateSeek=!1)}var M,t,g,I=A.prototype;return I.destroy=function(){null!=this._progressChecker&&(window.clearInterval(this._progressChecker),this._progressChecker=null),this._transmuxer&&this.unload(),this._mediaElement&&this.detachMediaElement(),this.e=null,this._mediaDataSource=null,this._emitter.removeAllListeners(),this._emitter=null},I.on=function(A,M){var t=this;A===r.MEDIA_INFO?null!=this._mediaInfo&&Promise.resolve().then((function(){t._emitter.emit(r.MEDIA_INFO,t.mediaInfo)})):A===r.STATISTICS_INFO&&null!=this._statisticsInfo&&Promise.resolve().then((function(){t._emitter.emit(r.STATISTICS_INFO,t.statisticsInfo)})),this._emitter.addListener(A,M)},I.off=function(A,M){this._emitter.removeListener(A,M)},I.attachMediaElement=function(A,M){var t=this;if(this._mediaCanvas=M,!this._IsWasm&&(this._mediaElement=A,A.addEventListener("loadedmetadata",this.e.onvLoadedMetadata),A.addEventListener("seeking",this.e.onvSeeking),A.addEventListener("canplay",this.e.onvCanPlay),A.addEventListener("stalled",this.e.onvStalled),A.addEventListener("progress",this.e.onvProgress),A.addEventListener("waiting",this.e.onvWaiting),A.addEventListener("playing",this.e.onvPlaying),this._msectl=new EA(this._config),this._msectl.setSeekPlayTime(this._mediaDataSource.startPlaySecs),this._msectl.on(iA.CB_PLAY_INFO,this._onmseCbPlayInfo.bind(this)),this._msectl.on(iA.UPDATE_END,this._onmseUpdateEnd.bind(this)),this._msectl.on(iA.BUFFER_FULL,this._onmseBufferFull.bind(this)),this._msectl.on(iA.SOURCE_OPEN,(function(){t._mseSourceOpened=!0,t._hasPendingLoad&&(t._hasPendingLoad=!1,t.load())})),this._msectl.on(iA.ERROR,(function(A){t.ReCreateMSECtl()})),this._msectl.on(iA.CHANGE_SPEED,(function(A){t._transmuxer&&t._transmuxer.changeSpeed(A.speed)})),this._msectl.attachMediaElement(A),null!=this._pendingSeekTime))try{A.currentTime=this._pendingSeekTime,this._pendingSeekTime=null}catch(A){}},I.detachMediaElement=function(){this._IsWasm||(this._mediaElement&&(this._msectl.detachMediaElement(),this._mediaElement.removeEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._mediaElement.removeEventListener("seeking",this.e.onvSeeking),this._mediaElement.removeEventListener("canplay",this.e.onvCanPlay),this._mediaElement.removeEventListener("stalled",this.e.onvStalled),this._mediaElement.removeEventListener("progress",this.e.onvProgress),this._mediaElement=null),this._msectl&&(this._msectl.destroy(),this._msectl=null))},I.ReCreateMSECtl=function(){var A=this;this._msectlResetComplete=!1,console.log("ReCreateMSECtl..."),this._msectl&&(this._mediaElement&&this._msectl.detachMediaElement(),this._msectl.destroy(),this._msectl=null),this._msectl=new EA(this._config),this._msectl.setSeekPlayTime(this._mediaDataSource.startPlaySecs),this._msectl.on(iA.CB_PLAY_INFO,this._onmseCbPlayInfo.bind(this)),this._msectl.on(iA.UPDATE_END,this._onmseUpdateEnd.bind(this)),this._msectl.on(iA.BUFFER_FULL,this._onmseBufferFull.bind(this)),this._msectl.on(iA.SOURCE_OPEN,(function(){A._mseSourceOpened=!0,A._msectlInitSegmentVideoParams&&A._msectl.appendInitSegment(A._msectlInitSegmentVideoParams),A._msectlInitSegmentAudioParams&&A._msectl.appendInitSegment(A._msectlInitSegmentAudioParams),A._msectlResetComplete=!0})),this._msectl.on(iA.ERROR,(function(M){A.ReCreateMSECtl()})),this._msectl.on(iA.CHANGE_SPEED,(function(M){A._transmuxer&&A._transmuxer.changeSpeed(M.speed)})),this._msectl.attachMediaElement(this._mediaElement),this._transmuxer&&this._transmuxer.seekToSecs(0,0)},I.callbackWasmType=function(A,M){A._IsWasm=M,A.callbackToParent(),A.needCallPlay&&(A.needCallPlay=!1,M||A.play())},I.callbackToParent=function(){this.callbackFunc&&this.callbackFunc(this.callbackUserPtr,this.isFlv?"flv":"m3u8",this._IsWasm)},I.setCallback=function(A,M,t,g){this.callbackFunc=A,this.callbackPlayTimeFunc=M,this.callbackConnectStatusFunc=t,this.callbackUserPtr=g},I.load=function(){var A=this;if(!this._IsWasm){if(!this._mediaElement)throw new Y.a("HTMLMediaElement must be attached before load()!");if(this._transmuxer)throw new Y.a("FlvPlayer.load() has been called, please call unload() first!");if(this._hasPendingLoad)return;if(this._config.deferLoadAfterSourceOpen&&!1===this._mseSourceOpened)return void(this._hasPendingLoad=!0);this._mediaElement.readyState>0&&(this._requestSetTime=!0,this._mediaElement.currentTime=0)}this._transmuxer=new TA(this._mediaDataSource,this._config,this._mediaCanvas,this,this.callbackWasmType),this._transmuxer.on(AA.INIT_SEGMENT,(function(M,t){A._IsWasm||(A._initFlag=!0,A._msectl.appendInitSegment(t),"video"===M?A._msectlInitSegmentVideoParams=t:"audio"===M&&(A._msectlInitSegmentAudioParams=t))})),this._transmuxer.on(AA.MEDIA_SEGMENT,(function(M,t){if(A._IsWasm||A._msectlResetComplete&&A._msectl.appendMediaSegment(t),A._config.lazyLoad&&!A._config.isLive){var g=A._mediaElement.currentTime;t.info.endDts>=1e3*(g+A._config.lazyLoadMaxDuration)&&null==A._progressChecker&&(n.a.v(A.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),A._suspendTransmuxer())}})),this._transmuxer.on(AA.LOADING_COMPLETE,(function(){A._IsWasm||A._msectl.endOfStream(),A._emitter.emit(r.LOADING_COMPLETE)})),this._transmuxer.on(AA.RECOVERED_EARLY_EOF,(function(){A._emitter.emit(r.RECOVERED_EARLY_EOF)})),this._transmuxer.on(AA.IO_ERROR,(function(M,t){A._emitter.emit(r.ERROR,NA,M,t)})),this._transmuxer.on(AA.DEMUX_ERROR,(function(M,t){A._emitter.emit(r.ERROR,nA,M,{code:-1,msg:t})})),this._transmuxer.on(AA.MEDIA_INFO,(function(M){A._mediaInfo=M,A._emitter.emit(r.MEDIA_INFO,Object.assign({},M))})),this._transmuxer.on(AA.METADATA_ARRIVED,(function(M){A._emitter.emit(r.METADATA_ARRIVED,M)})),this._transmuxer.on(AA.SCRIPTDATA_ARRIVED,(function(M){A._emitter.emit(r.SCRIPTDATA_ARRIVED,M)})),this._transmuxer.on(AA.STATISTICS_INFO,(function(M){A._statisticsInfo=A._fillStatisticsInfo(M),A._emitter.emit(r.STATISTICS_INFO,Object.assign({},A._statisticsInfo))})),this._transmuxer.on(AA.RECOMMEND_SEEKPOINT,(function(M){A._mediaElement&&!A._config.accurateSeek&&(A._requestSetTime=!0,A._mediaElement.currentTime=M/1e3)})),this._transmuxer.on(AA.RECONNECT_ING,(function(M){A.callbackConnectStatusFunc&&A.callbackConnectStatusFunc(A.callbackUserPtr,0)})),this._transmuxer.on(AA.RECONNECT_SUCCESS,(function(M){A._IsWasm||(M>1&&A._msectl&&(A._transmuxer.seekToSecs(0,0),console.log("msectl.reset..."),A._msectl.reset(!0)),A._mediaElement),A.callbackConnectStatusFunc&&A.callbackConnectStatusFunc(A.callbackUserPtr,1)})),this._transmuxer.on(iA.CB_PLAY_INFO,this._onmseCbPlayInfo.bind(this)),this._transmuxer.open()},I.unload=function(){this._IsWasm||(this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.seek(0)),this._transmuxer&&(this._transmuxer.close(),this._transmuxer.destroy(),this._transmuxer=null),this._initFlag=!1},I.play=function(){return null==this._transmuxer?(this.needCallPlay=!0,this._mediaElement&&(this._mediaElement.volume=0),!1):this._mediaElement?(this.needCallPlay=!1,this._mediaElement.play()):void 0},I.pause=function(){this._transmuxer&&this._transmuxer.pause(),this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.pause()},I.resume=function(){this._transmuxer&&this._transmuxer.resume(),this._msectl&&(e.c()&&this._msectl.reset(!1),this._msectl.resume()),this._mediaElement&&this._mediaElement.play()},I.openAudio=function(){if(this._IsWasm){if(this._transmuxer)return this._transmuxer.openAudio()}else if(this._mediaElement)return this._mediaElement.volume=1,!0;return!1},I.closeAudio=function(){if(this._IsWasm){if(this._transmuxer)return this._transmuxer.closeAudio()}else if(this._mediaElement)return this._mediaElement.volume=0,!0;return!1},I.seek=function(A,M){if(!this._IsWasm&&this.isFlv&&this._mediaElement&&this._mediaElement.duration>0){var t=Math.floor(A/100*this._mediaElement.duration);return this._mediaElement?this._internalSeek(t):this._pendingSeekTime=t,!0}if(this._transmuxer){t=Math.floor(A/100*this._transmuxer.getTotalDuration());return this._msectl&&this._msectl.getCurrentPlayTime()==t||(this._transmuxer.seekToSecs(A,M),this._msectl&&(this._msectl.setSeekPlayTime(t),this._msectl.reset(!0)),this._mediaElement?(Math.floor(this._mediaElement.currentTime),Math.floor(t),this._progressChecker):this._pendingSeekTime=t),!0}},I._fillStatisticsInfo=function(A){if(A.playerType=this._type,!(this._mediaElement instanceof HTMLVideoElement))return A;var M=!0,t=0,g=0;if(this._mediaElement.getVideoPlaybackQuality){var I=this._mediaElement.getVideoPlaybackQuality();t=I.totalVideoFrames,g=I.droppedVideoFrames}else null!=this._mediaElement.webkitDecodedFrameCount?(t=this._mediaElement.webkitDecodedFrameCount,g=this._mediaElement.webkitDroppedFrameCount):M=!1;return M&&(A.decodedFrames=t,A.droppedFrames=g),A},I._onmseCbPlayInfo=function(){if(this._transmuxer){var A=0,M=0;!this._IsWasm&&this._msectl?(A=this._msectl.getCurrentPlayTime(),(M=this._msectl.getTotalDuration())!=1/0||e.c()||(M=this._transmuxer.getTotalDuration())):((A=this._transmuxer.getCurrentPlayTime())<0&&(A=0),M=this._transmuxer.getTotalDuration()),this.callbackPlayTimeFunc&&this.callbackPlayTimeFunc(this.callbackUserPtr,this.isFlv?"flv":"m3u8",A,M)}},I._onmseUpdateEnd=function(){if(this._config.lazyLoad&&!this._config.isLive){for(var A=this._mediaElement.buffered,M=this._mediaElement.currentTime,t=0,g=0;g<A.length;g++){var I=A.start(g),e=A.end(g);if(I<=M&&M<e){I,t=e;break}}t>=M+this._config.lazyLoadMaxDuration&&null==this._progressChecker&&(n.a.v(this.TAG,"onmseUpdateEnd::Maximum buffering duration exceeded, suspend transmuxing task"),this._suspendTransmuxer())}},I._onmseBufferFull=function(){n.a.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),null==this._progressChecker&&this._suspendTransmuxer()},I._suspendTransmuxer=function(){this._transmuxer&&(this._transmuxer.pause(),null==this._progressChecker&&(this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1e3)))},I._checkProgressAndResume=function(){if(null!=this._mediaElement){for(var A=this._mediaElement.currentTime,M=this._mediaElement.buffered,t=!1,g=0;g<M.length;g++){var I=M.start(g),e=M.end(g);if(A>=I&&A<e){A>=e-this._config.lazyLoadRecoverDuration&&(t=!0);break}}t&&(window.clearInterval(this._progressChecker),this._progressChecker=null,t&&(n.a.v(this.TAG,"Continue loading from paused position"),this._transmuxer.resume()))}},I._isTimepointBuffered=function(A){for(var M=this._mediaElement.buffered,t=0;t<M.length;t++){var g=M.start(t),I=M.end(t);if(A>=g&&A<I)return!0}return!1},I._internalSeek=function(A){var M=this._isTimepointBuffered(A),t=!1,g=0;if(A<1&&this._mediaElement.buffered.length>0){var I=this._mediaElement.buffered.start(0);(I<1&&A<I||C.safari)&&(t=!0,g=C.safari?.1:I)}if(t)this._requestSetTime=!0,this._mediaElement.currentTime=g;else if(M){if(this._alwaysSeekKeyframe){var e=this._msectl.getNearestKeyframe(Math.floor(1e3*A));this._requestSetTime=!0,this._mediaElement.currentTime=null!=e?e.dts/1e3:A}else this._requestSetTime=!0,this._mediaElement.currentTime=A;null!=this._progressChecker&&this._checkProgressAndResume()}else null!=this._progressChecker&&(window.clearInterval(this._progressChecker),this._progressChecker=null),this._msectl.seek(A),this._transmuxer.seek(Math.floor(1e3*A)),this._config.accurateSeek&&(this._requestSetTime=!0,this._mediaElement.currentTime=A)},I._checkAndApplyUnbufferedSeekpoint=function(){if(this.isFlv&&this.playTally>0&&e.c()){console.log("_checkAndApplyUnbufferedSeekpoint.  RETURN..."),null!=this._progressChecker&&(window.clearTimeout(this._progressChecker),this._progressChecker=null);var A=!1;return this._transmuxer&&(A=this._transmuxer.isPaused()),void(this._mediaElement&&!A&&this._mediaElement.play())}if(this._seekpointRecord)if(this._seekpointRecord.recordTime<=this._now()-100){var M=this._mediaElement.currentTime;this._seekpointRecord=null,this._isTimepointBuffered(M)||(null!=this._progressChecker&&(window.clearTimeout(this._progressChecker),this._progressChecker=null),this._msectl.seek(M),this._transmuxer.seek(Math.floor(1e3*M)),this._config.accurateSeek&&(this._requestSetTime=!0,this._mediaElement.currentTime=M))}else window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this),50)},I._checkAndResumeStuckPlayback=function(A){var M=this._mediaElement;if(A||!this._receivedCanPlay||M.readyState<2){var t=M.buffered;t.length>0&&M.currentTime<t.start(0)&&(n.a.w(this.TAG,"Playback seems stuck at "+M.currentTime+", seek to "+t.start(0)),this._requestSetTime=!0,this._mediaElement.currentTime=t.start(0),this._mediaElement.removeEventListener("progress",this.e.onvProgress))}else this._mediaElement.removeEventListener("progress",this.e.onvProgress)},I._onvLoadedMetadata=function(A){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null)},I._onvSeeking=function(A){var M=this._mediaElement.currentTime,t=this._mediaElement.buffered;if(this._requestSetTime)this._requestSetTime=!1;else{if(M<1&&t.length>0){var g=t.start(0);if(g<1&&M<g||C.safari)return this._requestSetTime=!0,void(this._mediaElement.currentTime=C.safari?.1:g)}if(this._isTimepointBuffered(M)){if(this._alwaysSeekKeyframe){var I=this._msectl.getNearestKeyframe(Math.floor(1e3*M));null!=I&&(this._requestSetTime=!0,this._mediaElement.currentTime=I.dts/1e3)}null!=this._progressChecker&&this._checkProgressAndResume()}else this._seekpointRecord={seekPoint:M,recordTime:this._now()},window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this),50)}},I._onvCanPlay=function(A){this._receivedCanPlay=!0,this._mediaElement.removeEventListener("canplay",this.e.onvCanPlay)},I._onvStalled=function(A){this._checkAndResumeStuckPlayback(!0)},I._onvProgress=function(A){this._checkAndResumeStuckPlayback()},I._onvWaiting=function(A){},I._onvPlaying=function(A){this.waitingForData=!1,this.playTally++},M=A,(t=[{key:"type",get:function(){return this._type}},{key:"buffered",get:function(){return this._mediaElement.buffered}},{key:"duration",get:function(){return this._mediaElement.duration}},{key:"volume",get:function(){return this._mediaElement.volume},set:function(A){this._mediaElement.volume=A}},{key:"muted",get:function(){return this._mediaElement.muted},set:function(A){this._mediaElement.muted=A}},{key:"currentTime",get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(A){this._mediaElement?this._internalSeek(A):this._pendingSeekTime=A}},{key:"mediaInfo",get:function(){return Object.assign({},this._mediaInfo)}},{key:"statisticsInfo",get:function(){return null==this._statisticsInfo&&(this._statisticsInfo={}),this._statisticsInfo=this._fillStatisticsInfo(this._statisticsInfo),Object.assign({},this._statisticsInfo)}}])&&rA(M.prototype,t),g&&rA(M,g),A}(),oA=function(){function A(A,M,t,g,I,e,i,T,E,N){this.url="",this.hasVideos=E,this.downloadWorker=null,this.decodeWorker=null,this.renderWorker=null,this.audioWorker=null,this.printStatInfo=!1,this.pauseDisplay=!1,this.enableLog=!1,this.streamType=A,this.h5Video=M,this.canvas=t,this.flvPlayer=null,this.decodeType=g,this.callbackFunc=I,this.cbFunc=N,this.callbackPlayTimeFunc=e,this.callbackConnectStatusFunc=i,this.callbackUserPtr=T,this.avQueue=[],this.webGLPlayer=null,this.soundPlayer=null,this.fullScreenFlag=!1}var M=A.prototype;return M.destroy=function(){if(this.webGLPlayer&&this.webGLPlayer.renderVideoFrame(null,0,0),this.renderWorker&&void 0!==this.renderWorker){var A={cmd:e.k};this.renderWorker.postMessage(A)}this.soundPlayer&&(this.soundPlayer.destroy(),delete this.soundPlayer,this.soundPlayer=null),this.flvPlayer&&(this.flvPlayer.destroy(),this.flvPlayer=null)},M.logD=function(A){this.enableLog&&console.log("FlvPlayer: "+A)},M.createDecodeWorker=function(){var A;if(this.logD("create decode worker..."),this.decodeWorker=void 0,"undefined"!=typeof Worker)try{A=this.decodeWorker=i(60),this.onwmsg=this.onWorkerMessage.bind(this);var M={cmd:e.u,url:e.f(),isFlv:!0};A.postMessage(M),A.addEventListener("message",this.onwmsg),A.onerror=function(A){}}catch(A){console.log("Create Decode Worker fail: "+A),this.w=void 0}},M.createAudioWorker=function(){var A;if(this.logD("create audio play worker..."),this.audioWorker=void 0,"undefined"!=typeof Worker)try{A=this.audioWorker=i(205),this.onwmsg=this.onWorkerMessage.bind(this);var M={cmd:e.u};A.postMessage(M),A.addEventListener("message",this.onwmsg),A.onerror=function(A){}}catch(A){console.log("Create audio Worker fail: "+A),this.audioWorker=void 0}else console.log("Unsupport worker...");this.audioWorker},M.decodeAndDisplayLoop=function(){if(!(this.avQueue.length<1))for(;this.avQueue.length>0;){this.avQueue[0];this.avQueue.shift()}},M.play=function(A,M){return this.pauseDisplay?this.resume():(this.url=A,null==this.flvPlayer&&(this.flvPlayer=new cA({type:this.streamType,isLive:!0,url:A,startPlaySecs:M},{callbackFunc:this.cbFunc,streamType:this.streamType,enableWorker:!1,lazyLoadMaxDuration:"flv"===this.streamType?1:180,lazyLoadRecoverDuration:"flv"===this.streamType?1:30,deferLoadAfterSourceOpen:!0,autoCleanupMaxBackwardDuration:"flv"===this.streamType?120:180,autoCleanupMinBackwardDuration:"flv"===this.streamType?60:120,seekType:"range",enableStashBuffer:!1,decodeType:this.decodeType}),"flv"===this.streamType&&e.h(!0)),this.flvPlayer.setCallback(this.callbackFunc,this.callbackPlayTimeFunc,this.callbackConnectStatusFunc,this.callbackUserPtr),this.flvPlayer.attachMediaElement(this.h5Video,this.canvas),this.flvPlayer.load(),this.flvPlayer.play()),!0},M.stop=function(){return this.pauseDisplay=!1,this.closeAudio(),this.flvPlayer&&(this.flvPlayer.unload(),this.flvPlayer.detachMediaElement()),!0},M.isPause=function(){return this.pauseDisplay},M.pause=function(){this.pauseDisplay=!0,this.flvPlayer&&this.flvPlayer.pause()},M.resume=function(){this.pauseDisplay=!1,this.flvPlayer&&this.flvPlayer.resume()},M.seek=function(A,M){this.pauseDisplay=!1,this.flvPlayer&&this.flvPlayer.seek(A,M)},M.setTrack=function(A,M){},M.openAudio=function(){return!!this.flvPlayer&&this.flvPlayer.openAudio()},M.closeAudio=function(){return!!this.flvPlayer&&this.flvPlayer.closeAudio()},M.openStatinfo=function(){return this.printStatInfo=!0,!0},M.closeStatinfo=function(){return this.printStatInfo=!1,!0},M.isFullScreen=function(){return this.fullScreenFlag},M.canvasFullscreen=function(){var A=this.canvas;A.RequestFullScreen?A.RequestFullScreen():A.webkitRequestFullScreen?A.webkitRequestFullScreen():A.mozRequestFullScreen?A.mozRequestFullScreen():A.msRequestFullscreen?A.msRequestFullscreen():e.d("This browser doesn't supporter fullscreen")},M.canvasExitFullscreen=function(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen?document.msExitFullscreen():e.d("Exit fullscreen doesn't work")},M.fullscreen=function(A){if(1==A){if(!this.fullScreenFlag)return this.canvasFullscreen(),this.fullScreenFlag=!0,!0}else if(this.fullScreenFlag)return this.canvasExitFullscreen(),this.fullScreenFlag=!1,!0;return!1},A}(),BA=function(){function A(){}return A.supportMSEH264Playback=function(){return window.MediaSource&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')},A.supportNetworkStreamIO=function(){var A=new $({},CA()),M=A.loaderType;return A.destroy(),"fetch-stream-loader"==M||"xhr-moz-chunked-loader"==M},A.getNetworkLoaderTypeName=function(){var A=new $({},CA()),M=A.loaderType;return A.destroy(),M},A.supportNativeMediaPlayback=function(M){null==A.videoElement&&(A.videoElement=window.document.createElement("video"));var t=A.videoElement.canPlayType(M);return"probably"===t||"maybe"==t},A.getFeatureList=function(){var M={mseFlvPlayback:!1,mseLiveFlvPlayback:!1,networkStreamIO:!1,networkLoaderName:"",nativeMP4H264Playback:!1,nativeWebmVP8Playback:!1,nativeWebmVP9Playback:!1};return M.mseFlvPlayback=A.supportMSEH264Playback(),M.networkStreamIO=A.supportNetworkStreamIO(),M.networkLoaderName=A.getNetworkLoaderTypeName(),M.mseLiveFlvPlayback=M.mseFlvPlayback&&M.networkStreamIO,M.nativeMP4H264Playback=A.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"'),M.nativeWebmVP8Playback=A.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"'),M.nativeWebmVP9Playback=A.supportNativeMediaPlayback('video/webm; codecs="vp9"'),M},A}();function QA(A,M){for(var t=0;t<M.length;t++){var g=M[t];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(A,g.key,g)}}var aA=function(){function A(A,M,t,g,I){if(this.TAG="NativePlayer",this._type="NativePlayer",this._emitter=new N.a,this._config=CA(),"object"==typeof I&&Object.assign(this._config,I),"flv"===A.type.toLowerCase())throw new Y.b("NativePlayer does't support flv MediaDataSource input!");if(A.hasOwnProperty("segments"))throw new Y.b("NativePlayer("+A.type+") doesn't support multipart playback!");this.e={onvLoadedMetadata:this._onvLoadedMetadata.bind(this)},this._pendingSeekTime=null,this._statisticsReporter=null,this._mediaDataSource=A,this._mediaElement=null,this.pauseDisplay=!1,this.h5Video=M,this.callbackPlayTimeFunc=t,this.callbackUserPtr=g}var M,t,g,I=A.prototype;return I.destroy=function(){this._mediaElement&&(this.unload(),this.detachMediaElement()),this.e=null,this._mediaDataSource=null,this._emitter.removeAllListeners(),this._emitter=null},I.on=function(A,M){var t=this;A===r.MEDIA_INFO?null!=this._mediaElement&&0!==this._mediaElement.readyState&&Promise.resolve().then((function(){t._emitter.emit(r.MEDIA_INFO,t.mediaInfo)})):A===r.STATISTICS_INFO&&null!=this._mediaElement&&0!==this._mediaElement.readyState&&Promise.resolve().then((function(){t._emitter.emit(r.STATISTICS_INFO,t.statisticsInfo)})),this._emitter.addListener(A,M)},I.off=function(A,M){this._emitter.removeListener(A,M)},I.attachMediaElement=function(A){if(this._mediaElement=A,A.addEventListener("loadedmetadata",this.e.onvLoadedMetadata),null!=this._pendingSeekTime)try{A.currentTime=this._pendingSeekTime,this._pendingSeekTime=null}catch(A){}},I.detachMediaElement=function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src"),this._mediaElement.removeEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._mediaElement=null),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)},I.load=function(){if(!this._mediaElement)throw new Y.a("HTMLMediaElement must be attached before load()!");this._mediaElement.src=this._mediaDataSource.url,this._mediaElement.readyState>0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)},I.unload=function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)},I.play=function(){return this.pauseDisplay||(this.attachMediaElement(this.h5Video),this.load()),this.pauseDisplay=!1,this._mediaElement.play()},I.stop=function(){this.unload(),this.detachMediaElement()},I.pause=function(){this._mediaElement.pause(),this.pauseDisplay=!0},I.isPause=function(){return this.pauseDisplay},I.openAudio=function(){return this._mediaElement.volume=1,!0},I.closeAudio=function(){return this._mediaElement.volume=0,!0},I.seek=function(A,M){var t=A;1==M&&(t=A/100*this._mediaElement.duration),this._mediaElement?this._mediaElement.currentTime=t:this._pendingSeekTime=t},I._onvLoadedMetadata=function(A){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(r.MEDIA_INFO,this.mediaInfo)},I._reportStatisticsInfo=function(){this._emitter.emit(r.STATISTICS_INFO,this.statisticsInfo)},M=A,(t=[{key:"type",get:function(){return this._type}},{key:"buffered",get:function(){return this._mediaElement.buffered}},{key:"duration",get:function(){return this._mediaElement.duration}},{key:"volume",get:function(){return this._mediaElement.volume},set:function(A){this._mediaElement.volume=A}},{key:"muted",get:function(){return this._mediaElement.muted},set:function(A){this._mediaElement.muted=A}},{key:"currentTime",get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(A){this._mediaElement?this._mediaElement.currentTime=A:this._pendingSeekTime=A}},{key:"mediaInfo",get:function(){var A={mimeType:(this._mediaElement instanceof HTMLAudioElement?"audio/":"video/")+this._mediaDataSource.type};if(this._mediaElement){A.duration=Math.floor(1e3*this._mediaElement.duration),this._mediaElement instanceof HTMLVideoElement&&(A.width=this._mediaElement.videoWidth,A.height=this._mediaElement.videoHeight),this.callbackPlayTimeFunc&&this.callbackPlayTimeFunc(this.callbackUserPtr,"mp4",this._mediaElement.currentTime,A.duration/1e3);var M=this,t=0,g=A.duration/1e3;this._mediaElement.addEventListener("timeupdate",(function(){if(M._mediaElement){var A=M._mediaElement.currentTime;if(null!=A){var I=Math.floor(A);t!=I&&(t=I,M.callbackPlayTimeFunc(M.callbackUserPtr,"mp4",t,g))}}}),!1)}return A}},{key:"statisticsInfo",get:function(){var A={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return A;var M=!0,t=0,g=0;if(this._mediaElement.getVideoPlaybackQuality){var I=this._mediaElement.getVideoPlaybackQuality();t=I.totalVideoFrames,g=I.droppedVideoFrames}else null!=this._mediaElement.webkitDecodedFrameCount?(t=this._mediaElement.webkitDecodedFrameCount,g=this._mediaElement.webkitDroppedFrameCount):M=!1;return M&&(A.decodedFrames=t,A.droppedFrames=g),A}}])&&QA(M.prototype,t),g&&QA(M,g),A}(),hA=(t(206),t(214),t(220),function(){function A(A,M,t,g){void 0===g&&(g={});var I=g,e=I.cbUserPtr,i=I.decodeType,T=I.openAudio,E=I.BigPlay,N=I.Height,n=I.UnLogo,D=I.HideKbs,C=I.cfKbs;if(this.playerInstance=null,this.url=A,this.UnLogo=n,this.callbackFunc=t||function(){},this.fulls=!0,this.callbackUserPtr=e,this.decodeType="auto",this.version="v2.0.20200930",this.timeKbps=null,this.HideKbs=D,this.cfKbs=C||function(){},"auto"!==i&&"soft"!==i||(this.decodeType=i),BA.supportMSEH264Playback()||(this.decodeType="soft"),this.internalTriggerPlay=!1,this.showTimeLabel=!1,this.seeking=!1,this.callbackEnd=!1,this.initH5Flag=!1,this.currentH5Status=!1,this.seekTimeSecs=0,this.fullScreenFlag=!1,this.playerUI=document.getElementById(M),null!=this.playerUI){if(this.playerUI.style=N?"color:blue;position:relative;background-color:black;width:100%;height:100%;overflow: hidden;":"color:blue;position:relative;background-color:black;width:100%;padding-top:56.25%;overflow: hidden;",this.h5Video=null,this.h5Video=document.createElement("VIDEO"),this.h5Video.style="width:0%;height:0%;position:absolute;top:0px;left:0px;background: black;",this.h5Video.setAttribute("oncontextmenu","return false"),this.playerUI.appendChild(this.h5Video),null!=E&&E){this.bigPlayBox=document.createElement("div"),this.bigPlayBox.style="display:block",this.bigPlayBox.classList="bigPlayBox fa fa-play",this.playerUI.appendChild(this.bigPlayBox);var r=this;this.bigPlayBox.onclick=function(){""!==r.url&&(r.playFlag?(r.internalTriggerPlay=!1,r.play(r.url,1,r.seekTimeSecs)):(r.pause(),r.bigPlayBox.classList.remove("fa-pause"),r.bigPlayBox.classList.add("fa-play"),r.bigPlayBox.title="Play",r.playBtn.classList.remove("fa-pause"),r.playBtn.classList.add("fa-play"),r.bigPlayBox.style="display:block",r.playBtn.title="Play",r.playFlag=!0))}}this.lodingBox=document.createElement("div"),this.lodingBox.style="width:100%;height:100%;position: absolute;left:0px;top:0px;background:rgba(0,0,0,0.6);z-index:9;display:none",this.lodingBox.classList="lodingBox",this.playerUI.appendChild(this.lodingBox),this.conter=document.createElement("div"),this.conter.classList="conter",this.lodingBox.appendChild(this.conter),this.loding=document.createElement("div"),this.loding.classList="Loding",this.conter.appendChild(this.loding),this.loding=document.createElement("span"),this.loding.classList="LodingTitle",this.loding.innerHTML="加载中...",this.conter.appendChild(this.loding),this.offscreenCanvas=null,this.canvas=document.createElement("canvas"),this.canvas.style="width:100%;height:100%;position:absolute;top:0px;left:0px;background: black;",this.playerUI.appendChild(this.canvas),this.timeBox=document.createElement("div"),this.timeBox.style="position: absolute;left: 0px;bottom: 0px;display:flex;width: 100%;display:none;background-color: black;z-index:10;",this.playerUI.appendChild(this.timeBox),this.playBtn=document.createElement("span"),this.playFlag=!0,this.playBtn.classList="fa fa-play",this.playBtn.title="Play",this.playBtn.style="display:inine-block;width: 20px;color: #fff;line-height: 27px;margin: 0 10px;padding:0px 2px;cursor:pointer;text-align:center",this.timeRule=null,this.timeTrack=null,this.timeLabel=null;var c=this;this.playBtn.onclick=function(){""!==c.url&&(c.playFlag?(c.internalTriggerPlay=!1,c.play(c.url,1,c.seekTimeSecs)):(c.pause(),c.playBtn.classList.remove("fa-pause"),c.playBtn.classList.add("fa-play"),c.playBtn.title="Play",null!=c.bigPlayBox&&(c.bigPlayBox.classList.remove("fa-pause"),c.bigPlayBox.classList.add("fa-play"),c.bigPlayBox.style="display:block",c.bigPlayBox.title="Play"),c.playFlag=!0))},this.timeBox.appendChild(this.playBtn);var o=document.createElement("span");o.classList="fa fa-stop",o.title="Stop",o.onclick=function(){c.stop(),c.playBtn.classList.remove("fa-pause"),c.playBtn.classList.add("fa-play"),c.playBtn.title="Play",null!=c.bigPlayBox&&(c.bigPlayBox.classList.remove("fa-pause"),c.bigPlayBox.classList.add("fa-play"),c.bigPlayBox.style="display:block",c.bigPlayBox.title="Play"),c.playFlag=!0,c.timeTrack&&(c.timeTrack.value=0,c.timeLabel.innerHTML="00:00:00/00:00:00")},o.style="display:inine-block;width: 15px;color: #fff;line-height: 27px;margin-right:10px;padding:0px 2px;cursor:pointer;",this.timeBox.appendChild(o),this.soundButton=document.createElement("span"),this.defaultAudioStatus=1==T,this.enableAudio=1==T,this.enableAudio?this.soundButton.classList="fa fa-volume-up ":this.soundButton.classList="fa fa-volume-off ",this.soundButton.style="display:inine-block;width:23px;color:#fff;line-height: 27px;margin-right:10px; text-align:center;cursor:pointer;",this.soundButton.onclick=function(){c.enableAudio?c.closeAudio():c.openAudio()},this.timeBox.appendChild(this.soundButton);var B=document.createElement("span");B.classList="no-padding",B.style="display:inine-block;width:100%;display:flex;",this.timeBox.appendChild(B);var Q=document.createElement("input");Q.classList="timeTrack",Q.id="timeTrack",Q.type="range",Q.style="width:100%;-webkit-appearance: none;height:3px;border-radius:3px;cursor:pointer;margin:auto;display:none",Q.value=0,B.appendChild(Q),this.timeTrack=Q,this.timeRule=B;var a=document.createElement("span");a.classList="padding",a.style="display:inine-block;padding-left:10px;",this.timeBox.appendChild(a);var h=document.createElement("label");h.style="color: #fff;margin: 0 40px 0px 10px;line-height:27px;display:none",h.innerHTML="00:00:00/00:00:00",a.appendChild(h),this.timeLabel=h,this.timeTrack&&(this.timeTrack.oninput=function(){c.seeking||c.seekToPercent(c.timeTrack.value,1)},this.timeTrack.onchange=function(){}),n&&void 0!==n||(this.logo=document.createElement("a"),this.logo.classList="iconfont iconqingxiLOGO",this.logo.title="青犀视频",this.logo.href="http://www.tsingsee.com",this.logo.target="_blank",this.logo.style="display:inline-block;color: #fff;font-size:70px;margin-right:40px;line-height: 27px;text-align:center;position:absolute;top:1px;right:0px;cursor:pointer;overflow: hidden;opacity: 1;",this.timeBox.appendChild(this.logo),this.detectionLogo()),this.domKbps=document.createElement("div"),this.timeBox.appendChild(this.domKbps),this.full=document.createElement("span"),this.full.classList="fa fa-expand",this.full.title="Fullscreen",this.full.onclick=function(){c.fullScreen()},this.full.style="color: #fff;width:20px;margin-right: 10px;line-height: 27px;text-align:center;position:absolute;top:0px;right:0px;cursor:pointer",this.timeBox.appendChild(this.full),this.Menu=document.createElement("div"),this.Menu.style=" position: absolute;left: 0;top: 0;min-width:140px;border-radius: 4px;background:rgba(43, 51, 63, 0.7); color:#fff;font-size:12px;padding:5px 10px;display: none;z-index: 2;",this.playerUI.appendChild(this.Menu);var s=document.createElement("div");s.innerHTML="版本号:"+this.version,this.Menu.appendChild(s);var y=this;this.playerUI.oncontextmenu=function(A){var M=A.offsetX,t=A.offsetY;return y.Menu.style.display="block",y.Menu.style.left=M+"px",y.Menu.style.top=t+"px",console.dir(A),!1},this.playerUI.onclick=function(A){A=A||window.event;y.Menu.style.display="none"},y.Menu.onclick=function(A){(A=A||window.event).cancelBubble=!0},this.playerUI.onmousemove=function(){c.timeBox.style="position: absolute;left: 0px;bottom: 0px;display:flex;width: 100%;background-color: rgba(43,51,63,.7);z-index:10;",clearTimeout(this.Timer),this.Timer=setTimeout((function(){c.timeBox.style="position: absolute;left: 0px;bottom: 0px;display:flex;width: 100%;background-color: rgba(43,51,63,.7);z-index:10;opacity:0;"}),3e3)},this.playerUI.onmouseout=function(){clearTimeout(this.Timer),this.Timer=setTimeout((function(){c.timeBox.style="position: absolute;left: 0px;bottom: 0px;display:flex;width: 100%;background-color: rgba(43,51,63,.7);z-index:10;opacity:0;"}),3e3)},document.addEventListener("fullscreenchange",(function(A){document.fullscreenElement||(y.full.classList.remove("fa-compress"),y.full.classList.add("fa-expand"),document.exitFullScreen?document.exitFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():element.msExitFullscreen&&element.msExitFullscreen(),y.fulls=!0,y.full.title="Fullscreen")}))}}var M=A.prototype;return M.normal=function(){this.timeRule.innerHTML="",this.timeRule.style="color:#fff;line-height: 27px;font-size=16px;width:100%;display:flex;",this.timeLabel.style=" color: #fff;margin: 0 120px 0px 10px;display:none"},M.live=function(){this.timeRule.innerHTML="LIVE",this.timeRule.style="color:#fff;line-height: 27px;font-size=16px;width:100%;display:flex;",this.timeLabel.style=" color: #fff;margin: 0 120px 0px 10px;display:none"},M.playback=function(){this.timeRule.innerHTML="",this.timeTrack.style="width:100%;-webkit-appearance:none;height:3px;border-radius:3px;cursor:pointer;margin:auto;",this.timeTrack.value=0,this.timeRule.appendChild(this.timeTrack),this.UnLogo||this.HideKbs?this.UnLogo?this.timeLabel.style="color: #fff;margin: 0 40px 0px 10px;dispplay:block;line-height:27px;":this.timeLabel.style="color: #fff;margin: 0 120px 0px 10px;dispplay:block;line-height:27px;":this.timeLabel.style="color: #fff;margin: 0 174px 0px 10px;dispplay:block;line-height:27px;"},M.onUpdateTrackPos=function(A){},M.removeAllChilds=function(A){for(var M=A.childNodes.length-1;M>=0;M--)this.removeAllChilds(A.childNodes[M]),A.removeChild(A.childNodes[M])},M.destroy=function(){this.playerUI&&this.removeAllChilds(this.playerUI),this.stop(),this.playerInstance&&(this.playerInstance.stop(),this.playerInstance.destroy(),delete this.playerInstance,this.playerInstance=null),clearInterval(this.LogoTimer),clearInterval(this.timeKbps)},M.changeToH5Video=function(A){if(this.initH5Flag){if(A==this.currentH5Status)return}else this.initH5Flag=!0;this.currentH5Status=A,A?(this.canvas&&(this.playerUI.removeChild(this.canvas),this.playerUI.removeChild(this.timeBox)),null==this.h5Video&&(this.h5Video=document.createElement("VIDEO")),this.h5Video.style="width:100%;height:100%;position:absolute;top:0px;left:0px;background: black;",this.h5Video.setAttribute("oncontextmenu","return false"),this.playerUI.appendChild(this.h5Video),this.playerUI.appendChild(this.timeBox)):(this.h5Video&&(this.playerUI.removeChild(this.h5Video),this.playerUI.removeChild(this.timeBox)),null==this.canvas&&(this.canvas=document.createElement("canvas")),this.canvas.style="width:100%;height:100%;position:absolute;top:0px;left:0px;background: black;",this.playerUI.appendChild(this.canvas),this.playerUI.appendChild(this.timeBox))},M._onConnectStatus=function(A,M){A.lodingBox.style=1==M?"display:none":"width:100%;height:100%;position: absolute;left:0px;top:0px;background:rgba(0,0,0,0.6);z-index:9;display:block"},M._onChangeTypeCallback=function(A,M,t){A.changeToH5Video(!t)},M.formatTime=function(A){return(Math.floor(A/3600)<10?"0"+Math.floor(A/3600):Math.floor(A/3600))+":"+(Math.floor(A/60%60)<10?"0"+Math.floor(A/60%60):Math.floor(A/60%60))+":"+(A=Math.floor(A%60)<10?"0"+Math.floor(A%60):Math.floor(A%60))},M._onUpdatePlayTime=function(A,M,t,g){if(A.showTimeLabel||(A.showTimeLabel=!0,g!==1/0&&g>0?A.playback():A.live()),g!==1/0&&!(g<1)&&A.showTimeLabel&&A.timeTrack&&g>0){var I=parseInt((t+1)/g*100);I!==parseInt(A.timeTrack.value)&&(A.timeTrack.value=I),A.onUpdateTrackPos(I),A.timeLabel&&void 0!==A.timeLabel&&(t<1?t=0:t>g&&(t=g),A.timeLabel.innerHTML=A.formatTime(t)+"/"+A.formatTime(g)),A.callbackFunc&&!this.callbackEnd&&(A.callbackFunc("playbackTime",parseInt(t)),100!=I||this.callbackEnd||(A.callbackFunc("ended",0),this.callbackEnd=!0))}},M.startLoding=function(){this.callbackFunc("startLoding"),this.lodingBox.style="width:100%;height:100%;position: absolute;left:0px;top:0px;background:rgba(0,0,0,0.6);z-index:9;"},M.endLoding=function(){this.callbackFunc("endLoding"),this.lodingBox.style="display:none"},M.detectionLogo=function(){var A=this;this.LogoTimer=setInterval((function(){null!=A.logo&&"青犀视频"==A.logo.title&&"http://www.tsingsee.com/"===A.logo.href&&"inline-block"==A.logo.style.display&&"1"==A.logo.style.opacity||A.stop()}),1e3)},M.play=function(A,M,t){var g=this;if(null!=this.playerUI){if(this.callbackFunc("play"),0==M&&null!=this.bigPlayBox&&(this.bigPlayBox.style="display:block"),A&&(this.url=A),null!=t&&(this.seekTimeSecs=t),!this.url||""===this.url||void 0===this.url)return console.log("url is empty..."),!1;if(-1!=this.url.indexOf("rtmp:"))return console.log("Unsupport rtmp stream."),!1;if(-1!=this.url.indexOf("rtsp:"))return console.log("Unsupport rtsp stream."),!1;if(-1==this.url.indexOf("http:")&&-1==this.url.indexOf("https:")&&-1==this.url.indexOf("ws://")&&-1==this.url.indexOf("wss://"))return console.log("Unsupport stream: "+this.url),!1;if(1!=M)return!0;null!=this.bigPlayBox&&(this.bigPlayBox.style="display:none"),this._onConnectStatus(this,1);var I=!1,e=!1,i=!1,T=this.url.substr(this.url.lastIndexOf(".")+1);if(T){var E=T.toLowerCase();E.indexOf("m3u8")>-1?I=!0:E.indexOf("flv")>-1?e=!0:E.indexOf("mp4")>-1&&(i=!0),I||e||i||(this.url.indexOf(".flv")>-1?e=!0:this.url.indexOf(".m3u8")>-1?I=!0:this.url.indexOf(".mp4")>-1&&(i=!0))}else e=!0;this.callbackEnd=!1;var N=!1;return I?(this.showTimeLabel=!1,null!=this.playerInstance&&this.playerInstance.isPause()||this.live(),this.isHLS=!1,null==this.playerInstance&&(this.playerInstance=new oA("m3u8",this.h5Video,null==this.offscreenCanvas?this.canvas:this.offscreenCanvas,this.decodeType,this._onChangeTypeCallback,this._onUpdatePlayTime,this._onConnectStatus,this,this.enableAudio,this.callbackFunc)),N=this.playerInstance.play(this.url,this.seekTimeSecs),this.enableAudio=this.defaultAudioStatus,!this.internalTriggerPlay&&this.enableAudio&&this.openAudio(),this.seekTimeSecs=0):i?(this.changeToH5Video(!0),this.showTimeLabel=!1,null!=this.playerInstance&&this.playerInstance.isPause()||this.live(),this.isHLS=!1,null==this.playerInstance&&(this.playerInstance=new aA({type:"mp4",url:A},this.h5Video,this._onUpdatePlayTime,this)),this.playerInstance.play(),this.enableAudio=this.defaultAudioStatus,!this.internalTriggerPlay&&this.enableAudio?this.openAudio():this.closeAudio(),N=!0):e&&("undefined"!=typeof OffscreenCanvas&&this.offscreenCanvas,this.isHLS,this.showTimeLabel=!1,this.live(),this.isHLS=!1,null==this.playerInstance&&(this.playerInstance=new oA("flv",this.h5Video,null==this.offscreenCanvas?this.canvas:this.offscreenCanvas,this.decodeType,this._onChangeTypeCallback,this._onUpdatePlayTime,this._onConnectStatus,this,this.enableAudio,this.callbackFunc)),N=this.playerInstance.play(this.url,0),this.enableAudio=this.defaultAudioStatus,!this.internalTriggerPlay&&this.enableAudio&&this.openAudio()),this.HideKbs||(this.domKbps.style="position:absolute;top:6px;right:115px;z-index: 19;font-size: 12px;color: #fff;",this.timeKbps=setInterval((function(){if(g.playerInstance.flvPlayer&&g.playerInstance.flvPlayer._transmuxer&&g.playerInstance.flvPlayer._transmuxer._controller&&g.playerInstance.flvPlayer._transmuxer._controller._ioctl){var A=parseInt(g.playerInstance.flvPlayer._transmuxer._controller._ioctl.currentSpeed),M=parseInt(g.playerInstance.flvPlayer._transmuxer._controller._ioctl.averageKBps);g.domKbps.innerText=8*M>=1024?(8*M/1024).toFixed(2)+"Mb/s":8*M+"Kb/s",g.cfKbs({currentKbs:8*A,averageKbs:8*M,currentKbps:A,averageKbps:M})}}),1e3)),null==this.playerInstance?(console.log("Unsupport url: "+A),!1):(N&&(this.playBtn.classList.remove("fa-play"),this.playBtn.classList.add("fa-pause"),this.playBtn.title="Pause",null!=this.bigPlayBox&&(this.bigPlayBox.classList.remove("fa-play"),this.bigPlayBox.classList.add("fa-pause"),this.bigPlayBox.style="display:none",this.bigPlayBox.title="Pause"),this.playFlag=!1),N)}},M.stop=function(){if(null!=this.playerUI)return this.callbackFunc("stop"),this.callbackEnd=!1,this._onConnectStatus(this,1),!!this.playerInstance&&(this.closeAudio(),this.playerInstance.stop(),this.showTimeLabel=!1,this.normal(),!0)},M.pause=function(){this.callbackFunc("pause"),this.playerInstance&&this.playerInstance.pause()},M.resume=function(){this.callbackFunc("resume"),this.playerInstance&&this.playerInstance.resume()},M.seekToSecs=function(A){this.playerInstance&&this.playerInstance.seek(A,0)},M.seekToPercent=function(A){this.playerInstance&&this.playerInstance.seek(A,1)},M.setTrack=function(A,M){this.playerInstance&&this.playerInstance.setTrack(A,M)},M.openAudio=function(){return this.callbackFunc("openAudio"),this.playerInstance&&(this.playerInstance.openAudio()?(this.soundButton.classList.add("fa-volume-up"),this.soundButton.classList.remove("fa-volume-off"),this.enableAudio=!0):(this.soundButton.classList.add("fa-volume-off"),this.soundButton.classList.remove("fa-volume-up"),this.enableAudio=!1)),this.enableAudio},M.closeAudio=function(){if(this.callbackFunc("closeAudio"),this.playerInstance){if(!this.enableAudio)return!0;this.playerInstance.closeAudio()?(this.soundButton.classList.add("fa-volume-off"),this.soundButton.classList.remove("fa-volume-up"),this.enableAudio=!1):(this.soundButton.classList.add("fa-volume-up"),this.soundButton.classList.remove("fa-volume-off"),this.enableAudio=!0)}return!this.enableAudio},M.showStaticsInfo=function(A){return null!=this.playerInstance&&(A?this.playerInstance.openStatinfo():this.playerInstance.closeStatinfo())},M.fullScreen=function(){if(this.fulls){this.callbackFunc("full"),this.full.classList.remove("fa-expand"),this.full.classList.add("fa-compress"),this.playerUI.requestFullscreen?this.playerUI.requestFullscreen():this.playerUI.mozRequestFullScreen?this.playerUI.mozRequestFullScreen():this.playerUI.webkitRequestFullscreen?this.playerUI.webkitRequestFullscreen():this.playerUI.msRequestFullscreen&&this.playerUI.msRequestFullscreen(),this.fulls=!1,this.full.title="Exit Fullscreen";var A=navigator.userAgent;A.indexOf("Android")>-1||A.indexOf("Adr"),A.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)}else this.callbackFunc("unFull"),this.full.classList.remove("fa-compress"),this.full.classList.add("fa-expand"),document.exitFullScreen?document.exitFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():element.msExitFullscreen&&element.msExitFullscreen(),this.fulls=!0,this.full.title="Fullscreen"},A}())},function(A,M,t){"use strict";t.r(M);var g=t(0),I=(t(58),t(22)),e=t.n(I);var i=function(A){for(var M,t=A.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')),g={},I=t.length;I--;)""!==t[I]&&((M=/([^=]*)=(.*)/.exec(t[I]).slice(1))[0]=M[0].replace(/^\s+|\s+$/g,""),M[1]=M[1].replace(/^\s+|\s+$/g,""),M[1]=M[1].replace(/^['"](.*)['"]$/g,"$1"),g[M[0]]=M[1]);return g},T=function(A){var M,t;function g(){var M;return(M=A.call(this)||this).customParsers=[],M.tagMappers=[],M}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t;var I=g.prototype;return I.push=function(A){var M,t,g=this;0!==(A=A.trim()).length&&("#"===A[0]?this.tagMappers.reduce((function(M,t){var g=t(A);return g===A?M:M.concat([g])}),[A]).forEach((function(A){for(var I=0;I<g.customParsers.length;I++)if(g.customParsers[I].call(g,A))return;if(0===A.indexOf("#EXT"))if(A=A.replace("\r",""),M=/^#EXTM3U/.exec(A))g.trigger("data",{type:"tag",tagType:"m3u"});else{if(M=/^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(A))return t={type:"tag",tagType:"inf"},M[1]&&(t.duration=parseFloat(M[1])),M[2]&&(t.title=M[2]),void g.trigger("data",t);if(M=/^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(A))return t={type:"tag",tagType:"targetduration"},M[1]&&(t.duration=parseInt(M[1],10)),void g.trigger("data",t);if(M=/^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(A))return t={type:"tag",tagType:"totalduration"},M[1]&&(t.duration=parseInt(M[1],10)),void g.trigger("data",t);if(M=/^#EXT-X-VERSION:?([0-9.]*)?/.exec(A))return t={type:"tag",tagType:"version"},M[1]&&(t.version=parseInt(M[1],10)),void g.trigger("data",t);if(M=/^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(A))return t={type:"tag",tagType:"media-sequence"},M[1]&&(t.number=parseInt(M[1],10)),void g.trigger("data",t);if(M=/^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(A))return t={type:"tag",tagType:"discontinuity-sequence"},M[1]&&(t.number=parseInt(M[1],10)),void g.trigger("data",t);if(M=/^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(A))return t={type:"tag",tagType:"playlist-type"},M[1]&&(t.playlistType=M[1]),void g.trigger("data",t);if(M=/^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(A))return t={type:"tag",tagType:"byterange"},M[1]&&(t.length=parseInt(M[1],10)),M[2]&&(t.offset=parseInt(M[2],10)),void g.trigger("data",t);if(M=/^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(A))return t={type:"tag",tagType:"allow-cache"},M[1]&&(t.allowed=!/NO/.test(M[1])),void g.trigger("data",t);if(M=/^#EXT-X-MAP:?(.*)$/.exec(A)){if(t={type:"tag",tagType:"map"},M[1]){var e=i(M[1]);if(e.URI&&(t.uri=e.URI),e.BYTERANGE){var T=e.BYTERANGE.split("@"),E=T[0],N=T[1];t.byterange={},E&&(t.byterange.length=parseInt(E,10)),N&&(t.byterange.offset=parseInt(N,10))}}g.trigger("data",t)}else if(M=/^#EXT-X-STREAM-INF:?(.*)$/.exec(A)){if(t={type:"tag",tagType:"stream-inf"},M[1]){if(t.attributes=i(M[1]),t.attributes.RESOLUTION){var n=t.attributes.RESOLUTION.split("x"),D={};n[0]&&(D.width=parseInt(n[0],10)),n[1]&&(D.height=parseInt(n[1],10)),t.attributes.RESOLUTION=D}t.attributes.BANDWIDTH&&(t.attributes.BANDWIDTH=parseInt(t.attributes.BANDWIDTH,10)),t.attributes["PROGRAM-ID"]&&(t.attributes["PROGRAM-ID"]=parseInt(t.attributes["PROGRAM-ID"],10))}g.trigger("data",t)}else{if(M=/^#EXT-X-MEDIA:?(.*)$/.exec(A))return t={type:"tag",tagType:"media"},M[1]&&(t.attributes=i(M[1])),void g.trigger("data",t);if(M=/^#EXT-X-ENDLIST/.exec(A))g.trigger("data",{type:"tag",tagType:"endlist"});else if(M=/^#EXT-X-DISCONTINUITY/.exec(A))g.trigger("data",{type:"tag",tagType:"discontinuity"});else{if(M=/^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(A))return t={type:"tag",tagType:"program-date-time"},M[1]&&(t.dateTimeString=M[1],t.dateTimeObject=new Date(M[1])),void g.trigger("data",t);if(M=/^#EXT-X-KEY:?(.*)$/.exec(A))return t={type:"tag",tagType:"key"},M[1]&&(t.attributes=i(M[1]),t.attributes.IV&&("0x"===t.attributes.IV.substring(0,2).toLowerCase()&&(t.attributes.IV=t.attributes.IV.substring(2)),t.attributes.IV=t.attributes.IV.match(/.{8}/g),t.attributes.IV[0]=parseInt(t.attributes.IV[0],16),t.attributes.IV[1]=parseInt(t.attributes.IV[1],16),t.attributes.IV[2]=parseInt(t.attributes.IV[2],16),t.attributes.IV[3]=parseInt(t.attributes.IV[3],16),t.attributes.IV=new Uint32Array(t.attributes.IV))),void g.trigger("data",t);if(M=/^#EXT-X-START:?(.*)$/.exec(A))return t={type:"tag",tagType:"start"},M[1]&&(t.attributes=i(M[1]),t.attributes["TIME-OFFSET"]=parseFloat(t.attributes["TIME-OFFSET"]),t.attributes.PRECISE=/YES/.test(t.attributes.PRECISE)),void g.trigger("data",t);if(M=/^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(A))return t={type:"tag",tagType:"cue-out-cont"},M[1]?t.data=M[1]:t.data="",void g.trigger("data",t);if(M=/^#EXT-X-CUE-OUT:?(.*)?$/.exec(A))return t={type:"tag",tagType:"cue-out"},M[1]?t.data=M[1]:t.data="",void g.trigger("data",t);if(M=/^#EXT-X-CUE-IN:?(.*)?$/.exec(A))return t={type:"tag",tagType:"cue-in"},M[1]?t.data=M[1]:t.data="",void g.trigger("data",t);g.trigger("data",{type:"tag",data:A.slice(4)})}}}else g.trigger("data",{type:"comment",text:A.slice(1)})})):this.trigger("data",{type:"uri",uri:A}))},I.addParser=function(A){var M=this,t=A.expression,g=A.customType,I=A.dataParser,e=A.segment;"function"!=typeof I&&(I=function(A){return A}),this.customParsers.push((function(A){if(t.exec(A))return M.trigger("data",{type:"custom",data:I(A),customType:g,segment:e}),!0}))},I.addTagMapper=function(A){var M=A.expression,t=A.map;this.tagMappers.push((function(A){return M.test(A)?t(A):A}))},g}(e.a);var E=function(A){var M,t;function g(){var M;return(M=A.call(this)||this).buffer="",M}return t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t,g.prototype.push=function(A){var M;for(this.buffer+=A,M=this.buffer.indexOf("\n");M>-1;M=this.buffer.indexOf("\n"))this.trigger("data",this.buffer.substring(0,M)),this.buffer=this.buffer.substring(M+1)},g}(e.a),N=t(110),n=t.n(N);var D=function(A){var M,t;function g(){var M;(M=A.call(this)||this).lineStream=new E,M.parseStream=new T,M.lineStream.pipe(M.parseStream);var t,g,I=function(A){if(void 0===A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return A}(M),e=[],i={},N=function(){},D={AUDIO:{},VIDEO:{},"CLOSED-CAPTIONS":{},SUBTITLES:{}},C=0;return M.manifest={allowCache:!0,discontinuityStarts:[],segments:[]},M.parseStream.on("data",(function(A){var M,T;({tag:function(){({"allow-cache":function(){this.manifest.allowCache=A.allowed,"allowed"in A||(this.trigger("info",{message:"defaulting allowCache to YES"}),this.manifest.allowCache=!0)},byterange:function(){var M={};"length"in A&&(i.byterange=M,M.length=A.length,"offset"in A||(this.trigger("info",{message:"defaulting offset to zero"}),A.offset=0)),"offset"in A&&(i.byterange=M,M.offset=A.offset)},endlist:function(){this.manifest.endList=!0},inf:function(){"mediaSequence"in this.manifest||(this.manifest.mediaSequence=0,this.trigger("info",{message:"defaulting media sequence to zero"})),"discontinuitySequence"in this.manifest||(this.manifest.discontinuitySequence=0,this.trigger("info",{message:"defaulting discontinuity sequence to zero"})),A.duration>0&&(i.duration=A.duration),0===A.duration&&(i.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=e},key:function(){if(A.attributes)if("NONE"!==A.attributes.METHOD)if(A.attributes.URI){if("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"===A.attributes.KEYFORMAT){return-1===["SAMPLE-AES","SAMPLE-AES-CTR","SAMPLE-AES-CENC"].indexOf(A.attributes.METHOD)?void this.trigger("warn",{message:"invalid key method provided for Widevine"}):("SAMPLE-AES-CENC"===A.attributes.METHOD&&this.trigger("warn",{message:"SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead"}),"data:text/plain;base64,"!==A.attributes.URI.substring(0,23)?void this.trigger("warn",{message:"invalid key URI provided for Widevine"}):A.attributes.KEYID&&"0x"===A.attributes.KEYID.substring(0,2)?void(this.manifest.contentProtection={"com.widevine.alpha":{attributes:{schemeIdUri:A.attributes.KEYFORMAT,keyId:A.attributes.KEYID.substring(2)},pssh:n()(A.attributes.URI.split(",")[1])}}):void this.trigger("warn",{message:"invalid key ID provided for Widevine"}))}A.attributes.METHOD||this.trigger("warn",{message:"defaulting key method to AES-128"}),g={method:A.attributes.METHOD||"AES-128",uri:A.attributes.URI},void 0!==A.attributes.IV&&(g.iv=A.attributes.IV)}else this.trigger("warn",{message:"ignoring key declaration without URI"});else g=null;else this.trigger("warn",{message:"ignoring key declaration without attribute list"})},"media-sequence":function(){isFinite(A.number)?this.manifest.mediaSequence=A.number:this.trigger("warn",{message:"ignoring invalid media sequence: "+A.number})},"discontinuity-sequence":function(){isFinite(A.number)?(this.manifest.discontinuitySequence=A.number,C=A.number):this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+A.number})},"playlist-type":function(){/VOD|EVENT/.test(A.playlistType)?this.manifest.playlistType=A.playlistType:this.trigger("warn",{message:"ignoring unknown playlist type: "+A.playlist})},map:function(){t={},A.uri&&(t.uri=A.uri),A.byterange&&(t.byterange=A.byterange)},"stream-inf":function(){this.manifest.playlists=e,this.manifest.mediaGroups=this.manifest.mediaGroups||D,A.attributes?(i.attributes||(i.attributes={}),Object.assign(i.attributes,A.attributes)):this.trigger("warn",{message:"ignoring empty stream-inf attributes"})},media:function(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||D,A.attributes&&A.attributes.TYPE&&A.attributes["GROUP-ID"]&&A.attributes.NAME){var t=this.manifest.mediaGroups[A.attributes.TYPE];t[A.attributes["GROUP-ID"]]=t[A.attributes["GROUP-ID"]]||{},M=t[A.attributes["GROUP-ID"]],(T={default:/yes/i.test(A.attributes.DEFAULT)}).default?T.autoselect=!0:T.autoselect=/yes/i.test(A.attributes.AUTOSELECT),A.attributes.LANGUAGE&&(T.language=A.attributes.LANGUAGE),A.attributes.URI&&(T.uri=A.attributes.URI),A.attributes["INSTREAM-ID"]&&(T.instreamId=A.attributes["INSTREAM-ID"]),A.attributes.CHARACTERISTICS&&(T.characteristics=A.attributes.CHARACTERISTICS),A.attributes.FORCED&&(T.forced=/yes/i.test(A.attributes.FORCED)),M[A.attributes.NAME]=T}else this.trigger("warn",{message:"ignoring incomplete or missing media group"})},discontinuity:function(){C+=1,i.discontinuity=!0,this.manifest.discontinuityStarts.push(e.length)},"program-date-time":function(){void 0===this.manifest.dateTimeString&&(this.manifest.dateTimeString=A.dateTimeString,this.manifest.dateTimeObject=A.dateTimeObject),i.dateTimeString=A.dateTimeString,i.dateTimeObject=A.dateTimeObject},targetduration:function(){!isFinite(A.duration)||A.duration<0?this.trigger("warn",{message:"ignoring invalid target duration: "+A.duration}):this.manifest.targetDuration=A.duration},totalduration:function(){!isFinite(A.duration)||A.duration<0?this.trigger("warn",{message:"ignoring invalid total duration: "+A.duration}):this.manifest.totalDuration=A.duration},start:function(){A.attributes&&!isNaN(A.attributes["TIME-OFFSET"])?this.manifest.start={timeOffset:A.attributes["TIME-OFFSET"],precise:A.attributes.PRECISE}:this.trigger("warn",{message:"ignoring start declaration without appropriate attribute list"})},"cue-out":function(){i.cueOut=A.data},"cue-out-cont":function(){i.cueOutCont=A.data},"cue-in":function(){i.cueIn=A.data}}[A.tagType]||N).call(I)},uri:function(){i.uri=A.uri,e.push(i),this.manifest.targetDuration&&!("duration"in i)&&(this.trigger("warn",{message:"defaulting segment duration to the target duration"}),i.duration=this.manifest.targetDuration),g&&(i.key=g),i.timeline=C,t&&(i.map=t),i={}},comment:function(){},custom:function(){A.segment?(i.custom=i.custom||{},i.custom[A.customType]=A.data):(this.manifest.custom=this.manifest.custom||{},this.manifest.custom[A.customType]=A.data)}})[A.type].call(I)})),M}t=A,(M=g).prototype=Object.create(t.prototype),M.prototype.constructor=M,M.__proto__=t;var I=g.prototype;return I.push=function(A){this.lineStream.push(A)},I.end=function(){this.lineStream.push("\n")},I.addParser=function(A){this.parseStream.addParser(A)},I.addTagMapper=function(A){this.parseStream.addTagMapper(A)},g}(e.a),C=new WebAssembly.Memory({initial:256,maximum:256});new WebAssembly.Table({initial:0,maximum:0,element:"anyfunc"}),C.buffer.byteLength,M.default=function(A){A.url="",A.canvas=null,A.webGLPlayer=null,A.videoSampleQueue=[],A.audioSampleQueue=[],A.videoInterval=40,A.lastRenderTime=0,A.intervalVal=0,A.renderFrameCount=0,A.requestAbort=!1,A.pause=!1,A.cbStreamData=!0,A.reConnect=!0,A.isLiveStream=!0,A.seekTime=0,A.totalDuration=0,A.playDuration=0,A.startVideoPts=0,A.startAudioPts=0,A.tsFileList=[],A.getFileIndex=0,A.lastTsFile="",A.isFirstFile=!0,A.lastTsFileSequence=0,A.sequenceExceptNum=0,A.tsDemuxer=null,A.getFileCount=100,A.intervalHandle=-1,A.intervalValue=40,A.startDownloadTimeSecs=0;var M=function(A,M){for(var t=M,g=0,I=0;I>=0;)(I=t.indexOf("/"))>=0?(t=t.substring(I+1),g+=I+1):t=M.substring(0,g);return""!==A?t+A:t},t=function(){var M={cmd:g.k,workerId:g.b};A.postMessage(M),A.getFileIndex=0},I=function I(e,i){if(A.url=e,1!=A._requestAbort){if(!A.pause&&(!(A.totalDuration>0)||A.isLiveStream)){var T=new XMLHttpRequest;T.open("get",e,!0),T.responseType="text",T.onreadystatechange=function(){if(4!=T.readyState||200!=T.status&&304!=T.status)4===T.readyState&&410===T.status&&A.postMessage({cmd:410,code:T.status,msg:T.responseText});else{var t=new D;t.push(T.responseText),t.end();var e=t.manifest;if("undefined"!==t.manifest.endList&&1==t.manifest.endList?A.isLiveStream=!1:A.isLiveStream=!0,e.segments.length<1){console.log("Not found ts file...   waiting for reconnect...");var E=A;return void g.i(3e3).then((function(){I(E.url,1)}))}var N=0,n=0;if(A.isLiveStream)if(""==A.lastTsFile){for(N=0;N<e.segments.length;N++){B={filename:c=M(e.segments[N].uri,A.url),duration:e.segments[N].duration};A.tsFileList.push(B)}var C=0;e.segments.length>2&&(C=e.segments.length-1-1),A.getFileIndex=C,A.lastTsFile=e.segments[C].uri}else{C=-1;var r=!1;for(N=0;N<e.segments.length;N++){c=M(e.segments[N].uri,A.url);if(e.segments[N].uri!==A.lastTsFile)if(C>=0){B={filename:c,duration:e.segments[N].duration};A.totalDuration+=e.segments[N].duration,A.tsFileList.push(B),r||(A.lastTsFile=e.segments[N].uri,r=!0)}else;else C=N,A.tsFileList.length=0,A.tsFileList=[],A.getFileIndex=0}if(C<0)for(A.tsFileList.length=0,A.tsFileList=[],A.getFileIndex=0,N=0;N<e.segments.length;N++){B={filename:c=M(e.segments[N].uri,A.url),duration:e.segments[N].duration};A.totalDuration+=e.segments[N].duration,A.tsFileList.push(B),A.lastTsFile=e.segments[N].uri}if(1===i)return}else{for(A.seekTime>0&&(A.getFileIndex=-1),N=0;N<e.segments.length;N++){var c=M(e.segments[N].uri,A.url),o=0;for(n=0;n<A.tsFileList.length;n++)if(A.tsFileList[n].filename===c){o=1;break}if(0==o){A.seekTime>0&&A.totalDuration>=A.seekTime&&A.getFileIndex<0&&(A.getFileIndex=N);var B={filename:c,duration:e.segments[N].duration};A.totalDuration+=e.segments[N].duration,0!==N||A.isLiveStream||A.tsFileList.push(B),A.tsFileList.push(B)}}A.getFileIndex<0&&(A.getFileIndex=0);var Q={cmd:g.s,duration:A.totalDuration,live:A.isLiveStream,workerId:g.b};A.postMessage(Q)}if(A.tsFileList.length>0&&1==i){Q={cmd:g.u,workerId:g.b};A.postMessage(Q)}}},T.send()}}else t()},e=function M(){if(!(A.getFileCount++<1)){var e=!1;if(!A.pause)if(1!=A._requestAbort){if(A.isLiveStream){if(A.getFileCount=0,A.getFileIndex>=A.tsFileList.length||3==A.getFileCount)return void I(A.url,1);e=!0}else if(A.getFileIndex>=A.tsFileList.length){A.getFileIndex++;var i={cmd:g.p,workerId:g.b};return void A.postMessage(i)}var T=A.tsFileList[A.getFileIndex].filename;if(A.isLiveStream){var E=function(A){var M=A.split("-"),t=M.length;if(t>0){var g=M[t-1].split(".");if(g.length>0)return g[0]}return""}(T),N=parseInt(E);if(N>0&&N>A.lastTsFileSequence+1){A.sequenceExceptNum++;i={cmd:g.x,workerId:g.b,fileSequence:A.sequenceExceptNum};A.postMessage(i)}A.lastTsFileSequence=N}var n=new XMLHttpRequest;n.open("get",T,!0),n.responseType="arraybuffer",n.onreadystatechange=function(){if(404==n.status)return g.d("current file not found.  refresh list..."),void I(A.url,1);if(4==n.readyState&&(200==n.status||304==n.status)){var t=new Uint8Array(n.response),i=0;for(i=0;i<A.getFileIndex;i++)A.tsFileList[i].duration;var T={cmd:g.o,workerId:g.b,mediaType:1,codecId:27,flag:0,pts:0,playTimeSec:0,dat:t};if(A.postMessage(T,[T.dat.buffer]),A.intervalHandle>=0&&(clearInterval(A.intervalHandle),A.intervalHandle=-1),!A.pause){var E=A.getFileIndex;E>=0&&E<A.tsFileList.length?A.intervalValue=1e3*A.tsFileList[E].duration-600:A.intervalValue=2e3,A.isFirstFile&&(A.isFirstFile=!1,A.intervalValue>900&&(A.intervalValue-=900)),A.intervalHandle=setInterval(M,A.intervalValue)}A.getFileCount=100,A.getFileIndex++,A.getFileIndex>=0&&(A.getFileIndex,A.tsFileList.length);T={cmd:g.r,workerId:g.b};if(A.postMessage(T),e)return void I(A.url,0)}},n.send()}else t()}};A.addEventListener("message",(function(M){var i=M.data;switch(i.cmd){case g.u:A.url=i.url,A.seekTime=i.time,I(i.url,1);break;case g.q:0==i.t&&e();break;case g.w:I(A.url,1);break;case g.z:var T=i.time;1==i.type&&(T=i.time/100*A.totalDuration);var E=!1,N=0,n=0;for(n=0;n<A.tsFileList.length;n++)if((N+=A.tsFileList[n].duration)>T){A.getFileIndex=n,e();var D={cmd:g.z,type:i.type,time:T};A.postMessage(D),E=!0;break}if(!E){D={cmd:g.z,type:i.type,time:T};A.postMessage(D)}break;case g.v:A.pause=!0;break;case g.y:A.pause=!1,I(A.url,1);break;case g.k:A._requestAbort=!0,A.seekTime=0,t()}}))}}]).default}));
diff --git a/web_src/static/js/ZLMRTCClient.js b/web_src/static/js/ZLMRTCClient.js
deleted file mode 100644
index 288028c..0000000
--- a/web_src/static/js/ZLMRTCClient.js
+++ /dev/null
@@ -1,7546 +0,0 @@
-var ZLMRTCClient = (function (exports) {
-	'use strict';
-
-	const Events$1 = {
-	  WEBRTC_NOT_SUPPORT: 'WEBRTC_NOT_SUPPORT',
-	  WEBRTC_ICE_CANDIDATE_ERROR: 'WEBRTC_ICE_CANDIDATE_ERROR',
-	  WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED: 'WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED',
-	  WEBRTC_ON_REMOTE_STREAMS: 'WEBRTC_ON_REMOTE_STREAMS',
-	  WEBRTC_ON_LOCAL_STREAM: 'WEBRTC_ON_LOCAL_STREAM'
-	};
-
-	const VERSION = '1.0.1';
-	const BUILD_DATE = 'Mon Apr 05 2021 10:22:48 GMT+0800 (中国标准时间)';
-
-	// Copyright (C) <2018> Intel Corporation
-	//
-	// SPDX-License-Identifier: Apache-2.0
-	// eslint-disable-next-line require-jsdoc
-	function isFirefox() {
-	  return window.navigator.userAgent.match('Firefox') !== null;
-	} // eslint-disable-next-line require-jsdoc
-
-	function isChrome() {
-	  return window.navigator.userAgent.match('Chrome') !== null;
-	} // eslint-disable-next-line require-jsdoc
-
-	function isEdge() {
-	  return window.navigator.userAgent.match(/Edge\/(\d+).(\d+)$/) !== null;
-	} // eslint-disable-next-line require-jsdoc
-
-	// Copyright (C) <2018> Intel Corporation
-	/**
-	 * @class AudioSourceInfo
-	 * @classDesc Source info about an audio track. Values: 'mic', 'screen-cast', 'file', 'mixed'.
-	 * @memberOf Owt.Base
-	 * @readonly
-	 * @enum {string}
-	 */
-
-	const AudioSourceInfo = {
-	  MIC: 'mic',
-	  SCREENCAST: 'screen-cast',
-	  FILE: 'file',
-	  MIXED: 'mixed'
-	};
-	/**
-	 * @class VideoSourceInfo
-	 * @classDesc Source info about a video track. Values: 'camera', 'screen-cast', 'file', 'mixed'.
-	 * @memberOf Owt.Base
-	 * @readonly
-	 * @enum {string}
-	 */
-
-	const VideoSourceInfo = {
-	  CAMERA: 'camera',
-	  SCREENCAST: 'screen-cast',
-	  FILE: 'file',
-	  MIXED: 'mixed'
-	};
-	/**
-	 * @class TrackKind
-	 * @classDesc Kind of a track. Values: 'audio' for audio track, 'video' for video track, 'av' for both audio and video tracks.
-	 * @memberOf Owt.Base
-	 * @readonly
-	 * @enum {string}
-	 */
-
-	const TrackKind = {
-	  /**
-	   * Audio tracks.
-	   * @type string
-	   */
-	  AUDIO: 'audio',
-
-	  /**
-	   * Video tracks.
-	   * @type string
-	   */
-	  VIDEO: 'video',
-
-	  /**
-	   * Both audio and video tracks.
-	   * @type string
-	   */
-	  AUDIO_AND_VIDEO: 'av'
-	};
-	/**
-	 * @class Resolution
-	 * @memberOf Owt.Base
-	 * @classDesc The Resolution defines the size of a rectangle.
-	 * @constructor
-	 * @param {number} width
-	 * @param {number} height
-	 */
-
-	class Resolution {
-	  // eslint-disable-next-line require-jsdoc
-	  constructor(width, height) {
-	    /**
-	     * @member {number} width
-	     * @instance
-	     * @memberof Owt.Base.Resolution
-	     */
-	    this.width = width;
-	    /**
-	     * @member {number} height
-	     * @instance
-	     * @memberof Owt.Base.Resolution
-	     */
-
-	    this.height = height;
-	  }
-
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	let logDisabled_ = true;
-	let deprecationWarnings_ = true;
-
-	/**
-	 * Extract browser version out of the provided user agent string.
-	 *
-	 * @param {!string} uastring userAgent string.
-	 * @param {!string} expr Regular expression used as match criteria.
-	 * @param {!number} pos position in the version string to be returned.
-	 * @return {!number} browser version.
-	 */
-	function extractVersion(uastring, expr, pos) {
-	  const match = uastring.match(expr);
-	  return match && match.length >= pos && parseInt(match[pos], 10);
-	}
-
-	// Wraps the peerconnection event eventNameToWrap in a function
-	// which returns the modified event object (or false to prevent
-	// the event).
-	function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-	  const proto = window.RTCPeerConnection.prototype;
-	  const nativeAddEventListener = proto.addEventListener;
-	  proto.addEventListener = function(nativeEventName, cb) {
-	    if (nativeEventName !== eventNameToWrap) {
-	      return nativeAddEventListener.apply(this, arguments);
-	    }
-	    const wrappedCallback = (e) => {
-	      const modifiedEvent = wrapper(e);
-	      if (modifiedEvent) {
-	        if (cb.handleEvent) {
-	          cb.handleEvent(modifiedEvent);
-	        } else {
-	          cb(modifiedEvent);
-	        }
-	      }
-	    };
-	    this._eventMap = this._eventMap || {};
-	    if (!this._eventMap[eventNameToWrap]) {
-	      this._eventMap[eventNameToWrap] = new Map();
-	    }
-	    this._eventMap[eventNameToWrap].set(cb, wrappedCallback);
-	    return nativeAddEventListener.apply(this, [nativeEventName,
-	      wrappedCallback]);
-	  };
-
-	  const nativeRemoveEventListener = proto.removeEventListener;
-	  proto.removeEventListener = function(nativeEventName, cb) {
-	    if (nativeEventName !== eventNameToWrap || !this._eventMap
-	        || !this._eventMap[eventNameToWrap]) {
-	      return nativeRemoveEventListener.apply(this, arguments);
-	    }
-	    if (!this._eventMap[eventNameToWrap].has(cb)) {
-	      return nativeRemoveEventListener.apply(this, arguments);
-	    }
-	    const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);
-	    this._eventMap[eventNameToWrap].delete(cb);
-	    if (this._eventMap[eventNameToWrap].size === 0) {
-	      delete this._eventMap[eventNameToWrap];
-	    }
-	    if (Object.keys(this._eventMap).length === 0) {
-	      delete this._eventMap;
-	    }
-	    return nativeRemoveEventListener.apply(this, [nativeEventName,
-	      unwrappedCb]);
-	  };
-
-	  Object.defineProperty(proto, 'on' + eventNameToWrap, {
-	    get() {
-	      return this['_on' + eventNameToWrap];
-	    },
-	    set(cb) {
-	      if (this['_on' + eventNameToWrap]) {
-	        this.removeEventListener(eventNameToWrap,
-	            this['_on' + eventNameToWrap]);
-	        delete this['_on' + eventNameToWrap];
-	      }
-	      if (cb) {
-	        this.addEventListener(eventNameToWrap,
-	            this['_on' + eventNameToWrap] = cb);
-	      }
-	    },
-	    enumerable: true,
-	    configurable: true
-	  });
-	}
-
-	function disableLog(bool) {
-	  if (typeof bool !== 'boolean') {
-	    return new Error('Argument type: ' + typeof bool +
-	        '. Please use a boolean.');
-	  }
-	  logDisabled_ = bool;
-	  return (bool) ? 'adapter.js logging disabled' :
-	      'adapter.js logging enabled';
-	}
-
-	/**
-	 * Disable or enable deprecation warnings
-	 * @param {!boolean} bool set to true to disable warnings.
-	 */
-	function disableWarnings(bool) {
-	  if (typeof bool !== 'boolean') {
-	    return new Error('Argument type: ' + typeof bool +
-	        '. Please use a boolean.');
-	  }
-	  deprecationWarnings_ = !bool;
-	  return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');
-	}
-
-	function log$1() {
-	  if (typeof window === 'object') {
-	    if (logDisabled_) {
-	      return;
-	    }
-	    if (typeof console !== 'undefined' && typeof console.log === 'function') {
-	      console.log.apply(console, arguments);
-	    }
-	  }
-	}
-
-	/**
-	 * Shows a deprecation warning suggesting the modern and spec-compatible API.
-	 */
-	function deprecated(oldMethod, newMethod) {
-	  if (!deprecationWarnings_) {
-	    return;
-	  }
-	  console.warn(oldMethod + ' is deprecated, please use ' + newMethod +
-	      ' instead.');
-	}
-
-	/**
-	 * Browser detector.
-	 *
-	 * @return {object} result containing browser and version
-	 *     properties.
-	 */
-	function detectBrowser(window) {
-	  // Returned result object.
-	  const result = {browser: null, version: null};
-
-	  // Fail early if it's not a browser
-	  if (typeof window === 'undefined' || !window.navigator) {
-	    result.browser = 'Not a browser.';
-	    return result;
-	  }
-
-	  const {navigator} = window;
-
-	  if (navigator.mozGetUserMedia) { // Firefox.
-	    result.browser = 'firefox';
-	    result.version = extractVersion(navigator.userAgent,
-	        /Firefox\/(\d+)\./, 1);
-	  } else if (navigator.webkitGetUserMedia ||
-	      (window.isSecureContext === false && window.webkitRTCPeerConnection &&
-	       !window.RTCIceGatherer)) {
-	    // Chrome, Chromium, Webview, Opera.
-	    // Version matches Chrome/WebRTC version.
-	    // Chrome 74 removed webkitGetUserMedia on http as well so we need the
-	    // more complicated fallback to webkitRTCPeerConnection.
-	    result.browser = 'chrome';
-	    result.version = extractVersion(navigator.userAgent,
-	        /Chrom(e|ium)\/(\d+)\./, 2);
-	  } else if (navigator.mediaDevices &&
-	      navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { // Edge.
-	    result.browser = 'edge';
-	    result.version = extractVersion(navigator.userAgent,
-	        /Edge\/(\d+).(\d+)$/, 2);
-	  } else if (window.RTCPeerConnection &&
-	      navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { // Safari.
-	    result.browser = 'safari';
-	    result.version = extractVersion(navigator.userAgent,
-	        /AppleWebKit\/(\d+)\./, 1);
-	    result.supportsUnifiedPlan = window.RTCRtpTransceiver &&
-	        'currentDirection' in window.RTCRtpTransceiver.prototype;
-	  } else { // Default fallthrough: not supported.
-	    result.browser = 'Not a supported browser.';
-	    return result;
-	  }
-
-	  return result;
-	}
-
-	/**
-	 * Checks if something is an object.
-	 *
-	 * @param {*} val The something you want to check.
-	 * @return true if val is an object, false otherwise.
-	 */
-	function isObject$1(val) {
-	  return Object.prototype.toString.call(val) === '[object Object]';
-	}
-
-	/**
-	 * Remove all empty objects and undefined values
-	 * from a nested object -- an enhanced and vanilla version
-	 * of Lodash's `compact`.
-	 */
-	function compactObject(data) {
-	  if (!isObject$1(data)) {
-	    return data;
-	  }
-
-	  return Object.keys(data).reduce(function(accumulator, key) {
-	    const isObj = isObject$1(data[key]);
-	    const value = isObj ? compactObject(data[key]) : data[key];
-	    const isEmptyObject = isObj && !Object.keys(value).length;
-	    if (value === undefined || isEmptyObject) {
-	      return accumulator;
-	    }
-	    return Object.assign(accumulator, {[key]: value});
-	  }, {});
-	}
-
-	/* iterates the stats graph recursively. */
-	function walkStats(stats, base, resultSet) {
-	  if (!base || resultSet.has(base.id)) {
-	    return;
-	  }
-	  resultSet.set(base.id, base);
-	  Object.keys(base).forEach(name => {
-	    if (name.endsWith('Id')) {
-	      walkStats(stats, stats.get(base[name]), resultSet);
-	    } else if (name.endsWith('Ids')) {
-	      base[name].forEach(id => {
-	        walkStats(stats, stats.get(id), resultSet);
-	      });
-	    }
-	  });
-	}
-
-	/* filter getStats for a sender/receiver track. */
-	function filterStats(result, track, outbound) {
-	  const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';
-	  const filteredResult = new Map();
-	  if (track === null) {
-	    return filteredResult;
-	  }
-	  const trackStats = [];
-	  result.forEach(value => {
-	    if (value.type === 'track' &&
-	        value.trackIdentifier === track.id) {
-	      trackStats.push(value);
-	    }
-	  });
-	  trackStats.forEach(trackStat => {
-	    result.forEach(stats => {
-	      if (stats.type === streamStatsType && stats.trackId === trackStat.id) {
-	        walkStats(result, stats, filteredResult);
-	      }
-	    });
-	  });
-	  return filteredResult;
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-	const logging = log$1;
-
-	function shimGetUserMedia$3(window, browserDetails) {
-	  const navigator = window && window.navigator;
-
-	  if (!navigator.mediaDevices) {
-	    return;
-	  }
-
-	  const constraintsToChrome_ = function(c) {
-	    if (typeof c !== 'object' || c.mandatory || c.optional) {
-	      return c;
-	    }
-	    const cc = {};
-	    Object.keys(c).forEach(key => {
-	      if (key === 'require' || key === 'advanced' || key === 'mediaSource') {
-	        return;
-	      }
-	      const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};
-	      if (r.exact !== undefined && typeof r.exact === 'number') {
-	        r.min = r.max = r.exact;
-	      }
-	      const oldname_ = function(prefix, name) {
-	        if (prefix) {
-	          return prefix + name.charAt(0).toUpperCase() + name.slice(1);
-	        }
-	        return (name === 'deviceId') ? 'sourceId' : name;
-	      };
-	      if (r.ideal !== undefined) {
-	        cc.optional = cc.optional || [];
-	        let oc = {};
-	        if (typeof r.ideal === 'number') {
-	          oc[oldname_('min', key)] = r.ideal;
-	          cc.optional.push(oc);
-	          oc = {};
-	          oc[oldname_('max', key)] = r.ideal;
-	          cc.optional.push(oc);
-	        } else {
-	          oc[oldname_('', key)] = r.ideal;
-	          cc.optional.push(oc);
-	        }
-	      }
-	      if (r.exact !== undefined && typeof r.exact !== 'number') {
-	        cc.mandatory = cc.mandatory || {};
-	        cc.mandatory[oldname_('', key)] = r.exact;
-	      } else {
-	        ['min', 'max'].forEach(mix => {
-	          if (r[mix] !== undefined) {
-	            cc.mandatory = cc.mandatory || {};
-	            cc.mandatory[oldname_(mix, key)] = r[mix];
-	          }
-	        });
-	      }
-	    });
-	    if (c.advanced) {
-	      cc.optional = (cc.optional || []).concat(c.advanced);
-	    }
-	    return cc;
-	  };
-
-	  const shimConstraints_ = function(constraints, func) {
-	    if (browserDetails.version >= 61) {
-	      return func(constraints);
-	    }
-	    constraints = JSON.parse(JSON.stringify(constraints));
-	    if (constraints && typeof constraints.audio === 'object') {
-	      const remap = function(obj, a, b) {
-	        if (a in obj && !(b in obj)) {
-	          obj[b] = obj[a];
-	          delete obj[a];
-	        }
-	      };
-	      constraints = JSON.parse(JSON.stringify(constraints));
-	      remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');
-	      remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');
-	      constraints.audio = constraintsToChrome_(constraints.audio);
-	    }
-	    if (constraints && typeof constraints.video === 'object') {
-	      // Shim facingMode for mobile & surface pro.
-	      let face = constraints.video.facingMode;
-	      face = face && ((typeof face === 'object') ? face : {ideal: face});
-	      const getSupportedFacingModeLies = browserDetails.version < 66;
-
-	      if ((face && (face.exact === 'user' || face.exact === 'environment' ||
-	                    face.ideal === 'user' || face.ideal === 'environment')) &&
-	          !(navigator.mediaDevices.getSupportedConstraints &&
-	            navigator.mediaDevices.getSupportedConstraints().facingMode &&
-	            !getSupportedFacingModeLies)) {
-	        delete constraints.video.facingMode;
-	        let matches;
-	        if (face.exact === 'environment' || face.ideal === 'environment') {
-	          matches = ['back', 'rear'];
-	        } else if (face.exact === 'user' || face.ideal === 'user') {
-	          matches = ['front'];
-	        }
-	        if (matches) {
-	          // Look for matches in label, or use last cam for back (typical).
-	          return navigator.mediaDevices.enumerateDevices()
-	          .then(devices => {
-	            devices = devices.filter(d => d.kind === 'videoinput');
-	            let dev = devices.find(d => matches.some(match =>
-	              d.label.toLowerCase().includes(match)));
-	            if (!dev && devices.length && matches.includes('back')) {
-	              dev = devices[devices.length - 1]; // more likely the back cam
-	            }
-	            if (dev) {
-	              constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :
-	                                                        {ideal: dev.deviceId};
-	            }
-	            constraints.video = constraintsToChrome_(constraints.video);
-	            logging('chrome: ' + JSON.stringify(constraints));
-	            return func(constraints);
-	          });
-	        }
-	      }
-	      constraints.video = constraintsToChrome_(constraints.video);
-	    }
-	    logging('chrome: ' + JSON.stringify(constraints));
-	    return func(constraints);
-	  };
-
-	  const shimError_ = function(e) {
-	    if (browserDetails.version >= 64) {
-	      return e;
-	    }
-	    return {
-	      name: {
-	        PermissionDeniedError: 'NotAllowedError',
-	        PermissionDismissedError: 'NotAllowedError',
-	        InvalidStateError: 'NotAllowedError',
-	        DevicesNotFoundError: 'NotFoundError',
-	        ConstraintNotSatisfiedError: 'OverconstrainedError',
-	        TrackStartError: 'NotReadableError',
-	        MediaDeviceFailedDueToShutdown: 'NotAllowedError',
-	        MediaDeviceKillSwitchOn: 'NotAllowedError',
-	        TabCaptureError: 'AbortError',
-	        ScreenCaptureError: 'AbortError',
-	        DeviceCaptureError: 'AbortError'
-	      }[e.name] || e.name,
-	      message: e.message,
-	      constraint: e.constraint || e.constraintName,
-	      toString() {
-	        return this.name + (this.message && ': ') + this.message;
-	      }
-	    };
-	  };
-
-	  const getUserMedia_ = function(constraints, onSuccess, onError) {
-	    shimConstraints_(constraints, c => {
-	      navigator.webkitGetUserMedia(c, onSuccess, e => {
-	        if (onError) {
-	          onError(shimError_(e));
-	        }
-	      });
-	    });
-	  };
-	  navigator.getUserMedia = getUserMedia_.bind(navigator);
-
-	  // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia
-	  // function which returns a Promise, it does not accept spec-style
-	  // constraints.
-	  if (navigator.mediaDevices.getUserMedia) {
-	    const origGetUserMedia = navigator.mediaDevices.getUserMedia.
-	        bind(navigator.mediaDevices);
-	    navigator.mediaDevices.getUserMedia = function(cs) {
-	      return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {
-	        if (c.audio && !stream.getAudioTracks().length ||
-	            c.video && !stream.getVideoTracks().length) {
-	          stream.getTracks().forEach(track => {
-	            track.stop();
-	          });
-	          throw new DOMException('', 'NotFoundError');
-	        }
-	        return stream;
-	      }, e => Promise.reject(shimError_(e))));
-	    };
-	  }
-	}
-
-	/*
-	 *  Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-	function shimGetDisplayMedia$2(window, getSourceId) {
-	  if (window.navigator.mediaDevices &&
-	    'getDisplayMedia' in window.navigator.mediaDevices) {
-	    return;
-	  }
-	  if (!(window.navigator.mediaDevices)) {
-	    return;
-	  }
-	  // getSourceId is a function that returns a promise resolving with
-	  // the sourceId of the screen/window/tab to be shared.
-	  if (typeof getSourceId !== 'function') {
-	    console.error('shimGetDisplayMedia: getSourceId argument is not ' +
-	        'a function');
-	    return;
-	  }
-	  window.navigator.mediaDevices.getDisplayMedia =
-	    function getDisplayMedia(constraints) {
-	      return getSourceId(constraints)
-	        .then(sourceId => {
-	          const widthSpecified = constraints.video && constraints.video.width;
-	          const heightSpecified = constraints.video &&
-	            constraints.video.height;
-	          const frameRateSpecified = constraints.video &&
-	            constraints.video.frameRate;
-	          constraints.video = {
-	            mandatory: {
-	              chromeMediaSource: 'desktop',
-	              chromeMediaSourceId: sourceId,
-	              maxFrameRate: frameRateSpecified || 3
-	            }
-	          };
-	          if (widthSpecified) {
-	            constraints.video.mandatory.maxWidth = widthSpecified;
-	          }
-	          if (heightSpecified) {
-	            constraints.video.mandatory.maxHeight = heightSpecified;
-	          }
-	          return window.navigator.mediaDevices.getUserMedia(constraints);
-	        });
-	    };
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimMediaStream(window) {
-	  window.MediaStream = window.MediaStream || window.webkitMediaStream;
-	}
-
-	function shimOnTrack$1(window) {
-	  if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in
-	      window.RTCPeerConnection.prototype)) {
-	    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {
-	      get() {
-	        return this._ontrack;
-	      },
-	      set(f) {
-	        if (this._ontrack) {
-	          this.removeEventListener('track', this._ontrack);
-	        }
-	        this.addEventListener('track', this._ontrack = f);
-	      },
-	      enumerable: true,
-	      configurable: true
-	    });
-	    const origSetRemoteDescription =
-	        window.RTCPeerConnection.prototype.setRemoteDescription;
-	    window.RTCPeerConnection.prototype.setRemoteDescription =
-	      function setRemoteDescription() {
-	        if (!this._ontrackpoly) {
-	          this._ontrackpoly = (e) => {
-	            // onaddstream does not fire when a track is added to an existing
-	            // stream. But stream.onaddtrack is implemented so we use that.
-	            e.stream.addEventListener('addtrack', te => {
-	              let receiver;
-	              if (window.RTCPeerConnection.prototype.getReceivers) {
-	                receiver = this.getReceivers()
-	                  .find(r => r.track && r.track.id === te.track.id);
-	              } else {
-	                receiver = {track: te.track};
-	              }
-
-	              const event = new Event('track');
-	              event.track = te.track;
-	              event.receiver = receiver;
-	              event.transceiver = {receiver};
-	              event.streams = [e.stream];
-	              this.dispatchEvent(event);
-	            });
-	            e.stream.getTracks().forEach(track => {
-	              let receiver;
-	              if (window.RTCPeerConnection.prototype.getReceivers) {
-	                receiver = this.getReceivers()
-	                  .find(r => r.track && r.track.id === track.id);
-	              } else {
-	                receiver = {track};
-	              }
-	              const event = new Event('track');
-	              event.track = track;
-	              event.receiver = receiver;
-	              event.transceiver = {receiver};
-	              event.streams = [e.stream];
-	              this.dispatchEvent(event);
-	            });
-	          };
-	          this.addEventListener('addstream', this._ontrackpoly);
-	        }
-	        return origSetRemoteDescription.apply(this, arguments);
-	      };
-	  } else {
-	    // even if RTCRtpTransceiver is in window, it is only used and
-	    // emitted in unified-plan. Unfortunately this means we need
-	    // to unconditionally wrap the event.
-	    wrapPeerConnectionEvent(window, 'track', e => {
-	      if (!e.transceiver) {
-	        Object.defineProperty(e, 'transceiver',
-	          {value: {receiver: e.receiver}});
-	      }
-	      return e;
-	    });
-	  }
-	}
-
-	function shimGetSendersWithDtmf(window) {
-	  // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.
-	  if (typeof window === 'object' && window.RTCPeerConnection &&
-	      !('getSenders' in window.RTCPeerConnection.prototype) &&
-	      'createDTMFSender' in window.RTCPeerConnection.prototype) {
-	    const shimSenderWithDtmf = function(pc, track) {
-	      return {
-	        track,
-	        get dtmf() {
-	          if (this._dtmf === undefined) {
-	            if (track.kind === 'audio') {
-	              this._dtmf = pc.createDTMFSender(track);
-	            } else {
-	              this._dtmf = null;
-	            }
-	          }
-	          return this._dtmf;
-	        },
-	        _pc: pc
-	      };
-	    };
-
-	    // augment addTrack when getSenders is not available.
-	    if (!window.RTCPeerConnection.prototype.getSenders) {
-	      window.RTCPeerConnection.prototype.getSenders = function getSenders() {
-	        this._senders = this._senders || [];
-	        return this._senders.slice(); // return a copy of the internal state.
-	      };
-	      const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
-	      window.RTCPeerConnection.prototype.addTrack =
-	        function addTrack(track, stream) {
-	          let sender = origAddTrack.apply(this, arguments);
-	          if (!sender) {
-	            sender = shimSenderWithDtmf(this, track);
-	            this._senders.push(sender);
-	          }
-	          return sender;
-	        };
-
-	      const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
-	      window.RTCPeerConnection.prototype.removeTrack =
-	        function removeTrack(sender) {
-	          origRemoveTrack.apply(this, arguments);
-	          const idx = this._senders.indexOf(sender);
-	          if (idx !== -1) {
-	            this._senders.splice(idx, 1);
-	          }
-	        };
-	    }
-	    const origAddStream = window.RTCPeerConnection.prototype.addStream;
-	    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
-	      this._senders = this._senders || [];
-	      origAddStream.apply(this, [stream]);
-	      stream.getTracks().forEach(track => {
-	        this._senders.push(shimSenderWithDtmf(this, track));
-	      });
-	    };
-
-	    const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
-	    window.RTCPeerConnection.prototype.removeStream =
-	      function removeStream(stream) {
-	        this._senders = this._senders || [];
-	        origRemoveStream.apply(this, [stream]);
-
-	        stream.getTracks().forEach(track => {
-	          const sender = this._senders.find(s => s.track === track);
-	          if (sender) { // remove sender
-	            this._senders.splice(this._senders.indexOf(sender), 1);
-	          }
-	        });
-	      };
-	  } else if (typeof window === 'object' && window.RTCPeerConnection &&
-	             'getSenders' in window.RTCPeerConnection.prototype &&
-	             'createDTMFSender' in window.RTCPeerConnection.prototype &&
-	             window.RTCRtpSender &&
-	             !('dtmf' in window.RTCRtpSender.prototype)) {
-	    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
-	    window.RTCPeerConnection.prototype.getSenders = function getSenders() {
-	      const senders = origGetSenders.apply(this, []);
-	      senders.forEach(sender => sender._pc = this);
-	      return senders;
-	    };
-
-	    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {
-	      get() {
-	        if (this._dtmf === undefined) {
-	          if (this.track.kind === 'audio') {
-	            this._dtmf = this._pc.createDTMFSender(this.track);
-	          } else {
-	            this._dtmf = null;
-	          }
-	        }
-	        return this._dtmf;
-	      }
-	    });
-	  }
-	}
-
-	function shimGetStats(window) {
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-
-	  const origGetStats = window.RTCPeerConnection.prototype.getStats;
-	  window.RTCPeerConnection.prototype.getStats = function getStats() {
-	    const [selector, onSucc, onErr] = arguments;
-
-	    // If selector is a function then we are in the old style stats so just
-	    // pass back the original getStats format to avoid breaking old users.
-	    if (arguments.length > 0 && typeof selector === 'function') {
-	      return origGetStats.apply(this, arguments);
-	    }
-
-	    // When spec-style getStats is supported, return those when called with
-	    // either no arguments or the selector argument is null.
-	    if (origGetStats.length === 0 && (arguments.length === 0 ||
-	        typeof selector !== 'function')) {
-	      return origGetStats.apply(this, []);
-	    }
-
-	    const fixChromeStats_ = function(response) {
-	      const standardReport = {};
-	      const reports = response.result();
-	      reports.forEach(report => {
-	        const standardStats = {
-	          id: report.id,
-	          timestamp: report.timestamp,
-	          type: {
-	            localcandidate: 'local-candidate',
-	            remotecandidate: 'remote-candidate'
-	          }[report.type] || report.type
-	        };
-	        report.names().forEach(name => {
-	          standardStats[name] = report.stat(name);
-	        });
-	        standardReport[standardStats.id] = standardStats;
-	      });
-
-	      return standardReport;
-	    };
-
-	    // shim getStats with maplike support
-	    const makeMapStats = function(stats) {
-	      return new Map(Object.keys(stats).map(key => [key, stats[key]]));
-	    };
-
-	    if (arguments.length >= 2) {
-	      const successCallbackWrapper_ = function(response) {
-	        onSucc(makeMapStats(fixChromeStats_(response)));
-	      };
-
-	      return origGetStats.apply(this, [successCallbackWrapper_,
-	        selector]);
-	    }
-
-	    // promise-support
-	    return new Promise((resolve, reject) => {
-	      origGetStats.apply(this, [
-	        function(response) {
-	          resolve(makeMapStats(fixChromeStats_(response)));
-	        }, reject]);
-	    }).then(onSucc, onErr);
-	  };
-	}
-
-	function shimSenderReceiverGetStats(window) {
-	  if (!(typeof window === 'object' && window.RTCPeerConnection &&
-	      window.RTCRtpSender && window.RTCRtpReceiver)) {
-	    return;
-	  }
-
-	  // shim sender stats.
-	  if (!('getStats' in window.RTCRtpSender.prototype)) {
-	    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
-	    if (origGetSenders) {
-	      window.RTCPeerConnection.prototype.getSenders = function getSenders() {
-	        const senders = origGetSenders.apply(this, []);
-	        senders.forEach(sender => sender._pc = this);
-	        return senders;
-	      };
-	    }
-
-	    const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
-	    if (origAddTrack) {
-	      window.RTCPeerConnection.prototype.addTrack = function addTrack() {
-	        const sender = origAddTrack.apply(this, arguments);
-	        sender._pc = this;
-	        return sender;
-	      };
-	    }
-	    window.RTCRtpSender.prototype.getStats = function getStats() {
-	      const sender = this;
-	      return this._pc.getStats().then(result =>
-	        /* Note: this will include stats of all senders that
-	         *   send a track with the same id as sender.track as
-	         *   it is not possible to identify the RTCRtpSender.
-	         */
-	        filterStats(result, sender.track, true));
-	    };
-	  }
-
-	  // shim receiver stats.
-	  if (!('getStats' in window.RTCRtpReceiver.prototype)) {
-	    const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
-	    if (origGetReceivers) {
-	      window.RTCPeerConnection.prototype.getReceivers =
-	        function getReceivers() {
-	          const receivers = origGetReceivers.apply(this, []);
-	          receivers.forEach(receiver => receiver._pc = this);
-	          return receivers;
-	        };
-	    }
-	    wrapPeerConnectionEvent(window, 'track', e => {
-	      e.receiver._pc = e.srcElement;
-	      return e;
-	    });
-	    window.RTCRtpReceiver.prototype.getStats = function getStats() {
-	      const receiver = this;
-	      return this._pc.getStats().then(result =>
-	        filterStats(result, receiver.track, false));
-	    };
-	  }
-
-	  if (!('getStats' in window.RTCRtpSender.prototype &&
-	      'getStats' in window.RTCRtpReceiver.prototype)) {
-	    return;
-	  }
-
-	  // shim RTCPeerConnection.getStats(track).
-	  const origGetStats = window.RTCPeerConnection.prototype.getStats;
-	  window.RTCPeerConnection.prototype.getStats = function getStats() {
-	    if (arguments.length > 0 &&
-	        arguments[0] instanceof window.MediaStreamTrack) {
-	      const track = arguments[0];
-	      let sender;
-	      let receiver;
-	      let err;
-	      this.getSenders().forEach(s => {
-	        if (s.track === track) {
-	          if (sender) {
-	            err = true;
-	          } else {
-	            sender = s;
-	          }
-	        }
-	      });
-	      this.getReceivers().forEach(r => {
-	        if (r.track === track) {
-	          if (receiver) {
-	            err = true;
-	          } else {
-	            receiver = r;
-	          }
-	        }
-	        return r.track === track;
-	      });
-	      if (err || (sender && receiver)) {
-	        return Promise.reject(new DOMException(
-	          'There are more than one sender or receiver for the track.',
-	          'InvalidAccessError'));
-	      } else if (sender) {
-	        return sender.getStats();
-	      } else if (receiver) {
-	        return receiver.getStats();
-	      }
-	      return Promise.reject(new DOMException(
-	        'There is no sender or receiver for the track.',
-	        'InvalidAccessError'));
-	    }
-	    return origGetStats.apply(this, arguments);
-	  };
-	}
-
-	function shimAddTrackRemoveTrackWithNative(window) {
-	  // shim addTrack/removeTrack with native variants in order to make
-	  // the interactions with legacy getLocalStreams behave as in other browsers.
-	  // Keeps a mapping stream.id => [stream, rtpsenders...]
-	  window.RTCPeerConnection.prototype.getLocalStreams =
-	    function getLocalStreams() {
-	      this._shimmedLocalStreams = this._shimmedLocalStreams || {};
-	      return Object.keys(this._shimmedLocalStreams)
-	        .map(streamId => this._shimmedLocalStreams[streamId][0]);
-	    };
-
-	  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
-	  window.RTCPeerConnection.prototype.addTrack =
-	    function addTrack(track, stream) {
-	      if (!stream) {
-	        return origAddTrack.apply(this, arguments);
-	      }
-	      this._shimmedLocalStreams = this._shimmedLocalStreams || {};
-
-	      const sender = origAddTrack.apply(this, arguments);
-	      if (!this._shimmedLocalStreams[stream.id]) {
-	        this._shimmedLocalStreams[stream.id] = [stream, sender];
-	      } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {
-	        this._shimmedLocalStreams[stream.id].push(sender);
-	      }
-	      return sender;
-	    };
-
-	  const origAddStream = window.RTCPeerConnection.prototype.addStream;
-	  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
-	    this._shimmedLocalStreams = this._shimmedLocalStreams || {};
-
-	    stream.getTracks().forEach(track => {
-	      const alreadyExists = this.getSenders().find(s => s.track === track);
-	      if (alreadyExists) {
-	        throw new DOMException('Track already exists.',
-	            'InvalidAccessError');
-	      }
-	    });
-	    const existingSenders = this.getSenders();
-	    origAddStream.apply(this, arguments);
-	    const newSenders = this.getSenders()
-	      .filter(newSender => existingSenders.indexOf(newSender) === -1);
-	    this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);
-	  };
-
-	  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
-	  window.RTCPeerConnection.prototype.removeStream =
-	    function removeStream(stream) {
-	      this._shimmedLocalStreams = this._shimmedLocalStreams || {};
-	      delete this._shimmedLocalStreams[stream.id];
-	      return origRemoveStream.apply(this, arguments);
-	    };
-
-	  const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;
-	  window.RTCPeerConnection.prototype.removeTrack =
-	    function removeTrack(sender) {
-	      this._shimmedLocalStreams = this._shimmedLocalStreams || {};
-	      if (sender) {
-	        Object.keys(this._shimmedLocalStreams).forEach(streamId => {
-	          const idx = this._shimmedLocalStreams[streamId].indexOf(sender);
-	          if (idx !== -1) {
-	            this._shimmedLocalStreams[streamId].splice(idx, 1);
-	          }
-	          if (this._shimmedLocalStreams[streamId].length === 1) {
-	            delete this._shimmedLocalStreams[streamId];
-	          }
-	        });
-	      }
-	      return origRemoveTrack.apply(this, arguments);
-	    };
-	}
-
-	function shimAddTrackRemoveTrack(window, browserDetails) {
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-	  // shim addTrack and removeTrack.
-	  if (window.RTCPeerConnection.prototype.addTrack &&
-	      browserDetails.version >= 65) {
-	    return shimAddTrackRemoveTrackWithNative(window);
-	  }
-
-	  // also shim pc.getLocalStreams when addTrack is shimmed
-	  // to return the original streams.
-	  const origGetLocalStreams = window.RTCPeerConnection.prototype
-	      .getLocalStreams;
-	  window.RTCPeerConnection.prototype.getLocalStreams =
-	    function getLocalStreams() {
-	      const nativeStreams = origGetLocalStreams.apply(this);
-	      this._reverseStreams = this._reverseStreams || {};
-	      return nativeStreams.map(stream => this._reverseStreams[stream.id]);
-	    };
-
-	  const origAddStream = window.RTCPeerConnection.prototype.addStream;
-	  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
-	    this._streams = this._streams || {};
-	    this._reverseStreams = this._reverseStreams || {};
-
-	    stream.getTracks().forEach(track => {
-	      const alreadyExists = this.getSenders().find(s => s.track === track);
-	      if (alreadyExists) {
-	        throw new DOMException('Track already exists.',
-	            'InvalidAccessError');
-	      }
-	    });
-	    // Add identity mapping for consistency with addTrack.
-	    // Unless this is being used with a stream from addTrack.
-	    if (!this._reverseStreams[stream.id]) {
-	      const newStream = new window.MediaStream(stream.getTracks());
-	      this._streams[stream.id] = newStream;
-	      this._reverseStreams[newStream.id] = stream;
-	      stream = newStream;
-	    }
-	    origAddStream.apply(this, [stream]);
-	  };
-
-	  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;
-	  window.RTCPeerConnection.prototype.removeStream =
-	    function removeStream(stream) {
-	      this._streams = this._streams || {};
-	      this._reverseStreams = this._reverseStreams || {};
-
-	      origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);
-	      delete this._reverseStreams[(this._streams[stream.id] ?
-	          this._streams[stream.id].id : stream.id)];
-	      delete this._streams[stream.id];
-	    };
-
-	  window.RTCPeerConnection.prototype.addTrack =
-	    function addTrack(track, stream) {
-	      if (this.signalingState === 'closed') {
-	        throw new DOMException(
-	          'The RTCPeerConnection\'s signalingState is \'closed\'.',
-	          'InvalidStateError');
-	      }
-	      const streams = [].slice.call(arguments, 1);
-	      if (streams.length !== 1 ||
-	          !streams[0].getTracks().find(t => t === track)) {
-	        // this is not fully correct but all we can manage without
-	        // [[associated MediaStreams]] internal slot.
-	        throw new DOMException(
-	          'The adapter.js addTrack polyfill only supports a single ' +
-	          ' stream which is associated with the specified track.',
-	          'NotSupportedError');
-	      }
-
-	      const alreadyExists = this.getSenders().find(s => s.track === track);
-	      if (alreadyExists) {
-	        throw new DOMException('Track already exists.',
-	            'InvalidAccessError');
-	      }
-
-	      this._streams = this._streams || {};
-	      this._reverseStreams = this._reverseStreams || {};
-	      const oldStream = this._streams[stream.id];
-	      if (oldStream) {
-	        // this is using odd Chrome behaviour, use with caution:
-	        // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815
-	        // Note: we rely on the high-level addTrack/dtmf shim to
-	        // create the sender with a dtmf sender.
-	        oldStream.addTrack(track);
-
-	        // Trigger ONN async.
-	        Promise.resolve().then(() => {
-	          this.dispatchEvent(new Event('negotiationneeded'));
-	        });
-	      } else {
-	        const newStream = new window.MediaStream([track]);
-	        this._streams[stream.id] = newStream;
-	        this._reverseStreams[newStream.id] = stream;
-	        this.addStream(newStream);
-	      }
-	      return this.getSenders().find(s => s.track === track);
-	    };
-
-	  // replace the internal stream id with the external one and
-	  // vice versa.
-	  function replaceInternalStreamId(pc, description) {
-	    let sdp = description.sdp;
-	    Object.keys(pc._reverseStreams || []).forEach(internalId => {
-	      const externalStream = pc._reverseStreams[internalId];
-	      const internalStream = pc._streams[externalStream.id];
-	      sdp = sdp.replace(new RegExp(internalStream.id, 'g'),
-	          externalStream.id);
-	    });
-	    return new RTCSessionDescription({
-	      type: description.type,
-	      sdp
-	    });
-	  }
-	  function replaceExternalStreamId(pc, description) {
-	    let sdp = description.sdp;
-	    Object.keys(pc._reverseStreams || []).forEach(internalId => {
-	      const externalStream = pc._reverseStreams[internalId];
-	      const internalStream = pc._streams[externalStream.id];
-	      sdp = sdp.replace(new RegExp(externalStream.id, 'g'),
-	          internalStream.id);
-	    });
-	    return new RTCSessionDescription({
-	      type: description.type,
-	      sdp
-	    });
-	  }
-	  ['createOffer', 'createAnswer'].forEach(function(method) {
-	    const nativeMethod = window.RTCPeerConnection.prototype[method];
-	    const methodObj = {[method]() {
-	      const args = arguments;
-	      const isLegacyCall = arguments.length &&
-	          typeof arguments[0] === 'function';
-	      if (isLegacyCall) {
-	        return nativeMethod.apply(this, [
-	          (description) => {
-	            const desc = replaceInternalStreamId(this, description);
-	            args[0].apply(null, [desc]);
-	          },
-	          (err) => {
-	            if (args[1]) {
-	              args[1].apply(null, err);
-	            }
-	          }, arguments[2]
-	        ]);
-	      }
-	      return nativeMethod.apply(this, arguments)
-	      .then(description => replaceInternalStreamId(this, description));
-	    }};
-	    window.RTCPeerConnection.prototype[method] = methodObj[method];
-	  });
-
-	  const origSetLocalDescription =
-	      window.RTCPeerConnection.prototype.setLocalDescription;
-	  window.RTCPeerConnection.prototype.setLocalDescription =
-	    function setLocalDescription() {
-	      if (!arguments.length || !arguments[0].type) {
-	        return origSetLocalDescription.apply(this, arguments);
-	      }
-	      arguments[0] = replaceExternalStreamId(this, arguments[0]);
-	      return origSetLocalDescription.apply(this, arguments);
-	    };
-
-	  // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier
-
-	  const origLocalDescription = Object.getOwnPropertyDescriptor(
-	      window.RTCPeerConnection.prototype, 'localDescription');
-	  Object.defineProperty(window.RTCPeerConnection.prototype,
-	      'localDescription', {
-	        get() {
-	          const description = origLocalDescription.get.apply(this);
-	          if (description.type === '') {
-	            return description;
-	          }
-	          return replaceInternalStreamId(this, description);
-	        }
-	      });
-
-	  window.RTCPeerConnection.prototype.removeTrack =
-	    function removeTrack(sender) {
-	      if (this.signalingState === 'closed') {
-	        throw new DOMException(
-	          'The RTCPeerConnection\'s signalingState is \'closed\'.',
-	          'InvalidStateError');
-	      }
-	      // We can not yet check for sender instanceof RTCRtpSender
-	      // since we shim RTPSender. So we check if sender._pc is set.
-	      if (!sender._pc) {
-	        throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +
-	            'does not implement interface RTCRtpSender.', 'TypeError');
-	      }
-	      const isLocal = sender._pc === this;
-	      if (!isLocal) {
-	        throw new DOMException('Sender was not created by this connection.',
-	            'InvalidAccessError');
-	      }
-
-	      // Search for the native stream the senders track belongs to.
-	      this._streams = this._streams || {};
-	      let stream;
-	      Object.keys(this._streams).forEach(streamid => {
-	        const hasTrack = this._streams[streamid].getTracks()
-	          .find(track => sender.track === track);
-	        if (hasTrack) {
-	          stream = this._streams[streamid];
-	        }
-	      });
-
-	      if (stream) {
-	        if (stream.getTracks().length === 1) {
-	          // if this is the last track of the stream, remove the stream. This
-	          // takes care of any shimmed _senders.
-	          this.removeStream(this._reverseStreams[stream.id]);
-	        } else {
-	          // relying on the same odd chrome behaviour as above.
-	          stream.removeTrack(sender.track);
-	        }
-	        this.dispatchEvent(new Event('negotiationneeded'));
-	      }
-	    };
-	}
-
-	function shimPeerConnection$2(window, browserDetails) {
-	  if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {
-	    // very basic support for old versions.
-	    window.RTCPeerConnection = window.webkitRTCPeerConnection;
-	  }
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-
-	  // shim implicit creation of RTCSessionDescription/RTCIceCandidate
-	  if (browserDetails.version < 53) {
-	    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']
-	        .forEach(function(method) {
-	          const nativeMethod = window.RTCPeerConnection.prototype[method];
-	          const methodObj = {[method]() {
-	            arguments[0] = new ((method === 'addIceCandidate') ?
-	                window.RTCIceCandidate :
-	                window.RTCSessionDescription)(arguments[0]);
-	            return nativeMethod.apply(this, arguments);
-	          }};
-	          window.RTCPeerConnection.prototype[method] = methodObj[method];
-	        });
-	  }
-	}
-
-	// Attempt to fix ONN in plan-b mode.
-	function fixNegotiationNeeded(window, browserDetails) {
-	  wrapPeerConnectionEvent(window, 'negotiationneeded', e => {
-	    const pc = e.target;
-	    if (browserDetails.version < 72 || (pc.getConfiguration &&
-	        pc.getConfiguration().sdpSemantics === 'plan-b')) {
-	      if (pc.signalingState !== 'stable') {
-	        return;
-	      }
-	    }
-	    return e;
-	  });
-	}
-
-	var chromeShim = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		shimMediaStream: shimMediaStream,
-		shimOnTrack: shimOnTrack$1,
-		shimGetSendersWithDtmf: shimGetSendersWithDtmf,
-		shimGetStats: shimGetStats,
-		shimSenderReceiverGetStats: shimSenderReceiverGetStats,
-		shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,
-		shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,
-		shimPeerConnection: shimPeerConnection$2,
-		fixNegotiationNeeded: fixNegotiationNeeded,
-		shimGetUserMedia: shimGetUserMedia$3,
-		shimGetDisplayMedia: shimGetDisplayMedia$2
-	});
-
-	/*
-	 *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-	// Edge does not like
-	// 1) stun: filtered after 14393 unless ?transport=udp is present
-	// 2) turn: that does not have all of turn:host:port?transport=udp
-	// 3) turn: with ipv6 addresses
-	// 4) turn: occurring muliple times
-	function filterIceServers$1(iceServers, edgeVersion) {
-	  let hasTurn = false;
-	  iceServers = JSON.parse(JSON.stringify(iceServers));
-	  return iceServers.filter(server => {
-	    if (server && (server.urls || server.url)) {
-	      let urls = server.urls || server.url;
-	      if (server.url && !server.urls) {
-	        deprecated('RTCIceServer.url', 'RTCIceServer.urls');
-	      }
-	      const isString = typeof urls === 'string';
-	      if (isString) {
-	        urls = [urls];
-	      }
-	      urls = urls.filter(url => {
-	        // filter STUN unconditionally.
-	        if (url.indexOf('stun:') === 0) {
-	          return false;
-	        }
-
-	        const validTurn = url.startsWith('turn') &&
-	            !url.startsWith('turn:[') &&
-	            url.includes('transport=udp');
-	        if (validTurn && !hasTurn) {
-	          hasTurn = true;
-	          return true;
-	        }
-	        return validTurn && !hasTurn;
-	      });
-
-	      delete server.url;
-	      server.urls = isString ? urls[0] : urls;
-	      return !!urls.length;
-	    }
-	  });
-	}
-
-	function createCommonjsModule(fn) {
-	  var module = { exports: {} };
-		return fn(module, module.exports), module.exports;
-	}
-
-	/* eslint-env node */
-
-	var sdp = createCommonjsModule(function (module) {
-
-	// SDP helpers.
-	var SDPUtils = {};
-
-	// Generate an alphanumeric identifier for cname or mids.
-	// TODO: use UUIDs instead? https://gist.github.com/jed/982883
-	SDPUtils.generateIdentifier = function() {
-	  return Math.random().toString(36).substr(2, 10);
-	};
-
-	// The RTCP CNAME used by all peerconnections from the same JS.
-	SDPUtils.localCName = SDPUtils.generateIdentifier();
-
-	// Splits SDP into lines, dealing with both CRLF and LF.
-	SDPUtils.splitLines = function(blob) {
-	  return blob.trim().split('\n').map(function(line) {
-	    return line.trim();
-	  });
-	};
-	// Splits SDP into sessionpart and mediasections. Ensures CRLF.
-	SDPUtils.splitSections = function(blob) {
-	  var parts = blob.split('\nm=');
-	  return parts.map(function(part, index) {
-	    return (index > 0 ? 'm=' + part : part).trim() + '\r\n';
-	  });
-	};
-
-	// returns the session description.
-	SDPUtils.getDescription = function(blob) {
-	  var sections = SDPUtils.splitSections(blob);
-	  return sections && sections[0];
-	};
-
-	// returns the individual media sections.
-	SDPUtils.getMediaSections = function(blob) {
-	  var sections = SDPUtils.splitSections(blob);
-	  sections.shift();
-	  return sections;
-	};
-
-	// Returns lines that start with a certain prefix.
-	SDPUtils.matchPrefix = function(blob, prefix) {
-	  return SDPUtils.splitLines(blob).filter(function(line) {
-	    return line.indexOf(prefix) === 0;
-	  });
-	};
-
-	// Parses an ICE candidate line. Sample input:
-	// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8
-	// rport 55996"
-	SDPUtils.parseCandidate = function(line) {
-	  var parts;
-	  // Parse both variants.
-	  if (line.indexOf('a=candidate:') === 0) {
-	    parts = line.substring(12).split(' ');
-	  } else {
-	    parts = line.substring(10).split(' ');
-	  }
-
-	  var candidate = {
-	    foundation: parts[0],
-	    component: parseInt(parts[1], 10),
-	    protocol: parts[2].toLowerCase(),
-	    priority: parseInt(parts[3], 10),
-	    ip: parts[4],
-	    address: parts[4], // address is an alias for ip.
-	    port: parseInt(parts[5], 10),
-	    // skip parts[6] == 'typ'
-	    type: parts[7]
-	  };
-
-	  for (var i = 8; i < parts.length; i += 2) {
-	    switch (parts[i]) {
-	      case 'raddr':
-	        candidate.relatedAddress = parts[i + 1];
-	        break;
-	      case 'rport':
-	        candidate.relatedPort = parseInt(parts[i + 1], 10);
-	        break;
-	      case 'tcptype':
-	        candidate.tcpType = parts[i + 1];
-	        break;
-	      case 'ufrag':
-	        candidate.ufrag = parts[i + 1]; // for backward compability.
-	        candidate.usernameFragment = parts[i + 1];
-	        break;
-	      default: // extension handling, in particular ufrag
-	        candidate[parts[i]] = parts[i + 1];
-	        break;
-	    }
-	  }
-	  return candidate;
-	};
-
-	// Translates a candidate object into SDP candidate attribute.
-	SDPUtils.writeCandidate = function(candidate) {
-	  var sdp = [];
-	  sdp.push(candidate.foundation);
-	  sdp.push(candidate.component);
-	  sdp.push(candidate.protocol.toUpperCase());
-	  sdp.push(candidate.priority);
-	  sdp.push(candidate.address || candidate.ip);
-	  sdp.push(candidate.port);
-
-	  var type = candidate.type;
-	  sdp.push('typ');
-	  sdp.push(type);
-	  if (type !== 'host' && candidate.relatedAddress &&
-	      candidate.relatedPort) {
-	    sdp.push('raddr');
-	    sdp.push(candidate.relatedAddress);
-	    sdp.push('rport');
-	    sdp.push(candidate.relatedPort);
-	  }
-	  if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {
-	    sdp.push('tcptype');
-	    sdp.push(candidate.tcpType);
-	  }
-	  if (candidate.usernameFragment || candidate.ufrag) {
-	    sdp.push('ufrag');
-	    sdp.push(candidate.usernameFragment || candidate.ufrag);
-	  }
-	  return 'candidate:' + sdp.join(' ');
-	};
-
-	// Parses an ice-options line, returns an array of option tags.
-	// a=ice-options:foo bar
-	SDPUtils.parseIceOptions = function(line) {
-	  return line.substr(14).split(' ');
-	};
-
-	// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:
-	// a=rtpmap:111 opus/48000/2
-	SDPUtils.parseRtpMap = function(line) {
-	  var parts = line.substr(9).split(' ');
-	  var parsed = {
-	    payloadType: parseInt(parts.shift(), 10) // was: id
-	  };
-
-	  parts = parts[0].split('/');
-
-	  parsed.name = parts[0];
-	  parsed.clockRate = parseInt(parts[1], 10); // was: clockrate
-	  parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;
-	  // legacy alias, got renamed back to channels in ORTC.
-	  parsed.numChannels = parsed.channels;
-	  return parsed;
-	};
-
-	// Generate an a=rtpmap line from RTCRtpCodecCapability or
-	// RTCRtpCodecParameters.
-	SDPUtils.writeRtpMap = function(codec) {
-	  var pt = codec.payloadType;
-	  if (codec.preferredPayloadType !== undefined) {
-	    pt = codec.preferredPayloadType;
-	  }
-	  var channels = codec.channels || codec.numChannels || 1;
-	  return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +
-	      (channels !== 1 ? '/' + channels : '') + '\r\n';
-	};
-
-	// Parses an a=extmap line (headerextension from RFC 5285). Sample input:
-	// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
-	// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset
-	SDPUtils.parseExtmap = function(line) {
-	  var parts = line.substr(9).split(' ');
-	  return {
-	    id: parseInt(parts[0], 10),
-	    direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',
-	    uri: parts[1]
-	  };
-	};
-
-	// Generates a=extmap line from RTCRtpHeaderExtensionParameters or
-	// RTCRtpHeaderExtension.
-	SDPUtils.writeExtmap = function(headerExtension) {
-	  return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +
-	      (headerExtension.direction && headerExtension.direction !== 'sendrecv'
-	        ? '/' + headerExtension.direction
-	        : '') +
-	      ' ' + headerExtension.uri + '\r\n';
-	};
-
-	// Parses an ftmp line, returns dictionary. Sample input:
-	// a=fmtp:96 vbr=on;cng=on
-	// Also deals with vbr=on; cng=on
-	SDPUtils.parseFmtp = function(line) {
-	  var parsed = {};
-	  var kv;
-	  var parts = line.substr(line.indexOf(' ') + 1).split(';');
-	  for (var j = 0; j < parts.length; j++) {
-	    kv = parts[j].trim().split('=');
-	    parsed[kv[0].trim()] = kv[1];
-	  }
-	  return parsed;
-	};
-
-	// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.
-	SDPUtils.writeFmtp = function(codec) {
-	  var line = '';
-	  var pt = codec.payloadType;
-	  if (codec.preferredPayloadType !== undefined) {
-	    pt = codec.preferredPayloadType;
-	  }
-	  if (codec.parameters && Object.keys(codec.parameters).length) {
-	    var params = [];
-	    Object.keys(codec.parameters).forEach(function(param) {
-	      if (codec.parameters[param]) {
-	        params.push(param + '=' + codec.parameters[param]);
-	      } else {
-	        params.push(param);
-	      }
-	    });
-	    line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n';
-	  }
-	  return line;
-	};
-
-	// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:
-	// a=rtcp-fb:98 nack rpsi
-	SDPUtils.parseRtcpFb = function(line) {
-	  var parts = line.substr(line.indexOf(' ') + 1).split(' ');
-	  return {
-	    type: parts.shift(),
-	    parameter: parts.join(' ')
-	  };
-	};
-	// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.
-	SDPUtils.writeRtcpFb = function(codec) {
-	  var lines = '';
-	  var pt = codec.payloadType;
-	  if (codec.preferredPayloadType !== undefined) {
-	    pt = codec.preferredPayloadType;
-	  }
-	  if (codec.rtcpFeedback && codec.rtcpFeedback.length) {
-	    // FIXME: special handling for trr-int?
-	    codec.rtcpFeedback.forEach(function(fb) {
-	      lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +
-	      (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +
-	          '\r\n';
-	    });
-	  }
-	  return lines;
-	};
-
-	// Parses an RFC 5576 ssrc media attribute. Sample input:
-	// a=ssrc:3735928559 cname:something
-	SDPUtils.parseSsrcMedia = function(line) {
-	  var sp = line.indexOf(' ');
-	  var parts = {
-	    ssrc: parseInt(line.substr(7, sp - 7), 10)
-	  };
-	  var colon = line.indexOf(':', sp);
-	  if (colon > -1) {
-	    parts.attribute = line.substr(sp + 1, colon - sp - 1);
-	    parts.value = line.substr(colon + 1);
-	  } else {
-	    parts.attribute = line.substr(sp + 1);
-	  }
-	  return parts;
-	};
-
-	SDPUtils.parseSsrcGroup = function(line) {
-	  var parts = line.substr(13).split(' ');
-	  return {
-	    semantics: parts.shift(),
-	    ssrcs: parts.map(function(ssrc) {
-	      return parseInt(ssrc, 10);
-	    })
-	  };
-	};
-
-	// Extracts the MID (RFC 5888) from a media section.
-	// returns the MID or undefined if no mid line was found.
-	SDPUtils.getMid = function(mediaSection) {
-	  var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];
-	  if (mid) {
-	    return mid.substr(6);
-	  }
-	};
-
-	SDPUtils.parseFingerprint = function(line) {
-	  var parts = line.substr(14).split(' ');
-	  return {
-	    algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.
-	    value: parts[1]
-	  };
-	};
-
-	// Extracts DTLS parameters from SDP media section or sessionpart.
-	// FIXME: for consistency with other functions this should only
-	//   get the fingerprint line as input. See also getIceParameters.
-	SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {
-	  var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,
-	    'a=fingerprint:');
-	  // Note: a=setup line is ignored since we use the 'auto' role.
-	  // Note2: 'algorithm' is not case sensitive except in Edge.
-	  return {
-	    role: 'auto',
-	    fingerprints: lines.map(SDPUtils.parseFingerprint)
-	  };
-	};
-
-	// Serializes DTLS parameters to SDP.
-	SDPUtils.writeDtlsParameters = function(params, setupType) {
-	  var sdp = 'a=setup:' + setupType + '\r\n';
-	  params.fingerprints.forEach(function(fp) {
-	    sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n';
-	  });
-	  return sdp;
-	};
-
-	// Parses a=crypto lines into
-	//   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members
-	SDPUtils.parseCryptoLine = function(line) {
-	  var parts = line.substr(9).split(' ');
-	  return {
-	    tag: parseInt(parts[0], 10),
-	    cryptoSuite: parts[1],
-	    keyParams: parts[2],
-	    sessionParams: parts.slice(3),
-	  };
-	};
-
-	SDPUtils.writeCryptoLine = function(parameters) {
-	  return 'a=crypto:' + parameters.tag + ' ' +
-	    parameters.cryptoSuite + ' ' +
-	    (typeof parameters.keyParams === 'object'
-	      ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)
-	      : parameters.keyParams) +
-	    (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +
-	    '\r\n';
-	};
-
-	// Parses the crypto key parameters into
-	//   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*
-	SDPUtils.parseCryptoKeyParams = function(keyParams) {
-	  if (keyParams.indexOf('inline:') !== 0) {
-	    return null;
-	  }
-	  var parts = keyParams.substr(7).split('|');
-	  return {
-	    keyMethod: 'inline',
-	    keySalt: parts[0],
-	    lifeTime: parts[1],
-	    mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,
-	    mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,
-	  };
-	};
-
-	SDPUtils.writeCryptoKeyParams = function(keyParams) {
-	  return keyParams.keyMethod + ':'
-	    + keyParams.keySalt +
-	    (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +
-	    (keyParams.mkiValue && keyParams.mkiLength
-	      ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength
-	      : '');
-	};
-
-	// Extracts all SDES paramters.
-	SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {
-	  var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,
-	    'a=crypto:');
-	  return lines.map(SDPUtils.parseCryptoLine);
-	};
-
-	// Parses ICE information from SDP media section or sessionpart.
-	// FIXME: for consistency with other functions this should only
-	//   get the ice-ufrag and ice-pwd lines as input.
-	SDPUtils.getIceParameters = function(mediaSection, sessionpart) {
-	  var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,
-	    'a=ice-ufrag:')[0];
-	  var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,
-	    'a=ice-pwd:')[0];
-	  if (!(ufrag && pwd)) {
-	    return null;
-	  }
-	  return {
-	    usernameFragment: ufrag.substr(12),
-	    password: pwd.substr(10),
-	  };
-	};
-
-	// Serializes ICE parameters to SDP.
-	SDPUtils.writeIceParameters = function(params) {
-	  return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' +
-	      'a=ice-pwd:' + params.password + '\r\n';
-	};
-
-	// Parses the SDP media section and returns RTCRtpParameters.
-	SDPUtils.parseRtpParameters = function(mediaSection) {
-	  var description = {
-	    codecs: [],
-	    headerExtensions: [],
-	    fecMechanisms: [],
-	    rtcp: []
-	  };
-	  var lines = SDPUtils.splitLines(mediaSection);
-	  var mline = lines[0].split(' ');
-	  for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..]
-	    var pt = mline[i];
-	    var rtpmapline = SDPUtils.matchPrefix(
-	      mediaSection, 'a=rtpmap:' + pt + ' ')[0];
-	    if (rtpmapline) {
-	      var codec = SDPUtils.parseRtpMap(rtpmapline);
-	      var fmtps = SDPUtils.matchPrefix(
-	        mediaSection, 'a=fmtp:' + pt + ' ');
-	      // Only the first a=fmtp:<pt> is considered.
-	      codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};
-	      codec.rtcpFeedback = SDPUtils.matchPrefix(
-	        mediaSection, 'a=rtcp-fb:' + pt + ' ')
-	        .map(SDPUtils.parseRtcpFb);
-	      description.codecs.push(codec);
-	      // parse FEC mechanisms from rtpmap lines.
-	      switch (codec.name.toUpperCase()) {
-	        case 'RED':
-	        case 'ULPFEC':
-	          description.fecMechanisms.push(codec.name.toUpperCase());
-	          break;
-	      }
-	    }
-	  }
-	  SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) {
-	    description.headerExtensions.push(SDPUtils.parseExtmap(line));
-	  });
-	  // FIXME: parse rtcp.
-	  return description;
-	};
-
-	// Generates parts of the SDP media section describing the capabilities /
-	// parameters.
-	SDPUtils.writeRtpDescription = function(kind, caps) {
-	  var sdp = '';
-
-	  // Build the mline.
-	  sdp += 'm=' + kind + ' ';
-	  sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.
-	  sdp += ' UDP/TLS/RTP/SAVPF ';
-	  sdp += caps.codecs.map(function(codec) {
-	    if (codec.preferredPayloadType !== undefined) {
-	      return codec.preferredPayloadType;
-	    }
-	    return codec.payloadType;
-	  }).join(' ') + '\r\n';
-
-	  sdp += 'c=IN IP4 0.0.0.0\r\n';
-	  sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n';
-
-	  // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.
-	  caps.codecs.forEach(function(codec) {
-	    sdp += SDPUtils.writeRtpMap(codec);
-	    sdp += SDPUtils.writeFmtp(codec);
-	    sdp += SDPUtils.writeRtcpFb(codec);
-	  });
-	  var maxptime = 0;
-	  caps.codecs.forEach(function(codec) {
-	    if (codec.maxptime > maxptime) {
-	      maxptime = codec.maxptime;
-	    }
-	  });
-	  if (maxptime > 0) {
-	    sdp += 'a=maxptime:' + maxptime + '\r\n';
-	  }
-	  sdp += 'a=rtcp-mux\r\n';
-
-	  if (caps.headerExtensions) {
-	    caps.headerExtensions.forEach(function(extension) {
-	      sdp += SDPUtils.writeExtmap(extension);
-	    });
-	  }
-	  // FIXME: write fecMechanisms.
-	  return sdp;
-	};
-
-	// Parses the SDP media section and returns an array of
-	// RTCRtpEncodingParameters.
-	SDPUtils.parseRtpEncodingParameters = function(mediaSection) {
-	  var encodingParameters = [];
-	  var description = SDPUtils.parseRtpParameters(mediaSection);
-	  var hasRed = description.fecMechanisms.indexOf('RED') !== -1;
-	  var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;
-
-	  // filter a=ssrc:... cname:, ignore PlanB-msid
-	  var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')
-	    .map(function(line) {
-	      return SDPUtils.parseSsrcMedia(line);
-	    })
-	    .filter(function(parts) {
-	      return parts.attribute === 'cname';
-	    });
-	  var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;
-	  var secondarySsrc;
-
-	  var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')
-	    .map(function(line) {
-	      var parts = line.substr(17).split(' ');
-	      return parts.map(function(part) {
-	        return parseInt(part, 10);
-	      });
-	    });
-	  if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {
-	    secondarySsrc = flows[0][1];
-	  }
-
-	  description.codecs.forEach(function(codec) {
-	    if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {
-	      var encParam = {
-	        ssrc: primarySsrc,
-	        codecPayloadType: parseInt(codec.parameters.apt, 10)
-	      };
-	      if (primarySsrc && secondarySsrc) {
-	        encParam.rtx = {ssrc: secondarySsrc};
-	      }
-	      encodingParameters.push(encParam);
-	      if (hasRed) {
-	        encParam = JSON.parse(JSON.stringify(encParam));
-	        encParam.fec = {
-	          ssrc: primarySsrc,
-	          mechanism: hasUlpfec ? 'red+ulpfec' : 'red'
-	        };
-	        encodingParameters.push(encParam);
-	      }
-	    }
-	  });
-	  if (encodingParameters.length === 0 && primarySsrc) {
-	    encodingParameters.push({
-	      ssrc: primarySsrc
-	    });
-	  }
-
-	  // we support both b=AS and b=TIAS but interpret AS as TIAS.
-	  var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');
-	  if (bandwidth.length) {
-	    if (bandwidth[0].indexOf('b=TIAS:') === 0) {
-	      bandwidth = parseInt(bandwidth[0].substr(7), 10);
-	    } else if (bandwidth[0].indexOf('b=AS:') === 0) {
-	      // use formula from JSEP to convert b=AS to TIAS value.
-	      bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95
-	          - (50 * 40 * 8);
-	    } else {
-	      bandwidth = undefined;
-	    }
-	    encodingParameters.forEach(function(params) {
-	      params.maxBitrate = bandwidth;
-	    });
-	  }
-	  return encodingParameters;
-	};
-
-	// parses http://draft.ortc.org/#rtcrtcpparameters*
-	SDPUtils.parseRtcpParameters = function(mediaSection) {
-	  var rtcpParameters = {};
-
-	  // Gets the first SSRC. Note tha with RTX there might be multiple
-	  // SSRCs.
-	  var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')
-	    .map(function(line) {
-	      return SDPUtils.parseSsrcMedia(line);
-	    })
-	    .filter(function(obj) {
-	      return obj.attribute === 'cname';
-	    })[0];
-	  if (remoteSsrc) {
-	    rtcpParameters.cname = remoteSsrc.value;
-	    rtcpParameters.ssrc = remoteSsrc.ssrc;
-	  }
-
-	  // Edge uses the compound attribute instead of reducedSize
-	  // compound is !reducedSize
-	  var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');
-	  rtcpParameters.reducedSize = rsize.length > 0;
-	  rtcpParameters.compound = rsize.length === 0;
-
-	  // parses the rtcp-mux attrіbute.
-	  // Note that Edge does not support unmuxed RTCP.
-	  var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');
-	  rtcpParameters.mux = mux.length > 0;
-
-	  return rtcpParameters;
-	};
-
-	// parses either a=msid: or a=ssrc:... msid lines and returns
-	// the id of the MediaStream and MediaStreamTrack.
-	SDPUtils.parseMsid = function(mediaSection) {
-	  var parts;
-	  var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');
-	  if (spec.length === 1) {
-	    parts = spec[0].substr(7).split(' ');
-	    return {stream: parts[0], track: parts[1]};
-	  }
-	  var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')
-	    .map(function(line) {
-	      return SDPUtils.parseSsrcMedia(line);
-	    })
-	    .filter(function(msidParts) {
-	      return msidParts.attribute === 'msid';
-	    });
-	  if (planB.length > 0) {
-	    parts = planB[0].value.split(' ');
-	    return {stream: parts[0], track: parts[1]};
-	  }
-	};
-
-	// SCTP
-	// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back
-	// to draft-ietf-mmusic-sctp-sdp-05
-	SDPUtils.parseSctpDescription = function(mediaSection) {
-	  var mline = SDPUtils.parseMLine(mediaSection);
-	  var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');
-	  var maxMessageSize;
-	  if (maxSizeLine.length > 0) {
-	    maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);
-	  }
-	  if (isNaN(maxMessageSize)) {
-	    maxMessageSize = 65536;
-	  }
-	  var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');
-	  if (sctpPort.length > 0) {
-	    return {
-	      port: parseInt(sctpPort[0].substr(12), 10),
-	      protocol: mline.fmt,
-	      maxMessageSize: maxMessageSize
-	    };
-	  }
-	  var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');
-	  if (sctpMapLines.length > 0) {
-	    var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0]
-	      .substr(10)
-	      .split(' ');
-	    return {
-	      port: parseInt(parts[0], 10),
-	      protocol: parts[1],
-	      maxMessageSize: maxMessageSize
-	    };
-	  }
-	};
-
-	// SCTP
-	// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers
-	// support by now receiving in this format, unless we originally parsed
-	// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line
-	// protocol of DTLS/SCTP -- without UDP/ or TCP/)
-	SDPUtils.writeSctpDescription = function(media, sctp) {
-	  var output = [];
-	  if (media.protocol !== 'DTLS/SCTP') {
-	    output = [
-	      'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\r\n',
-	      'c=IN IP4 0.0.0.0\r\n',
-	      'a=sctp-port:' + sctp.port + '\r\n'
-	    ];
-	  } else {
-	    output = [
-	      'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\r\n',
-	      'c=IN IP4 0.0.0.0\r\n',
-	      'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\r\n'
-	    ];
-	  }
-	  if (sctp.maxMessageSize !== undefined) {
-	    output.push('a=max-message-size:' + sctp.maxMessageSize + '\r\n');
-	  }
-	  return output.join('');
-	};
-
-	// Generate a session ID for SDP.
-	// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1
-	// recommends using a cryptographically random +ve 64-bit value
-	// but right now this should be acceptable and within the right range
-	SDPUtils.generateSessionId = function() {
-	  return Math.random().toString().substr(2, 21);
-	};
-
-	// Write boilder plate for start of SDP
-	// sessId argument is optional - if not supplied it will
-	// be generated randomly
-	// sessVersion is optional and defaults to 2
-	// sessUser is optional and defaults to 'thisisadapterortc'
-	SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {
-	  var sessionId;
-	  var version = sessVer !== undefined ? sessVer : 2;
-	  if (sessId) {
-	    sessionId = sessId;
-	  } else {
-	    sessionId = SDPUtils.generateSessionId();
-	  }
-	  var user = sessUser || 'thisisadapterortc';
-	  // FIXME: sess-id should be an NTP timestamp.
-	  return 'v=0\r\n' +
-	      'o=' + user + ' ' + sessionId + ' ' + version +
-	        ' IN IP4 127.0.0.1\r\n' +
-	      's=-\r\n' +
-	      't=0 0\r\n';
-	};
-
-	SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {
-	  var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);
-
-	  // Map ICE parameters (ufrag, pwd) to SDP.
-	  sdp += SDPUtils.writeIceParameters(
-	    transceiver.iceGatherer.getLocalParameters());
-
-	  // Map DTLS parameters to SDP.
-	  sdp += SDPUtils.writeDtlsParameters(
-	    transceiver.dtlsTransport.getLocalParameters(),
-	    type === 'offer' ? 'actpass' : 'active');
-
-	  sdp += 'a=mid:' + transceiver.mid + '\r\n';
-
-	  if (transceiver.direction) {
-	    sdp += 'a=' + transceiver.direction + '\r\n';
-	  } else if (transceiver.rtpSender && transceiver.rtpReceiver) {
-	    sdp += 'a=sendrecv\r\n';
-	  } else if (transceiver.rtpSender) {
-	    sdp += 'a=sendonly\r\n';
-	  } else if (transceiver.rtpReceiver) {
-	    sdp += 'a=recvonly\r\n';
-	  } else {
-	    sdp += 'a=inactive\r\n';
-	  }
-
-	  if (transceiver.rtpSender) {
-	    // spec.
-	    var msid = 'msid:' + stream.id + ' ' +
-	        transceiver.rtpSender.track.id + '\r\n';
-	    sdp += 'a=' + msid;
-
-	    // for Chrome.
-	    sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +
-	        ' ' + msid;
-	    if (transceiver.sendEncodingParameters[0].rtx) {
-	      sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +
-	          ' ' + msid;
-	      sdp += 'a=ssrc-group:FID ' +
-	          transceiver.sendEncodingParameters[0].ssrc + ' ' +
-	          transceiver.sendEncodingParameters[0].rtx.ssrc +
-	          '\r\n';
-	    }
-	  }
-	  // FIXME: this should be written by writeRtpDescription.
-	  sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +
-	      ' cname:' + SDPUtils.localCName + '\r\n';
-	  if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {
-	    sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +
-	        ' cname:' + SDPUtils.localCName + '\r\n';
-	  }
-	  return sdp;
-	};
-
-	// Gets the direction from the mediaSection or the sessionpart.
-	SDPUtils.getDirection = function(mediaSection, sessionpart) {
-	  // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.
-	  var lines = SDPUtils.splitLines(mediaSection);
-	  for (var i = 0; i < lines.length; i++) {
-	    switch (lines[i]) {
-	      case 'a=sendrecv':
-	      case 'a=sendonly':
-	      case 'a=recvonly':
-	      case 'a=inactive':
-	        return lines[i].substr(2);
-	        // FIXME: What should happen here?
-	    }
-	  }
-	  if (sessionpart) {
-	    return SDPUtils.getDirection(sessionpart);
-	  }
-	  return 'sendrecv';
-	};
-
-	SDPUtils.getKind = function(mediaSection) {
-	  var lines = SDPUtils.splitLines(mediaSection);
-	  var mline = lines[0].split(' ');
-	  return mline[0].substr(2);
-	};
-
-	SDPUtils.isRejected = function(mediaSection) {
-	  return mediaSection.split(' ', 2)[1] === '0';
-	};
-
-	SDPUtils.parseMLine = function(mediaSection) {
-	  var lines = SDPUtils.splitLines(mediaSection);
-	  var parts = lines[0].substr(2).split(' ');
-	  return {
-	    kind: parts[0],
-	    port: parseInt(parts[1], 10),
-	    protocol: parts[2],
-	    fmt: parts.slice(3).join(' ')
-	  };
-	};
-
-	SDPUtils.parseOLine = function(mediaSection) {
-	  var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];
-	  var parts = line.substr(2).split(' ');
-	  return {
-	    username: parts[0],
-	    sessionId: parts[1],
-	    sessionVersion: parseInt(parts[2], 10),
-	    netType: parts[3],
-	    addressType: parts[4],
-	    address: parts[5]
-	  };
-	};
-
-	// a very naive interpretation of a valid SDP.
-	SDPUtils.isValidSDP = function(blob) {
-	  if (typeof blob !== 'string' || blob.length === 0) {
-	    return false;
-	  }
-	  var lines = SDPUtils.splitLines(blob);
-	  for (var i = 0; i < lines.length; i++) {
-	    if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {
-	      return false;
-	    }
-	    // TODO: check the modifier a bit more.
-	  }
-	  return true;
-	};
-
-	// Expose public methods.
-	{
-	  module.exports = SDPUtils;
-	}
-	});
-
-	/*
-	 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-
-
-	function fixStatsType(stat) {
-	  return {
-	    inboundrtp: 'inbound-rtp',
-	    outboundrtp: 'outbound-rtp',
-	    candidatepair: 'candidate-pair',
-	    localcandidate: 'local-candidate',
-	    remotecandidate: 'remote-candidate'
-	  }[stat.type] || stat.type;
-	}
-
-	function writeMediaSection(transceiver, caps, type, stream, dtlsRole) {
-	  var sdp$1 = sdp.writeRtpDescription(transceiver.kind, caps);
-
-	  // Map ICE parameters (ufrag, pwd) to SDP.
-	  sdp$1 += sdp.writeIceParameters(
-	      transceiver.iceGatherer.getLocalParameters());
-
-	  // Map DTLS parameters to SDP.
-	  sdp$1 += sdp.writeDtlsParameters(
-	      transceiver.dtlsTransport.getLocalParameters(),
-	      type === 'offer' ? 'actpass' : dtlsRole || 'active');
-
-	  sdp$1 += 'a=mid:' + transceiver.mid + '\r\n';
-
-	  if (transceiver.rtpSender && transceiver.rtpReceiver) {
-	    sdp$1 += 'a=sendrecv\r\n';
-	  } else if (transceiver.rtpSender) {
-	    sdp$1 += 'a=sendonly\r\n';
-	  } else if (transceiver.rtpReceiver) {
-	    sdp$1 += 'a=recvonly\r\n';
-	  } else {
-	    sdp$1 += 'a=inactive\r\n';
-	  }
-
-	  if (transceiver.rtpSender) {
-	    var trackId = transceiver.rtpSender._initialTrackId ||
-	        transceiver.rtpSender.track.id;
-	    transceiver.rtpSender._initialTrackId = trackId;
-	    // spec.
-	    var msid = 'msid:' + (stream ? stream.id : '-') + ' ' +
-	        trackId + '\r\n';
-	    sdp$1 += 'a=' + msid;
-	    // for Chrome. Legacy should no longer be required.
-	    sdp$1 += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +
-	        ' ' + msid;
-
-	    // RTX
-	    if (transceiver.sendEncodingParameters[0].rtx) {
-	      sdp$1 += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +
-	          ' ' + msid;
-	      sdp$1 += 'a=ssrc-group:FID ' +
-	          transceiver.sendEncodingParameters[0].ssrc + ' ' +
-	          transceiver.sendEncodingParameters[0].rtx.ssrc +
-	          '\r\n';
-	    }
-	  }
-	  // FIXME: this should be written by writeRtpDescription.
-	  sdp$1 += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +
-	      ' cname:' + sdp.localCName + '\r\n';
-	  if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {
-	    sdp$1 += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +
-	        ' cname:' + sdp.localCName + '\r\n';
-	  }
-	  return sdp$1;
-	}
-
-	// Edge does not like
-	// 1) stun: filtered after 14393 unless ?transport=udp is present
-	// 2) turn: that does not have all of turn:host:port?transport=udp
-	// 3) turn: with ipv6 addresses
-	// 4) turn: occurring muliple times
-	function filterIceServers(iceServers, edgeVersion) {
-	  var hasTurn = false;
-	  iceServers = JSON.parse(JSON.stringify(iceServers));
-	  return iceServers.filter(function(server) {
-	    if (server && (server.urls || server.url)) {
-	      var urls = server.urls || server.url;
-	      if (server.url && !server.urls) {
-	        console.warn('RTCIceServer.url is deprecated! Use urls instead.');
-	      }
-	      var isString = typeof urls === 'string';
-	      if (isString) {
-	        urls = [urls];
-	      }
-	      urls = urls.filter(function(url) {
-	        var validTurn = url.indexOf('turn:') === 0 &&
-	            url.indexOf('transport=udp') !== -1 &&
-	            url.indexOf('turn:[') === -1 &&
-	            !hasTurn;
-
-	        if (validTurn) {
-	          hasTurn = true;
-	          return true;
-	        }
-	        return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&
-	            url.indexOf('?transport=udp') === -1;
-	      });
-
-	      delete server.url;
-	      server.urls = isString ? urls[0] : urls;
-	      return !!urls.length;
-	    }
-	  });
-	}
-
-	// Determines the intersection of local and remote capabilities.
-	function getCommonCapabilities(localCapabilities, remoteCapabilities) {
-	  var commonCapabilities = {
-	    codecs: [],
-	    headerExtensions: [],
-	    fecMechanisms: []
-	  };
-
-	  var findCodecByPayloadType = function(pt, codecs) {
-	    pt = parseInt(pt, 10);
-	    for (var i = 0; i < codecs.length; i++) {
-	      if (codecs[i].payloadType === pt ||
-	          codecs[i].preferredPayloadType === pt) {
-	        return codecs[i];
-	      }
-	    }
-	  };
-
-	  var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) {
-	    var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs);
-	    var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs);
-	    return lCodec && rCodec &&
-	        lCodec.name.toLowerCase() === rCodec.name.toLowerCase();
-	  };
-
-	  localCapabilities.codecs.forEach(function(lCodec) {
-	    for (var i = 0; i < remoteCapabilities.codecs.length; i++) {
-	      var rCodec = remoteCapabilities.codecs[i];
-	      if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&
-	          lCodec.clockRate === rCodec.clockRate) {
-	        if (lCodec.name.toLowerCase() === 'rtx' &&
-	            lCodec.parameters && rCodec.parameters.apt) {
-	          // for RTX we need to find the local rtx that has a apt
-	          // which points to the same local codec as the remote one.
-	          if (!rtxCapabilityMatches(lCodec, rCodec,
-	              localCapabilities.codecs, remoteCapabilities.codecs)) {
-	            continue;
-	          }
-	        }
-	        rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy
-	        // number of channels is the highest common number of channels
-	        rCodec.numChannels = Math.min(lCodec.numChannels,
-	            rCodec.numChannels);
-	        // push rCodec so we reply with offerer payload type
-	        commonCapabilities.codecs.push(rCodec);
-
-	        // determine common feedback mechanisms
-	        rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {
-	          for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {
-	            if (lCodec.rtcpFeedback[j].type === fb.type &&
-	                lCodec.rtcpFeedback[j].parameter === fb.parameter) {
-	              return true;
-	            }
-	          }
-	          return false;
-	        });
-	        // FIXME: also need to determine .parameters
-	        //  see https://github.com/openpeer/ortc/issues/569
-	        break;
-	      }
-	    }
-	  });
-
-	  localCapabilities.headerExtensions.forEach(function(lHeaderExtension) {
-	    for (var i = 0; i < remoteCapabilities.headerExtensions.length;
-	         i++) {
-	      var rHeaderExtension = remoteCapabilities.headerExtensions[i];
-	      if (lHeaderExtension.uri === rHeaderExtension.uri) {
-	        commonCapabilities.headerExtensions.push(rHeaderExtension);
-	        break;
-	      }
-	    }
-	  });
-
-	  // FIXME: fecMechanisms
-	  return commonCapabilities;
-	}
-
-	// is action=setLocalDescription with type allowed in signalingState
-	function isActionAllowedInSignalingState(action, type, signalingState) {
-	  return {
-	    offer: {
-	      setLocalDescription: ['stable', 'have-local-offer'],
-	      setRemoteDescription: ['stable', 'have-remote-offer']
-	    },
-	    answer: {
-	      setLocalDescription: ['have-remote-offer', 'have-local-pranswer'],
-	      setRemoteDescription: ['have-local-offer', 'have-remote-pranswer']
-	    }
-	  }[type][action].indexOf(signalingState) !== -1;
-	}
-
-	function maybeAddCandidate(iceTransport, candidate) {
-	  // Edge's internal representation adds some fields therefore
-	  // not all fieldѕ are taken into account.
-	  var alreadyAdded = iceTransport.getRemoteCandidates()
-	      .find(function(remoteCandidate) {
-	        return candidate.foundation === remoteCandidate.foundation &&
-	            candidate.ip === remoteCandidate.ip &&
-	            candidate.port === remoteCandidate.port &&
-	            candidate.priority === remoteCandidate.priority &&
-	            candidate.protocol === remoteCandidate.protocol &&
-	            candidate.type === remoteCandidate.type;
-	      });
-	  if (!alreadyAdded) {
-	    iceTransport.addRemoteCandidate(candidate);
-	  }
-	  return !alreadyAdded;
-	}
-
-
-	function makeError(name, description) {
-	  var e = new Error(description);
-	  e.name = name;
-	  // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names
-	  e.code = {
-	    NotSupportedError: 9,
-	    InvalidStateError: 11,
-	    InvalidAccessError: 15,
-	    TypeError: undefined,
-	    OperationError: undefined
-	  }[name];
-	  return e;
-	}
-
-	var rtcpeerconnection = function(window, edgeVersion) {
-	  // https://w3c.github.io/mediacapture-main/#mediastream
-	  // Helper function to add the track to the stream and
-	  // dispatch the event ourselves.
-	  function addTrackToStreamAndFireEvent(track, stream) {
-	    stream.addTrack(track);
-	    stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack',
-	        {track: track}));
-	  }
-
-	  function removeTrackFromStreamAndFireEvent(track, stream) {
-	    stream.removeTrack(track);
-	    stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack',
-	        {track: track}));
-	  }
-
-	  function fireAddTrack(pc, track, receiver, streams) {
-	    var trackEvent = new Event('track');
-	    trackEvent.track = track;
-	    trackEvent.receiver = receiver;
-	    trackEvent.transceiver = {receiver: receiver};
-	    trackEvent.streams = streams;
-	    window.setTimeout(function() {
-	      pc._dispatchEvent('track', trackEvent);
-	    });
-	  }
-
-	  var RTCPeerConnection = function(config) {
-	    var pc = this;
-
-	    var _eventTarget = document.createDocumentFragment();
-	    ['addEventListener', 'removeEventListener', 'dispatchEvent']
-	        .forEach(function(method) {
-	          pc[method] = _eventTarget[method].bind(_eventTarget);
-	        });
-
-	    this.canTrickleIceCandidates = null;
-
-	    this.needNegotiation = false;
-
-	    this.localStreams = [];
-	    this.remoteStreams = [];
-
-	    this._localDescription = null;
-	    this._remoteDescription = null;
-
-	    this.signalingState = 'stable';
-	    this.iceConnectionState = 'new';
-	    this.connectionState = 'new';
-	    this.iceGatheringState = 'new';
-
-	    config = JSON.parse(JSON.stringify(config || {}));
-
-	    this.usingBundle = config.bundlePolicy === 'max-bundle';
-	    if (config.rtcpMuxPolicy === 'negotiate') {
-	      throw(makeError('NotSupportedError',
-	          'rtcpMuxPolicy \'negotiate\' is not supported'));
-	    } else if (!config.rtcpMuxPolicy) {
-	      config.rtcpMuxPolicy = 'require';
-	    }
-
-	    switch (config.iceTransportPolicy) {
-	      case 'all':
-	      case 'relay':
-	        break;
-	      default:
-	        config.iceTransportPolicy = 'all';
-	        break;
-	    }
-
-	    switch (config.bundlePolicy) {
-	      case 'balanced':
-	      case 'max-compat':
-	      case 'max-bundle':
-	        break;
-	      default:
-	        config.bundlePolicy = 'balanced';
-	        break;
-	    }
-
-	    config.iceServers = filterIceServers(config.iceServers || [], edgeVersion);
-
-	    this._iceGatherers = [];
-	    if (config.iceCandidatePoolSize) {
-	      for (var i = config.iceCandidatePoolSize; i > 0; i--) {
-	        this._iceGatherers.push(new window.RTCIceGatherer({
-	          iceServers: config.iceServers,
-	          gatherPolicy: config.iceTransportPolicy
-	        }));
-	      }
-	    } else {
-	      config.iceCandidatePoolSize = 0;
-	    }
-
-	    this._config = config;
-
-	    // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...
-	    // everything that is needed to describe a SDP m-line.
-	    this.transceivers = [];
-
-	    this._sdpSessionId = sdp.generateSessionId();
-	    this._sdpSessionVersion = 0;
-
-	    this._dtlsRole = undefined; // role for a=setup to use in answers.
-
-	    this._isClosed = false;
-	  };
-
-	  Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', {
-	    configurable: true,
-	    get: function() {
-	      return this._localDescription;
-	    }
-	  });
-	  Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', {
-	    configurable: true,
-	    get: function() {
-	      return this._remoteDescription;
-	    }
-	  });
-
-	  // set up event handlers on prototype
-	  RTCPeerConnection.prototype.onicecandidate = null;
-	  RTCPeerConnection.prototype.onaddstream = null;
-	  RTCPeerConnection.prototype.ontrack = null;
-	  RTCPeerConnection.prototype.onremovestream = null;
-	  RTCPeerConnection.prototype.onsignalingstatechange = null;
-	  RTCPeerConnection.prototype.oniceconnectionstatechange = null;
-	  RTCPeerConnection.prototype.onconnectionstatechange = null;
-	  RTCPeerConnection.prototype.onicegatheringstatechange = null;
-	  RTCPeerConnection.prototype.onnegotiationneeded = null;
-	  RTCPeerConnection.prototype.ondatachannel = null;
-
-	  RTCPeerConnection.prototype._dispatchEvent = function(name, event) {
-	    if (this._isClosed) {
-	      return;
-	    }
-	    this.dispatchEvent(event);
-	    if (typeof this['on' + name] === 'function') {
-	      this['on' + name](event);
-	    }
-	  };
-
-	  RTCPeerConnection.prototype._emitGatheringStateChange = function() {
-	    var event = new Event('icegatheringstatechange');
-	    this._dispatchEvent('icegatheringstatechange', event);
-	  };
-
-	  RTCPeerConnection.prototype.getConfiguration = function() {
-	    return this._config;
-	  };
-
-	  RTCPeerConnection.prototype.getLocalStreams = function() {
-	    return this.localStreams;
-	  };
-
-	  RTCPeerConnection.prototype.getRemoteStreams = function() {
-	    return this.remoteStreams;
-	  };
-
-	  // internal helper to create a transceiver object.
-	  // (which is not yet the same as the WebRTC 1.0 transceiver)
-	  RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) {
-	    var hasBundleTransport = this.transceivers.length > 0;
-	    var transceiver = {
-	      track: null,
-	      iceGatherer: null,
-	      iceTransport: null,
-	      dtlsTransport: null,
-	      localCapabilities: null,
-	      remoteCapabilities: null,
-	      rtpSender: null,
-	      rtpReceiver: null,
-	      kind: kind,
-	      mid: null,
-	      sendEncodingParameters: null,
-	      recvEncodingParameters: null,
-	      stream: null,
-	      associatedRemoteMediaStreams: [],
-	      wantReceive: true
-	    };
-	    if (this.usingBundle && hasBundleTransport) {
-	      transceiver.iceTransport = this.transceivers[0].iceTransport;
-	      transceiver.dtlsTransport = this.transceivers[0].dtlsTransport;
-	    } else {
-	      var transports = this._createIceAndDtlsTransports();
-	      transceiver.iceTransport = transports.iceTransport;
-	      transceiver.dtlsTransport = transports.dtlsTransport;
-	    }
-	    if (!doNotAdd) {
-	      this.transceivers.push(transceiver);
-	    }
-	    return transceiver;
-	  };
-
-	  RTCPeerConnection.prototype.addTrack = function(track, stream) {
-	    if (this._isClosed) {
-	      throw makeError('InvalidStateError',
-	          'Attempted to call addTrack on a closed peerconnection.');
-	    }
-
-	    var alreadyExists = this.transceivers.find(function(s) {
-	      return s.track === track;
-	    });
-
-	    if (alreadyExists) {
-	      throw makeError('InvalidAccessError', 'Track already exists.');
-	    }
-
-	    var transceiver;
-	    for (var i = 0; i < this.transceivers.length; i++) {
-	      if (!this.transceivers[i].track &&
-	          this.transceivers[i].kind === track.kind) {
-	        transceiver = this.transceivers[i];
-	      }
-	    }
-	    if (!transceiver) {
-	      transceiver = this._createTransceiver(track.kind);
-	    }
-
-	    this._maybeFireNegotiationNeeded();
-
-	    if (this.localStreams.indexOf(stream) === -1) {
-	      this.localStreams.push(stream);
-	    }
-
-	    transceiver.track = track;
-	    transceiver.stream = stream;
-	    transceiver.rtpSender = new window.RTCRtpSender(track,
-	        transceiver.dtlsTransport);
-	    return transceiver.rtpSender;
-	  };
-
-	  RTCPeerConnection.prototype.addStream = function(stream) {
-	    var pc = this;
-	    if (edgeVersion >= 15025) {
-	      stream.getTracks().forEach(function(track) {
-	        pc.addTrack(track, stream);
-	      });
-	    } else {
-	      // Clone is necessary for local demos mostly, attaching directly
-	      // to two different senders does not work (build 10547).
-	      // Fixed in 15025 (or earlier)
-	      var clonedStream = stream.clone();
-	      stream.getTracks().forEach(function(track, idx) {
-	        var clonedTrack = clonedStream.getTracks()[idx];
-	        track.addEventListener('enabled', function(event) {
-	          clonedTrack.enabled = event.enabled;
-	        });
-	      });
-	      clonedStream.getTracks().forEach(function(track) {
-	        pc.addTrack(track, clonedStream);
-	      });
-	    }
-	  };
-
-	  RTCPeerConnection.prototype.removeTrack = function(sender) {
-	    if (this._isClosed) {
-	      throw makeError('InvalidStateError',
-	          'Attempted to call removeTrack on a closed peerconnection.');
-	    }
-
-	    if (!(sender instanceof window.RTCRtpSender)) {
-	      throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' +
-	          'does not implement interface RTCRtpSender.');
-	    }
-
-	    var transceiver = this.transceivers.find(function(t) {
-	      return t.rtpSender === sender;
-	    });
-
-	    if (!transceiver) {
-	      throw makeError('InvalidAccessError',
-	          'Sender was not created by this connection.');
-	    }
-	    var stream = transceiver.stream;
-
-	    transceiver.rtpSender.stop();
-	    transceiver.rtpSender = null;
-	    transceiver.track = null;
-	    transceiver.stream = null;
-
-	    // remove the stream from the set of local streams
-	    var localStreams = this.transceivers.map(function(t) {
-	      return t.stream;
-	    });
-	    if (localStreams.indexOf(stream) === -1 &&
-	        this.localStreams.indexOf(stream) > -1) {
-	      this.localStreams.splice(this.localStreams.indexOf(stream), 1);
-	    }
-
-	    this._maybeFireNegotiationNeeded();
-	  };
-
-	  RTCPeerConnection.prototype.removeStream = function(stream) {
-	    var pc = this;
-	    stream.getTracks().forEach(function(track) {
-	      var sender = pc.getSenders().find(function(s) {
-	        return s.track === track;
-	      });
-	      if (sender) {
-	        pc.removeTrack(sender);
-	      }
-	    });
-	  };
-
-	  RTCPeerConnection.prototype.getSenders = function() {
-	    return this.transceivers.filter(function(transceiver) {
-	      return !!transceiver.rtpSender;
-	    })
-	    .map(function(transceiver) {
-	      return transceiver.rtpSender;
-	    });
-	  };
-
-	  RTCPeerConnection.prototype.getReceivers = function() {
-	    return this.transceivers.filter(function(transceiver) {
-	      return !!transceiver.rtpReceiver;
-	    })
-	    .map(function(transceiver) {
-	      return transceiver.rtpReceiver;
-	    });
-	  };
-
-
-	  RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex,
-	      usingBundle) {
-	    var pc = this;
-	    if (usingBundle && sdpMLineIndex > 0) {
-	      return this.transceivers[0].iceGatherer;
-	    } else if (this._iceGatherers.length) {
-	      return this._iceGatherers.shift();
-	    }
-	    var iceGatherer = new window.RTCIceGatherer({
-	      iceServers: this._config.iceServers,
-	      gatherPolicy: this._config.iceTransportPolicy
-	    });
-	    Object.defineProperty(iceGatherer, 'state',
-	        {value: 'new', writable: true}
-	    );
-
-	    this.transceivers[sdpMLineIndex].bufferedCandidateEvents = [];
-	    this.transceivers[sdpMLineIndex].bufferCandidates = function(event) {
-	      var end = !event.candidate || Object.keys(event.candidate).length === 0;
-	      // polyfill since RTCIceGatherer.state is not implemented in
-	      // Edge 10547 yet.
-	      iceGatherer.state = end ? 'completed' : 'gathering';
-	      if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) {
-	        pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event);
-	      }
-	    };
-	    iceGatherer.addEventListener('localcandidate',
-	      this.transceivers[sdpMLineIndex].bufferCandidates);
-	    return iceGatherer;
-	  };
-
-	  // start gathering from an RTCIceGatherer.
-	  RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) {
-	    var pc = this;
-	    var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;
-	    if (iceGatherer.onlocalcandidate) {
-	      return;
-	    }
-	    var bufferedCandidateEvents =
-	      this.transceivers[sdpMLineIndex].bufferedCandidateEvents;
-	    this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null;
-	    iceGatherer.removeEventListener('localcandidate',
-	      this.transceivers[sdpMLineIndex].bufferCandidates);
-	    iceGatherer.onlocalcandidate = function(evt) {
-	      if (pc.usingBundle && sdpMLineIndex > 0) {
-	        // if we know that we use bundle we can drop candidates with
-	        // ѕdpMLineIndex > 0. If we don't do this then our state gets
-	        // confused since we dispose the extra ice gatherer.
-	        return;
-	      }
-	      var event = new Event('icecandidate');
-	      event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};
-
-	      var cand = evt.candidate;
-	      // Edge emits an empty object for RTCIceCandidateComplete‥
-	      var end = !cand || Object.keys(cand).length === 0;
-	      if (end) {
-	        // polyfill since RTCIceGatherer.state is not implemented in
-	        // Edge 10547 yet.
-	        if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') {
-	          iceGatherer.state = 'completed';
-	        }
-	      } else {
-	        if (iceGatherer.state === 'new') {
-	          iceGatherer.state = 'gathering';
-	        }
-	        // RTCIceCandidate doesn't have a component, needs to be added
-	        cand.component = 1;
-	        // also the usernameFragment. TODO: update SDP to take both variants.
-	        cand.ufrag = iceGatherer.getLocalParameters().usernameFragment;
-
-	        var serializedCandidate = sdp.writeCandidate(cand);
-	        event.candidate = Object.assign(event.candidate,
-	            sdp.parseCandidate(serializedCandidate));
-
-	        event.candidate.candidate = serializedCandidate;
-	        event.candidate.toJSON = function() {
-	          return {
-	            candidate: event.candidate.candidate,
-	            sdpMid: event.candidate.sdpMid,
-	            sdpMLineIndex: event.candidate.sdpMLineIndex,
-	            usernameFragment: event.candidate.usernameFragment
-	          };
-	        };
-	      }
-
-	      // update local description.
-	      var sections = sdp.getMediaSections(pc._localDescription.sdp);
-	      if (!end) {
-	        sections[event.candidate.sdpMLineIndex] +=
-	            'a=' + event.candidate.candidate + '\r\n';
-	      } else {
-	        sections[event.candidate.sdpMLineIndex] +=
-	            'a=end-of-candidates\r\n';
-	      }
-	      pc._localDescription.sdp =
-	          sdp.getDescription(pc._localDescription.sdp) +
-	          sections.join('');
-	      var complete = pc.transceivers.every(function(transceiver) {
-	        return transceiver.iceGatherer &&
-	            transceiver.iceGatherer.state === 'completed';
-	      });
-
-	      if (pc.iceGatheringState !== 'gathering') {
-	        pc.iceGatheringState = 'gathering';
-	        pc._emitGatheringStateChange();
-	      }
-
-	      // Emit candidate. Also emit null candidate when all gatherers are
-	      // complete.
-	      if (!end) {
-	        pc._dispatchEvent('icecandidate', event);
-	      }
-	      if (complete) {
-	        pc._dispatchEvent('icecandidate', new Event('icecandidate'));
-	        pc.iceGatheringState = 'complete';
-	        pc._emitGatheringStateChange();
-	      }
-	    };
-
-	    // emit already gathered candidates.
-	    window.setTimeout(function() {
-	      bufferedCandidateEvents.forEach(function(e) {
-	        iceGatherer.onlocalcandidate(e);
-	      });
-	    }, 0);
-	  };
-
-	  // Create ICE transport and DTLS transport.
-	  RTCPeerConnection.prototype._createIceAndDtlsTransports = function() {
-	    var pc = this;
-	    var iceTransport = new window.RTCIceTransport(null);
-	    iceTransport.onicestatechange = function() {
-	      pc._updateIceConnectionState();
-	      pc._updateConnectionState();
-	    };
-
-	    var dtlsTransport = new window.RTCDtlsTransport(iceTransport);
-	    dtlsTransport.ondtlsstatechange = function() {
-	      pc._updateConnectionState();
-	    };
-	    dtlsTransport.onerror = function() {
-	      // onerror does not set state to failed by itself.
-	      Object.defineProperty(dtlsTransport, 'state',
-	          {value: 'failed', writable: true});
-	      pc._updateConnectionState();
-	    };
-
-	    return {
-	      iceTransport: iceTransport,
-	      dtlsTransport: dtlsTransport
-	    };
-	  };
-
-	  // Destroy ICE gatherer, ICE transport and DTLS transport.
-	  // Without triggering the callbacks.
-	  RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function(
-	      sdpMLineIndex) {
-	    var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;
-	    if (iceGatherer) {
-	      delete iceGatherer.onlocalcandidate;
-	      delete this.transceivers[sdpMLineIndex].iceGatherer;
-	    }
-	    var iceTransport = this.transceivers[sdpMLineIndex].iceTransport;
-	    if (iceTransport) {
-	      delete iceTransport.onicestatechange;
-	      delete this.transceivers[sdpMLineIndex].iceTransport;
-	    }
-	    var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport;
-	    if (dtlsTransport) {
-	      delete dtlsTransport.ondtlsstatechange;
-	      delete dtlsTransport.onerror;
-	      delete this.transceivers[sdpMLineIndex].dtlsTransport;
-	    }
-	  };
-
-	  // Start the RTP Sender and Receiver for a transceiver.
-	  RTCPeerConnection.prototype._transceive = function(transceiver,
-	      send, recv) {
-	    var params = getCommonCapabilities(transceiver.localCapabilities,
-	        transceiver.remoteCapabilities);
-	    if (send && transceiver.rtpSender) {
-	      params.encodings = transceiver.sendEncodingParameters;
-	      params.rtcp = {
-	        cname: sdp.localCName,
-	        compound: transceiver.rtcpParameters.compound
-	      };
-	      if (transceiver.recvEncodingParameters.length) {
-	        params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;
-	      }
-	      transceiver.rtpSender.send(params);
-	    }
-	    if (recv && transceiver.rtpReceiver && params.codecs.length > 0) {
-	      // remove RTX field in Edge 14942
-	      if (transceiver.kind === 'video'
-	          && transceiver.recvEncodingParameters
-	          && edgeVersion < 15019) {
-	        transceiver.recvEncodingParameters.forEach(function(p) {
-	          delete p.rtx;
-	        });
-	      }
-	      if (transceiver.recvEncodingParameters.length) {
-	        params.encodings = transceiver.recvEncodingParameters;
-	      } else {
-	        params.encodings = [{}];
-	      }
-	      params.rtcp = {
-	        compound: transceiver.rtcpParameters.compound
-	      };
-	      if (transceiver.rtcpParameters.cname) {
-	        params.rtcp.cname = transceiver.rtcpParameters.cname;
-	      }
-	      if (transceiver.sendEncodingParameters.length) {
-	        params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;
-	      }
-	      transceiver.rtpReceiver.receive(params);
-	    }
-	  };
-
-	  RTCPeerConnection.prototype.setLocalDescription = function(description) {
-	    var pc = this;
-
-	    // Note: pranswer is not supported.
-	    if (['offer', 'answer'].indexOf(description.type) === -1) {
-	      return Promise.reject(makeError('TypeError',
-	          'Unsupported type "' + description.type + '"'));
-	    }
-
-	    if (!isActionAllowedInSignalingState('setLocalDescription',
-	        description.type, pc.signalingState) || pc._isClosed) {
-	      return Promise.reject(makeError('InvalidStateError',
-	          'Can not set local ' + description.type +
-	          ' in state ' + pc.signalingState));
-	    }
-
-	    var sections;
-	    var sessionpart;
-	    if (description.type === 'offer') {
-	      // VERY limited support for SDP munging. Limited to:
-	      // * changing the order of codecs
-	      sections = sdp.splitSections(description.sdp);
-	      sessionpart = sections.shift();
-	      sections.forEach(function(mediaSection, sdpMLineIndex) {
-	        var caps = sdp.parseRtpParameters(mediaSection);
-	        pc.transceivers[sdpMLineIndex].localCapabilities = caps;
-	      });
-
-	      pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {
-	        pc._gather(transceiver.mid, sdpMLineIndex);
-	      });
-	    } else if (description.type === 'answer') {
-	      sections = sdp.splitSections(pc._remoteDescription.sdp);
-	      sessionpart = sections.shift();
-	      var isIceLite = sdp.matchPrefix(sessionpart,
-	          'a=ice-lite').length > 0;
-	      sections.forEach(function(mediaSection, sdpMLineIndex) {
-	        var transceiver = pc.transceivers[sdpMLineIndex];
-	        var iceGatherer = transceiver.iceGatherer;
-	        var iceTransport = transceiver.iceTransport;
-	        var dtlsTransport = transceiver.dtlsTransport;
-	        var localCapabilities = transceiver.localCapabilities;
-	        var remoteCapabilities = transceiver.remoteCapabilities;
-
-	        // treat bundle-only as not-rejected.
-	        var rejected = sdp.isRejected(mediaSection) &&
-	            sdp.matchPrefix(mediaSection, 'a=bundle-only').length === 0;
-
-	        if (!rejected && !transceiver.rejected) {
-	          var remoteIceParameters = sdp.getIceParameters(
-	              mediaSection, sessionpart);
-	          var remoteDtlsParameters = sdp.getDtlsParameters(
-	              mediaSection, sessionpart);
-	          if (isIceLite) {
-	            remoteDtlsParameters.role = 'server';
-	          }
-
-	          if (!pc.usingBundle || sdpMLineIndex === 0) {
-	            pc._gather(transceiver.mid, sdpMLineIndex);
-	            if (iceTransport.state === 'new') {
-	              iceTransport.start(iceGatherer, remoteIceParameters,
-	                  isIceLite ? 'controlling' : 'controlled');
-	            }
-	            if (dtlsTransport.state === 'new') {
-	              dtlsTransport.start(remoteDtlsParameters);
-	            }
-	          }
-
-	          // Calculate intersection of capabilities.
-	          var params = getCommonCapabilities(localCapabilities,
-	              remoteCapabilities);
-
-	          // Start the RTCRtpSender. The RTCRtpReceiver for this
-	          // transceiver has already been started in setRemoteDescription.
-	          pc._transceive(transceiver,
-	              params.codecs.length > 0,
-	              false);
-	        }
-	      });
-	    }
-
-	    pc._localDescription = {
-	      type: description.type,
-	      sdp: description.sdp
-	    };
-	    if (description.type === 'offer') {
-	      pc._updateSignalingState('have-local-offer');
-	    } else {
-	      pc._updateSignalingState('stable');
-	    }
-
-	    return Promise.resolve();
-	  };
-
-	  RTCPeerConnection.prototype.setRemoteDescription = function(description) {
-	    var pc = this;
-
-	    // Note: pranswer is not supported.
-	    if (['offer', 'answer'].indexOf(description.type) === -1) {
-	      return Promise.reject(makeError('TypeError',
-	          'Unsupported type "' + description.type + '"'));
-	    }
-
-	    if (!isActionAllowedInSignalingState('setRemoteDescription',
-	        description.type, pc.signalingState) || pc._isClosed) {
-	      return Promise.reject(makeError('InvalidStateError',
-	          'Can not set remote ' + description.type +
-	          ' in state ' + pc.signalingState));
-	    }
-
-	    var streams = {};
-	    pc.remoteStreams.forEach(function(stream) {
-	      streams[stream.id] = stream;
-	    });
-	    var receiverList = [];
-	    var sections = sdp.splitSections(description.sdp);
-	    var sessionpart = sections.shift();
-	    var isIceLite = sdp.matchPrefix(sessionpart,
-	        'a=ice-lite').length > 0;
-	    var usingBundle = sdp.matchPrefix(sessionpart,
-	        'a=group:BUNDLE ').length > 0;
-	    pc.usingBundle = usingBundle;
-	    var iceOptions = sdp.matchPrefix(sessionpart,
-	        'a=ice-options:')[0];
-	    if (iceOptions) {
-	      pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ')
-	          .indexOf('trickle') >= 0;
-	    } else {
-	      pc.canTrickleIceCandidates = false;
-	    }
-
-	    sections.forEach(function(mediaSection, sdpMLineIndex) {
-	      var lines = sdp.splitLines(mediaSection);
-	      var kind = sdp.getKind(mediaSection);
-	      // treat bundle-only as not-rejected.
-	      var rejected = sdp.isRejected(mediaSection) &&
-	          sdp.matchPrefix(mediaSection, 'a=bundle-only').length === 0;
-	      var protocol = lines[0].substr(2).split(' ')[2];
-
-	      var direction = sdp.getDirection(mediaSection, sessionpart);
-	      var remoteMsid = sdp.parseMsid(mediaSection);
-
-	      var mid = sdp.getMid(mediaSection) || sdp.generateIdentifier();
-
-	      // Reject datachannels which are not implemented yet.
-	      if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' ||
-	          protocol === 'UDP/DTLS/SCTP'))) {
-	        // TODO: this is dangerous in the case where a non-rejected m-line
-	        //     becomes rejected.
-	        pc.transceivers[sdpMLineIndex] = {
-	          mid: mid,
-	          kind: kind,
-	          protocol: protocol,
-	          rejected: true
-	        };
-	        return;
-	      }
-
-	      if (!rejected && pc.transceivers[sdpMLineIndex] &&
-	          pc.transceivers[sdpMLineIndex].rejected) {
-	        // recycle a rejected transceiver.
-	        pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true);
-	      }
-
-	      var transceiver;
-	      var iceGatherer;
-	      var iceTransport;
-	      var dtlsTransport;
-	      var rtpReceiver;
-	      var sendEncodingParameters;
-	      var recvEncodingParameters;
-	      var localCapabilities;
-
-	      var track;
-	      // FIXME: ensure the mediaSection has rtcp-mux set.
-	      var remoteCapabilities = sdp.parseRtpParameters(mediaSection);
-	      var remoteIceParameters;
-	      var remoteDtlsParameters;
-	      if (!rejected) {
-	        remoteIceParameters = sdp.getIceParameters(mediaSection,
-	            sessionpart);
-	        remoteDtlsParameters = sdp.getDtlsParameters(mediaSection,
-	            sessionpart);
-	        remoteDtlsParameters.role = 'client';
-	      }
-	      recvEncodingParameters =
-	          sdp.parseRtpEncodingParameters(mediaSection);
-
-	      var rtcpParameters = sdp.parseRtcpParameters(mediaSection);
-
-	      var isComplete = sdp.matchPrefix(mediaSection,
-	          'a=end-of-candidates', sessionpart).length > 0;
-	      var cands = sdp.matchPrefix(mediaSection, 'a=candidate:')
-	          .map(function(cand) {
-	            return sdp.parseCandidate(cand);
-	          })
-	          .filter(function(cand) {
-	            return cand.component === 1;
-	          });
-
-	      // Check if we can use BUNDLE and dispose transports.
-	      if ((description.type === 'offer' || description.type === 'answer') &&
-	          !rejected && usingBundle && sdpMLineIndex > 0 &&
-	          pc.transceivers[sdpMLineIndex]) {
-	        pc._disposeIceAndDtlsTransports(sdpMLineIndex);
-	        pc.transceivers[sdpMLineIndex].iceGatherer =
-	            pc.transceivers[0].iceGatherer;
-	        pc.transceivers[sdpMLineIndex].iceTransport =
-	            pc.transceivers[0].iceTransport;
-	        pc.transceivers[sdpMLineIndex].dtlsTransport =
-	            pc.transceivers[0].dtlsTransport;
-	        if (pc.transceivers[sdpMLineIndex].rtpSender) {
-	          pc.transceivers[sdpMLineIndex].rtpSender.setTransport(
-	              pc.transceivers[0].dtlsTransport);
-	        }
-	        if (pc.transceivers[sdpMLineIndex].rtpReceiver) {
-	          pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(
-	              pc.transceivers[0].dtlsTransport);
-	        }
-	      }
-	      if (description.type === 'offer' && !rejected) {
-	        transceiver = pc.transceivers[sdpMLineIndex] ||
-	            pc._createTransceiver(kind);
-	        transceiver.mid = mid;
-
-	        if (!transceiver.iceGatherer) {
-	          transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,
-	              usingBundle);
-	        }
-
-	        if (cands.length && transceiver.iceTransport.state === 'new') {
-	          if (isComplete && (!usingBundle || sdpMLineIndex === 0)) {
-	            transceiver.iceTransport.setRemoteCandidates(cands);
-	          } else {
-	            cands.forEach(function(candidate) {
-	              maybeAddCandidate(transceiver.iceTransport, candidate);
-	            });
-	          }
-	        }
-
-	        localCapabilities = window.RTCRtpReceiver.getCapabilities(kind);
-
-	        // filter RTX until additional stuff needed for RTX is implemented
-	        // in adapter.js
-	        if (edgeVersion < 15019) {
-	          localCapabilities.codecs = localCapabilities.codecs.filter(
-	              function(codec) {
-	                return codec.name !== 'rtx';
-	              });
-	        }
-
-	        sendEncodingParameters = transceiver.sendEncodingParameters || [{
-	          ssrc: (2 * sdpMLineIndex + 2) * 1001
-	        }];
-
-	        // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams
-	        var isNewTrack = false;
-	        if (direction === 'sendrecv' || direction === 'sendonly') {
-	          isNewTrack = !transceiver.rtpReceiver;
-	          rtpReceiver = transceiver.rtpReceiver ||
-	              new window.RTCRtpReceiver(transceiver.dtlsTransport, kind);
-
-	          if (isNewTrack) {
-	            var stream;
-	            track = rtpReceiver.track;
-	            // FIXME: does not work with Plan B.
-	            if (remoteMsid && remoteMsid.stream === '-') ; else if (remoteMsid) {
-	              if (!streams[remoteMsid.stream]) {
-	                streams[remoteMsid.stream] = new window.MediaStream();
-	                Object.defineProperty(streams[remoteMsid.stream], 'id', {
-	                  get: function() {
-	                    return remoteMsid.stream;
-	                  }
-	                });
-	              }
-	              Object.defineProperty(track, 'id', {
-	                get: function() {
-	                  return remoteMsid.track;
-	                }
-	              });
-	              stream = streams[remoteMsid.stream];
-	            } else {
-	              if (!streams.default) {
-	                streams.default = new window.MediaStream();
-	              }
-	              stream = streams.default;
-	            }
-	            if (stream) {
-	              addTrackToStreamAndFireEvent(track, stream);
-	              transceiver.associatedRemoteMediaStreams.push(stream);
-	            }
-	            receiverList.push([track, rtpReceiver, stream]);
-	          }
-	        } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) {
-	          transceiver.associatedRemoteMediaStreams.forEach(function(s) {
-	            var nativeTrack = s.getTracks().find(function(t) {
-	              return t.id === transceiver.rtpReceiver.track.id;
-	            });
-	            if (nativeTrack) {
-	              removeTrackFromStreamAndFireEvent(nativeTrack, s);
-	            }
-	          });
-	          transceiver.associatedRemoteMediaStreams = [];
-	        }
-
-	        transceiver.localCapabilities = localCapabilities;
-	        transceiver.remoteCapabilities = remoteCapabilities;
-	        transceiver.rtpReceiver = rtpReceiver;
-	        transceiver.rtcpParameters = rtcpParameters;
-	        transceiver.sendEncodingParameters = sendEncodingParameters;
-	        transceiver.recvEncodingParameters = recvEncodingParameters;
-
-	        // Start the RTCRtpReceiver now. The RTPSender is started in
-	        // setLocalDescription.
-	        pc._transceive(pc.transceivers[sdpMLineIndex],
-	            false,
-	            isNewTrack);
-	      } else if (description.type === 'answer' && !rejected) {
-	        transceiver = pc.transceivers[sdpMLineIndex];
-	        iceGatherer = transceiver.iceGatherer;
-	        iceTransport = transceiver.iceTransport;
-	        dtlsTransport = transceiver.dtlsTransport;
-	        rtpReceiver = transceiver.rtpReceiver;
-	        sendEncodingParameters = transceiver.sendEncodingParameters;
-	        localCapabilities = transceiver.localCapabilities;
-
-	        pc.transceivers[sdpMLineIndex].recvEncodingParameters =
-	            recvEncodingParameters;
-	        pc.transceivers[sdpMLineIndex].remoteCapabilities =
-	            remoteCapabilities;
-	        pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters;
-
-	        if (cands.length && iceTransport.state === 'new') {
-	          if ((isIceLite || isComplete) &&
-	              (!usingBundle || sdpMLineIndex === 0)) {
-	            iceTransport.setRemoteCandidates(cands);
-	          } else {
-	            cands.forEach(function(candidate) {
-	              maybeAddCandidate(transceiver.iceTransport, candidate);
-	            });
-	          }
-	        }
-
-	        if (!usingBundle || sdpMLineIndex === 0) {
-	          if (iceTransport.state === 'new') {
-	            iceTransport.start(iceGatherer, remoteIceParameters,
-	                'controlling');
-	          }
-	          if (dtlsTransport.state === 'new') {
-	            dtlsTransport.start(remoteDtlsParameters);
-	          }
-	        }
-
-	        // If the offer contained RTX but the answer did not,
-	        // remove RTX from sendEncodingParameters.
-	        var commonCapabilities = getCommonCapabilities(
-	          transceiver.localCapabilities,
-	          transceiver.remoteCapabilities);
-
-	        var hasRtx = commonCapabilities.codecs.filter(function(c) {
-	          return c.name.toLowerCase() === 'rtx';
-	        }).length;
-	        if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {
-	          delete transceiver.sendEncodingParameters[0].rtx;
-	        }
-
-	        pc._transceive(transceiver,
-	            direction === 'sendrecv' || direction === 'recvonly',
-	            direction === 'sendrecv' || direction === 'sendonly');
-
-	        // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams
-	        if (rtpReceiver &&
-	            (direction === 'sendrecv' || direction === 'sendonly')) {
-	          track = rtpReceiver.track;
-	          if (remoteMsid) {
-	            if (!streams[remoteMsid.stream]) {
-	              streams[remoteMsid.stream] = new window.MediaStream();
-	            }
-	            addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]);
-	            receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]);
-	          } else {
-	            if (!streams.default) {
-	              streams.default = new window.MediaStream();
-	            }
-	            addTrackToStreamAndFireEvent(track, streams.default);
-	            receiverList.push([track, rtpReceiver, streams.default]);
-	          }
-	        } else {
-	          // FIXME: actually the receiver should be created later.
-	          delete transceiver.rtpReceiver;
-	        }
-	      }
-	    });
-
-	    if (pc._dtlsRole === undefined) {
-	      pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive';
-	    }
-
-	    pc._remoteDescription = {
-	      type: description.type,
-	      sdp: description.sdp
-	    };
-	    if (description.type === 'offer') {
-	      pc._updateSignalingState('have-remote-offer');
-	    } else {
-	      pc._updateSignalingState('stable');
-	    }
-	    Object.keys(streams).forEach(function(sid) {
-	      var stream = streams[sid];
-	      if (stream.getTracks().length) {
-	        if (pc.remoteStreams.indexOf(stream) === -1) {
-	          pc.remoteStreams.push(stream);
-	          var event = new Event('addstream');
-	          event.stream = stream;
-	          window.setTimeout(function() {
-	            pc._dispatchEvent('addstream', event);
-	          });
-	        }
-
-	        receiverList.forEach(function(item) {
-	          var track = item[0];
-	          var receiver = item[1];
-	          if (stream.id !== item[2].id) {
-	            return;
-	          }
-	          fireAddTrack(pc, track, receiver, [stream]);
-	        });
-	      }
-	    });
-	    receiverList.forEach(function(item) {
-	      if (item[2]) {
-	        return;
-	      }
-	      fireAddTrack(pc, item[0], item[1], []);
-	    });
-
-	    // check whether addIceCandidate({}) was called within four seconds after
-	    // setRemoteDescription.
-	    window.setTimeout(function() {
-	      if (!(pc && pc.transceivers)) {
-	        return;
-	      }
-	      pc.transceivers.forEach(function(transceiver) {
-	        if (transceiver.iceTransport &&
-	            transceiver.iceTransport.state === 'new' &&
-	            transceiver.iceTransport.getRemoteCandidates().length > 0) {
-	          console.warn('Timeout for addRemoteCandidate. Consider sending ' +
-	              'an end-of-candidates notification');
-	          transceiver.iceTransport.addRemoteCandidate({});
-	        }
-	      });
-	    }, 4000);
-
-	    return Promise.resolve();
-	  };
-
-	  RTCPeerConnection.prototype.close = function() {
-	    this.transceivers.forEach(function(transceiver) {
-	      /* not yet
-	      if (transceiver.iceGatherer) {
-	        transceiver.iceGatherer.close();
-	      }
-	      */
-	      if (transceiver.iceTransport) {
-	        transceiver.iceTransport.stop();
-	      }
-	      if (transceiver.dtlsTransport) {
-	        transceiver.dtlsTransport.stop();
-	      }
-	      if (transceiver.rtpSender) {
-	        transceiver.rtpSender.stop();
-	      }
-	      if (transceiver.rtpReceiver) {
-	        transceiver.rtpReceiver.stop();
-	      }
-	    });
-	    // FIXME: clean up tracks, local streams, remote streams, etc
-	    this._isClosed = true;
-	    this._updateSignalingState('closed');
-	  };
-
-	  // Update the signaling state.
-	  RTCPeerConnection.prototype._updateSignalingState = function(newState) {
-	    this.signalingState = newState;
-	    var event = new Event('signalingstatechange');
-	    this._dispatchEvent('signalingstatechange', event);
-	  };
-
-	  // Determine whether to fire the negotiationneeded event.
-	  RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {
-	    var pc = this;
-	    if (this.signalingState !== 'stable' || this.needNegotiation === true) {
-	      return;
-	    }
-	    this.needNegotiation = true;
-	    window.setTimeout(function() {
-	      if (pc.needNegotiation) {
-	        pc.needNegotiation = false;
-	        var event = new Event('negotiationneeded');
-	        pc._dispatchEvent('negotiationneeded', event);
-	      }
-	    }, 0);
-	  };
-
-	  // Update the ice connection state.
-	  RTCPeerConnection.prototype._updateIceConnectionState = function() {
-	    var newState;
-	    var states = {
-	      'new': 0,
-	      closed: 0,
-	      checking: 0,
-	      connected: 0,
-	      completed: 0,
-	      disconnected: 0,
-	      failed: 0
-	    };
-	    this.transceivers.forEach(function(transceiver) {
-	      if (transceiver.iceTransport && !transceiver.rejected) {
-	        states[transceiver.iceTransport.state]++;
-	      }
-	    });
-
-	    newState = 'new';
-	    if (states.failed > 0) {
-	      newState = 'failed';
-	    } else if (states.checking > 0) {
-	      newState = 'checking';
-	    } else if (states.disconnected > 0) {
-	      newState = 'disconnected';
-	    } else if (states.new > 0) {
-	      newState = 'new';
-	    } else if (states.connected > 0) {
-	      newState = 'connected';
-	    } else if (states.completed > 0) {
-	      newState = 'completed';
-	    }
-
-	    if (newState !== this.iceConnectionState) {
-	      this.iceConnectionState = newState;
-	      var event = new Event('iceconnectionstatechange');
-	      this._dispatchEvent('iceconnectionstatechange', event);
-	    }
-	  };
-
-	  // Update the connection state.
-	  RTCPeerConnection.prototype._updateConnectionState = function() {
-	    var newState;
-	    var states = {
-	      'new': 0,
-	      closed: 0,
-	      connecting: 0,
-	      connected: 0,
-	      completed: 0,
-	      disconnected: 0,
-	      failed: 0
-	    };
-	    this.transceivers.forEach(function(transceiver) {
-	      if (transceiver.iceTransport && transceiver.dtlsTransport &&
-	          !transceiver.rejected) {
-	        states[transceiver.iceTransport.state]++;
-	        states[transceiver.dtlsTransport.state]++;
-	      }
-	    });
-	    // ICETransport.completed and connected are the same for this purpose.
-	    states.connected += states.completed;
-
-	    newState = 'new';
-	    if (states.failed > 0) {
-	      newState = 'failed';
-	    } else if (states.connecting > 0) {
-	      newState = 'connecting';
-	    } else if (states.disconnected > 0) {
-	      newState = 'disconnected';
-	    } else if (states.new > 0) {
-	      newState = 'new';
-	    } else if (states.connected > 0) {
-	      newState = 'connected';
-	    }
-
-	    if (newState !== this.connectionState) {
-	      this.connectionState = newState;
-	      var event = new Event('connectionstatechange');
-	      this._dispatchEvent('connectionstatechange', event);
-	    }
-	  };
-
-	  RTCPeerConnection.prototype.createOffer = function() {
-	    var pc = this;
-
-	    if (pc._isClosed) {
-	      return Promise.reject(makeError('InvalidStateError',
-	          'Can not call createOffer after close'));
-	    }
-
-	    var numAudioTracks = pc.transceivers.filter(function(t) {
-	      return t.kind === 'audio';
-	    }).length;
-	    var numVideoTracks = pc.transceivers.filter(function(t) {
-	      return t.kind === 'video';
-	    }).length;
-
-	    // Determine number of audio and video tracks we need to send/recv.
-	    var offerOptions = arguments[0];
-	    if (offerOptions) {
-	      // Reject Chrome legacy constraints.
-	      if (offerOptions.mandatory || offerOptions.optional) {
-	        throw new TypeError(
-	            'Legacy mandatory/optional constraints not supported.');
-	      }
-	      if (offerOptions.offerToReceiveAudio !== undefined) {
-	        if (offerOptions.offerToReceiveAudio === true) {
-	          numAudioTracks = 1;
-	        } else if (offerOptions.offerToReceiveAudio === false) {
-	          numAudioTracks = 0;
-	        } else {
-	          numAudioTracks = offerOptions.offerToReceiveAudio;
-	        }
-	      }
-	      if (offerOptions.offerToReceiveVideo !== undefined) {
-	        if (offerOptions.offerToReceiveVideo === true) {
-	          numVideoTracks = 1;
-	        } else if (offerOptions.offerToReceiveVideo === false) {
-	          numVideoTracks = 0;
-	        } else {
-	          numVideoTracks = offerOptions.offerToReceiveVideo;
-	        }
-	      }
-	    }
-
-	    pc.transceivers.forEach(function(transceiver) {
-	      if (transceiver.kind === 'audio') {
-	        numAudioTracks--;
-	        if (numAudioTracks < 0) {
-	          transceiver.wantReceive = false;
-	        }
-	      } else if (transceiver.kind === 'video') {
-	        numVideoTracks--;
-	        if (numVideoTracks < 0) {
-	          transceiver.wantReceive = false;
-	        }
-	      }
-	    });
-
-	    // Create M-lines for recvonly streams.
-	    while (numAudioTracks > 0 || numVideoTracks > 0) {
-	      if (numAudioTracks > 0) {
-	        pc._createTransceiver('audio');
-	        numAudioTracks--;
-	      }
-	      if (numVideoTracks > 0) {
-	        pc._createTransceiver('video');
-	        numVideoTracks--;
-	      }
-	    }
-
-	    var sdp$1 = sdp.writeSessionBoilerplate(pc._sdpSessionId,
-	        pc._sdpSessionVersion++);
-	    pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {
-	      // For each track, create an ice gatherer, ice transport,
-	      // dtls transport, potentially rtpsender and rtpreceiver.
-	      var track = transceiver.track;
-	      var kind = transceiver.kind;
-	      var mid = transceiver.mid || sdp.generateIdentifier();
-	      transceiver.mid = mid;
-
-	      if (!transceiver.iceGatherer) {
-	        transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,
-	            pc.usingBundle);
-	      }
-
-	      var localCapabilities = window.RTCRtpSender.getCapabilities(kind);
-	      // filter RTX until additional stuff needed for RTX is implemented
-	      // in adapter.js
-	      if (edgeVersion < 15019) {
-	        localCapabilities.codecs = localCapabilities.codecs.filter(
-	            function(codec) {
-	              return codec.name !== 'rtx';
-	            });
-	      }
-	      localCapabilities.codecs.forEach(function(codec) {
-	        // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552
-	        // by adding level-asymmetry-allowed=1
-	        if (codec.name === 'H264' &&
-	            codec.parameters['level-asymmetry-allowed'] === undefined) {
-	          codec.parameters['level-asymmetry-allowed'] = '1';
-	        }
-
-	        // for subsequent offers, we might have to re-use the payload
-	        // type of the last offer.
-	        if (transceiver.remoteCapabilities &&
-	            transceiver.remoteCapabilities.codecs) {
-	          transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) {
-	            if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() &&
-	                codec.clockRate === remoteCodec.clockRate) {
-	              codec.preferredPayloadType = remoteCodec.payloadType;
-	            }
-	          });
-	        }
-	      });
-	      localCapabilities.headerExtensions.forEach(function(hdrExt) {
-	        var remoteExtensions = transceiver.remoteCapabilities &&
-	            transceiver.remoteCapabilities.headerExtensions || [];
-	        remoteExtensions.forEach(function(rHdrExt) {
-	          if (hdrExt.uri === rHdrExt.uri) {
-	            hdrExt.id = rHdrExt.id;
-	          }
-	        });
-	      });
-
-	      // generate an ssrc now, to be used later in rtpSender.send
-	      var sendEncodingParameters = transceiver.sendEncodingParameters || [{
-	        ssrc: (2 * sdpMLineIndex + 1) * 1001
-	      }];
-	      if (track) {
-	        // add RTX
-	        if (edgeVersion >= 15019 && kind === 'video' &&
-	            !sendEncodingParameters[0].rtx) {
-	          sendEncodingParameters[0].rtx = {
-	            ssrc: sendEncodingParameters[0].ssrc + 1
-	          };
-	        }
-	      }
-
-	      if (transceiver.wantReceive) {
-	        transceiver.rtpReceiver = new window.RTCRtpReceiver(
-	            transceiver.dtlsTransport, kind);
-	      }
-
-	      transceiver.localCapabilities = localCapabilities;
-	      transceiver.sendEncodingParameters = sendEncodingParameters;
-	    });
-
-	    // always offer BUNDLE and dispose on return if not supported.
-	    if (pc._config.bundlePolicy !== 'max-compat') {
-	      sdp$1 += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {
-	        return t.mid;
-	      }).join(' ') + '\r\n';
-	    }
-	    sdp$1 += 'a=ice-options:trickle\r\n';
-
-	    pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {
-	      sdp$1 += writeMediaSection(transceiver, transceiver.localCapabilities,
-	          'offer', transceiver.stream, pc._dtlsRole);
-	      sdp$1 += 'a=rtcp-rsize\r\n';
-
-	      if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' &&
-	          (sdpMLineIndex === 0 || !pc.usingBundle)) {
-	        transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) {
-	          cand.component = 1;
-	          sdp$1 += 'a=' + sdp.writeCandidate(cand) + '\r\n';
-	        });
-
-	        if (transceiver.iceGatherer.state === 'completed') {
-	          sdp$1 += 'a=end-of-candidates\r\n';
-	        }
-	      }
-	    });
-
-	    var desc = new window.RTCSessionDescription({
-	      type: 'offer',
-	      sdp: sdp$1
-	    });
-	    return Promise.resolve(desc);
-	  };
-
-	  RTCPeerConnection.prototype.createAnswer = function() {
-	    var pc = this;
-
-	    if (pc._isClosed) {
-	      return Promise.reject(makeError('InvalidStateError',
-	          'Can not call createAnswer after close'));
-	    }
-
-	    if (!(pc.signalingState === 'have-remote-offer' ||
-	        pc.signalingState === 'have-local-pranswer')) {
-	      return Promise.reject(makeError('InvalidStateError',
-	          'Can not call createAnswer in signalingState ' + pc.signalingState));
-	    }
-
-	    var sdp$1 = sdp.writeSessionBoilerplate(pc._sdpSessionId,
-	        pc._sdpSessionVersion++);
-	    if (pc.usingBundle) {
-	      sdp$1 += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {
-	        return t.mid;
-	      }).join(' ') + '\r\n';
-	    }
-	    sdp$1 += 'a=ice-options:trickle\r\n';
-
-	    var mediaSectionsInOffer = sdp.getMediaSections(
-	        pc._remoteDescription.sdp).length;
-	    pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {
-	      if (sdpMLineIndex + 1 > mediaSectionsInOffer) {
-	        return;
-	      }
-	      if (transceiver.rejected) {
-	        if (transceiver.kind === 'application') {
-	          if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt
-	            sdp$1 += 'm=application 0 DTLS/SCTP 5000\r\n';
-	          } else {
-	            sdp$1 += 'm=application 0 ' + transceiver.protocol +
-	                ' webrtc-datachannel\r\n';
-	          }
-	        } else if (transceiver.kind === 'audio') {
-	          sdp$1 += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\r\n' +
-	              'a=rtpmap:0 PCMU/8000\r\n';
-	        } else if (transceiver.kind === 'video') {
-	          sdp$1 += 'm=video 0 UDP/TLS/RTP/SAVPF 120\r\n' +
-	              'a=rtpmap:120 VP8/90000\r\n';
-	        }
-	        sdp$1 += 'c=IN IP4 0.0.0.0\r\n' +
-	            'a=inactive\r\n' +
-	            'a=mid:' + transceiver.mid + '\r\n';
-	        return;
-	      }
-
-	      // FIXME: look at direction.
-	      if (transceiver.stream) {
-	        var localTrack;
-	        if (transceiver.kind === 'audio') {
-	          localTrack = transceiver.stream.getAudioTracks()[0];
-	        } else if (transceiver.kind === 'video') {
-	          localTrack = transceiver.stream.getVideoTracks()[0];
-	        }
-	        if (localTrack) {
-	          // add RTX
-	          if (edgeVersion >= 15019 && transceiver.kind === 'video' &&
-	              !transceiver.sendEncodingParameters[0].rtx) {
-	            transceiver.sendEncodingParameters[0].rtx = {
-	              ssrc: transceiver.sendEncodingParameters[0].ssrc + 1
-	            };
-	          }
-	        }
-	      }
-
-	      // Calculate intersection of capabilities.
-	      var commonCapabilities = getCommonCapabilities(
-	          transceiver.localCapabilities,
-	          transceiver.remoteCapabilities);
-
-	      var hasRtx = commonCapabilities.codecs.filter(function(c) {
-	        return c.name.toLowerCase() === 'rtx';
-	      }).length;
-	      if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {
-	        delete transceiver.sendEncodingParameters[0].rtx;
-	      }
-
-	      sdp$1 += writeMediaSection(transceiver, commonCapabilities,
-	          'answer', transceiver.stream, pc._dtlsRole);
-	      if (transceiver.rtcpParameters &&
-	          transceiver.rtcpParameters.reducedSize) {
-	        sdp$1 += 'a=rtcp-rsize\r\n';
-	      }
-	    });
-
-	    var desc = new window.RTCSessionDescription({
-	      type: 'answer',
-	      sdp: sdp$1
-	    });
-	    return Promise.resolve(desc);
-	  };
-
-	  RTCPeerConnection.prototype.addIceCandidate = function(candidate) {
-	    var pc = this;
-	    var sections;
-	    if (candidate && !(candidate.sdpMLineIndex !== undefined ||
-	        candidate.sdpMid)) {
-	      return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required'));
-	    }
-
-	    // TODO: needs to go into ops queue.
-	    return new Promise(function(resolve, reject) {
-	      if (!pc._remoteDescription) {
-	        return reject(makeError('InvalidStateError',
-	            'Can not add ICE candidate without a remote description'));
-	      } else if (!candidate || candidate.candidate === '') {
-	        for (var j = 0; j < pc.transceivers.length; j++) {
-	          if (pc.transceivers[j].rejected) {
-	            continue;
-	          }
-	          pc.transceivers[j].iceTransport.addRemoteCandidate({});
-	          sections = sdp.getMediaSections(pc._remoteDescription.sdp);
-	          sections[j] += 'a=end-of-candidates\r\n';
-	          pc._remoteDescription.sdp =
-	              sdp.getDescription(pc._remoteDescription.sdp) +
-	              sections.join('');
-	          if (pc.usingBundle) {
-	            break;
-	          }
-	        }
-	      } else {
-	        var sdpMLineIndex = candidate.sdpMLineIndex;
-	        if (candidate.sdpMid) {
-	          for (var i = 0; i < pc.transceivers.length; i++) {
-	            if (pc.transceivers[i].mid === candidate.sdpMid) {
-	              sdpMLineIndex = i;
-	              break;
-	            }
-	          }
-	        }
-	        var transceiver = pc.transceivers[sdpMLineIndex];
-	        if (transceiver) {
-	          if (transceiver.rejected) {
-	            return resolve();
-	          }
-	          var cand = Object.keys(candidate.candidate).length > 0 ?
-	              sdp.parseCandidate(candidate.candidate) : {};
-	          // Ignore Chrome's invalid candidates since Edge does not like them.
-	          if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {
-	            return resolve();
-	          }
-	          // Ignore RTCP candidates, we assume RTCP-MUX.
-	          if (cand.component && cand.component !== 1) {
-	            return resolve();
-	          }
-	          // when using bundle, avoid adding candidates to the wrong
-	          // ice transport. And avoid adding candidates added in the SDP.
-	          if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 &&
-	              transceiver.iceTransport !== pc.transceivers[0].iceTransport)) {
-	            if (!maybeAddCandidate(transceiver.iceTransport, cand)) {
-	              return reject(makeError('OperationError',
-	                  'Can not add ICE candidate'));
-	            }
-	          }
-
-	          // update the remoteDescription.
-	          var candidateString = candidate.candidate.trim();
-	          if (candidateString.indexOf('a=') === 0) {
-	            candidateString = candidateString.substr(2);
-	          }
-	          sections = sdp.getMediaSections(pc._remoteDescription.sdp);
-	          sections[sdpMLineIndex] += 'a=' +
-	              (cand.type ? candidateString : 'end-of-candidates')
-	              + '\r\n';
-	          pc._remoteDescription.sdp =
-	              sdp.getDescription(pc._remoteDescription.sdp) +
-	              sections.join('');
-	        } else {
-	          return reject(makeError('OperationError',
-	              'Can not add ICE candidate'));
-	        }
-	      }
-	      resolve();
-	    });
-	  };
-
-	  RTCPeerConnection.prototype.getStats = function(selector) {
-	    if (selector && selector instanceof window.MediaStreamTrack) {
-	      var senderOrReceiver = null;
-	      this.transceivers.forEach(function(transceiver) {
-	        if (transceiver.rtpSender &&
-	            transceiver.rtpSender.track === selector) {
-	          senderOrReceiver = transceiver.rtpSender;
-	        } else if (transceiver.rtpReceiver &&
-	            transceiver.rtpReceiver.track === selector) {
-	          senderOrReceiver = transceiver.rtpReceiver;
-	        }
-	      });
-	      if (!senderOrReceiver) {
-	        throw makeError('InvalidAccessError', 'Invalid selector.');
-	      }
-	      return senderOrReceiver.getStats();
-	    }
-
-	    var promises = [];
-	    this.transceivers.forEach(function(transceiver) {
-	      ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',
-	          'dtlsTransport'].forEach(function(method) {
-	            if (transceiver[method]) {
-	              promises.push(transceiver[method].getStats());
-	            }
-	          });
-	    });
-	    return Promise.all(promises).then(function(allStats) {
-	      var results = new Map();
-	      allStats.forEach(function(stats) {
-	        stats.forEach(function(stat) {
-	          results.set(stat.id, stat);
-	        });
-	      });
-	      return results;
-	    });
-	  };
-
-	  // fix low-level stat names and return Map instead of object.
-	  var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer',
-	    'RTCIceTransport', 'RTCDtlsTransport'];
-	  ortcObjects.forEach(function(ortcObjectName) {
-	    var obj = window[ortcObjectName];
-	    if (obj && obj.prototype && obj.prototype.getStats) {
-	      var nativeGetstats = obj.prototype.getStats;
-	      obj.prototype.getStats = function() {
-	        return nativeGetstats.apply(this)
-	        .then(function(nativeStats) {
-	          var mapStats = new Map();
-	          Object.keys(nativeStats).forEach(function(id) {
-	            nativeStats[id].type = fixStatsType(nativeStats[id]);
-	            mapStats.set(id, nativeStats[id]);
-	          });
-	          return mapStats;
-	        });
-	      };
-	    }
-	  });
-
-	  // legacy callback shims. Should be moved to adapter.js some days.
-	  var methods = ['createOffer', 'createAnswer'];
-	  methods.forEach(function(method) {
-	    var nativeMethod = RTCPeerConnection.prototype[method];
-	    RTCPeerConnection.prototype[method] = function() {
-	      var args = arguments;
-	      if (typeof args[0] === 'function' ||
-	          typeof args[1] === 'function') { // legacy
-	        return nativeMethod.apply(this, [arguments[2]])
-	        .then(function(description) {
-	          if (typeof args[0] === 'function') {
-	            args[0].apply(null, [description]);
-	          }
-	        }, function(error) {
-	          if (typeof args[1] === 'function') {
-	            args[1].apply(null, [error]);
-	          }
-	        });
-	      }
-	      return nativeMethod.apply(this, arguments);
-	    };
-	  });
-
-	  methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'];
-	  methods.forEach(function(method) {
-	    var nativeMethod = RTCPeerConnection.prototype[method];
-	    RTCPeerConnection.prototype[method] = function() {
-	      var args = arguments;
-	      if (typeof args[1] === 'function' ||
-	          typeof args[2] === 'function') { // legacy
-	        return nativeMethod.apply(this, arguments)
-	        .then(function() {
-	          if (typeof args[1] === 'function') {
-	            args[1].apply(null);
-	          }
-	        }, function(error) {
-	          if (typeof args[2] === 'function') {
-	            args[2].apply(null, [error]);
-	          }
-	        });
-	      }
-	      return nativeMethod.apply(this, arguments);
-	    };
-	  });
-
-	  // getStats is special. It doesn't have a spec legacy method yet we support
-	  // getStats(something, cb) without error callbacks.
-	  ['getStats'].forEach(function(method) {
-	    var nativeMethod = RTCPeerConnection.prototype[method];
-	    RTCPeerConnection.prototype[method] = function() {
-	      var args = arguments;
-	      if (typeof args[1] === 'function') {
-	        return nativeMethod.apply(this, arguments)
-	        .then(function() {
-	          if (typeof args[1] === 'function') {
-	            args[1].apply(null);
-	          }
-	        });
-	      }
-	      return nativeMethod.apply(this, arguments);
-	    };
-	  });
-
-	  return RTCPeerConnection;
-	};
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimGetUserMedia$2(window) {
-	  const navigator = window && window.navigator;
-
-	  const shimError_ = function(e) {
-	    return {
-	      name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name,
-	      message: e.message,
-	      constraint: e.constraint,
-	      toString() {
-	        return this.name;
-	      }
-	    };
-	  };
-
-	  // getUserMedia error shim.
-	  const origGetUserMedia = navigator.mediaDevices.getUserMedia.
-	      bind(navigator.mediaDevices);
-	  navigator.mediaDevices.getUserMedia = function(c) {
-	    return origGetUserMedia(c).catch(e => Promise.reject(shimError_(e)));
-	  };
-	}
-
-	/*
-	 *  Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimGetDisplayMedia$1(window) {
-	  if (!('getDisplayMedia' in window.navigator)) {
-	    return;
-	  }
-	  if (!(window.navigator.mediaDevices)) {
-	    return;
-	  }
-	  if (window.navigator.mediaDevices &&
-	    'getDisplayMedia' in window.navigator.mediaDevices) {
-	    return;
-	  }
-	  window.navigator.mediaDevices.getDisplayMedia =
-	    window.navigator.getDisplayMedia.bind(window.navigator);
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimPeerConnection$1(window, browserDetails) {
-	  if (window.RTCIceGatherer) {
-	    if (!window.RTCIceCandidate) {
-	      window.RTCIceCandidate = function RTCIceCandidate(args) {
-	        return args;
-	      };
-	    }
-	    if (!window.RTCSessionDescription) {
-	      window.RTCSessionDescription = function RTCSessionDescription(args) {
-	        return args;
-	      };
-	    }
-	    // this adds an additional event listener to MediaStrackTrack that signals
-	    // when a tracks enabled property was changed. Workaround for a bug in
-	    // addStream, see below. No longer required in 15025+
-	    if (browserDetails.version < 15025) {
-	      const origMSTEnabled = Object.getOwnPropertyDescriptor(
-	          window.MediaStreamTrack.prototype, 'enabled');
-	      Object.defineProperty(window.MediaStreamTrack.prototype, 'enabled', {
-	        set(value) {
-	          origMSTEnabled.set.call(this, value);
-	          const ev = new Event('enabled');
-	          ev.enabled = value;
-	          this.dispatchEvent(ev);
-	        }
-	      });
-	    }
-	  }
-
-	  // ORTC defines the DTMF sender a bit different.
-	  // https://github.com/w3c/ortc/issues/714
-	  if (window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {
-	    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {
-	      get() {
-	        if (this._dtmf === undefined) {
-	          if (this.track.kind === 'audio') {
-	            this._dtmf = new window.RTCDtmfSender(this);
-	          } else if (this.track.kind === 'video') {
-	            this._dtmf = null;
-	          }
-	        }
-	        return this._dtmf;
-	      }
-	    });
-	  }
-	  // Edge currently only implements the RTCDtmfSender, not the
-	  // RTCDTMFSender alias. See http://draft.ortc.org/#rtcdtmfsender2*
-	  if (window.RTCDtmfSender && !window.RTCDTMFSender) {
-	    window.RTCDTMFSender = window.RTCDtmfSender;
-	  }
-
-	  const RTCPeerConnectionShim = rtcpeerconnection(window,
-	      browserDetails.version);
-	  window.RTCPeerConnection = function RTCPeerConnection(config) {
-	    if (config && config.iceServers) {
-	      config.iceServers = filterIceServers$1(config.iceServers,
-	        browserDetails.version);
-	      log$1('ICE servers after filtering:', config.iceServers);
-	    }
-	    return new RTCPeerConnectionShim(config);
-	  };
-	  window.RTCPeerConnection.prototype = RTCPeerConnectionShim.prototype;
-	}
-
-	function shimReplaceTrack(window) {
-	  // ORTC has replaceTrack -- https://github.com/w3c/ortc/issues/614
-	  if (window.RTCRtpSender &&
-	      !('replaceTrack' in window.RTCRtpSender.prototype)) {
-	    window.RTCRtpSender.prototype.replaceTrack =
-	        window.RTCRtpSender.prototype.setTrack;
-	  }
-	}
-
-	var edgeShim = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		shimPeerConnection: shimPeerConnection$1,
-		shimReplaceTrack: shimReplaceTrack,
-		shimGetUserMedia: shimGetUserMedia$2,
-		shimGetDisplayMedia: shimGetDisplayMedia$1
-	});
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimGetUserMedia$1(window, browserDetails) {
-	  const navigator = window && window.navigator;
-	  const MediaStreamTrack = window && window.MediaStreamTrack;
-
-	  navigator.getUserMedia = function(constraints, onSuccess, onError) {
-	    // Replace Firefox 44+'s deprecation warning with unprefixed version.
-	    deprecated('navigator.getUserMedia',
-	        'navigator.mediaDevices.getUserMedia');
-	    navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
-	  };
-
-	  if (!(browserDetails.version > 55 &&
-	      'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {
-	    const remap = function(obj, a, b) {
-	      if (a in obj && !(b in obj)) {
-	        obj[b] = obj[a];
-	        delete obj[a];
-	      }
-	    };
-
-	    const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.
-	        bind(navigator.mediaDevices);
-	    navigator.mediaDevices.getUserMedia = function(c) {
-	      if (typeof c === 'object' && typeof c.audio === 'object') {
-	        c = JSON.parse(JSON.stringify(c));
-	        remap(c.audio, 'autoGainControl', 'mozAutoGainControl');
-	        remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');
-	      }
-	      return nativeGetUserMedia(c);
-	    };
-
-	    if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {
-	      const nativeGetSettings = MediaStreamTrack.prototype.getSettings;
-	      MediaStreamTrack.prototype.getSettings = function() {
-	        const obj = nativeGetSettings.apply(this, arguments);
-	        remap(obj, 'mozAutoGainControl', 'autoGainControl');
-	        remap(obj, 'mozNoiseSuppression', 'noiseSuppression');
-	        return obj;
-	      };
-	    }
-
-	    if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {
-	      const nativeApplyConstraints =
-	        MediaStreamTrack.prototype.applyConstraints;
-	      MediaStreamTrack.prototype.applyConstraints = function(c) {
-	        if (this.kind === 'audio' && typeof c === 'object') {
-	          c = JSON.parse(JSON.stringify(c));
-	          remap(c, 'autoGainControl', 'mozAutoGainControl');
-	          remap(c, 'noiseSuppression', 'mozNoiseSuppression');
-	        }
-	        return nativeApplyConstraints.apply(this, [c]);
-	      };
-	    }
-	  }
-	}
-
-	/*
-	 *  Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimGetDisplayMedia(window, preferredMediaSource) {
-	  if (window.navigator.mediaDevices &&
-	    'getDisplayMedia' in window.navigator.mediaDevices) {
-	    return;
-	  }
-	  if (!(window.navigator.mediaDevices)) {
-	    return;
-	  }
-	  window.navigator.mediaDevices.getDisplayMedia =
-	    function getDisplayMedia(constraints) {
-	      if (!(constraints && constraints.video)) {
-	        const err = new DOMException('getDisplayMedia without video ' +
-	            'constraints is undefined');
-	        err.name = 'NotFoundError';
-	        // from https://heycam.github.io/webidl/#idl-DOMException-error-names
-	        err.code = 8;
-	        return Promise.reject(err);
-	      }
-	      if (constraints.video === true) {
-	        constraints.video = {mediaSource: preferredMediaSource};
-	      } else {
-	        constraints.video.mediaSource = preferredMediaSource;
-	      }
-	      return window.navigator.mediaDevices.getUserMedia(constraints);
-	    };
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimOnTrack(window) {
-	  if (typeof window === 'object' && window.RTCTrackEvent &&
-	      ('receiver' in window.RTCTrackEvent.prototype) &&
-	      !('transceiver' in window.RTCTrackEvent.prototype)) {
-	    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
-	      get() {
-	        return {receiver: this.receiver};
-	      }
-	    });
-	  }
-	}
-
-	function shimPeerConnection(window, browserDetails) {
-	  if (typeof window !== 'object' ||
-	      !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {
-	    return; // probably media.peerconnection.enabled=false in about:config
-	  }
-	  if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {
-	    // very basic support for old versions.
-	    window.RTCPeerConnection = window.mozRTCPeerConnection;
-	  }
-
-	  if (browserDetails.version < 53) {
-	    // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.
-	    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']
-	        .forEach(function(method) {
-	          const nativeMethod = window.RTCPeerConnection.prototype[method];
-	          const methodObj = {[method]() {
-	            arguments[0] = new ((method === 'addIceCandidate') ?
-	                window.RTCIceCandidate :
-	                window.RTCSessionDescription)(arguments[0]);
-	            return nativeMethod.apply(this, arguments);
-	          }};
-	          window.RTCPeerConnection.prototype[method] = methodObj[method];
-	        });
-	  }
-
-	  const modernStatsTypes = {
-	    inboundrtp: 'inbound-rtp',
-	    outboundrtp: 'outbound-rtp',
-	    candidatepair: 'candidate-pair',
-	    localcandidate: 'local-candidate',
-	    remotecandidate: 'remote-candidate'
-	  };
-
-	  const nativeGetStats = window.RTCPeerConnection.prototype.getStats;
-	  window.RTCPeerConnection.prototype.getStats = function getStats() {
-	    const [selector, onSucc, onErr] = arguments;
-	    return nativeGetStats.apply(this, [selector || null])
-	      .then(stats => {
-	        if (browserDetails.version < 53 && !onSucc) {
-	          // Shim only promise getStats with spec-hyphens in type names
-	          // Leave callback version alone; misc old uses of forEach before Map
-	          try {
-	            stats.forEach(stat => {
-	              stat.type = modernStatsTypes[stat.type] || stat.type;
-	            });
-	          } catch (e) {
-	            if (e.name !== 'TypeError') {
-	              throw e;
-	            }
-	            // Avoid TypeError: "type" is read-only, in old versions. 34-43ish
-	            stats.forEach((stat, i) => {
-	              stats.set(i, Object.assign({}, stat, {
-	                type: modernStatsTypes[stat.type] || stat.type
-	              }));
-	            });
-	          }
-	        }
-	        return stats;
-	      })
-	      .then(onSucc, onErr);
-	  };
-	}
-
-	function shimSenderGetStats(window) {
-	  if (!(typeof window === 'object' && window.RTCPeerConnection &&
-	      window.RTCRtpSender)) {
-	    return;
-	  }
-	  if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {
-	    return;
-	  }
-	  const origGetSenders = window.RTCPeerConnection.prototype.getSenders;
-	  if (origGetSenders) {
-	    window.RTCPeerConnection.prototype.getSenders = function getSenders() {
-	      const senders = origGetSenders.apply(this, []);
-	      senders.forEach(sender => sender._pc = this);
-	      return senders;
-	    };
-	  }
-
-	  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;
-	  if (origAddTrack) {
-	    window.RTCPeerConnection.prototype.addTrack = function addTrack() {
-	      const sender = origAddTrack.apply(this, arguments);
-	      sender._pc = this;
-	      return sender;
-	    };
-	  }
-	  window.RTCRtpSender.prototype.getStats = function getStats() {
-	    return this.track ? this._pc.getStats(this.track) :
-	        Promise.resolve(new Map());
-	  };
-	}
-
-	function shimReceiverGetStats(window) {
-	  if (!(typeof window === 'object' && window.RTCPeerConnection &&
-	      window.RTCRtpSender)) {
-	    return;
-	  }
-	  if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {
-	    return;
-	  }
-	  const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;
-	  if (origGetReceivers) {
-	    window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {
-	      const receivers = origGetReceivers.apply(this, []);
-	      receivers.forEach(receiver => receiver._pc = this);
-	      return receivers;
-	    };
-	  }
-	  wrapPeerConnectionEvent(window, 'track', e => {
-	    e.receiver._pc = e.srcElement;
-	    return e;
-	  });
-	  window.RTCRtpReceiver.prototype.getStats = function getStats() {
-	    return this._pc.getStats(this.track);
-	  };
-	}
-
-	function shimRemoveStream(window) {
-	  if (!window.RTCPeerConnection ||
-	      'removeStream' in window.RTCPeerConnection.prototype) {
-	    return;
-	  }
-	  window.RTCPeerConnection.prototype.removeStream =
-	    function removeStream(stream) {
-	      deprecated('removeStream', 'removeTrack');
-	      this.getSenders().forEach(sender => {
-	        if (sender.track && stream.getTracks().includes(sender.track)) {
-	          this.removeTrack(sender);
-	        }
-	      });
-	    };
-	}
-
-	function shimRTCDataChannel(window) {
-	  // rename DataChannel to RTCDataChannel (native fix in FF60):
-	  // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851
-	  if (window.DataChannel && !window.RTCDataChannel) {
-	    window.RTCDataChannel = window.DataChannel;
-	  }
-	}
-
-	function shimAddTransceiver(window) {
-	  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
-	  // Firefox ignores the init sendEncodings options passed to addTransceiver
-	  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
-	  if (!(typeof window === 'object' && window.RTCPeerConnection)) {
-	    return;
-	  }
-	  const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;
-	  if (origAddTransceiver) {
-	    window.RTCPeerConnection.prototype.addTransceiver =
-	      function addTransceiver() {
-	        this.setParametersPromises = [];
-	        const initParameters = arguments[1];
-	        const shouldPerformCheck = initParameters &&
-	                                  'sendEncodings' in initParameters;
-	        if (shouldPerformCheck) {
-	          // If sendEncodings params are provided, validate grammar
-	          initParameters.sendEncodings.forEach((encodingParam) => {
-	            if ('rid' in encodingParam) {
-	              const ridRegex = /^[a-z0-9]{0,16}$/i;
-	              if (!ridRegex.test(encodingParam.rid)) {
-	                throw new TypeError('Invalid RID value provided.');
-	              }
-	            }
-	            if ('scaleResolutionDownBy' in encodingParam) {
-	              if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {
-	                throw new RangeError('scale_resolution_down_by must be >= 1.0');
-	              }
-	            }
-	            if ('maxFramerate' in encodingParam) {
-	              if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {
-	                throw new RangeError('max_framerate must be >= 0.0');
-	              }
-	            }
-	          });
-	        }
-	        const transceiver = origAddTransceiver.apply(this, arguments);
-	        if (shouldPerformCheck) {
-	          // Check if the init options were applied. If not we do this in an
-	          // asynchronous way and save the promise reference in a global object.
-	          // This is an ugly hack, but at the same time is way more robust than
-	          // checking the sender parameters before and after the createOffer
-	          // Also note that after the createoffer we are not 100% sure that
-	          // the params were asynchronously applied so we might miss the
-	          // opportunity to recreate offer.
-	          const {sender} = transceiver;
-	          const params = sender.getParameters();
-	          if (!('encodings' in params) ||
-	              // Avoid being fooled by patched getParameters() below.
-	              (params.encodings.length === 1 &&
-	               Object.keys(params.encodings[0]).length === 0)) {
-	            params.encodings = initParameters.sendEncodings;
-	            sender.sendEncodings = initParameters.sendEncodings;
-	            this.setParametersPromises.push(sender.setParameters(params)
-	              .then(() => {
-	                delete sender.sendEncodings;
-	              }).catch(() => {
-	                delete sender.sendEncodings;
-	              })
-	            );
-	          }
-	        }
-	        return transceiver;
-	      };
-	  }
-	}
-
-	function shimGetParameters(window) {
-	  if (!(typeof window === 'object' && window.RTCRtpSender)) {
-	    return;
-	  }
-	  const origGetParameters = window.RTCRtpSender.prototype.getParameters;
-	  if (origGetParameters) {
-	    window.RTCRtpSender.prototype.getParameters =
-	      function getParameters() {
-	        const params = origGetParameters.apply(this, arguments);
-	        if (!('encodings' in params)) {
-	          params.encodings = [].concat(this.sendEncodings || [{}]);
-	        }
-	        return params;
-	      };
-	  }
-	}
-
-	function shimCreateOffer(window) {
-	  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
-	  // Firefox ignores the init sendEncodings options passed to addTransceiver
-	  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
-	  if (!(typeof window === 'object' && window.RTCPeerConnection)) {
-	    return;
-	  }
-	  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
-	  window.RTCPeerConnection.prototype.createOffer = function createOffer() {
-	    if (this.setParametersPromises && this.setParametersPromises.length) {
-	      return Promise.all(this.setParametersPromises)
-	      .then(() => {
-	        return origCreateOffer.apply(this, arguments);
-	      })
-	      .finally(() => {
-	        this.setParametersPromises = [];
-	      });
-	    }
-	    return origCreateOffer.apply(this, arguments);
-	  };
-	}
-
-	function shimCreateAnswer(window) {
-	  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647
-	  // Firefox ignores the init sendEncodings options passed to addTransceiver
-	  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918
-	  if (!(typeof window === 'object' && window.RTCPeerConnection)) {
-	    return;
-	  }
-	  const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;
-	  window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {
-	    if (this.setParametersPromises && this.setParametersPromises.length) {
-	      return Promise.all(this.setParametersPromises)
-	      .then(() => {
-	        return origCreateAnswer.apply(this, arguments);
-	      })
-	      .finally(() => {
-	        this.setParametersPromises = [];
-	      });
-	    }
-	    return origCreateAnswer.apply(this, arguments);
-	  };
-	}
-
-	var firefoxShim = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		shimOnTrack: shimOnTrack,
-		shimPeerConnection: shimPeerConnection,
-		shimSenderGetStats: shimSenderGetStats,
-		shimReceiverGetStats: shimReceiverGetStats,
-		shimRemoveStream: shimRemoveStream,
-		shimRTCDataChannel: shimRTCDataChannel,
-		shimAddTransceiver: shimAddTransceiver,
-		shimGetParameters: shimGetParameters,
-		shimCreateOffer: shimCreateOffer,
-		shimCreateAnswer: shimCreateAnswer,
-		shimGetUserMedia: shimGetUserMedia$1,
-		shimGetDisplayMedia: shimGetDisplayMedia
-	});
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimLocalStreamsAPI(window) {
-	  if (typeof window !== 'object' || !window.RTCPeerConnection) {
-	    return;
-	  }
-	  if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {
-	    window.RTCPeerConnection.prototype.getLocalStreams =
-	      function getLocalStreams() {
-	        if (!this._localStreams) {
-	          this._localStreams = [];
-	        }
-	        return this._localStreams;
-	      };
-	  }
-	  if (!('addStream' in window.RTCPeerConnection.prototype)) {
-	    const _addTrack = window.RTCPeerConnection.prototype.addTrack;
-	    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {
-	      if (!this._localStreams) {
-	        this._localStreams = [];
-	      }
-	      if (!this._localStreams.includes(stream)) {
-	        this._localStreams.push(stream);
-	      }
-	      // Try to emulate Chrome's behaviour of adding in audio-video order.
-	      // Safari orders by track id.
-	      stream.getAudioTracks().forEach(track => _addTrack.call(this, track,
-	        stream));
-	      stream.getVideoTracks().forEach(track => _addTrack.call(this, track,
-	        stream));
-	    };
-
-	    window.RTCPeerConnection.prototype.addTrack =
-	      function addTrack(track, ...streams) {
-	        if (streams) {
-	          streams.forEach((stream) => {
-	            if (!this._localStreams) {
-	              this._localStreams = [stream];
-	            } else if (!this._localStreams.includes(stream)) {
-	              this._localStreams.push(stream);
-	            }
-	          });
-	        }
-	        return _addTrack.apply(this, arguments);
-	      };
-	  }
-	  if (!('removeStream' in window.RTCPeerConnection.prototype)) {
-	    window.RTCPeerConnection.prototype.removeStream =
-	      function removeStream(stream) {
-	        if (!this._localStreams) {
-	          this._localStreams = [];
-	        }
-	        const index = this._localStreams.indexOf(stream);
-	        if (index === -1) {
-	          return;
-	        }
-	        this._localStreams.splice(index, 1);
-	        const tracks = stream.getTracks();
-	        this.getSenders().forEach(sender => {
-	          if (tracks.includes(sender.track)) {
-	            this.removeTrack(sender);
-	          }
-	        });
-	      };
-	  }
-	}
-
-	function shimRemoteStreamsAPI(window) {
-	  if (typeof window !== 'object' || !window.RTCPeerConnection) {
-	    return;
-	  }
-	  if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {
-	    window.RTCPeerConnection.prototype.getRemoteStreams =
-	      function getRemoteStreams() {
-	        return this._remoteStreams ? this._remoteStreams : [];
-	      };
-	  }
-	  if (!('onaddstream' in window.RTCPeerConnection.prototype)) {
-	    Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {
-	      get() {
-	        return this._onaddstream;
-	      },
-	      set(f) {
-	        if (this._onaddstream) {
-	          this.removeEventListener('addstream', this._onaddstream);
-	          this.removeEventListener('track', this._onaddstreampoly);
-	        }
-	        this.addEventListener('addstream', this._onaddstream = f);
-	        this.addEventListener('track', this._onaddstreampoly = (e) => {
-	          e.streams.forEach(stream => {
-	            if (!this._remoteStreams) {
-	              this._remoteStreams = [];
-	            }
-	            if (this._remoteStreams.includes(stream)) {
-	              return;
-	            }
-	            this._remoteStreams.push(stream);
-	            const event = new Event('addstream');
-	            event.stream = stream;
-	            this.dispatchEvent(event);
-	          });
-	        });
-	      }
-	    });
-	    const origSetRemoteDescription =
-	      window.RTCPeerConnection.prototype.setRemoteDescription;
-	    window.RTCPeerConnection.prototype.setRemoteDescription =
-	      function setRemoteDescription() {
-	        const pc = this;
-	        if (!this._onaddstreampoly) {
-	          this.addEventListener('track', this._onaddstreampoly = function(e) {
-	            e.streams.forEach(stream => {
-	              if (!pc._remoteStreams) {
-	                pc._remoteStreams = [];
-	              }
-	              if (pc._remoteStreams.indexOf(stream) >= 0) {
-	                return;
-	              }
-	              pc._remoteStreams.push(stream);
-	              const event = new Event('addstream');
-	              event.stream = stream;
-	              pc.dispatchEvent(event);
-	            });
-	          });
-	        }
-	        return origSetRemoteDescription.apply(pc, arguments);
-	      };
-	  }
-	}
-
-	function shimCallbacksAPI(window) {
-	  if (typeof window !== 'object' || !window.RTCPeerConnection) {
-	    return;
-	  }
-	  const prototype = window.RTCPeerConnection.prototype;
-	  const origCreateOffer = prototype.createOffer;
-	  const origCreateAnswer = prototype.createAnswer;
-	  const setLocalDescription = prototype.setLocalDescription;
-	  const setRemoteDescription = prototype.setRemoteDescription;
-	  const addIceCandidate = prototype.addIceCandidate;
-
-	  prototype.createOffer =
-	    function createOffer(successCallback, failureCallback) {
-	      const options = (arguments.length >= 2) ? arguments[2] : arguments[0];
-	      const promise = origCreateOffer.apply(this, [options]);
-	      if (!failureCallback) {
-	        return promise;
-	      }
-	      promise.then(successCallback, failureCallback);
-	      return Promise.resolve();
-	    };
-
-	  prototype.createAnswer =
-	    function createAnswer(successCallback, failureCallback) {
-	      const options = (arguments.length >= 2) ? arguments[2] : arguments[0];
-	      const promise = origCreateAnswer.apply(this, [options]);
-	      if (!failureCallback) {
-	        return promise;
-	      }
-	      promise.then(successCallback, failureCallback);
-	      return Promise.resolve();
-	    };
-
-	  let withCallback = function(description, successCallback, failureCallback) {
-	    const promise = setLocalDescription.apply(this, [description]);
-	    if (!failureCallback) {
-	      return promise;
-	    }
-	    promise.then(successCallback, failureCallback);
-	    return Promise.resolve();
-	  };
-	  prototype.setLocalDescription = withCallback;
-
-	  withCallback = function(description, successCallback, failureCallback) {
-	    const promise = setRemoteDescription.apply(this, [description]);
-	    if (!failureCallback) {
-	      return promise;
-	    }
-	    promise.then(successCallback, failureCallback);
-	    return Promise.resolve();
-	  };
-	  prototype.setRemoteDescription = withCallback;
-
-	  withCallback = function(candidate, successCallback, failureCallback) {
-	    const promise = addIceCandidate.apply(this, [candidate]);
-	    if (!failureCallback) {
-	      return promise;
-	    }
-	    promise.then(successCallback, failureCallback);
-	    return Promise.resolve();
-	  };
-	  prototype.addIceCandidate = withCallback;
-	}
-
-	function shimGetUserMedia(window) {
-	  const navigator = window && window.navigator;
-
-	  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
-	    // shim not needed in Safari 12.1
-	    const mediaDevices = navigator.mediaDevices;
-	    const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);
-	    navigator.mediaDevices.getUserMedia = (constraints) => {
-	      return _getUserMedia(shimConstraints(constraints));
-	    };
-	  }
-
-	  if (!navigator.getUserMedia && navigator.mediaDevices &&
-	    navigator.mediaDevices.getUserMedia) {
-	    navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {
-	      navigator.mediaDevices.getUserMedia(constraints)
-	      .then(cb, errcb);
-	    }.bind(navigator);
-	  }
-	}
-
-	function shimConstraints(constraints) {
-	  if (constraints && constraints.video !== undefined) {
-	    return Object.assign({},
-	      constraints,
-	      {video: compactObject(constraints.video)}
-	    );
-	  }
-
-	  return constraints;
-	}
-
-	function shimRTCIceServerUrls(window) {
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-	  // migrate from non-spec RTCIceServer.url to RTCIceServer.urls
-	  const OrigPeerConnection = window.RTCPeerConnection;
-	  window.RTCPeerConnection =
-	    function RTCPeerConnection(pcConfig, pcConstraints) {
-	      if (pcConfig && pcConfig.iceServers) {
-	        const newIceServers = [];
-	        for (let i = 0; i < pcConfig.iceServers.length; i++) {
-	          let server = pcConfig.iceServers[i];
-	          if (!server.hasOwnProperty('urls') &&
-	              server.hasOwnProperty('url')) {
-	            deprecated('RTCIceServer.url', 'RTCIceServer.urls');
-	            server = JSON.parse(JSON.stringify(server));
-	            server.urls = server.url;
-	            delete server.url;
-	            newIceServers.push(server);
-	          } else {
-	            newIceServers.push(pcConfig.iceServers[i]);
-	          }
-	        }
-	        pcConfig.iceServers = newIceServers;
-	      }
-	      return new OrigPeerConnection(pcConfig, pcConstraints);
-	    };
-	  window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;
-	  // wrap static methods. Currently just generateCertificate.
-	  if ('generateCertificate' in OrigPeerConnection) {
-	    Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {
-	      get() {
-	        return OrigPeerConnection.generateCertificate;
-	      }
-	    });
-	  }
-	}
-
-	function shimTrackEventTransceiver(window) {
-	  // Add event.transceiver member over deprecated event.receiver
-	  if (typeof window === 'object' && window.RTCTrackEvent &&
-	      'receiver' in window.RTCTrackEvent.prototype &&
-	      !('transceiver' in window.RTCTrackEvent.prototype)) {
-	    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {
-	      get() {
-	        return {receiver: this.receiver};
-	      }
-	    });
-	  }
-	}
-
-	function shimCreateOfferLegacy(window) {
-	  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;
-	  window.RTCPeerConnection.prototype.createOffer =
-	    function createOffer(offerOptions) {
-	      if (offerOptions) {
-	        if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {
-	          // support bit values
-	          offerOptions.offerToReceiveAudio =
-	            !!offerOptions.offerToReceiveAudio;
-	        }
-	        const audioTransceiver = this.getTransceivers().find(transceiver =>
-	          transceiver.receiver.track.kind === 'audio');
-	        if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {
-	          if (audioTransceiver.direction === 'sendrecv') {
-	            if (audioTransceiver.setDirection) {
-	              audioTransceiver.setDirection('sendonly');
-	            } else {
-	              audioTransceiver.direction = 'sendonly';
-	            }
-	          } else if (audioTransceiver.direction === 'recvonly') {
-	            if (audioTransceiver.setDirection) {
-	              audioTransceiver.setDirection('inactive');
-	            } else {
-	              audioTransceiver.direction = 'inactive';
-	            }
-	          }
-	        } else if (offerOptions.offerToReceiveAudio === true &&
-	            !audioTransceiver) {
-	          this.addTransceiver('audio');
-	        }
-
-	        if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {
-	          // support bit values
-	          offerOptions.offerToReceiveVideo =
-	            !!offerOptions.offerToReceiveVideo;
-	        }
-	        const videoTransceiver = this.getTransceivers().find(transceiver =>
-	          transceiver.receiver.track.kind === 'video');
-	        if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {
-	          if (videoTransceiver.direction === 'sendrecv') {
-	            if (videoTransceiver.setDirection) {
-	              videoTransceiver.setDirection('sendonly');
-	            } else {
-	              videoTransceiver.direction = 'sendonly';
-	            }
-	          } else if (videoTransceiver.direction === 'recvonly') {
-	            if (videoTransceiver.setDirection) {
-	              videoTransceiver.setDirection('inactive');
-	            } else {
-	              videoTransceiver.direction = 'inactive';
-	            }
-	          }
-	        } else if (offerOptions.offerToReceiveVideo === true &&
-	            !videoTransceiver) {
-	          this.addTransceiver('video');
-	        }
-	      }
-	      return origCreateOffer.apply(this, arguments);
-	    };
-	}
-
-	function shimAudioContext(window) {
-	  if (typeof window !== 'object' || window.AudioContext) {
-	    return;
-	  }
-	  window.AudioContext = window.webkitAudioContext;
-	}
-
-	var safariShim = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		shimLocalStreamsAPI: shimLocalStreamsAPI,
-		shimRemoteStreamsAPI: shimRemoteStreamsAPI,
-		shimCallbacksAPI: shimCallbacksAPI,
-		shimGetUserMedia: shimGetUserMedia,
-		shimConstraints: shimConstraints,
-		shimRTCIceServerUrls: shimRTCIceServerUrls,
-		shimTrackEventTransceiver: shimTrackEventTransceiver,
-		shimCreateOfferLegacy: shimCreateOfferLegacy,
-		shimAudioContext: shimAudioContext
-	});
-
-	/*
-	 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	function shimRTCIceCandidate(window) {
-	  // foundation is arbitrarily chosen as an indicator for full support for
-	  // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
-	  if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in
-	      window.RTCIceCandidate.prototype)) {
-	    return;
-	  }
-
-	  const NativeRTCIceCandidate = window.RTCIceCandidate;
-	  window.RTCIceCandidate = function RTCIceCandidate(args) {
-	    // Remove the a= which shouldn't be part of the candidate string.
-	    if (typeof args === 'object' && args.candidate &&
-	        args.candidate.indexOf('a=') === 0) {
-	      args = JSON.parse(JSON.stringify(args));
-	      args.candidate = args.candidate.substr(2);
-	    }
-
-	    if (args.candidate && args.candidate.length) {
-	      // Augment the native candidate with the parsed fields.
-	      const nativeCandidate = new NativeRTCIceCandidate(args);
-	      const parsedCandidate = sdp.parseCandidate(args.candidate);
-	      const augmentedCandidate = Object.assign(nativeCandidate,
-	          parsedCandidate);
-
-	      // Add a serializer that does not serialize the extra attributes.
-	      augmentedCandidate.toJSON = function toJSON() {
-	        return {
-	          candidate: augmentedCandidate.candidate,
-	          sdpMid: augmentedCandidate.sdpMid,
-	          sdpMLineIndex: augmentedCandidate.sdpMLineIndex,
-	          usernameFragment: augmentedCandidate.usernameFragment,
-	        };
-	      };
-	      return augmentedCandidate;
-	    }
-	    return new NativeRTCIceCandidate(args);
-	  };
-	  window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;
-
-	  // Hook up the augmented candidate in onicecandidate and
-	  // addEventListener('icecandidate', ...)
-	  wrapPeerConnectionEvent(window, 'icecandidate', e => {
-	    if (e.candidate) {
-	      Object.defineProperty(e, 'candidate', {
-	        value: new window.RTCIceCandidate(e.candidate),
-	        writable: 'false'
-	      });
-	    }
-	    return e;
-	  });
-	}
-
-	function shimMaxMessageSize(window, browserDetails) {
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-
-	  if (!('sctp' in window.RTCPeerConnection.prototype)) {
-	    Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {
-	      get() {
-	        return typeof this._sctp === 'undefined' ? null : this._sctp;
-	      }
-	    });
-	  }
-
-	  const sctpInDescription = function(description) {
-	    if (!description || !description.sdp) {
-	      return false;
-	    }
-	    const sections = sdp.splitSections(description.sdp);
-	    sections.shift();
-	    return sections.some(mediaSection => {
-	      const mLine = sdp.parseMLine(mediaSection);
-	      return mLine && mLine.kind === 'application'
-	          && mLine.protocol.indexOf('SCTP') !== -1;
-	    });
-	  };
-
-	  const getRemoteFirefoxVersion = function(description) {
-	    // TODO: Is there a better solution for detecting Firefox?
-	    const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);
-	    if (match === null || match.length < 2) {
-	      return -1;
-	    }
-	    const version = parseInt(match[1], 10);
-	    // Test for NaN (yes, this is ugly)
-	    return version !== version ? -1 : version;
-	  };
-
-	  const getCanSendMaxMessageSize = function(remoteIsFirefox) {
-	    // Every implementation we know can send at least 64 KiB.
-	    // Note: Although Chrome is technically able to send up to 256 KiB, the
-	    //       data does not reach the other peer reliably.
-	    //       See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419
-	    let canSendMaxMessageSize = 65536;
-	    if (browserDetails.browser === 'firefox') {
-	      if (browserDetails.version < 57) {
-	        if (remoteIsFirefox === -1) {
-	          // FF < 57 will send in 16 KiB chunks using the deprecated PPID
-	          // fragmentation.
-	          canSendMaxMessageSize = 16384;
-	        } else {
-	          // However, other FF (and RAWRTC) can reassemble PPID-fragmented
-	          // messages. Thus, supporting ~2 GiB when sending.
-	          canSendMaxMessageSize = 2147483637;
-	        }
-	      } else if (browserDetails.version < 60) {
-	        // Currently, all FF >= 57 will reset the remote maximum message size
-	        // to the default value when a data channel is created at a later
-	        // stage. :(
-	        // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
-	        canSendMaxMessageSize =
-	          browserDetails.version === 57 ? 65535 : 65536;
-	      } else {
-	        // FF >= 60 supports sending ~2 GiB
-	        canSendMaxMessageSize = 2147483637;
-	      }
-	    }
-	    return canSendMaxMessageSize;
-	  };
-
-	  const getMaxMessageSize = function(description, remoteIsFirefox) {
-	    // Note: 65536 bytes is the default value from the SDP spec. Also,
-	    //       every implementation we know supports receiving 65536 bytes.
-	    let maxMessageSize = 65536;
-
-	    // FF 57 has a slightly incorrect default remote max message size, so
-	    // we need to adjust it here to avoid a failure when sending.
-	    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697
-	    if (browserDetails.browser === 'firefox'
-	         && browserDetails.version === 57) {
-	      maxMessageSize = 65535;
-	    }
-
-	    const match = sdp.matchPrefix(description.sdp,
-	      'a=max-message-size:');
-	    if (match.length > 0) {
-	      maxMessageSize = parseInt(match[0].substr(19), 10);
-	    } else if (browserDetails.browser === 'firefox' &&
-	                remoteIsFirefox !== -1) {
-	      // If the maximum message size is not present in the remote SDP and
-	      // both local and remote are Firefox, the remote peer can receive
-	      // ~2 GiB.
-	      maxMessageSize = 2147483637;
-	    }
-	    return maxMessageSize;
-	  };
-
-	  const origSetRemoteDescription =
-	      window.RTCPeerConnection.prototype.setRemoteDescription;
-	  window.RTCPeerConnection.prototype.setRemoteDescription =
-	    function setRemoteDescription() {
-	      this._sctp = null;
-	      // Chrome decided to not expose .sctp in plan-b mode.
-	      // As usual, adapter.js has to do an 'ugly worakaround'
-	      // to cover up the mess.
-	      if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {
-	        const {sdpSemantics} = this.getConfiguration();
-	        if (sdpSemantics === 'plan-b') {
-	          Object.defineProperty(this, 'sctp', {
-	            get() {
-	              return typeof this._sctp === 'undefined' ? null : this._sctp;
-	            },
-	            enumerable: true,
-	            configurable: true,
-	          });
-	        }
-	      }
-
-	      if (sctpInDescription(arguments[0])) {
-	        // Check if the remote is FF.
-	        const isFirefox = getRemoteFirefoxVersion(arguments[0]);
-
-	        // Get the maximum message size the local peer is capable of sending
-	        const canSendMMS = getCanSendMaxMessageSize(isFirefox);
-
-	        // Get the maximum message size of the remote peer.
-	        const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);
-
-	        // Determine final maximum message size
-	        let maxMessageSize;
-	        if (canSendMMS === 0 && remoteMMS === 0) {
-	          maxMessageSize = Number.POSITIVE_INFINITY;
-	        } else if (canSendMMS === 0 || remoteMMS === 0) {
-	          maxMessageSize = Math.max(canSendMMS, remoteMMS);
-	        } else {
-	          maxMessageSize = Math.min(canSendMMS, remoteMMS);
-	        }
-
-	        // Create a dummy RTCSctpTransport object and the 'maxMessageSize'
-	        // attribute.
-	        const sctp = {};
-	        Object.defineProperty(sctp, 'maxMessageSize', {
-	          get() {
-	            return maxMessageSize;
-	          }
-	        });
-	        this._sctp = sctp;
-	      }
-
-	      return origSetRemoteDescription.apply(this, arguments);
-	    };
-	}
-
-	function shimSendThrowTypeError(window) {
-	  if (!(window.RTCPeerConnection &&
-	      'createDataChannel' in window.RTCPeerConnection.prototype)) {
-	    return;
-	  }
-
-	  // Note: Although Firefox >= 57 has a native implementation, the maximum
-	  //       message size can be reset for all data channels at a later stage.
-	  //       See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831
-
-	  function wrapDcSend(dc, pc) {
-	    const origDataChannelSend = dc.send;
-	    dc.send = function send() {
-	      const data = arguments[0];
-	      const length = data.length || data.size || data.byteLength;
-	      if (dc.readyState === 'open' &&
-	          pc.sctp && length > pc.sctp.maxMessageSize) {
-	        throw new TypeError('Message too large (can send a maximum of ' +
-	          pc.sctp.maxMessageSize + ' bytes)');
-	      }
-	      return origDataChannelSend.apply(dc, arguments);
-	    };
-	  }
-	  const origCreateDataChannel =
-	    window.RTCPeerConnection.prototype.createDataChannel;
-	  window.RTCPeerConnection.prototype.createDataChannel =
-	    function createDataChannel() {
-	      const dataChannel = origCreateDataChannel.apply(this, arguments);
-	      wrapDcSend(dataChannel, this);
-	      return dataChannel;
-	    };
-	  wrapPeerConnectionEvent(window, 'datachannel', e => {
-	    wrapDcSend(e.channel, e.target);
-	    return e;
-	  });
-	}
-
-
-	/* shims RTCConnectionState by pretending it is the same as iceConnectionState.
-	 * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12
-	 * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect
-	 * since DTLS failures would be hidden. See
-	 * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827
-	 * for the Firefox tracking bug.
-	 */
-	function shimConnectionState(window) {
-	  if (!window.RTCPeerConnection ||
-	      'connectionState' in window.RTCPeerConnection.prototype) {
-	    return;
-	  }
-	  const proto = window.RTCPeerConnection.prototype;
-	  Object.defineProperty(proto, 'connectionState', {
-	    get() {
-	      return {
-	        completed: 'connected',
-	        checking: 'connecting'
-	      }[this.iceConnectionState] || this.iceConnectionState;
-	    },
-	    enumerable: true,
-	    configurable: true
-	  });
-	  Object.defineProperty(proto, 'onconnectionstatechange', {
-	    get() {
-	      return this._onconnectionstatechange || null;
-	    },
-	    set(cb) {
-	      if (this._onconnectionstatechange) {
-	        this.removeEventListener('connectionstatechange',
-	            this._onconnectionstatechange);
-	        delete this._onconnectionstatechange;
-	      }
-	      if (cb) {
-	        this.addEventListener('connectionstatechange',
-	            this._onconnectionstatechange = cb);
-	      }
-	    },
-	    enumerable: true,
-	    configurable: true
-	  });
-
-	  ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {
-	    const origMethod = proto[method];
-	    proto[method] = function() {
-	      if (!this._connectionstatechangepoly) {
-	        this._connectionstatechangepoly = e => {
-	          const pc = e.target;
-	          if (pc._lastConnectionState !== pc.connectionState) {
-	            pc._lastConnectionState = pc.connectionState;
-	            const newEvent = new Event('connectionstatechange', e);
-	            pc.dispatchEvent(newEvent);
-	          }
-	          return e;
-	        };
-	        this.addEventListener('iceconnectionstatechange',
-	          this._connectionstatechangepoly);
-	      }
-	      return origMethod.apply(this, arguments);
-	    };
-	  });
-	}
-
-	function removeExtmapAllowMixed(window, browserDetails) {
-	  /* remove a=extmap-allow-mixed for webrtc.org < M71 */
-	  if (!window.RTCPeerConnection) {
-	    return;
-	  }
-	  if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {
-	    return;
-	  }
-	  if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {
-	    return;
-	  }
-	  const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;
-	  window.RTCPeerConnection.prototype.setRemoteDescription =
-	  function setRemoteDescription(desc) {
-	    if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) {
-	      const sdp = desc.sdp.split('\n').filter((line) => {
-	        return line.trim() !== 'a=extmap-allow-mixed';
-	      }).join('\n');
-	      // Safari enforces read-only-ness of RTCSessionDescription fields.
-	      if (window.RTCSessionDescription &&
-	          desc instanceof window.RTCSessionDescription) {
-	        arguments[0] = new window.RTCSessionDescription({
-	          type: desc.type,
-	          sdp,
-	        });
-	      } else {
-	        desc.sdp = sdp;
-	      }
-	    }
-	    return nativeSRD.apply(this, arguments);
-	  };
-	}
-
-	function shimAddIceCandidateNullOrEmpty(window, browserDetails) {
-	  // Support for addIceCandidate(null or undefined)
-	  // as well as addIceCandidate({candidate: "", ...})
-	  // https://bugs.chromium.org/p/chromium/issues/detail?id=978582
-	  // Note: must be called before other polyfills which change the signature.
-	  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {
-	    return;
-	  }
-	  const nativeAddIceCandidate =
-	      window.RTCPeerConnection.prototype.addIceCandidate;
-	  if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {
-	    return;
-	  }
-	  window.RTCPeerConnection.prototype.addIceCandidate =
-	    function addIceCandidate() {
-	      if (!arguments[0]) {
-	        if (arguments[1]) {
-	          arguments[1].apply(null);
-	        }
-	        return Promise.resolve();
-	      }
-	      // Firefox 68+ emits and processes {candidate: "", ...}, ignore
-	      // in older versions.
-	      // Native support for ignoring exists for Chrome M77+.
-	      // Safari ignores as well, exact version unknown but works in the same
-	      // version that also ignores addIceCandidate(null).
-	      if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)
-	           || (browserDetails.browser === 'firefox'
-	               && browserDetails.version < 68)
-	           || (browserDetails.browser === 'safari'))
-	          && arguments[0] && arguments[0].candidate === '') {
-	        return Promise.resolve();
-	      }
-	      return nativeAddIceCandidate.apply(this, arguments);
-	    };
-	}
-
-	var commonShim = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		shimRTCIceCandidate: shimRTCIceCandidate,
-		shimMaxMessageSize: shimMaxMessageSize,
-		shimSendThrowTypeError: shimSendThrowTypeError,
-		shimConnectionState: shimConnectionState,
-		removeExtmapAllowMixed: removeExtmapAllowMixed,
-		shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty
-	});
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	// Shimming starts here.
-	function adapterFactory({window} = {}, options = {
-	  shimChrome: true,
-	  shimFirefox: true,
-	  shimEdge: true,
-	  shimSafari: true,
-	}) {
-	  // Utils.
-	  const logging = log$1;
-	  const browserDetails = detectBrowser(window);
-
-	  const adapter = {
-	    browserDetails,
-	    commonShim,
-	    extractVersion: extractVersion,
-	    disableLog: disableLog,
-	    disableWarnings: disableWarnings
-	  };
-
-	  // Shim browser if found.
-	  switch (browserDetails.browser) {
-	    case 'chrome':
-	      if (!chromeShim || !shimPeerConnection$2 ||
-	          !options.shimChrome) {
-	        logging('Chrome shim is not included in this adapter release.');
-	        return adapter;
-	      }
-	      if (browserDetails.version === null) {
-	        logging('Chrome shim can not determine version, not shimming.');
-	        return adapter;
-	      }
-	      logging('adapter.js shimming chrome.');
-	      // Export to the adapter global object visible in the browser.
-	      adapter.browserShim = chromeShim;
-
-	      // Must be called before shimPeerConnection.
-	      shimAddIceCandidateNullOrEmpty(window, browserDetails);
-
-	      shimGetUserMedia$3(window, browserDetails);
-	      shimMediaStream(window);
-	      shimPeerConnection$2(window, browserDetails);
-	      shimOnTrack$1(window);
-	      shimAddTrackRemoveTrack(window, browserDetails);
-	      shimGetSendersWithDtmf(window);
-	      shimGetStats(window);
-	      shimSenderReceiverGetStats(window);
-	      fixNegotiationNeeded(window, browserDetails);
-
-	      shimRTCIceCandidate(window);
-	      shimConnectionState(window);
-	      shimMaxMessageSize(window, browserDetails);
-	      shimSendThrowTypeError(window);
-	      removeExtmapAllowMixed(window, browserDetails);
-	      break;
-	    case 'firefox':
-	      if (!firefoxShim || !shimPeerConnection ||
-	          !options.shimFirefox) {
-	        logging('Firefox shim is not included in this adapter release.');
-	        return adapter;
-	      }
-	      logging('adapter.js shimming firefox.');
-	      // Export to the adapter global object visible in the browser.
-	      adapter.browserShim = firefoxShim;
-
-	      // Must be called before shimPeerConnection.
-	      shimAddIceCandidateNullOrEmpty(window, browserDetails);
-
-	      shimGetUserMedia$1(window, browserDetails);
-	      shimPeerConnection(window, browserDetails);
-	      shimOnTrack(window);
-	      shimRemoveStream(window);
-	      shimSenderGetStats(window);
-	      shimReceiverGetStats(window);
-	      shimRTCDataChannel(window);
-	      shimAddTransceiver(window);
-	      shimGetParameters(window);
-	      shimCreateOffer(window);
-	      shimCreateAnswer(window);
-
-	      shimRTCIceCandidate(window);
-	      shimConnectionState(window);
-	      shimMaxMessageSize(window, browserDetails);
-	      shimSendThrowTypeError(window);
-	      break;
-	    case 'edge':
-	      if (!edgeShim || !shimPeerConnection$1 || !options.shimEdge) {
-	        logging('MS edge shim is not included in this adapter release.');
-	        return adapter;
-	      }
-	      logging('adapter.js shimming edge.');
-	      // Export to the adapter global object visible in the browser.
-	      adapter.browserShim = edgeShim;
-
-	      shimGetUserMedia$2(window);
-	      shimGetDisplayMedia$1(window);
-	      shimPeerConnection$1(window, browserDetails);
-	      shimReplaceTrack(window);
-
-	      // the edge shim implements the full RTCIceCandidate object.
-
-	      shimMaxMessageSize(window, browserDetails);
-	      shimSendThrowTypeError(window);
-	      break;
-	    case 'safari':
-	      if (!safariShim || !options.shimSafari) {
-	        logging('Safari shim is not included in this adapter release.');
-	        return adapter;
-	      }
-	      logging('adapter.js shimming safari.');
-	      // Export to the adapter global object visible in the browser.
-	      adapter.browserShim = safariShim;
-
-	      // Must be called before shimCallbackAPI.
-	      shimAddIceCandidateNullOrEmpty(window, browserDetails);
-
-	      shimRTCIceServerUrls(window);
-	      shimCreateOfferLegacy(window);
-	      shimCallbacksAPI(window);
-	      shimLocalStreamsAPI(window);
-	      shimRemoteStreamsAPI(window);
-	      shimTrackEventTransceiver(window);
-	      shimGetUserMedia(window);
-	      shimAudioContext(window);
-
-	      shimRTCIceCandidate(window);
-	      shimMaxMessageSize(window, browserDetails);
-	      shimSendThrowTypeError(window);
-	      removeExtmapAllowMixed(window, browserDetails);
-	      break;
-	    default:
-	      logging('Unsupported browser!');
-	      break;
-	  }
-
-	  return adapter;
-	}
-
-	/*
-	 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
-	 *
-	 *  Use of this source code is governed by a BSD-style license
-	 *  that can be found in the LICENSE file in the root of the source
-	 *  tree.
-	 */
-
-	adapterFactory({window: typeof window === 'undefined' ? undefined : window});
-
-	/**
-	 * @class AudioTrackConstraints
-	 * @classDesc Constraints for creating an audio MediaStreamTrack.
-	 * @memberof Owt.Base
-	 * @constructor
-	 * @param {Owt.Base.AudioSourceInfo} source Source info of this audio track.
-	 */
-
-	class AudioTrackConstraints {
-	  // eslint-disable-next-line require-jsdoc
-	  constructor(source) {
-	    if (!Object.values(AudioSourceInfo).some(v => v === source)) {
-	      throw new TypeError('Invalid source.');
-	    }
-	    /**
-	     * @member {string} source
-	     * @memberof Owt.Base.AudioTrackConstraints
-	     * @desc Values could be "mic", "screen-cast", "file" or "mixed".
-	     * @instance
-	     */
-
-
-	    this.source = source;
-	    /**
-	     * @member {string} deviceId
-	     * @memberof Owt.Base.AudioTrackConstraints
-	     * @desc Do not provide deviceId if source is not "mic".
-	     * @instance
-	     * @see https://w3c.github.io/mediacapture-main/#def-constraint-deviceId
-	     */
-
-	    this.deviceId = undefined;
-	  }
-
-	}
-	/**
-	 * @class VideoTrackConstraints
-	 * @classDesc Constraints for creating a video MediaStreamTrack.
-	 * @memberof Owt.Base
-	 * @constructor
-	 * @param {Owt.Base.VideoSourceInfo} source Source info of this video track.
-	 */
-
-	class VideoTrackConstraints {
-	  // eslint-disable-next-line require-jsdoc
-	  constructor(source) {
-	    if (!Object.values(VideoSourceInfo).some(v => v === source)) {
-	      throw new TypeError('Invalid source.');
-	    }
-	    /**
-	     * @member {string} source
-	     * @memberof Owt.Base.VideoTrackConstraints
-	     * @desc Values could be "camera", "screen-cast", "file" or "mixed".
-	     * @instance
-	     */
-
-
-	    this.source = source;
-	    /**
-	     * @member {string} deviceId
-	     * @memberof Owt.Base.VideoTrackConstraints
-	     * @desc Do not provide deviceId if source is not "camera".
-	     * @instance
-	     * @see https://w3c.github.io/mediacapture-main/#def-constraint-deviceId
-	     */
-
-	    this.deviceId = undefined;
-	    /**
-	     * @member {Owt.Base.Resolution} resolution
-	     * @memberof Owt.Base.VideoTrackConstraints
-	     * @instance
-	     */
-
-	    this.resolution = undefined;
-	    /**
-	     * @member {number} frameRate
-	     * @memberof Owt.Base.VideoTrackConstraints
-	     * @instance
-	     */
-
-	    this.frameRate = undefined;
-	  }
-
-	}
-	/**
-	 * @class StreamConstraints
-	 * @classDesc Constraints for creating a MediaStream from screen mic and camera.
-	 * @memberof Owt.Base
-	 * @constructor
-	 * @param {?Owt.Base.AudioTrackConstraints} audioConstraints
-	 * @param {?Owt.Base.VideoTrackConstraints} videoConstraints
-	 */
-
-	class StreamConstraints {
-	  // eslint-disable-next-line require-jsdoc
-	  constructor(audioConstraints = false, videoConstraints = false) {
-	    /**
-	     * @member {Owt.Base.MediaStreamTrackDeviceConstraintsForAudio} audio
-	     * @memberof Owt.Base.MediaStreamDeviceConstraints
-	     * @instance
-	     */
-	    this.audio = audioConstraints;
-	    /**
-	     * @member {Owt.Base.MediaStreamTrackDeviceConstraintsForVideo} Video
-	     * @memberof Owt.Base.MediaStreamDeviceConstraints
-	     * @instance
-	     */
-
-	    this.video = videoConstraints;
-	  }
-
-	} // eslint-disable-next-line require-jsdoc
-
-	function isVideoConstrainsForScreenCast(constraints) {
-	  return typeof constraints.video === 'object' && constraints.video.source === VideoSourceInfo.SCREENCAST;
-	}
-	/**
-	 * @class MediaStreamFactory
-	 * @classDesc A factory to create MediaStream. You can also create MediaStream by yourself.
-	 * @memberof Owt.Base
-	 */
-
-
-	class MediaStreamFactory {
-	  /**
-	   * @function createMediaStream
-	   * @static
-	   * @desc Create a MediaStream with given constraints. If you want to create a MediaStream for screen cast, please make sure both audio and video's source are "screen-cast".
-	   * @memberof Owt.Base.MediaStreamFactory
-	   * @return {Promise<MediaStream, Error>} Return a promise that is resolved when stream is successfully created, or rejected if one of the following error happened:
-	   * - One or more parameters cannot be satisfied.
-	   * - Specified device is busy.
-	   * - Cannot obtain necessary permission or operation is canceled by user.
-	   * - Video source is screen cast, while audio source is not.
-	   * - Audio source is screen cast, while video source is disabled.
-	   * @param {Owt.Base.StreamConstraints} constraints
-	   */
-	  static createMediaStream(constraints) {
-	    if (typeof constraints !== 'object' || !constraints.audio && !constraints.video) {
-	      return Promise.reject(new TypeError('Invalid constrains'));
-	    }
-
-	    if (!isVideoConstrainsForScreenCast(constraints) && typeof constraints.audio === 'object' && constraints.audio.source === AudioSourceInfo.SCREENCAST) {
-	      return Promise.reject(new TypeError('Cannot share screen without video.'));
-	    }
-
-	    if (isVideoConstrainsForScreenCast(constraints) && !isChrome() && !isFirefox()) {
-	      return Promise.reject(new TypeError('Screen sharing only supports Chrome and Firefox.'));
-	    }
-
-	    if (isVideoConstrainsForScreenCast(constraints) && typeof constraints.audio === 'object' && constraints.audio.source !== AudioSourceInfo.SCREENCAST) {
-	      return Promise.reject(new TypeError('Cannot capture video from screen cast while capture audio from' + ' other source.'));
-	    } // Check and convert constraints.
-
-
-	    if (!constraints.audio && !constraints.video) {
-	      return Promise.reject(new TypeError('At least one of audio and video must be requested.'));
-	    }
-
-	    const mediaConstraints = Object.create({});
-
-	    if (typeof constraints.audio === 'object' && constraints.audio.source === AudioSourceInfo.MIC) {
-	      mediaConstraints.audio = Object.create({});
-
-	      if (isEdge()) {
-	        mediaConstraints.audio.deviceId = constraints.audio.deviceId;
-	      } else {
-	        mediaConstraints.audio.deviceId = {
-	          exact: constraints.audio.deviceId
-	        };
-	      }
-	    } else {
-	      if (constraints.audio.source === AudioSourceInfo.SCREENCAST) {
-	        mediaConstraints.audio = true;
-	      } else {
-	        mediaConstraints.audio = constraints.audio;
-	      }
-	    }
-
-	    if (typeof constraints.video === 'object') {
-	      mediaConstraints.video = Object.create({});
-
-	      if (typeof constraints.video.frameRate === 'number') {
-	        mediaConstraints.video.frameRate = constraints.video.frameRate;
-	      }
-
-	      if (constraints.video.resolution && constraints.video.resolution.width && constraints.video.resolution.height) {
-	        if (constraints.video.source === VideoSourceInfo.SCREENCAST) {
-	          mediaConstraints.video.width = constraints.video.resolution.width;
-	          mediaConstraints.video.height = constraints.video.resolution.height;
-	        } else {
-	          mediaConstraints.video.width = Object.create({});
-	          mediaConstraints.video.width.exact = constraints.video.resolution.width;
-	          mediaConstraints.video.height = Object.create({});
-	          mediaConstraints.video.height.exact = constraints.video.resolution.height;
-	        }
-	      }
-
-	      if (typeof constraints.video.deviceId === 'string') {
-	        mediaConstraints.video.deviceId = {
-	          exact: constraints.video.deviceId
-	        };
-	      }
-
-	      if (isFirefox() && constraints.video.source === VideoSourceInfo.SCREENCAST) {
-	        mediaConstraints.video.mediaSource = 'screen';
-	      }
-	    } else {
-	      mediaConstraints.video = constraints.video;
-	    }
-
-	    if (isVideoConstrainsForScreenCast(constraints)) {
-	      return navigator.mediaDevices.getDisplayMedia(mediaConstraints);
-	    } else {
-	      return navigator.mediaDevices.getUserMedia(mediaConstraints);
-	    }
-	  }
-
-	}
-
-	// Copyright (C) <2018> Intel Corporation
-
-	var media = /*#__PURE__*/Object.freeze({
-		__proto__: null,
-		AudioTrackConstraints: AudioTrackConstraints,
-		VideoTrackConstraints: VideoTrackConstraints,
-		StreamConstraints: StreamConstraints,
-		MediaStreamFactory: MediaStreamFactory,
-		AudioSourceInfo: AudioSourceInfo,
-		VideoSourceInfo: VideoSourceInfo,
-		TrackKind: TrackKind,
-		Resolution: Resolution
-	});
-
-	let logger;
-	let errorLogger;
-	function setLogger() {
-	  /*eslint-disable */
-	  logger = console.log;
-	  errorLogger = console.error;
-	  /*eslint-enable */
-	}
-	function log(message, ...optionalParams) {
-	  if (logger) {
-	    logger(message, ...optionalParams);
-	  }
-	}
-	function error(message, ...optionalParams) {
-	  if (errorLogger) {
-	    errorLogger(message, ...optionalParams);
-	  }
-	}
-
-	class Event$1 {
-	  constructor(type) {
-	    this.listener = {};
-	    this.type = type | '';
-	  }
-
-	  on(event, fn) {
-	    if (!this.listener[event]) {
-	      this.listener[event] = [];
-	    }
-
-	    this.listener[event].push(fn);
-	    return true;
-	  }
-
-	  off(event, fn) {
-	    if (this.listener[event]) {
-	      var index = this.listener[event].indexOf(fn);
-
-	      if (index > -1) {
-	        this.listener[event].splice(index, 1);
-	      }
-
-	      return true;
-	    }
-
-	    return false;
-	  }
-
-	  offAll() {
-	    this.listener = {};
-	  }
-
-	  dispatch(event, data) {
-	    if (this.listener[event]) {
-	      this.listener[event].map(each => {
-	        each.apply(null, [data]);
-	      });
-	      return true;
-	    }
-
-	    return false;
-	  }
-
-	}
-
-	var bind = function bind(fn, thisArg) {
-	  return function wrap() {
-	    var args = new Array(arguments.length);
-	    for (var i = 0; i < args.length; i++) {
-	      args[i] = arguments[i];
-	    }
-	    return fn.apply(thisArg, args);
-	  };
-	};
-
-	/*global toString:true*/
-
-	// utils is a library of generic helper functions non-specific to axios
-
-	var toString = Object.prototype.toString;
-
-	/**
-	 * Determine if a value is an Array
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is an Array, otherwise false
-	 */
-	function isArray(val) {
-	  return toString.call(val) === '[object Array]';
-	}
-
-	/**
-	 * Determine if a value is undefined
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if the value is undefined, otherwise false
-	 */
-	function isUndefined(val) {
-	  return typeof val === 'undefined';
-	}
-
-	/**
-	 * Determine if a value is a Buffer
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Buffer, otherwise false
-	 */
-	function isBuffer(val) {
-	  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
-	    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
-	}
-
-	/**
-	 * Determine if a value is an ArrayBuffer
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
-	 */
-	function isArrayBuffer(val) {
-	  return toString.call(val) === '[object ArrayBuffer]';
-	}
-
-	/**
-	 * Determine if a value is a FormData
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is an FormData, otherwise false
-	 */
-	function isFormData(val) {
-	  return (typeof FormData !== 'undefined') && (val instanceof FormData);
-	}
-
-	/**
-	 * Determine if a value is a view on an ArrayBuffer
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
-	 */
-	function isArrayBufferView(val) {
-	  var result;
-	  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
-	    result = ArrayBuffer.isView(val);
-	  } else {
-	    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
-	  }
-	  return result;
-	}
-
-	/**
-	 * Determine if a value is a String
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a String, otherwise false
-	 */
-	function isString(val) {
-	  return typeof val === 'string';
-	}
-
-	/**
-	 * Determine if a value is a Number
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Number, otherwise false
-	 */
-	function isNumber(val) {
-	  return typeof val === 'number';
-	}
-
-	/**
-	 * Determine if a value is an Object
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is an Object, otherwise false
-	 */
-	function isObject(val) {
-	  return val !== null && typeof val === 'object';
-	}
-
-	/**
-	 * Determine if a value is a plain Object
-	 *
-	 * @param {Object} val The value to test
-	 * @return {boolean} True if value is a plain Object, otherwise false
-	 */
-	function isPlainObject(val) {
-	  if (toString.call(val) !== '[object Object]') {
-	    return false;
-	  }
-
-	  var prototype = Object.getPrototypeOf(val);
-	  return prototype === null || prototype === Object.prototype;
-	}
-
-	/**
-	 * Determine if a value is a Date
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Date, otherwise false
-	 */
-	function isDate(val) {
-	  return toString.call(val) === '[object Date]';
-	}
-
-	/**
-	 * Determine if a value is a File
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a File, otherwise false
-	 */
-	function isFile(val) {
-	  return toString.call(val) === '[object File]';
-	}
-
-	/**
-	 * Determine if a value is a Blob
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Blob, otherwise false
-	 */
-	function isBlob(val) {
-	  return toString.call(val) === '[object Blob]';
-	}
-
-	/**
-	 * Determine if a value is a Function
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Function, otherwise false
-	 */
-	function isFunction(val) {
-	  return toString.call(val) === '[object Function]';
-	}
-
-	/**
-	 * Determine if a value is a Stream
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a Stream, otherwise false
-	 */
-	function isStream(val) {
-	  return isObject(val) && isFunction(val.pipe);
-	}
-
-	/**
-	 * Determine if a value is a URLSearchParams object
-	 *
-	 * @param {Object} val The value to test
-	 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
-	 */
-	function isURLSearchParams(val) {
-	  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
-	}
-
-	/**
-	 * Trim excess whitespace off the beginning and end of a string
-	 *
-	 * @param {String} str The String to trim
-	 * @returns {String} The String freed of excess whitespace
-	 */
-	function trim(str) {
-	  return str.replace(/^\s*/, '').replace(/\s*$/, '');
-	}
-
-	/**
-	 * Determine if we're running in a standard browser environment
-	 *
-	 * This allows axios to run in a web worker, and react-native.
-	 * Both environments support XMLHttpRequest, but not fully standard globals.
-	 *
-	 * web workers:
-	 *  typeof window -> undefined
-	 *  typeof document -> undefined
-	 *
-	 * react-native:
-	 *  navigator.product -> 'ReactNative'
-	 * nativescript
-	 *  navigator.product -> 'NativeScript' or 'NS'
-	 */
-	function isStandardBrowserEnv() {
-	  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
-	                                           navigator.product === 'NativeScript' ||
-	                                           navigator.product === 'NS')) {
-	    return false;
-	  }
-	  return (
-	    typeof window !== 'undefined' &&
-	    typeof document !== 'undefined'
-	  );
-	}
-
-	/**
-	 * Iterate over an Array or an Object invoking a function for each item.
-	 *
-	 * If `obj` is an Array callback will be called passing
-	 * the value, index, and complete array for each item.
-	 *
-	 * If 'obj' is an Object callback will be called passing
-	 * the value, key, and complete object for each property.
-	 *
-	 * @param {Object|Array} obj The object to iterate
-	 * @param {Function} fn The callback to invoke for each item
-	 */
-	function forEach(obj, fn) {
-	  // Don't bother if no value provided
-	  if (obj === null || typeof obj === 'undefined') {
-	    return;
-	  }
-
-	  // Force an array if not already something iterable
-	  if (typeof obj !== 'object') {
-	    /*eslint no-param-reassign:0*/
-	    obj = [obj];
-	  }
-
-	  if (isArray(obj)) {
-	    // Iterate over array values
-	    for (var i = 0, l = obj.length; i < l; i++) {
-	      fn.call(null, obj[i], i, obj);
-	    }
-	  } else {
-	    // Iterate over object keys
-	    for (var key in obj) {
-	      if (Object.prototype.hasOwnProperty.call(obj, key)) {
-	        fn.call(null, obj[key], key, obj);
-	      }
-	    }
-	  }
-	}
-
-	/**
-	 * Accepts varargs expecting each argument to be an object, then
-	 * immutably merges the properties of each object and returns result.
-	 *
-	 * When multiple objects contain the same key the later object in
-	 * the arguments list will take precedence.
-	 *
-	 * Example:
-	 *
-	 * ```js
-	 * var result = merge({foo: 123}, {foo: 456});
-	 * console.log(result.foo); // outputs 456
-	 * ```
-	 *
-	 * @param {Object} obj1 Object to merge
-	 * @returns {Object} Result of all merge properties
-	 */
-	function merge(/* obj1, obj2, obj3, ... */) {
-	  var result = {};
-	  function assignValue(val, key) {
-	    if (isPlainObject(result[key]) && isPlainObject(val)) {
-	      result[key] = merge(result[key], val);
-	    } else if (isPlainObject(val)) {
-	      result[key] = merge({}, val);
-	    } else if (isArray(val)) {
-	      result[key] = val.slice();
-	    } else {
-	      result[key] = val;
-	    }
-	  }
-
-	  for (var i = 0, l = arguments.length; i < l; i++) {
-	    forEach(arguments[i], assignValue);
-	  }
-	  return result;
-	}
-
-	/**
-	 * Extends object a by mutably adding to it the properties of object b.
-	 *
-	 * @param {Object} a The object to be extended
-	 * @param {Object} b The object to copy properties from
-	 * @param {Object} thisArg The object to bind function to
-	 * @return {Object} The resulting value of object a
-	 */
-	function extend(a, b, thisArg) {
-	  forEach(b, function assignValue(val, key) {
-	    if (thisArg && typeof val === 'function') {
-	      a[key] = bind(val, thisArg);
-	    } else {
-	      a[key] = val;
-	    }
-	  });
-	  return a;
-	}
-
-	/**
-	 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
-	 *
-	 * @param {string} content with BOM
-	 * @return {string} content value without BOM
-	 */
-	function stripBOM(content) {
-	  if (content.charCodeAt(0) === 0xFEFF) {
-	    content = content.slice(1);
-	  }
-	  return content;
-	}
-
-	var utils = {
-	  isArray: isArray,
-	  isArrayBuffer: isArrayBuffer,
-	  isBuffer: isBuffer,
-	  isFormData: isFormData,
-	  isArrayBufferView: isArrayBufferView,
-	  isString: isString,
-	  isNumber: isNumber,
-	  isObject: isObject,
-	  isPlainObject: isPlainObject,
-	  isUndefined: isUndefined,
-	  isDate: isDate,
-	  isFile: isFile,
-	  isBlob: isBlob,
-	  isFunction: isFunction,
-	  isStream: isStream,
-	  isURLSearchParams: isURLSearchParams,
-	  isStandardBrowserEnv: isStandardBrowserEnv,
-	  forEach: forEach,
-	  merge: merge,
-	  extend: extend,
-	  trim: trim,
-	  stripBOM: stripBOM
-	};
-
-	function encode(val) {
-	  return encodeURIComponent(val).
-	    replace(/%3A/gi, ':').
-	    replace(/%24/g, '$').
-	    replace(/%2C/gi, ',').
-	    replace(/%20/g, '+').
-	    replace(/%5B/gi, '[').
-	    replace(/%5D/gi, ']');
-	}
-
-	/**
-	 * Build a URL by appending params to the end
-	 *
-	 * @param {string} url The base of the url (e.g., http://www.google.com)
-	 * @param {object} [params] The params to be appended
-	 * @returns {string} The formatted url
-	 */
-	var buildURL = function buildURL(url, params, paramsSerializer) {
-	  /*eslint no-param-reassign:0*/
-	  if (!params) {
-	    return url;
-	  }
-
-	  var serializedParams;
-	  if (paramsSerializer) {
-	    serializedParams = paramsSerializer(params);
-	  } else if (utils.isURLSearchParams(params)) {
-	    serializedParams = params.toString();
-	  } else {
-	    var parts = [];
-
-	    utils.forEach(params, function serialize(val, key) {
-	      if (val === null || typeof val === 'undefined') {
-	        return;
-	      }
-
-	      if (utils.isArray(val)) {
-	        key = key + '[]';
-	      } else {
-	        val = [val];
-	      }
-
-	      utils.forEach(val, function parseValue(v) {
-	        if (utils.isDate(v)) {
-	          v = v.toISOString();
-	        } else if (utils.isObject(v)) {
-	          v = JSON.stringify(v);
-	        }
-	        parts.push(encode(key) + '=' + encode(v));
-	      });
-	    });
-
-	    serializedParams = parts.join('&');
-	  }
-
-	  if (serializedParams) {
-	    var hashmarkIndex = url.indexOf('#');
-	    if (hashmarkIndex !== -1) {
-	      url = url.slice(0, hashmarkIndex);
-	    }
-
-	    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
-	  }
-
-	  return url;
-	};
-
-	function InterceptorManager() {
-	  this.handlers = [];
-	}
-
-	/**
-	 * Add a new interceptor to the stack
-	 *
-	 * @param {Function} fulfilled The function to handle `then` for a `Promise`
-	 * @param {Function} rejected The function to handle `reject` for a `Promise`
-	 *
-	 * @return {Number} An ID used to remove interceptor later
-	 */
-	InterceptorManager.prototype.use = function use(fulfilled, rejected) {
-	  this.handlers.push({
-	    fulfilled: fulfilled,
-	    rejected: rejected
-	  });
-	  return this.handlers.length - 1;
-	};
-
-	/**
-	 * Remove an interceptor from the stack
-	 *
-	 * @param {Number} id The ID that was returned by `use`
-	 */
-	InterceptorManager.prototype.eject = function eject(id) {
-	  if (this.handlers[id]) {
-	    this.handlers[id] = null;
-	  }
-	};
-
-	/**
-	 * Iterate over all the registered interceptors
-	 *
-	 * This method is particularly useful for skipping over any
-	 * interceptors that may have become `null` calling `eject`.
-	 *
-	 * @param {Function} fn The function to call for each interceptor
-	 */
-	InterceptorManager.prototype.forEach = function forEach(fn) {
-	  utils.forEach(this.handlers, function forEachHandler(h) {
-	    if (h !== null) {
-	      fn(h);
-	    }
-	  });
-	};
-
-	var InterceptorManager_1 = InterceptorManager;
-
-	/**
-	 * Transform the data for a request or a response
-	 *
-	 * @param {Object|String} data The data to be transformed
-	 * @param {Array} headers The headers for the request or response
-	 * @param {Array|Function} fns A single function or Array of functions
-	 * @returns {*} The resulting transformed data
-	 */
-	var transformData = function transformData(data, headers, fns) {
-	  /*eslint no-param-reassign:0*/
-	  utils.forEach(fns, function transform(fn) {
-	    data = fn(data, headers);
-	  });
-
-	  return data;
-	};
-
-	var isCancel = function isCancel(value) {
-	  return !!(value && value.__CANCEL__);
-	};
-
-	var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) {
-	  utils.forEach(headers, function processHeader(value, name) {
-	    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
-	      headers[normalizedName] = value;
-	      delete headers[name];
-	    }
-	  });
-	};
-
-	/**
-	 * Update an Error with the specified config, error code, and response.
-	 *
-	 * @param {Error} error The error to update.
-	 * @param {Object} config The config.
-	 * @param {string} [code] The error code (for example, 'ECONNABORTED').
-	 * @param {Object} [request] The request.
-	 * @param {Object} [response] The response.
-	 * @returns {Error} The error.
-	 */
-	var enhanceError = function enhanceError(error, config, code, request, response) {
-	  error.config = config;
-	  if (code) {
-	    error.code = code;
-	  }
-
-	  error.request = request;
-	  error.response = response;
-	  error.isAxiosError = true;
-
-	  error.toJSON = function toJSON() {
-	    return {
-	      // Standard
-	      message: this.message,
-	      name: this.name,
-	      // Microsoft
-	      description: this.description,
-	      number: this.number,
-	      // Mozilla
-	      fileName: this.fileName,
-	      lineNumber: this.lineNumber,
-	      columnNumber: this.columnNumber,
-	      stack: this.stack,
-	      // Axios
-	      config: this.config,
-	      code: this.code
-	    };
-	  };
-	  return error;
-	};
-
-	/**
-	 * Create an Error with the specified message, config, error code, request and response.
-	 *
-	 * @param {string} message The error message.
-	 * @param {Object} config The config.
-	 * @param {string} [code] The error code (for example, 'ECONNABORTED').
-	 * @param {Object} [request] The request.
-	 * @param {Object} [response] The response.
-	 * @returns {Error} The created error.
-	 */
-	var createError = function createError(message, config, code, request, response) {
-	  var error = new Error(message);
-	  return enhanceError(error, config, code, request, response);
-	};
-
-	/**
-	 * Resolve or reject a Promise based on response status.
-	 *
-	 * @param {Function} resolve A function that resolves the promise.
-	 * @param {Function} reject A function that rejects the promise.
-	 * @param {object} response The response.
-	 */
-	var settle = function settle(resolve, reject, response) {
-	  var validateStatus = response.config.validateStatus;
-	  if (!response.status || !validateStatus || validateStatus(response.status)) {
-	    resolve(response);
-	  } else {
-	    reject(createError(
-	      'Request failed with status code ' + response.status,
-	      response.config,
-	      null,
-	      response.request,
-	      response
-	    ));
-	  }
-	};
-
-	var cookies = (
-	  utils.isStandardBrowserEnv() ?
-
-	  // Standard browser envs support document.cookie
-	    (function standardBrowserEnv() {
-	      return {
-	        write: function write(name, value, expires, path, domain, secure) {
-	          var cookie = [];
-	          cookie.push(name + '=' + encodeURIComponent(value));
-
-	          if (utils.isNumber(expires)) {
-	            cookie.push('expires=' + new Date(expires).toGMTString());
-	          }
-
-	          if (utils.isString(path)) {
-	            cookie.push('path=' + path);
-	          }
-
-	          if (utils.isString(domain)) {
-	            cookie.push('domain=' + domain);
-	          }
-
-	          if (secure === true) {
-	            cookie.push('secure');
-	          }
-
-	          document.cookie = cookie.join('; ');
-	        },
-
-	        read: function read(name) {
-	          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
-	          return (match ? decodeURIComponent(match[3]) : null);
-	        },
-
-	        remove: function remove(name) {
-	          this.write(name, '', Date.now() - 86400000);
-	        }
-	      };
-	    })() :
-
-	  // Non standard browser env (web workers, react-native) lack needed support.
-	    (function nonStandardBrowserEnv() {
-	      return {
-	        write: function write() {},
-	        read: function read() { return null; },
-	        remove: function remove() {}
-	      };
-	    })()
-	);
-
-	/**
-	 * Determines whether the specified URL is absolute
-	 *
-	 * @param {string} url The URL to test
-	 * @returns {boolean} True if the specified URL is absolute, otherwise false
-	 */
-	var isAbsoluteURL = function isAbsoluteURL(url) {
-	  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
-	  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
-	  // by any combination of letters, digits, plus, period, or hyphen.
-	  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
-	};
-
-	/**
-	 * Creates a new URL by combining the specified URLs
-	 *
-	 * @param {string} baseURL The base URL
-	 * @param {string} relativeURL The relative URL
-	 * @returns {string} The combined URL
-	 */
-	var combineURLs = function combineURLs(baseURL, relativeURL) {
-	  return relativeURL
-	    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
-	    : baseURL;
-	};
-
-	/**
-	 * Creates a new URL by combining the baseURL with the requestedURL,
-	 * only when the requestedURL is not already an absolute URL.
-	 * If the requestURL is absolute, this function returns the requestedURL untouched.
-	 *
-	 * @param {string} baseURL The base URL
-	 * @param {string} requestedURL Absolute or relative URL to combine
-	 * @returns {string} The combined full path
-	 */
-	var buildFullPath = function buildFullPath(baseURL, requestedURL) {
-	  if (baseURL && !isAbsoluteURL(requestedURL)) {
-	    return combineURLs(baseURL, requestedURL);
-	  }
-	  return requestedURL;
-	};
-
-	// Headers whose duplicates are ignored by node
-	// c.f. https://nodejs.org/api/http.html#http_message_headers
-	var ignoreDuplicateOf = [
-	  'age', 'authorization', 'content-length', 'content-type', 'etag',
-	  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
-	  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
-	  'referer', 'retry-after', 'user-agent'
-	];
-
-	/**
-	 * Parse headers into an object
-	 *
-	 * ```
-	 * Date: Wed, 27 Aug 2014 08:58:49 GMT
-	 * Content-Type: application/json
-	 * Connection: keep-alive
-	 * Transfer-Encoding: chunked
-	 * ```
-	 *
-	 * @param {String} headers Headers needing to be parsed
-	 * @returns {Object} Headers parsed into an object
-	 */
-	var parseHeaders = function parseHeaders(headers) {
-	  var parsed = {};
-	  var key;
-	  var val;
-	  var i;
-
-	  if (!headers) { return parsed; }
-
-	  utils.forEach(headers.split('\n'), function parser(line) {
-	    i = line.indexOf(':');
-	    key = utils.trim(line.substr(0, i)).toLowerCase();
-	    val = utils.trim(line.substr(i + 1));
-
-	    if (key) {
-	      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
-	        return;
-	      }
-	      if (key === 'set-cookie') {
-	        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
-	      } else {
-	        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
-	      }
-	    }
-	  });
-
-	  return parsed;
-	};
-
-	var isURLSameOrigin = (
-	  utils.isStandardBrowserEnv() ?
-
-	  // Standard browser envs have full support of the APIs needed to test
-	  // whether the request URL is of the same origin as current location.
-	    (function standardBrowserEnv() {
-	      var msie = /(msie|trident)/i.test(navigator.userAgent);
-	      var urlParsingNode = document.createElement('a');
-	      var originURL;
-
-	      /**
-	    * Parse a URL to discover it's components
-	    *
-	    * @param {String} url The URL to be parsed
-	    * @returns {Object}
-	    */
-	      function resolveURL(url) {
-	        var href = url;
-
-	        if (msie) {
-	        // IE needs attribute set twice to normalize properties
-	          urlParsingNode.setAttribute('href', href);
-	          href = urlParsingNode.href;
-	        }
-
-	        urlParsingNode.setAttribute('href', href);
-
-	        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
-	        return {
-	          href: urlParsingNode.href,
-	          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
-	          host: urlParsingNode.host,
-	          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
-	          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
-	          hostname: urlParsingNode.hostname,
-	          port: urlParsingNode.port,
-	          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
-	            urlParsingNode.pathname :
-	            '/' + urlParsingNode.pathname
-	        };
-	      }
-
-	      originURL = resolveURL(window.location.href);
-
-	      /**
-	    * Determine if a URL shares the same origin as the current location
-	    *
-	    * @param {String} requestURL The URL to test
-	    * @returns {boolean} True if URL shares the same origin, otherwise false
-	    */
-	      return function isURLSameOrigin(requestURL) {
-	        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
-	        return (parsed.protocol === originURL.protocol &&
-	            parsed.host === originURL.host);
-	      };
-	    })() :
-
-	  // Non standard browser envs (web workers, react-native) lack needed support.
-	    (function nonStandardBrowserEnv() {
-	      return function isURLSameOrigin() {
-	        return true;
-	      };
-	    })()
-	);
-
-	var xhr = function xhrAdapter(config) {
-	  return new Promise(function dispatchXhrRequest(resolve, reject) {
-	    var requestData = config.data;
-	    var requestHeaders = config.headers;
-
-	    if (utils.isFormData(requestData)) {
-	      delete requestHeaders['Content-Type']; // Let the browser set it
-	    }
-
-	    var request = new XMLHttpRequest();
-
-	    // HTTP basic authentication
-	    if (config.auth) {
-	      var username = config.auth.username || '';
-	      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
-	      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
-	    }
-
-	    var fullPath = buildFullPath(config.baseURL, config.url);
-	    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
-
-	    // Set the request timeout in MS
-	    request.timeout = config.timeout;
-
-	    // Listen for ready state
-	    request.onreadystatechange = function handleLoad() {
-	      if (!request || request.readyState !== 4) {
-	        return;
-	      }
-
-	      // The request errored out and we didn't get a response, this will be
-	      // handled by onerror instead
-	      // With one exception: request that using file: protocol, most browsers
-	      // will return status as 0 even though it's a successful request
-	      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
-	        return;
-	      }
-
-	      // Prepare the response
-	      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
-	      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
-	      var response = {
-	        data: responseData,
-	        status: request.status,
-	        statusText: request.statusText,
-	        headers: responseHeaders,
-	        config: config,
-	        request: request
-	      };
-
-	      settle(resolve, reject, response);
-
-	      // Clean up request
-	      request = null;
-	    };
-
-	    // Handle browser request cancellation (as opposed to a manual cancellation)
-	    request.onabort = function handleAbort() {
-	      if (!request) {
-	        return;
-	      }
-
-	      reject(createError('Request aborted', config, 'ECONNABORTED', request));
-
-	      // Clean up request
-	      request = null;
-	    };
-
-	    // Handle low level network errors
-	    request.onerror = function handleError() {
-	      // Real errors are hidden from us by the browser
-	      // onerror should only fire if it's a network error
-	      reject(createError('Network Error', config, null, request));
-
-	      // Clean up request
-	      request = null;
-	    };
-
-	    // Handle timeout
-	    request.ontimeout = function handleTimeout() {
-	      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
-	      if (config.timeoutErrorMessage) {
-	        timeoutErrorMessage = config.timeoutErrorMessage;
-	      }
-	      reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',
-	        request));
-
-	      // Clean up request
-	      request = null;
-	    };
-
-	    // Add xsrf header
-	    // This is only done if running in a standard browser environment.
-	    // Specifically not if we're in a web worker, or react-native.
-	    if (utils.isStandardBrowserEnv()) {
-	      // Add xsrf header
-	      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
-	        cookies.read(config.xsrfCookieName) :
-	        undefined;
-
-	      if (xsrfValue) {
-	        requestHeaders[config.xsrfHeaderName] = xsrfValue;
-	      }
-	    }
-
-	    // Add headers to the request
-	    if ('setRequestHeader' in request) {
-	      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
-	        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
-	          // Remove Content-Type if data is undefined
-	          delete requestHeaders[key];
-	        } else {
-	          // Otherwise add header to the request
-	          request.setRequestHeader(key, val);
-	        }
-	      });
-	    }
-
-	    // Add withCredentials to request if needed
-	    if (!utils.isUndefined(config.withCredentials)) {
-	      request.withCredentials = !!config.withCredentials;
-	    }
-
-	    // Add responseType to request if needed
-	    if (config.responseType) {
-	      try {
-	        request.responseType = config.responseType;
-	      } catch (e) {
-	        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
-	        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
-	        if (config.responseType !== 'json') {
-	          throw e;
-	        }
-	      }
-	    }
-
-	    // Handle progress if needed
-	    if (typeof config.onDownloadProgress === 'function') {
-	      request.addEventListener('progress', config.onDownloadProgress);
-	    }
-
-	    // Not all browsers support upload events
-	    if (typeof config.onUploadProgress === 'function' && request.upload) {
-	      request.upload.addEventListener('progress', config.onUploadProgress);
-	    }
-
-	    if (config.cancelToken) {
-	      // Handle cancellation
-	      config.cancelToken.promise.then(function onCanceled(cancel) {
-	        if (!request) {
-	          return;
-	        }
-
-	        request.abort();
-	        reject(cancel);
-	        // Clean up request
-	        request = null;
-	      });
-	    }
-
-	    if (!requestData) {
-	      requestData = null;
-	    }
-
-	    // Send the request
-	    request.send(requestData);
-	  });
-	};
-
-	var DEFAULT_CONTENT_TYPE = {
-	  'Content-Type': 'application/x-www-form-urlencoded'
-	};
-
-	function setContentTypeIfUnset(headers, value) {
-	  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
-	    headers['Content-Type'] = value;
-	  }
-	}
-
-	function getDefaultAdapter() {
-	  var adapter;
-	  if (typeof XMLHttpRequest !== 'undefined') {
-	    // For browsers use XHR adapter
-	    adapter = xhr;
-	  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
-	    // For node use HTTP adapter
-	    adapter = xhr;
-	  }
-	  return adapter;
-	}
-
-	var defaults = {
-	  adapter: getDefaultAdapter(),
-
-	  transformRequest: [function transformRequest(data, headers) {
-	    normalizeHeaderName(headers, 'Accept');
-	    normalizeHeaderName(headers, 'Content-Type');
-	    if (utils.isFormData(data) ||
-	      utils.isArrayBuffer(data) ||
-	      utils.isBuffer(data) ||
-	      utils.isStream(data) ||
-	      utils.isFile(data) ||
-	      utils.isBlob(data)
-	    ) {
-	      return data;
-	    }
-	    if (utils.isArrayBufferView(data)) {
-	      return data.buffer;
-	    }
-	    if (utils.isURLSearchParams(data)) {
-	      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
-	      return data.toString();
-	    }
-	    if (utils.isObject(data)) {
-	      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
-	      return JSON.stringify(data);
-	    }
-	    return data;
-	  }],
-
-	  transformResponse: [function transformResponse(data) {
-	    /*eslint no-param-reassign:0*/
-	    if (typeof data === 'string') {
-	      try {
-	        data = JSON.parse(data);
-	      } catch (e) { /* Ignore */ }
-	    }
-	    return data;
-	  }],
-
-	  /**
-	   * A timeout in milliseconds to abort a request. If set to 0 (default) a
-	   * timeout is not created.
-	   */
-	  timeout: 0,
-
-	  xsrfCookieName: 'XSRF-TOKEN',
-	  xsrfHeaderName: 'X-XSRF-TOKEN',
-
-	  maxContentLength: -1,
-	  maxBodyLength: -1,
-
-	  validateStatus: function validateStatus(status) {
-	    return status >= 200 && status < 300;
-	  }
-	};
-
-	defaults.headers = {
-	  common: {
-	    'Accept': 'application/json, text/plain, */*'
-	  }
-	};
-
-	utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
-	  defaults.headers[method] = {};
-	});
-
-	utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
-	  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
-	});
-
-	var defaults_1 = defaults;
-
-	/**
-	 * Throws a `Cancel` if cancellation has been requested.
-	 */
-	function throwIfCancellationRequested(config) {
-	  if (config.cancelToken) {
-	    config.cancelToken.throwIfRequested();
-	  }
-	}
-
-	/**
-	 * Dispatch a request to the server using the configured adapter.
-	 *
-	 * @param {object} config The config that is to be used for the request
-	 * @returns {Promise} The Promise to be fulfilled
-	 */
-	var dispatchRequest = function dispatchRequest(config) {
-	  throwIfCancellationRequested(config);
-
-	  // Ensure headers exist
-	  config.headers = config.headers || {};
-
-	  // Transform request data
-	  config.data = transformData(
-	    config.data,
-	    config.headers,
-	    config.transformRequest
-	  );
-
-	  // Flatten headers
-	  config.headers = utils.merge(
-	    config.headers.common || {},
-	    config.headers[config.method] || {},
-	    config.headers
-	  );
-
-	  utils.forEach(
-	    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
-	    function cleanHeaderConfig(method) {
-	      delete config.headers[method];
-	    }
-	  );
-
-	  var adapter = config.adapter || defaults_1.adapter;
-
-	  return adapter(config).then(function onAdapterResolution(response) {
-	    throwIfCancellationRequested(config);
-
-	    // Transform response data
-	    response.data = transformData(
-	      response.data,
-	      response.headers,
-	      config.transformResponse
-	    );
-
-	    return response;
-	  }, function onAdapterRejection(reason) {
-	    if (!isCancel(reason)) {
-	      throwIfCancellationRequested(config);
-
-	      // Transform response data
-	      if (reason && reason.response) {
-	        reason.response.data = transformData(
-	          reason.response.data,
-	          reason.response.headers,
-	          config.transformResponse
-	        );
-	      }
-	    }
-
-	    return Promise.reject(reason);
-	  });
-	};
-
-	/**
-	 * Config-specific merge-function which creates a new config-object
-	 * by merging two configuration objects together.
-	 *
-	 * @param {Object} config1
-	 * @param {Object} config2
-	 * @returns {Object} New object resulting from merging config2 to config1
-	 */
-	var mergeConfig = function mergeConfig(config1, config2) {
-	  // eslint-disable-next-line no-param-reassign
-	  config2 = config2 || {};
-	  var config = {};
-
-	  var valueFromConfig2Keys = ['url', 'method', 'data'];
-	  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
-	  var defaultToConfig2Keys = [
-	    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
-	    'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
-	    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
-	    'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
-	    'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
-	  ];
-	  var directMergeKeys = ['validateStatus'];
-
-	  function getMergedValue(target, source) {
-	    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
-	      return utils.merge(target, source);
-	    } else if (utils.isPlainObject(source)) {
-	      return utils.merge({}, source);
-	    } else if (utils.isArray(source)) {
-	      return source.slice();
-	    }
-	    return source;
-	  }
-
-	  function mergeDeepProperties(prop) {
-	    if (!utils.isUndefined(config2[prop])) {
-	      config[prop] = getMergedValue(config1[prop], config2[prop]);
-	    } else if (!utils.isUndefined(config1[prop])) {
-	      config[prop] = getMergedValue(undefined, config1[prop]);
-	    }
-	  }
-
-	  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
-	    if (!utils.isUndefined(config2[prop])) {
-	      config[prop] = getMergedValue(undefined, config2[prop]);
-	    }
-	  });
-
-	  utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
-
-	  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
-	    if (!utils.isUndefined(config2[prop])) {
-	      config[prop] = getMergedValue(undefined, config2[prop]);
-	    } else if (!utils.isUndefined(config1[prop])) {
-	      config[prop] = getMergedValue(undefined, config1[prop]);
-	    }
-	  });
-
-	  utils.forEach(directMergeKeys, function merge(prop) {
-	    if (prop in config2) {
-	      config[prop] = getMergedValue(config1[prop], config2[prop]);
-	    } else if (prop in config1) {
-	      config[prop] = getMergedValue(undefined, config1[prop]);
-	    }
-	  });
-
-	  var axiosKeys = valueFromConfig2Keys
-	    .concat(mergeDeepPropertiesKeys)
-	    .concat(defaultToConfig2Keys)
-	    .concat(directMergeKeys);
-
-	  var otherKeys = Object
-	    .keys(config1)
-	    .concat(Object.keys(config2))
-	    .filter(function filterAxiosKeys(key) {
-	      return axiosKeys.indexOf(key) === -1;
-	    });
-
-	  utils.forEach(otherKeys, mergeDeepProperties);
-
-	  return config;
-	};
-
-	/**
-	 * Create a new instance of Axios
-	 *
-	 * @param {Object} instanceConfig The default config for the instance
-	 */
-	function Axios(instanceConfig) {
-	  this.defaults = instanceConfig;
-	  this.interceptors = {
-	    request: new InterceptorManager_1(),
-	    response: new InterceptorManager_1()
-	  };
-	}
-
-	/**
-	 * Dispatch a request
-	 *
-	 * @param {Object} config The config specific for this request (merged with this.defaults)
-	 */
-	Axios.prototype.request = function request(config) {
-	  /*eslint no-param-reassign:0*/
-	  // Allow for axios('example/url'[, config]) a la fetch API
-	  if (typeof config === 'string') {
-	    config = arguments[1] || {};
-	    config.url = arguments[0];
-	  } else {
-	    config = config || {};
-	  }
-
-	  config = mergeConfig(this.defaults, config);
-
-	  // Set config.method
-	  if (config.method) {
-	    config.method = config.method.toLowerCase();
-	  } else if (this.defaults.method) {
-	    config.method = this.defaults.method.toLowerCase();
-	  } else {
-	    config.method = 'get';
-	  }
-
-	  // Hook up interceptors middleware
-	  var chain = [dispatchRequest, undefined];
-	  var promise = Promise.resolve(config);
-
-	  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
-	    chain.unshift(interceptor.fulfilled, interceptor.rejected);
-	  });
-
-	  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
-	    chain.push(interceptor.fulfilled, interceptor.rejected);
-	  });
-
-	  while (chain.length) {
-	    promise = promise.then(chain.shift(), chain.shift());
-	  }
-
-	  return promise;
-	};
-
-	Axios.prototype.getUri = function getUri(config) {
-	  config = mergeConfig(this.defaults, config);
-	  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
-	};
-
-	// Provide aliases for supported request methods
-	utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
-	  /*eslint func-names:0*/
-	  Axios.prototype[method] = function(url, config) {
-	    return this.request(mergeConfig(config || {}, {
-	      method: method,
-	      url: url,
-	      data: (config || {}).data
-	    }));
-	  };
-	});
-
-	utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
-	  /*eslint func-names:0*/
-	  Axios.prototype[method] = function(url, data, config) {
-	    return this.request(mergeConfig(config || {}, {
-	      method: method,
-	      url: url,
-	      data: data
-	    }));
-	  };
-	});
-
-	var Axios_1 = Axios;
-
-	/**
-	 * A `Cancel` is an object that is thrown when an operation is canceled.
-	 *
-	 * @class
-	 * @param {string=} message The message.
-	 */
-	function Cancel(message) {
-	  this.message = message;
-	}
-
-	Cancel.prototype.toString = function toString() {
-	  return 'Cancel' + (this.message ? ': ' + this.message : '');
-	};
-
-	Cancel.prototype.__CANCEL__ = true;
-
-	var Cancel_1 = Cancel;
-
-	/**
-	 * A `CancelToken` is an object that can be used to request cancellation of an operation.
-	 *
-	 * @class
-	 * @param {Function} executor The executor function.
-	 */
-	function CancelToken(executor) {
-	  if (typeof executor !== 'function') {
-	    throw new TypeError('executor must be a function.');
-	  }
-
-	  var resolvePromise;
-	  this.promise = new Promise(function promiseExecutor(resolve) {
-	    resolvePromise = resolve;
-	  });
-
-	  var token = this;
-	  executor(function cancel(message) {
-	    if (token.reason) {
-	      // Cancellation has already been requested
-	      return;
-	    }
-
-	    token.reason = new Cancel_1(message);
-	    resolvePromise(token.reason);
-	  });
-	}
-
-	/**
-	 * Throws a `Cancel` if cancellation has been requested.
-	 */
-	CancelToken.prototype.throwIfRequested = function throwIfRequested() {
-	  if (this.reason) {
-	    throw this.reason;
-	  }
-	};
-
-	/**
-	 * Returns an object that contains a new `CancelToken` and a function that, when called,
-	 * cancels the `CancelToken`.
-	 */
-	CancelToken.source = function source() {
-	  var cancel;
-	  var token = new CancelToken(function executor(c) {
-	    cancel = c;
-	  });
-	  return {
-	    token: token,
-	    cancel: cancel
-	  };
-	};
-
-	var CancelToken_1 = CancelToken;
-
-	/**
-	 * Syntactic sugar for invoking a function and expanding an array for arguments.
-	 *
-	 * Common use case would be to use `Function.prototype.apply`.
-	 *
-	 *  ```js
-	 *  function f(x, y, z) {}
-	 *  var args = [1, 2, 3];
-	 *  f.apply(null, args);
-	 *  ```
-	 *
-	 * With `spread` this example can be re-written.
-	 *
-	 *  ```js
-	 *  spread(function(x, y, z) {})([1, 2, 3]);
-	 *  ```
-	 *
-	 * @param {Function} callback
-	 * @returns {Function}
-	 */
-	var spread = function spread(callback) {
-	  return function wrap(arr) {
-	    return callback.apply(null, arr);
-	  };
-	};
-
-	/**
-	 * Determines whether the payload is an error thrown by Axios
-	 *
-	 * @param {*} payload The value to test
-	 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
-	 */
-	var isAxiosError = function isAxiosError(payload) {
-	  return (typeof payload === 'object') && (payload.isAxiosError === true);
-	};
-
-	/**
-	 * Create an instance of Axios
-	 *
-	 * @param {Object} defaultConfig The default config for the instance
-	 * @return {Axios} A new instance of Axios
-	 */
-	function createInstance(defaultConfig) {
-	  var context = new Axios_1(defaultConfig);
-	  var instance = bind(Axios_1.prototype.request, context);
-
-	  // Copy axios.prototype to instance
-	  utils.extend(instance, Axios_1.prototype, context);
-
-	  // Copy context to instance
-	  utils.extend(instance, context);
-
-	  return instance;
-	}
-
-	// Create the default instance to be exported
-	var axios$1 = createInstance(defaults_1);
-
-	// Expose Axios class to allow class inheritance
-	axios$1.Axios = Axios_1;
-
-	// Factory for creating new instances
-	axios$1.create = function create(instanceConfig) {
-	  return createInstance(mergeConfig(axios$1.defaults, instanceConfig));
-	};
-
-	// Expose Cancel & CancelToken
-	axios$1.Cancel = Cancel_1;
-	axios$1.CancelToken = CancelToken_1;
-	axios$1.isCancel = isCancel;
-
-	// Expose all/spread
-	axios$1.all = function all(promises) {
-	  return Promise.all(promises);
-	};
-	axios$1.spread = spread;
-
-	// Expose isAxiosError
-	axios$1.isAxiosError = isAxiosError;
-
-	var axios_1 = axios$1;
-
-	// Allow use of default import syntax in TypeScript
-	var _default = axios$1;
-	axios_1.default = _default;
-
-	var axios = axios_1;
-
-	class RTCEndpoint extends Event$1 {
-	  constructor(options) {
-	    super('RTCPusherPlayer');
-	    this.TAG = '[RTCPusherPlayer]';
-	    let defaults = {
-	      element: '',
-	      // html video element
-	      debug: false,
-	      // if output debug log
-	      zlmsdpUrl: '',
-	      simulecast: false,
-	      useCamera: true,
-	      audioEnable: true,
-	      videoEnable: true,
-	      recvOnly: false
-	    };
-	    this.options = Object.assign({}, defaults, options);
-
-	    if (this.options.debug) {
-	      setLogger();
-	    }
-
-	    this.e = {
-	      onicecandidate: this._onIceCandidate.bind(this),
-	      ontrack: this._onTrack.bind(this),
-	      onicecandidateerror: this._onIceCandidateError.bind(this)
-	    };
-	    this._remoteStream = null;
-	    this._localStream = null;
-	    this.pc = new RTCPeerConnection(null);
-	    this.pc.onicecandidate = this.e.onicecandidate;
-	    this.pc.onicecandidateerror = this.e.onicecandidateerror;
-	    this.pc.ontrack = this.e.ontrack;
-	    if (!this.options.recvOnly && (this.options.audioEnable || this.options.videoEnable)) this.start();else this.receive();
-	  }
-
-	  receive() {
-
-	    const AudioTransceiverInit = {
-	      direction: 'recvonly',
-	      sendEncodings: []
-	    };
-	    const VideoTransceiverInit = {
-	      direction: 'recvonly',
-	      sendEncodings: []
-	    };
-	    this.pc.addTransceiver('audio', AudioTransceiverInit);
-	    this.pc.addTransceiver('video', VideoTransceiverInit);
-	    this.pc.createOffer().then(desc => {
-	      log(this.TAG, 'offer:', desc.sdp);
-	      this.pc.setLocalDescription(desc).then(() => {
-	        axios({
-	          method: 'post',
-	          url: this.options.zlmsdpUrl,
-	          responseType: 'json',
-	          data: desc.sdp,
-	          headers: {
-	            'Content-Type': 'text/plain;charset=utf-8'
-	          }
-	        }).then(response => {
-	          let ret = response.data; //JSON.parse(response.data);
-
-	          if (ret.code != 0) {
-	            // mean failed for offer/anwser exchange
-	            this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret);
-	            return;
-	          }
-
-	          let anwser = {};
-	          anwser.sdp = ret.sdp;
-	          anwser.type = 'answer';
-	          log(this.TAG, 'answer:', ret.sdp);
-	          this.pc.setRemoteDescription(anwser).then(() => {
-	            log(this.TAG, 'set remote success');
-	          }).catch(e => {
-	            error(this.TAG, e);
-	          });
-	        });
-	      });
-	    }).catch(e => {
-	      error(this.TAG, e);
-	    });
-	  }
-
-	  start() {
-	    let videoConstraints = false;
-	    let audioConstraints = false;
-
-	    if (this.options.useCamera) {
-	      if (this.options.videoEnable) videoConstraints = new VideoTrackConstraints(VideoSourceInfo.CAMERA);
-	      if (this.options.audioEnable) audioConstraints = new AudioTrackConstraints(AudioSourceInfo.MIC);
-	    } else {
-	      if (this.options.videoEnable) {
-	        videoConstraints = new VideoTrackConstraints(VideoSourceInfo.SCREENCAST);
-	        if (this.options.audioEnable) audioConstraints = new AudioTrackConstraints(AudioSourceInfo.SCREENCAST);
-	      } else {
-	        if (this.options.audioEnable) audioConstraints = new AudioTrackConstraints(AudioSourceInfo.MIC);else {
-	          // error shared display media not only audio
-	          error(this.TAG, 'error paramter');
-	        }
-	      }
-	    }
-
-	    MediaStreamFactory.createMediaStream(new StreamConstraints(audioConstraints, videoConstraints)).then(stream => {
-	      this._localStream = stream;
-	      this.dispatch(Events$1.WEBRTC_ON_LOCAL_STREAM, stream);
-	      const AudioTransceiverInit = {
-	        direction: 'sendrecv',
-	        sendEncodings: []
-	      };
-	      const VideoTransceiverInit = {
-	        direction: 'sendrecv',
-	        sendEncodings: []
-	      };
-
-	      if (this.options.simulecast && stream.getVideoTracks().length > 0) {
-	        VideoTransceiverInit.sendEncodings = [{
-	          rid: 'q',
-	          active: true,
-	          scaleResolutionDownBy: 4.0
-	        }, {
-	          rid: 'h',
-	          active: true,
-	          scaleResolutionDownBy: 2.0
-	        }, {
-	          rid: 'f',
-	          active: true
-	        }];
-	      }
-
-	      if (stream.getAudioTracks().length > 0) {
-	        this.pc.addTransceiver(stream.getAudioTracks()[0], AudioTransceiverInit);
-	      } else {
-	        AudioTransceiverInit.direction = 'recvonly';
-	        this.pc.addTransceiver('audio', AudioTransceiverInit);
-	      }
-
-	      if (stream.getVideoTracks().length > 0) {
-	        this.pc.addTransceiver(stream.getVideoTracks()[0], VideoTransceiverInit);
-	      } else {
-	        VideoTransceiverInit.direction = 'recvonly';
-	        this.pc.addTransceiver('video', VideoTransceiverInit);
-	      }
-	      /*
-	      stream.getTracks().forEach((track,idx)=>{
-	          debug.log(this.TAG,track);
-	          this.pc.addTrack(track);
-	      });
-	      */
-
-
-	      this.pc.createOffer().then(desc => {
-	        log(this.TAG, 'offer:', desc.sdp);
-	        this.pc.setLocalDescription(desc).then(() => {
-	          axios({
-	            method: 'post',
-	            url: this.options.zlmsdpUrl,
-	            responseType: 'json',
-	            data: desc.sdp,
-	            headers: {
-	              'Content-Type': 'text/plain;charset=utf-8'
-	            }
-	          }).then(response => {
-	            let ret = response.data; //JSON.parse(response.data);
-
-	            if (ret.code != 0) {
-	              // mean failed for offer/anwser exchange
-	              this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret);
-	              return;
-	            }
-
-	            let anwser = {};
-	            anwser.sdp = ret.sdp;
-	            anwser.type = 'answer';
-	            log(this.TAG, 'answer:', ret.sdp);
-	            this.pc.setRemoteDescription(anwser).then(() => {
-	              log(this.TAG, 'set remote success');
-	            }).catch(e => {
-	              error(this.TAG, e);
-	            });
-	          });
-	        });
-	      }).catch(e => {
-	        error(this.TAG, e);
-	      });
-	    }).catch(e => {
-	      error(this.TAG, e);
-	    }); //const offerOptions = {};
-
-	    /*
-	    if (typeof this.pc.addTransceiver === 'function') {
-	        // |direction| seems not working on Safari.
-	        this.pc.addTransceiver('audio', { direction: 'recvonly' });
-	        this.pc.addTransceiver('video', { direction: 'recvonly' });
-	    } else {
-	        offerOptions.offerToReceiveAudio = true;
-	        offerOptions.offerToReceiveVideo = true;
-	    }
-	    */
-	  }
-
-	  _onIceCandidate(event) {
-	    if (event.candidate) {
-	      log('Remote ICE candidate: \n ' + event.candidate.candidate); // Send the candidate to the remote peer
-	    }
-	  }
-
-	  _onTrack(event) {
-	    if (this.options.element && event.streams && event.streams.length > 0) {
-	      this.options.element.srcObject = event.streams[0];
-	      this._remoteStream = event.streams[0];
-	      this.dispatch(Events$1.WEBRTC_ON_REMOTE_STREAMS, event);
-	    } else {
-	      error('element pararm is failed');
-	    }
-	  }
-
-	  _onIceCandidateError(event) {
-	    this.dispatch(Events$1.WEBRTC_ICE_CANDIDATE_ERROR, event);
-	  }
-
-	  close() {
-	    if (this.pc) {
-	      this.pc.close();
-	      this.pc = null;
-	    }
-
-	    if (this.options) {
-	      this.options = null;
-	    }
-
-	    if (this._localStream) {
-	      this._localStream.getTracks().forEach((track, idx) => {
-	        track.stop();
-	      });
-	    }
-
-	    if (this._remoteStream) {
-	      this._remoteStream.getTracks().forEach((track, idx) => {
-	        track.stop();
-	      });
-	    }
-	  }
-
-	  get remoteStream() {
-	    return this._remoteStream;
-	  }
-
-	  get localStream() {
-	    return this._localStream;
-	  }
-
-	}
-
-	console.log('build date:', BUILD_DATE);
-	console.log('version:', VERSION);
-	const Events = Events$1;
-	const Media = media;
-	const Endpoint = RTCEndpoint;
-
-	exports.Endpoint = Endpoint;
-	exports.Events = Events;
-	exports.Media = Media;
-
-	Object.defineProperty(exports, '__esModule', { value: true });
-
-	return exports;
-
-}({}));
-//# sourceMappingURL=ZLMRTCClient.js.map
diff --git a/web_src/static/js/jessibuca/ff.js b/web_src/static/js/jessibuca/ff.js
deleted file mode 100644
index 6262561..0000000
--- a/web_src/static/js/jessibuca/ff.js
+++ /dev/null
@@ -1 +0,0 @@
-var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile="ff.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["J"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["N"];addOnInit(Module["asm"]["K"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,65536);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:function(path){return FS.stat(path,true)},chmod:function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:function(stream){return stream.fd===null},llseek:function(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:function(stream,address,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=opts||{};opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:function(path,data,opts){opts=opts||{};opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:function(){return FS.currentPath},chdir:function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return length}});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+'    "use strict";'+"    return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options){options=options||{};if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb()})}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i<arguments.length;i++){argCache[i]=arguments[i]}return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return wasmTable.get(rawFunction)}var fp=makeDynCaller();if(typeof fp!=="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i<argCount;++i){args[i]=argTypes[i]["toWireType"](destructors,arguments[i-1])}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0]["fromWireType"](ptr)};return[]});return[]})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break}}var returns=argTypes[0].name!=="void";var argsList="";var argsListWired="";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?", ":"")+"arg"+i;argsListWired+=(i!==0?", ":"")+"arg"+i+"Wired"}var invokerFnBody="return function "+makeLegalFunctionName(humanName)+"("+argsList+") {\n"+"if (arguments.length !== "+(argCount-2)+") {\n"+"throwBindingError('function "+humanName+" called with ' + arguments.length + ' arguments, expected "+(argCount-2)+" args!');\n"+"}\n";if(needsDestructorStack){invokerFnBody+="var destructors = [];\n"}var dtorStack=needsDestructorStack?"destructors":"null";var args1=["throwBindingError","invoker","fn","runDestructors","retType","classParam"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+="var thisWired = classParam.toWireType("+dtorStack+", this);\n"}for(var i=0;i<argCount-2;++i){invokerFnBody+="var arg"+i+"Wired = argType"+i+".toWireType("+dtorStack+", arg"+i+"); // "+argTypes[i+2].name+"\n";args1.push("argType"+i);args2.push(argTypes[i+2])}if(isClassMethodFunc){argsListWired="thisWired"+(argsListWired.length>0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?"thisWired":"arg"+(i-2)+"Wired";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+"_dtor("+paramName+"); // "+argTypes[i].name+"\n";args1.push(paramName+"_dtor");args2.push(argTypes[i].destructorFunction)}}}if(returns){invokerFnBody+="var ret = retType.fromWireType(rv);\n"+"return ret;\n"}else{}invokerFnBody+="}\n";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count}}return count}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i]}}return null}function init_emval(){Module["count_emval_handles"]=count_emval_handles;Module["get_first_emval"]=get_first_emval}function __emval_register(value){switch(value){case undefined:{return 1}case null:{return 2}case true:{return 3}case false:{return 4}default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<<bitshift>>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(value<minRange||value>maxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i])}str=a.join("")}_free(value);return str},"toWireType":function(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var getLength;var valueIsOfTypeString=typeof value==="string";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError("Cannot pass non-string to std::string")}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function(){return lengthBytesUTF8(value)}}else{getLength=function(){return value.length}}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i]}}}if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=function(){return HEAPU16};shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=function(){return HEAPU32};shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?", ":"")+"arg"+i;params.push("argType"+i);args.push(types[1+i])}var functionName=makeLegalFunctionName("methodCaller_"+signatureName);var functionBody="return function "+functionName+"(handle, name, destructors, args) {\n";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+="    var arg"+i+" = argType"+i+".readValueFromPointer(args"+(offset?"+"+offset:"")+");\n";offset+=types[i+1]["argPackAdvance"]}functionBody+="    var rv = handle[name]("+argsList+");\n";for(var i=0;i<argCount-1;++i){if(types[i+1]["deleteObject"]){functionBody+="    argType"+i+".deleteObject(arg"+i+");\n"}}if(!retType.isVoid){functionBody+="    return retType.toWireType(destructors, rv);\n"}functionBody+="};\n";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction)}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function reallyNegative(x){return x<0||x===0&&1/x===-Infinity}function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function convertU32PairToI53(lo,hi){return(lo>>>0)+(hi>>>0)*4294967296}function reSign(value,bits){if(value<=0){return value}var half=bits<=32?Math.abs(1<<bits-1):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value}return value}function unSign(value,bits){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function formatString(format,varargs){var textIndex=format;var argIndex=varargs;function prepVararg(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){ptr+=4}}else{}return ptr}function getNextArg(type){var ret;argIndex=prepVararg(argIndex,type);if(type==="double"){ret=HEAPF64[argIndex>>3];argIndex+=8}else if(type=="i64"){ret=[HEAP32[argIndex>>2],HEAP32[argIndex+4>>2]];argIndex+=8}else{type="i32";ret=HEAP32[argIndex>>2];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break}case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;currArg=getNextArg("i"+argSize*8);var argText;if(argSize==8){currArg=next==117?convertU32PairToI53(currArg[0],currArg[1]):convertI32PairToI53(currArg[0],currArg[1])}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i<argText.length;i++){buffer.push((15-parseInt(argText[i],16)).toString(16))}argText=buffer.join("");while(argText.length<argSize*2)argText="f"+argText}else{argText=currAbsArg.toString(16)}if(next==88){prefix=prefix.toUpperCase();argText=argText.toUpperCase()}}else if(next==112){if(currAbsArg===0){argText="(nil)"}else{prefix="0x";argText=currAbsArg.toString(16)}}if(precisionSet){while(argText.length<precision){argText="0"+argText}}if(currArg>=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.length<width){if(flagLeftAlign){argText+=" "}else{if(flagZeroPad){argText="0"+argText}else{prefix=" "+prefix}}}argText=prefix+argText;argText.split("").forEach(function(chr){ret.push(chr.charCodeAt(0))});break}case"f":case"F":case"e":case"E":case"g":case"G":{currArg=getNextArg("double");var argText;if(isNaN(currArg)){argText="nan";flagZeroPad=false}else if(!isFinite(currArg)){argText=(currArg<0?"-":"")+"inf";flagZeroPad=false}else{var isGeneral=false;var effectivePrecision=Math.min(precision,20);if(next==103||next==71){isGeneral=true;precision=precision||1;var exponent=parseInt(currArg.toExponential(effectivePrecision).split("e")[1],10);if(precision>exponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].includes(".")&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length<width){if(flagLeftAlign){argText+=" "}else{if(flagZeroPad&&(argText[0]=="-"||argText[0]=="+")){argText=argText[0]+"0"+argText.slice(1)}else{argText=(flagZeroPad?"0":" ")+argText}}}if(next<97)argText=argText.toUpperCase();argText.split("").forEach(function(chr){ret.push(chr.charCodeAt(0))});break}case"s":{var arg=getNextArg("i8*");var argLength=arg?_strlen(arg):"(null)".length;if(precisionSet)argLength=Math.min(argLength,precision);if(!flagLeftAlign){while(argLength<width--){ret.push(32)}}if(arg){for(var i=0;i<argLength;i++){ret.push(HEAPU8[arg++>>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength<width--){ret.push(32)}}break}case"c":{if(flagLeftAlign)ret.push(getNextArg("i8"));while(--width>0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break}case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break}case"%":{ret.push(curr);break}default:{for(var i=startTextIndex;i<textIndex+2;i++){ret.push(HEAP8[i>>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}function traverseStack(args){if(!args||!args.callee||!args.callee.name){return[null,"",""]}var funstr=args.callee.toString();var funcname=args.callee.name;var str="(";var first=true;for(var i in args){var a=args[i];if(!first){str+=", "}first=false;if(typeof a==="number"||typeof a==="string"){str+=a}else{str+="("+typeof a+")"}}str+=")";var caller=args.callee.caller;args=caller?caller.arguments:[];if(first)str="";return[args,funcname,str]}function _emscripten_get_callstack_js(flags){var callstack=jsStackTrace();var iThisFunc=callstack.lastIndexOf("_emscripten_log");var iThisFunc2=callstack.lastIndexOf("_emscripten_get_callstack");var iNextLine=callstack.indexOf("\n",Math.max(iThisFunc,iThisFunc2))+1;callstack=callstack.slice(iNextLine);if(flags&32){warnOnce("EM_LOG_DEMANGLE is deprecated; ignoring")}if(flags&8&&typeof emscripten_source_map==="undefined"){warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.');flags^=8;flags|=16}var stack_args=null;if(flags&128){stack_args=traverseStack(arguments);while(stack_args[1].includes("_emscripten_"))stack_args=traverseStack(stack_args[0])}var lines=callstack.split("\n");callstack="";var newFirefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var firefoxRe=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var l in lines){var line=lines[l];var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts&&parts.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=newFirefoxRe.exec(line);if(!parts)parts=firefoxRe.exec(line);if(parts&&parts.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}var haveSourceMap=false;if(flags&8){var orig=emscripten_source_map.originalPositionFor({line:lineno,column:column});haveSourceMap=orig&&orig.source;if(haveSourceMap){if(flags&64){orig.source=orig.source.substring(orig.source.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+="    at "+symbolName+" ("+orig.source+":"+orig.line+":"+orig.column+")\n"}}if(flags&16||!haveSourceMap){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=(haveSourceMap?"     = "+symbolName:"    at "+symbolName)+" ("+file+":"+lineno+":"+column+")\n"}if(flags&128&&stack_args[0]){if(stack_args[1]==symbolName&&stack_args[2].length>0){callstack=callstack.replace(/\s+$/,"");callstack+=" with values: "+stack_args[1]+stack_args[2]+"\n"}stack_args=traverseStack(stack_args[0])}}callstack=callstack.replace(/\s+$/,"");return callstack}function _emscripten_log_js(flags,str){if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+_emscripten_get_callstack_js(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}}function _emscripten_log(flags,format,varargs){var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);_emscripten_log_js(flags,str)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){try{var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _setTempRet0(val){setTempRet0(val)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"z":___sys_fcntl64,"y":___sys_open,"t":__embind_register_bigint,"D":__embind_register_bool,"o":__embind_register_class,"j":__embind_register_class_constructor,"g":__embind_register_class_function,"I":__embind_register_class_property,"C":__embind_register_emval,"m":__embind_register_float,"c":__embind_register_integer,"b":__embind_register_memory_view,"n":__embind_register_std_string,"i":__embind_register_std_wstring,"E":__embind_register_void,"r":__emval_as,"e":__emval_call_void_method,"p":__emval_decref,"d":__emval_get_method_caller,"H":__emval_incref,"q":__emval_run_destructors,"w":__emval_take_value,"a":_abort,"G":_clock,"f":_emscripten_log,"u":_emscripten_resize_heap,"v":_environ_get,"x":_environ_sizes_get,"l":_fd_close,"A":_fd_fdstat_get,"B":_fd_read,"s":_fd_seek,"k":_fd_write,"F":_gettimeofday,"h":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["K"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["L"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["M"]).apply(null,arguments)};var _strlen=Module["_strlen"]=function(){return(_strlen=Module["_strlen"]=Module["asm"]["O"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["P"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["Q"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_ijiii=Module["dynCall_ijiii"]=function(){return(dynCall_ijiii=Module["dynCall_ijiii"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_viiijj=Module["dynCall_viiijj"]=function(){return(dynCall_viiijj=Module["dynCall_viiijj"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_jij=Module["dynCall_jij"]=function(){return(dynCall_jij=Module["dynCall_jij"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["V"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["W"]).apply(null,arguments)};var _ff_h264_cabac_tables=Module["_ff_h264_cabac_tables"]=77157;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();module.exports=Module;
diff --git a/web_src/static/js/jessibuca/ff.wasm b/web_src/static/js/jessibuca/ff.wasm
deleted file mode 100644
index 9b2d12d..0000000
--- a/web_src/static/js/jessibuca/ff.wasm
+++ /dev/null
Binary files differ
diff --git a/web_src/static/js/jessibuca/ff.worker.js b/web_src/static/js/jessibuca/ff.worker.js
deleted file mode 100644
index 8f909e3..0000000
--- a/web_src/static/js/jessibuca/ff.worker.js
+++ /dev/null
@@ -1 +0,0 @@
-var initializedJS=false;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}moduleLoaded()}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};
diff --git a/web_src/static/js/jessibuca/index.js b/web_src/static/js/jessibuca/index.js
deleted file mode 100644
index e68fc3b..0000000
--- a/web_src/static/js/jessibuca/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function e(t){return t&&t.__esModule?t.default:t}function r(t,e,r){Object.defineProperty(t,e,{get:r,enumerable:!0})}var i,n,o=!1;function s(){return o||(o=!0,n=t=>{var e=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),r=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler,  textureCoord).r;","highp float u = texture2D(uSampler,  textureCoord).r;","highp float v = texture2D(vSampler,  textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n"),i=t.createShader(t.VERTEX_SHADER);t.shaderSource(i,e),t.compileShader(i),t.getShaderParameter(i,t.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+t.getShaderInfoLog(i));var n=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(n,r),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+t.getShaderInfoLog(n));var o=t.createProgram();t.attachShader(o,i),t.attachShader(o,n),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS)||console.log("Program failed to compile: "+t.getProgramInfoLog(o)),t.useProgram(o);var s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),t.STATIC_DRAW);var a=t.getAttribLocation(o,"vertexPos");t.enableVertexAttribArray(a),t.vertexAttribPointer(a,2,t.FLOAT,!1,0,0);var h=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),t.STATIC_DRAW);var u=t.getAttribLocation(o,"texturePos");function f(e,r){var i=t.createTexture();return t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindTexture(t.TEXTURE_2D,null),t.uniform1i(t.getUniformLocation(o,e),r),i}t.enableVertexAttribArray(u),t.vertexAttribPointer(u,2,t.FLOAT,!1,0,0);var l=f("ySampler",0),d=f("uSampler",1),c=f("vSampler",2);return function(e,r,i,n,o){t.viewport(0,0,e,r),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,l),t.texImage2D(t.TEXTURE_2D,0,t.LUMINANCE,e,r,0,t.LUMINANCE,t.UNSIGNED_BYTE,i),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,d),t.texImage2D(t.TEXTURE_2D,0,t.LUMINANCE,e/2,r/2,0,t.LUMINANCE,t.UNSIGNED_BYTE,n),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,c),t.texImage2D(t.TEXTURE_2D,0,t.LUMINANCE,e/2,r/2,0,t.LUMINANCE,t.UNSIGNED_BYTE,o),t.drawArrays(t.TRIANGLE_STRIP,0,4)}},r(i={},"default",(function(){return n}))),i}var a,h,u=!1;function f(){a={},s(),h=t=>{const e=document.createElement("canvas");e.style.position="absolute",e.style.top=0,e.style.left=0,t.$container.appendChild(e),t.$canvasElement=e,t.$container.style.overflow="hidden","absolute"!==t.$container.style.position&&(t.$container.style.position="relative");if(!t._supportOffscreen()){const e=(()=>{const e=t.$canvasElement;let r=null;const i=["webgl","experimental-webgl","moz-webgl","webkit-3d"];let n=0;for(;!r&&n<i.length;){const o=i[n];try{let i={preserveDrawingBuffer:!0};t._opt.contextOptions&&(i=Object.assign(i,t._opt.contextOptions)),r=e.getContext(o,i)}catch(t){r=null}r&&"function"==typeof r.getParameter||(r=null),++n}return r})();t._contextGLRender=s().default(e),t._contextGL=e}t._destroyContextGL=()=>{t._contextGL&&(t._contextGL=null),t._contextGLRender&&(t._contextGLRender=null),t._bitmaprenderer&&(t._bitmaprenderer=null)}},r(a,"default",(function(){return h}))}function l(){return u||(u=!0,f()),a}var d,c,p,m,g,v,b,y=!1;function w(){return y||(y=!0,c={videoBuffer:.5,vod:!1,isResize:!0,isFullSize:!1,isFlv:!1,debug:!1,timeout:30,supportDblclickFullscreen:!1,showBandwidth:!1,keepScreenOn:!1,isNotMute:!1,hasAudio:!0,operateBtns:{fullscreen:!1,screenshot:!1,play:!1,audio:!1},loadingText:"",background:"",decoder:"index.js",rotate:0,text:"",forceNoOffscreen:!0,hiddenAutoPause:!1},r(d={},"DEFAULT_OPTIONS",(function(){return c})),p={init:"init",initSize:"initSize",render:"render",playAudio:"playAudio",print:"print",printErr:"printErr",initAudioPlanar:"initAudioPlanar",kBps:"kBps"},r(d,"CMD_TYPE",(function(){return p})),m={close:"close",play:"play",setVideoBuffer:"setVideoBuffer",init:"init"},r(d,"POST_MESSAGE",(function(){return m})),g={fullscreen:"fullscreen",play:"play",pause:"pause",mute:"mute",load:"load",videoInfo:"videoInfo",timeUpdate:"timeUpdate",audioInfo:"audioInfo",log:"log",error:"error",kBps:"kBps",timeout:"timeout",stats:"stats",performance:"performance",record:"record",buffer:"buffer",videoFrame:"videoFrame",start:"start",metadata:"metadata"},r(d,"EVEMTS",(function(){return g})),v={empty:"empty",buffering:"buffering",full:"full"},r(d,"BUFFER_STATUS",(function(){return v})),b={download:"download",base64:"base64",blob:"blob"},r(d,"SCREENSHOT_TYPE",(function(){return b}))),d}var M,_=!1;function A(t){t.resume();const e=t.createBufferSource();e.buffer=t.createBuffer(1,1,22050),e.connect(t.destination),e.noteOn?e.noteOn(0):e.start(0)}function E(t,e){t&&(t.style.display=e?"block":"none")}function S(t=""){const e=t.split(","),r=atob(e[1]),i=e[0].replace("data:","").replace(";base64","");let n=r.length,o=new Uint8Array(n);for(;n--;)o[n]=r.charCodeAt(n);return new File([o],"file",{type:i})}function k(t,e){const r=document.createElement("a");r.download=e,r.href=URL.createObjectURL(t),r.click(),URL.revokeObjectURL(t)}function B(t){if(null==t||""===t)return"0 KB/S";let e=parseFloat(t);return e=e.toFixed(2),e+"KB/S"}function R(t){let e=0;return t>=24?e=2:t>=15&&(e=1),e}function T(t,e){Object.keys(e||{}).forEach((function(r){t.style[r]=e[r]}))}function x(){let t=document.fullscreenElement||window.webkitFullscreenElement||document.msFullscreenElement;return void 0===t&&(t=!1),!!t}function I(){}function C(){return(new Date).getTime()}function P(t){Object.keys(t||{}).forEach((e=>{"bgDom"!==e&&E(t[e],!1)}))}function D(t){E(t.pauseDom,!0),E(t.screenshotsDom,!0),E(t.fullscreenDom,!0),E(t.quietAudioDom,!0),E(t.textDom,!0),E(t.speedDom,!0),E(t.recordDom,!0),E(t.loadingDom,!1),E(t.playDom,!1),E(t.playBigDom,!1),E(t.bgDom,!1)}function L(t,e){let r=w().BUFFER_STATUS.buffering;return 0===t?r=w().BUFFER_STATUS.empty:t>=e&&(r=w().BUFFER_STATUS.full),r}function O(){return _||(_=!0,M={},w(),r(M,"audioContextUnlock",(function(){return A})),r(M,"$domToggle",(function(){return E})),r(M,"dataURLToFile",(function(){return S})),r(M,"downloadImg",(function(){return k})),r(M,"bpsSize",(function(){return B})),r(M,"fpsStatus",(function(){return R})),r(M,"setStyle",(function(){return T})),r(M,"checkFull",(function(){return x})),r(M,"noop",(function(){return I})),r(M,"now",(function(){return C})),r(M,"$hideBtns",(function(){return P})),r(M,"$initBtns",(function(){return D})),r(M,"bufferStatus",(function(){return L}))),M}var j,U,N=!1;function z(){return N||(N=!0,j={},O(),U=t=>{t._audioContext=new(window.AudioContext||window.webkitAudioContext),t._gainNode=t._audioContext.createGain(),t._audioEnabled=e=>{e?(O().audioContextUnlock(t._audioContext),t._audioEnabled=e=>{e?t._audioContext.resume():t._audioContext.suspend()},t._audioContext.resume()):t._audioContext.suspend()},t._audioEnabled(!0),t._mute=()=>{t._audioEnabled(!1),t.quieting=!0},t._cancelMute=()=>{t._audioEnabled(!0),t.quieting=!1},t._audioResume=()=>{t._cancelMute()},t._initAudioPlanar=e=>{const r=t._audioContext;if(!r)return!1;let i=[];const n=r.createScriptProcessor(1024,0,2);n.onaudioprocess=function(t){if(i.length){const r=i.shift();for(let i=0;i<e.channels;i++){const e=r[i],n=t.outputBuffer.getChannelData(i);for(let t=0;t<1024;t++)n[t]=e[t]}}},n.connect(t._gainNode),t._closeAudio=()=>{n.disconnect(t._gainNode),t._gainNode.disconnect(r.destination),delete t._closeAudio,i=[]},t._gainNode.connect(r.destination),t._playAudio=t=>i.push(t)},t._destroyAudioContext=()=>{t._audioContext.close(),t._audioContext=null,t._gainNode=null}},r(j,"default",(function(){return U}))),j}var q,F,Z=!1;function H(){return Z||(Z=!0,q={},O(),F=t=>{t._resize$2=()=>t.resize(),t._handleVisibilityChange$2=()=>t._handleVisibilityChange(),t._onfullscreenchange$2=()=>t._onfullscreenchange(),t._handleWakeLock$2=()=>t._handleWakeLock(),window.addEventListener("resize",t._resize$2),window.addEventListener("fullscreenchange",t._onfullscreenchange$2),document.addEventListener("visibilitychange",t._handleVisibilityChange$2),document.addEventListener("visibilitychange",t._handleWakeLock$2),window.addEventListener("fullscreenchange",t._handleWakeLock$2),t._opt.supportDblclickFullscreen&&t.$canvasElement.addEventListener("dblclick",(()=>{t.fullscreen=!t.fullscreen}),!1),t._removeEventListener=()=>{window.removeEventListener("resize",t._resize$2),window.removeEventListener("fullscreenchange",t._onfullscreenchange$2),document.removeEventListener("visibilitychange",t._handleWakeLock$2),document.removeEventListener("visibilitychange",t._handleVisibilityChange$2),window.removeEventListener("fullscreenchange",t._handleWakeLock$2)},t.$doms.playDom&&t.$doms.playDom.addEventListener("click",(e=>{e.stopPropagation(),t._play()}),!1),t.$doms.playBigDom&&t.$doms.playBigDom.addEventListener("click",(e=>{e.stopPropagation(),t._play()}),!1),t.$doms.pauseDom&&t.$doms.pauseDom.addEventListener("click",(e=>{e.stopPropagation(),t._pause()}),!1),t.$doms.screenshotsDom&&t.$doms.screenshotsDom.addEventListener("click",(e=>{e.stopPropagation();const r=(t._opt.text||"")+""+O().now();t._screenshot(r)}),!1),t.$doms.fullscreenDom&&t.$doms.fullscreenDom.addEventListener("click",(e=>{e.stopPropagation(),t.fullscreen=!0}),!1),t.$doms.minScreenDom&&t.$doms.minScreenDom.addEventListener("click",(e=>{e.stopPropagation(),t.fullscreen=!1}),!1),t.$doms.recordDom&&t.$doms.recordDom.addEventListener("click",(e=>{e.stopPropagation(),t.recording=!0}),!1),t.$doms.recordingDom&&t.$doms.recordingDom.addEventListener("click",(e=>{e.stopPropagation(),t.recording=!1}),!1),t.$doms.quietAudioDom&&t.$doms.quietAudioDom.addEventListener("click",(e=>{e.stopPropagation(),t._cancelMute()}),!1),t.$doms.playAudioDom&&t.$doms.playAudioDom.addEventListener("click",(e=>{e.stopPropagation(),t._mute()}),!1),t._enableWakeLock()},r(q,"default",(function(){return F}))),q}var K,W,G=!1;function Y(){return G||(G=!0,K={},O(),H(),W=t=>{t._showControl=()=>{let e=!1,r=!1;return Object.keys(t._opt.operateBtns).forEach((e=>{t._opt.operateBtns[e]&&(r=!0)})),(t._opt.showBandwidth||t._opt.text||r)&&(e=!0),e};const e={},r=document.createDocumentFragment(),i=document.createElement("div"),n=document.createElement("div"),o=document.createElement("div"),s=document.createElement("div"),a=document.createElement("div"),h=document.createElement("div"),u=document.createElement("div"),f=document.createElement("div"),l=document.createElement("div"),d=document.createElement("div"),c=document.createElement("div"),p=document.createElement("div"),m=document.createElement("div"),g=document.createElement("div"),v=document.createElement("div"),b=document.createElement("div"),y=document.createElement("div"),w=document.createElement("div");m.innerText=t._opt.loadingText||"",s.innerText=t._opt.text||"",a.innerText="",h.title="播放",f.title="暂停",l.title="截屏",d.title="全屏",c.title="退出全屏",g.title="静音",v.title="取消静音",b.title="录制",y.title="取消录制";let M={position:"absolute",width:"100%",height:"100%"};t._opt.background&&(M=Object.assign({},M,{backgroundRepeat:"no-repeat",backgroundPosition:"center",backgroundSize:"100%",backgroundImage:"url('"+t._opt.background+"')"}));const _={position:"absolute",width:"100%",height:"100%",textAlign:"center",color:"#fff",display:"none",backgroundImage:"url('data:image/gif;base64,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')",backgroundRepeat:"no-repeat",backgroundPosition:"center",backgroundSize:"40px 40px"},A={position:"absolute",width:"100%",height:"100%",display:"none",background:"rgba(0,0,0,0.4)",backgroundImage:"url('data:image/png;base64,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')",backgroundRepeat:"no-repeat",backgroundPosition:"center",backgroundSize:"48px 48px",cursor:"pointer"},E={position:"absolute",top:0,height:"100%",display:"flex",alignItems:"center"},S={display:"none",position:"relative",fontSize:"13px",color:"#fff",lineHeight:"20px",marginLeft:"5px",marginRight:"5px",userSelect:"none"},k={display:"none",position:"relative",width:"16px",height:"16px",marginLeft:"8px",marginRight:"8px",backgroundRepeat:"no-repeat",backgroundPosition:"center",backgroundSize:"100%",cursor:"pointer"};O().setStyle(w,M),O().setStyle(i,{height:"38px",zIndex:11,position:"absolute",left:0,bottom:0,width:"100%",background:"rgba(0,0,0)"}),O().setStyle(p,_),O().setStyle(u,A),O().setStyle(m,{position:"absolute",width:"100%",top:"60%",textAlign:"center"}),O().setStyle(n,Object.assign({},E,{left:0})),O().setStyle(o,Object.assign({},E,{right:0})),O().setStyle(s,S),O().setStyle(a,S),O().setStyle(h,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAARVJREFUSMe9laEOglAUhs+5k9lJFpsJ5QWMJoNGbEY0mEy+gr6GNo0a3SiQCegMRILzGdw4hl+Cd27KxPuXb2zA/91z2YXoGRERkX4fvN3A2QxUiv4dFM3n8jZRBLbbVfd+ubJuF4xjiCyXkksueb1uSKCIZYGLBTEx8ekEoV7PkICeVgs8HiGyXoO2bUigCDM4HoPnM7bI8wwJ6Gk0sEXbLSay30Oo2TQkoGcwgFCSQMhxDAvoETEscDiQkJC4LjMz8+XyZ4HrFYWjEQqHQ1asWGWZfmdFAsVINxuw00HhbvfpydpvxWkKTqdYaRCUfUPJCdzv4Gr1uqfli0tOIAzByUT/iCrL6+84y3Bw+D6ui5Ou+jwA8FnIO++FACgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvYm9mYW5nLnN2Z8fICi0AAAAASUVORK5CYII=')"})),O().setStyle(f,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAHVJREFUSMftkCESwCAMBEOnCtdXVMKHeC7oInkEeQJXkRoEZWraipxZc8lsQqQZBACAlIS1oqGhhTCdu3oyxyyMcdRf79c5J7SWDBky+z4173rbJvR+VF/e/qwKqIAKqMBDgZyFzAQCoZTpxq7HLDyOrw/9b07l3z4dDnI2IAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMIo/vCcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDD7YgSbAAAASnRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9nZjcwMHM3YjNmdy96YW50aW5nLnN2ZxqNZJkAAAAASUVORK5CYII=')"})),O().setStyle(l,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAaxJREFUSMfNlLFOAkEQhmevAZMjR6OGRBJKsFBzdkYNpYSaWkopIOFRCBWh1ieA+ALGRgutjK0HzV2H5SX7W/zsmY3cnTEhcZovOzcz9+/s7Ir8d4OGht7fBwAgjvEri2OTl1ffSf0xAMBxRIkS1e3Se3+vcszEMe/6OqmT/aN2m1wsNu/o5YVsNHI7BgA4PCRfXzfXCwKy1RLbcXZG9nrkzc12jvT8nPU/PtatOThgAx8fuS4WyZ0de2e+T87n5OcnuVqRsxl5cpImQDnKUc7DA1fVqpimZCu+vCSjiNH9PlmpJNTQ0INBErfeafZRAakC6FWKfH9nwU7H/l6rGdqCOx3y7c3U+aOARsMMp+1vNskwTLjulB23XJL1epqA9OshIiKeJxAIoug7UyA4OuLi6Ynr52deu+NjOy4MSc9Ln8rMDpTLybBpaOjdXbJUIqdTm8a/t2fn/RSQewR24HicTLmGhnbdzcPquvYtGY3+PIR24UKBUXd35v6Sk4lN47+9NXm/FBAEedfGTjw9JYdDm76fm6+hoS8ujGAxT6L9Im7bTKeurvIEb92+AES1b6x283XSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABJdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2NhbWVyYS5zdmeyubWEAAAAAElFTkSuQmCC')"})),O().setStyle(d,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAALZJREFUSMftVbsORUAQVSj8DomChvh3lU5CoSVCQq2RObeYu8XG3deVoHCak81kds7Oaz3vxRcAAMwztOg6vX9d6/3XFQQC+b7iAoFhYE7Tvx9EIFAcy/ftO3MQGAQkCfM4MmeZWyajiLnvmYuCeduMAuSzvRBVYNluFHCssSgFp7Sq9ALKkjnPf9ubRtkDL27HNT3QtsY9cAjsNAVheHIKBOwD2wpxFHDbJpwmaHH2L1iWx+2BDy8RbXXtqbRBAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABTdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3F1YW5waW5nenVpZGFodWEuc3ZnTBoI7AAAAABJRU5ErkJggg==')"})),O().setStyle(c,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAYJJREFUSMfdVbGKwkAQnQn+geAfWBixUTsVgp3YGKxSWflVNmIjARULwc5KO40ipNHWRgs/wGLniucKa+Jd5ODuuGle5u3szGRmd5bor4iIiMhuB3Sc+HXXBdp2/Lpta7v4dccRJUrUdhtNQIkSVa3C8HwG1uumg34f2OnEB+h0tF1Sv5b+YIsttpZLEhKSdhvscPi8IXFF74GJiYnHY7Cex8zMvFgkbInjmJnv98kqoO30vmhLtaRMB60WtEbDNDudgMUiKiQSzfjOMzFxoQAyCPSfw7/nQZ/PUYnpNGV6OR6BmYzJbzYIoBQCzGaRBDQvJCTdLnTLolg5HN5t6f8V1h/oUT4PrVKJWBotmEzQw+vV3J9Ow851P2/BaoX9Yfh0BrJZYKlk8uUyHOpDeLuBHwzMBJtN2PV6IPUhXK9Nf5cLMAxfluanrmGkRBggtRo03wfq66P/6CsJAnOg+f6rgfZI4BGYiYlHIx048eR6krcnq34kkj1GuVz8+jceo9+SD5A8yGh8CTq7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABNdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3p1aXhpYW9odWEuc3ZnoCFr0AAAAABJRU5ErkJggg==')"})),O().setStyle(g,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAR9JREFUSMfVlD0LglAYhe9VkwgNihpsjbYQf4JTS7+iuaGxpcGfJjS0NFRLk2NDi6MogafhJGRIX9yEzvJwrx/nvPd9VYh/F3LkyBuN2g3J1QoAgCQhPe/Hxq5Lo+0WlfJ9dYYAgGaTDAIyy/BUnwcwWJlhcLnZkN2ugIBAuy2kkEL2ep8F73S4kjfFcfn6cMj9KLodrWVBiXyf75tMyOOR+4MBOZ8XLXzorboA5UpnM/J0Ivd7+vX7xX2asqGpVKtFXi5sqWmypXefrfIWAACmU/JwKCoun8hu9zA0uk6u13wgirg+n7+bAcsibbt6SB3n9TQXPxwAwHJJpum7M6BcDDQa0SgMaw9QPkJNIxcLMo4ZcDz+eYDqQFLWbqxKV57EtW1WtMbmAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2ppbmd5aW4uc3ZnIlMYaQAAAABJRU5ErkJggg==')"})),O().setStyle(v,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAU5JREFUSMftkzGKwlAURf9PULBQwULSCKK1bZAgNuoaFFyAC3AdZg0uQCwshWzAShEEO7Gy0soUCu9Occ3An5nMGCfdzGsO7+Xy3/03iVL/lbAAACiVIBCI77O37Vi9QCDZbEqLm03ycEBUAoHk818v7nYpul5Jz4tf8HBKYa1mcjwmbzd8rG8NFIsU7ffk8UjmcjE3XK+RtB4G2PT75GbDeblMttumfjSKMRCGLxsQCKTReE9KIJDJxDw/SmKxiOZWWh+ntrSlre2WXRAorbTSrZapip7X66kbMKtQUFBQCENznsmQ93vqBhh5r8fO85jAcsnIrcce1yV3uxgD8zl5uZgU+dGBVlrp6GbTKRPwffaDAek45Gz2/M0AAJ0OeTol+w0rFYrOZ3K1MhNJEjEAwHF4cBA8Z8B1zcXV6msv+JMR2yaHQ1LrXx/8Z+sNRxsWcwZeb6UAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEt0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvc2hlbmd5aW4uc3ZnFog1MQAAAABJRU5ErkJggg==')"})),O().setStyle(b,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAPRJREFUSMflVDEOwjAQO0e8gr2sZYVunREbD6ISfAgmkBjpC/hBEQ+AtTWD6QAI0gBlqRfLp+TiXC5n1nXgMUCS5HBoNBqj6IOMMFwuEpsNAABl6d3HihWrOJaBsuRPkGW+c929HAxuYefb6L+R0ZgkMrJYiItCnCT1sl5Y1jwXj0bNniJNJWqujfX7LyrwJh8AYDxWgulU0dPp20IFlxoODm61kpE4VnS9/puBXyPYgH7LbKY3PhwUnUw+NdC4CdW9+71UgyZspwIBB9No3O0klktxUahyx+Pz+lYG0Xzu84lXRqTqwRQAGAzns8R223gUdxZXGcAK5Hp0ClIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvbHV6aGlzaGlwaW4uc3Zn5Zd7GQAAAABJRU5ErkJggg==')"})),O().setStyle(y,Object.assign({},k,{backgroundImage:"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAahJREFUSMdjYBjpgBFd4NZK+f+soQYG//T+yzFuUFUl2cApjEWM/758UZvysPDn3127GBkZGBgY/v4l6ICb9xTWsRbp6/9f9W8N44Jz5xgCGI4wfGFiIttrR/5n/3/U3KyR8rj8t0RdHS5lcAv+//yXzzhZTY1ii2FAmsGZocna+maD3GnWY62tNzbJBbDOffLkxie5eJYwa2uYMhaigzb2/zyGguPH/y9mTGKYYGlJUIMiYxDjHCen/4oMDAxznJzg4k8Z/jP+l5LCCAFCQP30Y5dfXVZWDI7/zzIs8PNjNGJ4/7/r+XNKA4rkoNZ4/lj0V9TmzUxJv0J+F+jrM3YyvPq/acsWujmA2oBkB9y4LifLxhoa+teAzYFtwtWr/8sZxBj9fHxo7oCbprJ72MqOHWNgZGBkYFy1isGGoZahTFSU0hAgOhcQnfph4P7/df9T9u1jPMn4nyHmxIn/bAzLGe7GxTHsZyj+f+zpUwYGBmmG6bQsiMr+L/v/rqlJY9Njm9889fW4lGEUxXCHwAomUgH3vxBG8c+f1WWf9P98sns3oaJ4FAAAbtWqHTT84QYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6MzU6MjMrMDg6MDBLHbvEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjM1OjIzKzA4OjAwOkADeAAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fcTM1YTFhNHBtY2MvbHV6aGlzaGlwaW4uc3Zn6xlv1QAAAABJRU5ErkJggg==')"})),p.appendChild(m),t._opt.text&&(n.appendChild(s),e.textDom=s),t._opt.showBandwidth&&(n.appendChild(a),e.speedDom=a),t._opt.operateBtns.record&&(o.appendChild(y),o.appendChild(b),e.recordingDom=y,e.recordDom=b),t._opt.operateBtns.screenshot&&(o.appendChild(l),e.screenshotsDom=l),t._opt.operateBtns.play&&(o.appendChild(h),o.appendChild(f),e.playDom=h,e.pauseDom=f),t._opt.operateBtns.audio&&(o.appendChild(v),o.appendChild(g),e.playAudioDom=v,e.quietAudioDom=g),t._opt.operateBtns.fullscreen&&(o.appendChild(d),o.appendChild(c),e.fullscreenDom=d,e.minScreenDom=c),i.appendChild(n),i.appendChild(o),r.appendChild(w),e.bgDom=w,r.appendChild(p),e.loadingDom=p,t._showControl()&&r.appendChild(i),t._opt.operateBtns.play&&(r.appendChild(u),e.playBigDom=u),t.$container.appendChild(r),t.$doms=e,t._removeContainerChild=()=>{for(;t.$container.firstChild;)t.$container.removeChild(t.$container.firstChild)},H().default(t),O().$hideBtns(t.$doms),t._opt.isNotMute||t._mute()},r(K,"default",(function(){return W}))),K}var V,$,X=!1;function J(){return X||(X=!0,V={},w(),O(),$=t=>{const e=new Worker(t._opt.decoder);e.onmessage=r=>{const i=r.data;switch(i.cmd){case w().CMD_TYPE.init:t.setBufferTime(t._opt.videoBuffer),e.postMessage({cmd:w().POST_MESSAGE.init,opt:JSON.stringify(t._opt),sampleRate:t._audioContext.sampleRate}),t._hasLoaded||(t._hasLoaded=!0,t.onLoad(),t._trigger(w().EVEMTS.load));break;case w().CMD_TYPE.initSize:t.$canvasElement.width=i.w,t.$canvasElement.height=i.h,t.onInitSize(),t._resize(),t._trigger(w().EVEMTS.videoInfo,{w:i.w,h:i.h}),t._trigger(w().EVEMTS.start),t._supportOffscreen()&&(t._bitmaprenderer=t.$canvasElement.getContext("bitmaprenderer"));break;case w().CMD_TYPE.render:t.loading&&(t.loading=!1,t.playing=!0,t._clearCheckLoading()),t.playing&&(t._supportOffscreen()?t._bitmaprenderer.transferFromImageBitmap(i.buffer):t._contextGLRender(t.$canvasElement.width,t.$canvasElement.height,i.output[0],i.output[1],i.output[2])),t._trigger(w().EVEMTS.timeUpdate,i.ts),t.onTimeUpdate(i.ts),t._updateStats({buf:i.delay,ts:i.ts}),t._checkHeart();break;case w().CMD_TYPE.playAudio:t.playing&&!t.quieting&&t._playAudio(i.buffer);break;case w().CMD_TYPE.print:t.onLog(i.text),t._trigger(w().EVEMTS.log,i.text);break;case w().CMD_TYPE.printErr:t.onLog(i.text),t._trigger(w().EVEMTS.log,i.text),t.onError(i.text),t._trigger(w().EVEMTS.error,i.text);break;case w().CMD_TYPE.initAudioPlanar:t._initAudioPlanar(i),t._trigger(w().EVEMTS.audioInfo,{numOfChannels:i.channels,sampleRate:i.samplerate});break;case w().CMD_TYPE.kBps:t.playing&&(t.$doms.speedDom&&(t.$doms.speedDom.innerText=O().bpsSize(i.kBps)),t._trigger(w().EVEMTS.kBps,i.kBps));default:t[i.cmd]&&t[i.cmd](i)}},t._decoderWorker=e},r(V,"default",(function(){return $}))),V}var Q,tt,et=!1;function rt(){return et||(et=!0,Q={},O(),w(),tt=t=>{t._loading=!0,t._recording=!1,t._playing=!1,t._audioPlaying=!1,t._quieting=!1,t._fullscreen=!1,t._stats={buf:0,fps:0,abps:"",vbps:"",ts:""},t._hasLoaded=!1,t._playUrl="",t._startBpsTime="",t._bps=0,t._checkHeartTimeout=null,t._wakeLock=null,t._contextGL=null,t._contextGLRender=null,t._checkLoadingTimeout=null,t._bitmaprenderer=null,t._isPlayingBeforePageHidden=!1,t._initCheckVariable=()=>{t._startBpsTime="",t._bps=0,t._clearCheckHeartTimeout(),t._clearCheckLoading()},t._clearCheckHeartTimeout=()=>{t._checkHeartTimeout&&(clearTimeout(t._checkHeartTimeout),t._checkHeartTimeout=null)},t._startCheckHeartTimeout=()=>{t._checkHeartTimeout=setTimeout((function(){t._trigger(w().EVEMTS.timeout),t.recording=!1,t.playing=!1,t._close()}),1e3*t._opt.timeout)},t._clearCheckLoading=()=>{t._checkLoadingTimeout&&(clearTimeout(t._checkLoadingTimeout),t._checkLoadingTimeout=null)},t._checkLoading=()=>{t._clearCheckLoading(),t._checkLoadingTimeout=setTimeout((()=>{t._trigger(w().EVEMTS.timeout),t.playing=!1,t._close(),O().$domToggle(t.$doms.loadingDom,!1)}),1e3*t._opt.timeout)}},r(Q,"default",(function(){return tt}))),Q}var it,nt,ot=!1;function st(){return ot||(ot=!0,it={},O(),nt=t=>{t.onPlay=O().noop,t.onPause=O().noop,t.onRecord=O().noop,t.onFullscreen=O().noop,t.onMute=O().noop,t.onLoad=O().noop,t.onLog=O().noop,t.onError=O().noop,t.onTimeUpdate=O().noop,t.onInitSize=O().noop},r(it,"default",(function(){return nt}))),it}var at,ht,ut=!1;function ft(){return ut||(ut=!0,ht=t=>{t._on=(e,r)=>{let i,n,o;if(!r)return t;for(i=t.__events||(t.__events={}),e=e.split(/\s+/);n=e.shift();)o=i[n]||(i[n]=[]),o.push(r);return t},t._off=()=>{let e;return(e=t.__events)?(delete t.__events,t):t},t._trigger=(e,...r)=>{function i(t,e){if(t)for(let r=0,i=t.length;r<i;r+=1)t[r](...e)}let n,o,s;if(!(n=t.__events))return t;for(e=e.split(/\s+/);o=e.shift();)(s=n[o])&&(s=s.slice()),i(s,r);return t}},r(at={},"default",(function(){return ht}))),at}var lt,dt,ct=!1;function pt(){return ct||(ct=!0,lt={},O(),w(),dt=t=>{t._pause=()=>{t._close(),t.loading&&O().$domToggle(t.$doms.loadingDom,!1),t.recording=!1,t.playing=!1},t._play=e=>{if(!t._playUrl&&!e)return;let r=!1;e?(t._playUrl&&(t._close(),r=!0,t.clearView()),t.loading=!0,O().$domToggle(t.$doms.bgDom,!1),t._checkLoading(),t._playUrl=e):t._playUrl&&(t.loading?(O().$hideBtns(t.$doms),O().$domToggle(t.$doms.fullscreenDom,!0),O().$domToggle(t.$doms.pauseDom,!0),O().$domToggle(t.$doms.loadingDom,!0),t._checkLoading()):t.playing=!0),t._initCheckVariable(),r?setTimeout((()=>{t._decoderWorker.postMessage({cmd:w().POST_MESSAGE.play,url:t._playUrl})}),300):t._decoderWorker.postMessage({cmd:w().POST_MESSAGE.play,url:t._playUrl})},t._screenshot=(e,r,i,n)=>{e=e||O().now(),n=n||w().SCREENSHOT_TYPE.download;const o={png:"image/png",jpeg:"image/jpeg",webp:"image/webp"};let s=.92;!o[r]&&w().SCREENSHOT_TYPE[r]&&(n=r,r="png",i=void 0),"string"==typeof i&&(n=i,i=void 0),void 0!==i&&(s=Number(i));const a=t.$canvasElement.toDataURL(o[r]||o.png,s),h=O().dataURLToFile(a);return n===w().SCREENSHOT_TYPE.base64?a:n===w().SCREENSHOT_TYPE.blob?h:void(n===w().SCREENSHOT_TYPE.download&&O().downloadImg(h,e))},t._close=()=>{t._close$2(),t._clearView()},t._close$2=()=>{t._opt.debug&&console.log("_close$2-START"),t._closeAudio&&t._closeAudio(),t._audioPlayBuffers=[],t._audioPlaying=!1,t._decoderWorker.postMessage({cmd:w().POST_MESSAGE.close}),delete t._playAudio,t._releaseWakeLock(),t._initCheckVariable(),t._opt.debug&&console.log("_close$2-END")},t._releaseWakeLock=()=>{t._wakeLock&&(t._wakeLock.release(),t._wakeLock=null)},t._clearView=()=>{t._contextGL&&t._contextGL.clear(t._contextGL.COLOR_BUFFER_BIT)},t._resize=()=>{let e=t.$container.clientWidth,r=t.$container.clientHeight;t._showControl()&&(r-=38);let i=t.$canvasElement.width,n=t.$canvasElement.height;const o=t._opt.rotate;let s=(e-i)/2,a=(r-n)/2;270!==o&&90!==o||(i=t.$canvasElement.height,n=t.$canvasElement.width);let h=e/i,u=r/n,f=h>u?u:h;t._opt.isResize||h!==u&&(f=h+","+u),t._opt.isFullResize&&(f=h>u?h:u);let l="scale("+f+")";o&&(l+=" rotate("+o+"deg)"),t.$canvasElement.style.transform=l,t.$canvasElement.style.left=s+"px",t.$canvasElement.style.top=a+"px"},t._enableWakeLock=()=>{t._opt.keepScreenOn&&"wakeLock"in navigator&&navigator.wakeLock.request("screen").then((e=>{t._wakeLock=e}))},t._supportOffscreen=()=>!t._opt.forceNoOffscreen&&"function"==typeof t.$canvasElement.transferControlToOffscreen,t._checkHeart=()=>{t._clearCheckHeartTimeout(),t._startCheckHeartTimeout()},t._updateStats=e=>{e=e||{},t._startBpsTime||(t._startBpsTime=O().now());const r=O().now();r-t._startBpsTime<1e3?t._stats.fps+=1:(t._stats.ts=e.ts,t._stats.buf=e.buf,t._trigger(w().EVEMTS.stats,t._stats),t._trigger(w().EVEMTS.performance,O().fpsStatus(t._stats.fps)),t._trigger(w().EVEMTS.buffer,O().bufferStatus(t._stats.buf,1e3*t._opt.videoBuffer)),t._stats.fps=0,t._startBpsTime=r)},t._onfullscreenchange=()=>{t.fullscreen=O().checkFull()},t._handleVisibilityChange=()=>{t._opt.hiddenAutoPause&&(t._opt.debug&&console.log(document.visibilityState,t._isPlayingBeforePageHidden),"visible"===document.visibilityState?t._isPlayingBeforePageHidden&&t._play():(t._isPlayingBeforePageHidden=t.playing,t.playing&&t._pause()))},t._handleWakeLock=()=>{null!==t._wakeLock&&"visible"===document.visibilityState&&t._enableWakeLock()}},r(lt,"default",(function(){return dt}))),lt}var mt,gt,vt=!1;function bt(){return vt||(vt=!0,mt={},rt(),st(),ft(),pt(),gt=t=>{rt().default(t),st().default(t),ft().default(t),pt().default(t)},r(mt,"default",(function(){return gt}))),mt}var yt,wt=!1;var Mt,_t,At,Et,St,kt,Bt,Rt,Tt=!1;function xt(){throw new Error("setTimeout has not been defined")}function It(){throw new Error("clearTimeout has not been defined")}function Ct(t){if(At===setTimeout)return setTimeout(t,0);if((At===xt||!At)&&setTimeout)return At=setTimeout,setTimeout(t,0);try{return At(t,0)}catch(e){try{return At.call(null,t,0)}catch(e){return At.call(this,t,0)}}}function Pt(){kt&&Bt&&(kt=!1,Bt.length?St=Bt.concat(St):Rt=-1,St.length&&Dt())}function Dt(){if(!kt){var t=Ct(Pt);kt=!0;for(var e=St.length;e;){for(Bt=St,St=[];++Rt<e;)Bt&&Bt[Rt].run();Rt=-1,e=St.length}Bt=null,kt=!1,function(t){if(Et===clearTimeout)return clearTimeout(t);if((Et===It||!Et)&&clearTimeout)return Et=clearTimeout,clearTimeout(t);try{Et(t)}catch(e){try{return Et.call(null,t)}catch(e){return Et.call(this,t)}}}(t)}}function Lt(t,e){this.fun=t,this.array=e}function Ot(){}function jt(){return Tt||(Tt=!0,Mt={},_t=Mt={},function(){try{At="function"==typeof setTimeout?setTimeout:xt}catch(t){At=xt}try{Et="function"==typeof clearTimeout?clearTimeout:It}catch(t){Et=It}}(),St=[],kt=!1,Rt=-1,_t.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];St.push(new Lt(t,e)),1!==St.length||kt||Ct(Dt)},Lt.prototype.run=function(){this.fun.apply(null,this.array)},_t.title="browser",_t.browser=!0,_t.env={},_t.argv=[],_t.version="",_t.versions={},_t.on=Ot,_t.addListener=Ot,_t.once=Ot,_t.off=Ot,_t.removeListener=Ot,_t.removeAllListeners=Ot,_t.emit=Ot,_t.prependListener=Ot,_t.prependOnceListener=Ot,_t.listeners=function(t){return[]},_t.binding=function(t){throw new Error("process.binding is not supported")},_t.cwd=function(){return"/"},_t.chdir=function(t){throw new Error("process.chdir is not supported")},_t.umask=function(){return 0}),Mt}var Ut,Nt,zt,qt,Ft,Zt,Ht,Kt,Wt=!1;function Gt(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function Yt(t){var e,r,i=Gt(t),n=i[0],o=i[1],s=new Ft(function(t,e,r){return 3*(e+r)/4-r}(0,n,o)),a=0,h=o>0?n-4:n;for(r=0;r<h;r+=4)e=qt[t.charCodeAt(r)]<<18|qt[t.charCodeAt(r+1)]<<12|qt[t.charCodeAt(r+2)]<<6|qt[t.charCodeAt(r+3)],s[a++]=e>>16&255,s[a++]=e>>8&255,s[a++]=255&e;return 2===o&&(e=qt[t.charCodeAt(r)]<<2|qt[t.charCodeAt(r+1)]>>4,s[a++]=255&e),1===o&&(e=qt[t.charCodeAt(r)]<<10|qt[t.charCodeAt(r+1)]<<4|qt[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s}function Vt(t,e,r){for(var i,n,o=[],s=e;s<r;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(zt[(n=i)>>18&63]+zt[n>>12&63]+zt[n>>6&63]+zt[63&n]);return o.join("")}function $t(t){for(var e,r=t.length,i=r%3,n=[],o=16383,s=0,a=r-i;s<a;s+=o)n.push(Vt(t,s,s+o>a?a:s+o));return 1===i?(e=t[r-1],n.push(zt[e>>2]+zt[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],n.push(zt[e>>10]+zt[e>>4&63]+zt[e<<2&63]+"=")),n.join("")}function Xt(){return Wt||(Wt=!0,function(){for((Ut={}).toByteArray=Yt,Nt=$t,Ut.fromByteArray=Nt,zt=[],qt=[],Ft="undefined"!=typeof Uint8Array?Uint8Array:Array,Ht=0,Kt=(Zt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/").length;Ht<Kt;++Ht)zt[Ht]=Zt[Ht],qt[Zt.charCodeAt(Ht)]=Ht;qt["-".charCodeAt(0)]=62,qt["_".charCodeAt(0)]=63}()),Ut}var Jt,Qt,te=!1;function ee(){return te||(te=!0,
-/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource>*/
-(Jt={}).read=function(t,e,r,i,n){var o,s,a=8*n-i-1,h=(1<<a)-1,u=h>>1,f=-7,l=r?n-1:0,d=r?-1:1,c=t[e+l];for(l+=d,o=c&(1<<-f)-1,c>>=-f,f+=a;f>0;o=256*o+t[e+l],l+=d,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=i;f>0;s=256*s+t[e+l],l+=d,f-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(c?-1:1);s+=Math.pow(2,i),o-=u}return(c?-1:1)*s*Math.pow(2,o-i)},Qt=function(t,e,r,i,n,o){var s,a,h,u=8*o-n-1,f=(1<<u)-1,l=f>>1,d=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,c=i?0:o-1,p=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?d/h:d*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=f?(a=0,s=f):s+l>=1?(a=(e*h-1)*Math.pow(2,n),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,n),s=0));n>=8;t[r+c]=255&a,c+=p,a/=256,n-=8);for(s=s<<n|a,u+=n;u>0;t[r+c]=255&s,c+=p,s/=256,u-=8);t[r+c-p]|=128*m},Jt.write=Qt),Jt}var re,ie,ne,oe,se,ae,he,ue,fe,le=!1;function de(t){if(t>se)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,ce.prototype),e}function ce(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return ge(t)}return pe(t,e,r)}function pe(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!ce.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|Me(t,e),i=de(r),n=i.write(t,e);n!==r&&(i=i.slice(0,n));return i}(t,e);if(ArrayBuffer.isView(t))return function(t){if(Ke(t,Uint8Array)){var e=new Uint8Array(t);return be(e.buffer,e.byteOffset,e.byteLength)}return ve(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Ke(t,ArrayBuffer)||t&&Ke(t.buffer,ArrayBuffer))return be(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(Ke(t,SharedArrayBuffer)||t&&Ke(t.buffer,SharedArrayBuffer)))return be(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return ce.from(i,e,r);var n=function(t){if(ce.isBuffer(t)){var e=0|ye(t.length),r=de(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return"number"!=typeof t.length||We(t.length)?de(0):ve(t);if("Buffer"===t.type&&Array.isArray(t.data))return ve(t.data)}(t);if(n)return n;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return ce.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function me(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function ge(t){return me(t),de(t<0?0:0|ye(t))}function ve(t){for(var e=t.length<0?0:0|ye(t.length),r=de(e),i=0;i<e;i+=1)r[i]=255&t[i];return r}function be(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');var i;return i=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(i,ce.prototype),i}function ye(t){if(t>=se)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+se.toString(16)+" bytes");return 0|t}function we(t){return+t!=t&&(t=0),ce.alloc(+t)}function Me(t,e){if(ce.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Ke(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Fe(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Ze(t).length;default:if(n)return i?-1:Fe(t).length;e=(""+e).toLowerCase(),n=!0}}function _e(t,e,r){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Le(this,e,r);case"utf8":case"utf-8":return Ce(this,e,r);case"ascii":return Pe(this,e,r);case"latin1":case"binary":return De(this,e,r);case"base64":return Ie(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Oe(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function Ae(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}function Ee(t,e,r,i,n){if(0===t.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),We(r=+r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return-1;r=t.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof e&&(e=ce.from(e,i)),ce.isBuffer(e))return 0===e.length?-1:Se(t,e,r,i,n);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):Se(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function Se(t,e,r,i,n){var o,s=1,a=t.length,h=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;s=2,a/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(n){var f=-1;for(o=r;o<a;o++)if(u(t,o)===u(e,-1===f?0:o-f)){if(-1===f&&(f=o),o-f+1===h)return f*s}else-1!==f&&(o-=o-f),f=-1}else for(r+h>a&&(r=a-h),o=r;o>=0;o--){for(var l=!0,d=0;d<h;d++)if(u(t,o+d)!==u(e,d)){l=!1;break}if(l)return o}return-1}function ke(t,e,r,i){r=Number(r)||0;var n=t.length-r;i?(i=Number(i))>n&&(i=n):i=n;var o=e.length;i>o/2&&(i=o/2);for(var s=0;s<i;++s){var a=parseInt(e.substr(2*s,2),16);if(We(a))return s;t[r+s]=a}return s}function Be(t,e,r,i){return He(Fe(e,t.length-r),t,r,i)}function Re(t,e,r,i){return He(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,i)}function Te(t,e,r,i){return He(Ze(e),t,r,i)}function xe(t,e,r,i){return He(function(t,e){for(var r,i,n,o=[],s=0;s<t.length&&!((e-=2)<0);++s)i=(r=t.charCodeAt(s))>>8,n=r%256,o.push(n),o.push(i);return o}(e,t.length-r),t,r,i)}function Ie(t,e,r){return 0===e&&r===t.length?Xt().fromByteArray(t):Xt().fromByteArray(t.slice(e,r))}function Ce(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n<r;){var o,s,a,h,u=t[n],f=null,l=u>239?4:u>223?3:u>191?2:1;if(n+l<=r)switch(l){case 1:u<128&&(f=u);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&u)<<6|63&o)>127&&(f=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&u)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(f=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(f=h)}null===f?(f=65533,l=1):f>65535&&(f-=65536,i.push(f>>>10&1023|55296),f=56320|1023&f),i.push(f),n+=l}return function(t){var e=t.length;if(e<=he)return String.fromCharCode.apply(String,t);var r="",i=0;for(;i<e;)r+=String.fromCharCode.apply(String,t.slice(i,i+=he));return r}(i)}function Pe(t,e,r){var i="";r=Math.min(t.length,r);for(var n=e;n<r;++n)i+=String.fromCharCode(127&t[n]);return i}function De(t,e,r){var i="";r=Math.min(t.length,r);for(var n=e;n<r;++n)i+=String.fromCharCode(t[n]);return i}function Le(t,e,r){var i=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>i)&&(r=i);for(var n="",o=e;o<r;++o)n+=fe[t[o]];return n}function Oe(t,e,r){for(var i=t.slice(e,r),n="",o=0;o<i.length-1;o+=2)n+=String.fromCharCode(i[o]+256*i[o+1]);return n}function je(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function Ue(t,e,r,i,n,o){if(!ce.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||e<o)throw new RangeError('"value" argument is out of bounds');if(r+i>t.length)throw new RangeError("Index out of range")}function Ne(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function ze(t,e,r,i,n){return e=+e,r>>>=0,n||Ne(t,0,r,4),ee().write(t,e,r,i,23,4),r+4}function qe(t,e,r,i,n){return e=+e,r>>>=0,n||Ne(t,0,r,8),ee().write(t,e,r,i,52,8),r+8}function Fe(t,e){var r;e=e||1/0;for(var i=t.length,n=null,o=[],s=0;s<i;++s){if((r=t.charCodeAt(s))>55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Ze(t){return Xt().toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(ue,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function He(t,e,r,i){for(var n=0;n<i&&!(n+r>=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function Ke(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function We(t){return t!=t}function Ge(){re={},Xt(),ee(),ie="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null,ne=ce,re.Buffer=ne,oe=we,re.SlowBuffer=oe,50,re.INSPECT_MAX_BYTES=50,ae=se=2147483647,re.kMaxLength=ae,ce.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),ce.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(ce.prototype,"parent",{enumerable:!0,get:function(){if(ce.isBuffer(this))return this.buffer}}),Object.defineProperty(ce.prototype,"offset",{enumerable:!0,get:function(){if(ce.isBuffer(this))return this.byteOffset}}),ce.poolSize=8192,ce.from=function(t,e,r){return pe(t,e,r)},Object.setPrototypeOf(ce.prototype,Uint8Array.prototype),Object.setPrototypeOf(ce,Uint8Array),ce.alloc=function(t,e,r){return function(t,e,r){return me(t),t<=0?de(t):void 0!==e?"string"==typeof r?de(t).fill(e,r):de(t).fill(e):de(t)}(t,e,r)},ce.allocUnsafe=function(t){return ge(t)},ce.allocUnsafeSlow=function(t){return ge(t)},ce.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==ce.prototype},ce.compare=function(t,e){if(Ke(t,Uint8Array)&&(t=ce.from(t,t.offset,t.byteLength)),Ke(e,Uint8Array)&&(e=ce.from(e,e.offset,e.byteLength)),!ce.isBuffer(t)||!ce.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);n<o;++n)if(t[n]!==e[n]){r=t[n],i=e[n];break}return r<i?-1:i<r?1:0},ce.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},ce.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return ce.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var i=ce.allocUnsafe(e),n=0;for(r=0;r<t.length;++r){var o=t[r];if(Ke(o,Uint8Array))n+o.length>i.length?ce.from(o).copy(i,n):Uint8Array.prototype.set.call(i,o,n);else{if(!ce.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(i,n)}n+=o.length}return i},ce.byteLength=Me,ce.prototype._isBuffer=!0,ce.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)Ae(this,e,e+1);return this},ce.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)Ae(this,e,e+3),Ae(this,e+1,e+2);return this},ce.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)Ae(this,e,e+7),Ae(this,e+1,e+6),Ae(this,e+2,e+5),Ae(this,e+3,e+4);return this},ce.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?Ce(this,0,t):_e.apply(this,arguments)},ce.prototype.toLocaleString=ce.prototype.toString,ce.prototype.equals=function(t){if(!ce.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===ce.compare(this,t)},ce.prototype.inspect=function(){var t="";return t=this.toString("hex",0,50).replace(/(.{2})/g,"$1 ").trim(),this.length>50&&(t+=" ... "),"<Buffer "+t+">"},ie&&(ce.prototype[ie]=ce.prototype.inspect),ce.prototype.compare=function(t,e,r,i,n){if(Ke(t,Uint8Array)&&(t=ce.from(t,t.offset,t.byteLength)),!ce.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&e>=r)return 0;if(i>=n)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(e>>>=0),a=Math.min(o,s),h=this.slice(i,n),u=t.slice(e,r),f=0;f<a;++f)if(h[f]!==u[f]){o=h[f],s=u[f];break}return o<s?-1:s<o?1:0},ce.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},ce.prototype.indexOf=function(t,e,r){return Ee(this,t,e,r,!0)},ce.prototype.lastIndexOf=function(t,e,r){return Ee(this,t,e,r,!1)},ce.prototype.write=function(t,e,r,i){if(void 0===e)i="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)i=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===i&&(i="utf8")):(i=r,r=void 0)}var n=this.length-e;if((void 0===r||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return ke(this,t,e,r);case"utf8":case"utf-8":return Be(this,t,e,r);case"ascii":case"latin1":case"binary":return Re(this,t,e,r);case"base64":return Te(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return xe(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},ce.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},he=4096,ce.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var i=this.subarray(t,e);return Object.setPrototypeOf(i,ce.prototype),i},ce.prototype.readUintLE=ce.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||je(t,e,this.length);for(var i=this[t],n=1,o=0;++o<e&&(n*=256);)i+=this[t+o]*n;return i},ce.prototype.readUintBE=ce.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||je(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i},ce.prototype.readUint8=ce.prototype.readUInt8=function(t,e){return t>>>=0,e||je(t,1,this.length),this[t]},ce.prototype.readUint16LE=ce.prototype.readUInt16LE=function(t,e){return t>>>=0,e||je(t,2,this.length),this[t]|this[t+1]<<8},ce.prototype.readUint16BE=ce.prototype.readUInt16BE=function(t,e){return t>>>=0,e||je(t,2,this.length),this[t]<<8|this[t+1]},ce.prototype.readUint32LE=ce.prototype.readUInt32LE=function(t,e){return t>>>=0,e||je(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},ce.prototype.readUint32BE=ce.prototype.readUInt32BE=function(t,e){return t>>>=0,e||je(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},ce.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||je(t,e,this.length);for(var i=this[t],n=1,o=0;++o<e&&(n*=256);)i+=this[t+o]*n;return i>=(n*=128)&&(i-=Math.pow(2,8*e)),i},ce.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||je(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},ce.prototype.readInt8=function(t,e){return t>>>=0,e||je(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},ce.prototype.readInt16LE=function(t,e){t>>>=0,e||je(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},ce.prototype.readInt16BE=function(t,e){t>>>=0,e||je(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},ce.prototype.readInt32LE=function(t,e){return t>>>=0,e||je(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},ce.prototype.readInt32BE=function(t,e){return t>>>=0,e||je(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},ce.prototype.readFloatLE=function(t,e){return t>>>=0,e||je(t,4,this.length),ee().read(this,t,!0,23,4)},ce.prototype.readFloatBE=function(t,e){return t>>>=0,e||je(t,4,this.length),ee().read(this,t,!1,23,4)},ce.prototype.readDoubleLE=function(t,e){return t>>>=0,e||je(t,8,this.length),ee().read(this,t,!0,52,8)},ce.prototype.readDoubleBE=function(t,e){return t>>>=0,e||je(t,8,this.length),ee().read(this,t,!1,52,8)},ce.prototype.writeUintLE=ce.prototype.writeUIntLE=function(t,e,r,i){(t=+t,e>>>=0,r>>>=0,i)||Ue(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o<r&&(n*=256);)this[e+o]=t/n&255;return e+r},ce.prototype.writeUintBE=ce.prototype.writeUIntBE=function(t,e,r,i){(t=+t,e>>>=0,r>>>=0,i)||Ue(this,t,e,r,Math.pow(2,8*r)-1,0);var n=r-1,o=1;for(this[e+n]=255&t;--n>=0&&(o*=256);)this[e+n]=t/o&255;return e+r},ce.prototype.writeUint8=ce.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,1,255,0),this[e]=255&t,e+1},ce.prototype.writeUint16LE=ce.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},ce.prototype.writeUint16BE=ce.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},ce.prototype.writeUint32LE=ce.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},ce.prototype.writeUint32BE=ce.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},ce.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Ue(this,t,e,r,n-1,-n)}var o=0,s=1,a=0;for(this[e]=255&t;++o<r&&(s*=256);)t<0&&0===a&&0!==this[e+o-1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},ce.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Ue(this,t,e,r,n-1,-n)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},ce.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},ce.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},ce.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},ce.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},ce.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Ue(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},ce.prototype.writeFloatLE=function(t,e,r){return ze(this,t,e,!0,r)},ce.prototype.writeFloatBE=function(t,e,r){return ze(this,t,e,!1,r)},ce.prototype.writeDoubleLE=function(t,e,r){return qe(this,t,e,!0,r)},ce.prototype.writeDoubleBE=function(t,e,r){return qe(this,t,e,!1,r)},ce.prototype.copy=function(t,e,r,i){if(!ce.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<r&&(i=r),i===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e<i-r&&(i=t.length-e+r);var n=i-r;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,i):Uint8Array.prototype.set.call(t,this.subarray(r,i),e),n},ce.prototype.fill=function(t,e,r,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,r=this.length):"string"==typeof r&&(i=r,r=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!ce.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===t.length){var n=t.charCodeAt(0);("utf8"===i&&n<128||"latin1"===i)&&(t=n)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var s=ce.isBuffer(t)?t:ce.from(t,i),a=s.length;if(0===a)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(o=0;o<r-e;++o)this[o+e]=s[o%a]}return this},ue=/[^+/0-9A-Za-z-_]/g,fe=function(){for(var t="0123456789abcdef",e=new Array(256),r=0;r<16;++r)for(var i=16*r,n=0;n<16;++n)e[i+n]=t[r]+t[n];return e}()}function Ye(){return le||(le=!0,Ge()),re}var Ve,$e,Xe=!1;function Je(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function Qe(t,e){for(var r,i="",n=0,o=-1,s=0,a=0;a<=t.length;++a){if(a<t.length)r=t.charCodeAt(a);else{if(47===r)break;r=47}if(47===r){if(o===a-1||1===s);else if(o!==a-1&&2===s){if(i.length<2||2!==n||46!==i.charCodeAt(i.length-1)||46!==i.charCodeAt(i.length-2))if(i.length>2){var h=i.lastIndexOf("/");if(h!==i.length-1){-1===h?(i="",n=0):n=(i=i.slice(0,h)).length-1-i.lastIndexOf("/"),o=a,s=0;continue}}else if(2===i.length||1===i.length){i="",n=0,o=a,s=0;continue}e&&(i.length>0?i+="/..":i="..",n=2)}else i.length>0?i+="/"+t.slice(o+1,a):i=t.slice(o+1,a),n=a-o-1;o=a,s=0}else 46===r&&-1!==s?++s:s=-1}return i}function tr(){return Xe||(Xe=!0,Ve={},jt(),$e={resolve:function(){for(var t,e="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var n;i>=0?n=arguments[i]:(void 0===t&&(t=jt().cwd()),n=t),Je(n),0!==n.length&&(e=n+"/"+e,r=47===n.charCodeAt(0))}return e=Qe(e,!r),r?e.length>0?"/"+e:"/":e.length>0?e:"."},normalize:function(t){if(Je(t),0===t.length)return".";var e=47===t.charCodeAt(0),r=47===t.charCodeAt(t.length-1);return 0!==(t=Qe(t,!e)).length||e||(t="."),t.length>0&&r&&(t+="/"),e?"/"+t:t},isAbsolute:function(t){return Je(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,e=0;e<arguments.length;++e){var r=arguments[e];Je(r),r.length>0&&(void 0===t?t=r:t+="/"+r)}return void 0===t?".":$e.normalize(t)},relative:function(t,e){if(Je(t),Je(e),t===e)return"";if((t=$e.resolve(t))===(e=$e.resolve(e)))return"";for(var r=1;r<t.length&&47===t.charCodeAt(r);++r);for(var i=t.length,n=i-r,o=1;o<e.length&&47===e.charCodeAt(o);++o);for(var s=e.length-o,a=n<s?n:s,h=-1,u=0;u<=a;++u){if(u===a){if(s>a){if(47===e.charCodeAt(o+u))return e.slice(o+u+1);if(0===u)return e.slice(o+u)}else n>a&&(47===t.charCodeAt(r+u)?h=u:0===u&&(h=0));break}var f=t.charCodeAt(r+u);if(f!==e.charCodeAt(o+u))break;47===f&&(h=u)}var l="";for(u=r+h+1;u<=i;++u)u!==i&&47!==t.charCodeAt(u)||(0===l.length?l+="..":l+="/..");return l.length>0?l+e.slice(o+h):(o+=h,47===e.charCodeAt(o)&&++o,e.slice(o))},_makeLong:function(t){return t},dirname:function(t){if(Je(t),0===t.length)return".";for(var e=t.charCodeAt(0),r=47===e,i=-1,n=!0,o=t.length-1;o>=1;--o)if(47===(e=t.charCodeAt(o))){if(!n){i=o;break}}else n=!1;return-1===i?r?"/":".":r&&1===i?"//":t.slice(0,i)},basename:function(t,e){if(void 0!==e&&"string"!=typeof e)throw new TypeError('"ext" argument must be a string');Je(t);var r,i=0,n=-1,o=!0;if(void 0!==e&&e.length>0&&e.length<=t.length){if(e.length===t.length&&e===t)return"";var s=e.length-1,a=-1;for(r=t.length-1;r>=0;--r){var h=t.charCodeAt(r);if(47===h){if(!o){i=r+1;break}}else-1===a&&(o=!1,a=r+1),s>=0&&(h===e.charCodeAt(s)?-1==--s&&(n=r):(s=-1,n=a))}return i===n?n=a:-1===n&&(n=t.length),t.slice(i,n)}for(r=t.length-1;r>=0;--r)if(47===t.charCodeAt(r)){if(!o){i=r+1;break}}else-1===n&&(o=!1,n=r+1);return-1===n?"":t.slice(i,n)},extname:function(t){Je(t);for(var e=-1,r=0,i=-1,n=!0,o=0,s=t.length-1;s>=0;--s){var a=t.charCodeAt(s);if(47!==a)-1===i&&(n=!1,i=s+1),46===a?-1===e?e=s:1!==o&&(o=1):-1!==e&&(o=-1);else if(!n){r=s+1;break}}return-1===e||-1===i||0===o||1===o&&e===i-1&&e===r+1?"":t.slice(e,i)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,i=e.base||(e.name||"")+(e.ext||"");return r?r===e.root?r+i:r+t+i:i}("/",t)},parse:function(t){Je(t);var e={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return e;var r,i=t.charCodeAt(0),n=47===i;n?(e.root="/",r=1):r=0;for(var o=-1,s=0,a=-1,h=!0,u=t.length-1,f=0;u>=r;--u)if(47!==(i=t.charCodeAt(u)))-1===a&&(h=!1,a=u+1),46===i?-1===o?o=u:1!==f&&(f=1):-1!==o&&(f=-1);else if(!h){s=u+1;break}return-1===o||-1===a||0===f||1===f&&o===a-1&&o===s+1?-1!==a&&(e.base=e.name=0===s&&n?t.slice(1,a):t.slice(s,a)):(0===s&&n?(e.name=t.slice(1,o),e.base=t.slice(1,a)):(e.name=t.slice(s,o),e.base=t.slice(s,a)),e.ext=t.slice(o,a)),s>0?e.dir=t.slice(0,s-1):n&&(e.dir="/"),e},sep:"/",delimiter:":",win32:null,posix:null},$e.posix=$e,Ve=$e),Ve}var er,rr=!1;function ir(){return rr||(rr=!0,er={}),er}var nr,or,sr,ar,hr=!1;function ur(t,e){for(var r in t)e[r]=t[r]}function fr(t,e,r){return ar(t,e,r)}function lr(){return hr||(hr=!0,nr={},sr=Ye(),(ar=sr.Buffer).from&&ar.alloc&&ar.allocUnsafe&&ar.allocUnsafeSlow?nr=sr:(ur(sr,nr),or=fr,nr.Buffer=or),fr.prototype=Object.create(ar.prototype),ur(ar,fr),fr.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return ar(t,e,r)},fr.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=ar(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i},fr.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return ar(t)},fr.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return sr.SlowBuffer(t)}),nr}var dr,cr,pr,mr,gr,vr=!1;function br(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}function yr(t,e){if(t>pr)throw new RangeError("requested too many random bytes");var r=mr.allocUnsafe(t);if(t>0)if(t>cr)for(var i=0;i<t;i+=cr)gr.getRandomValues(r.slice(i,i+cr));else gr.getRandomValues(r);return"function"==typeof e?jt().nextTick((function(){e(null,r)})):r}function wr(){return vr||(vr=!0,dr={},jt(),cr=65536,pr=4294967295,mr=lr().Buffer,gr=t.crypto||t.msCrypto,dr=gr&&gr.getRandomValues?yr:br),dr}var Mr,_r=!1;function Ar(){return _r||(_r=!0,Mr={},Mr="function"==typeof Object.create?function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}),Mr}var Er,Sr,kr,Br,Rr,Tr,xr=!1;function Ir(){Ir.init.call(this)}function Cr(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function Pr(t){return void 0===t._maxListeners?Ir.defaultMaxListeners:t._maxListeners}function Dr(t,e,r,i){var n,o,s,a;if(Cr(r),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]),void 0===s)s=o[e]=r,++t._eventsCount;else if("function"==typeof s?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),(n=Pr(t))>0&&s.length>n&&!s.warned){s.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=t,h.type=e,h.count=s.length,a=h,console&&console.warn&&console.warn(a)}return t}function Lr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Or(t,e,r){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},n=Lr.bind(i);return n.listener=r,i.wrapFn=n,n}function jr(t,e,r){var i=t._events;if(void 0===i)return[];var n=i[e];return void 0===n?[]:"function"==typeof n?r?[n.listener||n]:[n]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(n):Nr(n,n.length)}function Ur(t){var e=this._events;if(void 0!==e){var r=e[t];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function Nr(t,e){for(var r=new Array(e),i=0;i<e;++i)r[i]=t[i];return r}function zr(){return xr||(xr=!0,Er={},Sr="object"==typeof Reflect?Reflect:null,kr=Sr&&"function"==typeof Sr.apply?Sr.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)},Br=Sr&&"function"==typeof Sr.ownKeys?Sr.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)},Rr=Number.isNaN||function(t){return t!=t},Er=Ir,Ir.EventEmitter=Ir,Ir.prototype._events=void 0,Ir.prototype._eventsCount=0,Ir.prototype._maxListeners=void 0,Tr=10,Object.defineProperty(Ir,"defaultMaxListeners",{enumerable:!0,get:function(){return Tr},set:function(t){if("number"!=typeof t||t<0||Rr(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Tr=t}}),Ir.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Ir.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||Rr(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},Ir.prototype.getMaxListeners=function(){return Pr(this)},Ir.prototype.emit=function(t){for(var e=[],r=1;r<arguments.length;r++)e.push(arguments[r]);var i="error"===t,n=this._events;if(void 0!==n)i=i&&void 0===n.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=n[t];if(void 0===a)return!1;if("function"==typeof a)kr(a,this,e);else{var h=a.length,u=Nr(a,h);for(r=0;r<h;++r)kr(u[r],this,e)}return!0},Ir.prototype.addListener=function(t,e){return Dr(this,t,e,!1)},Ir.prototype.on=Ir.prototype.addListener,Ir.prototype.prependListener=function(t,e){return Dr(this,t,e,!0)},Ir.prototype.once=function(t,e){return Cr(e),this.on(t,Or(this,t,e)),this},Ir.prototype.prependOnceListener=function(t,e){return Cr(e),this.prependListener(t,Or(this,t,e)),this},Ir.prototype.removeListener=function(t,e){var r,i,n,o,s;if(Cr(e),void 0===(i=this._events))return this;if(void 0===(r=i[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,r.listener||e));else if("function"!=typeof r){for(n=-1,o=r.length-1;o>=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,n=o;break}if(n<0)return this;0===n?r.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(r,n),1===r.length&&(i[t]=r[0]),void 0!==i.removeListener&&this.emit("removeListener",t,s||e)}return this},Ir.prototype.off=Ir.prototype.removeListener,Ir.prototype.removeAllListeners=function(t){var e,r,i;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[t]),this;if(0===arguments.length){var n,o=Object.keys(r);for(i=0;i<o.length;++i)"removeListener"!==(n=o[i])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=r[t]))this.removeListener(t,e);else if(void 0!==e)for(i=e.length-1;i>=0;i--)this.removeListener(t,e[i]);return this},Ir.prototype.listeners=function(t){return jr(this,t,!0)},Ir.prototype.rawListeners=function(t){return jr(this,t,!1)},Ir.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):Ur.call(t,e)},Ir.prototype.listenerCount=Ur,Ir.prototype.eventNames=function(){return this._eventsCount>0?Br(this._events):[]}),Er}var qr,Fr=!1;function Zr(){return Fr||(Fr=!0,qr={},qr=zr().EventEmitter),qr}var Hr,Kr,Wr,Gr,Yr=!1;function Vr(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,i)}return r}function $r(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Xr(t,e){for(var r=0;r<e.length;r++){var i=e[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Jr(){Hr={},Ye(),Kr=Ye().Buffer,ir(),Wr=ir().inspect,Gr=Wr&&Wr.custom||"inspect",Hr=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.head=null,this.tail=null,this.length=0}var e,r,i;return e=t,r=[{key:"push",value:function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:"unshift",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:"shift",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r}},{key:"concat",value:function(t){if(0===this.length)return Kr.alloc(0);for(var e,r,i,n=Kr.allocUnsafe(t>>>0),o=this.head,s=0;o;)e=o.data,r=n,i=s,Kr.prototype.copy.call(e,r,i),s+=o.data.length,o=o.next;return n}},{key:"consume",value:function(t,e){var r;return t<this.head.data.length?(r=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):r=t===this.head.data.length?this.shift():e?this._getString(t):this._getBuffer(t),r}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(t){var e=this.head,r=1,i=e.data;for(t-=i.length;e=e.next;){var n=e.data,o=t>n.length?n.length:t;if(o===n.length?i+=n:i+=n.slice(0,t),0==(t-=o)){o===n.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=n.slice(o));break}++r}return this.length-=r,i}},{key:"_getBuffer",value:function(t){var e=Kr.allocUnsafe(t),r=this.head,i=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var n=r.data,o=t>n.length?n.length:t;if(n.copy(e,e.length-t,0,o),0==(t-=o)){o===n.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=n.slice(o));break}++i}return this.length-=i,e}},{key:Gr,value:function(t,e){return Wr(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Vr(Object(r),!0).forEach((function(e){$r(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Vr(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},e,{depth:0,customInspect:!1}))}}],r&&Xr(e.prototype,r),i&&Xr(e,i),t}()}var Qr,ti=!1;function ei(t,e){var r=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,jt().nextTick(oi,this,t)):jt().nextTick(oi,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!e&&t?r._writableState?r._writableState.errorEmitted?jt().nextTick(ii,r):(r._writableState.errorEmitted=!0,jt().nextTick(ri,r,t)):jt().nextTick(ri,r,t):e?(jt().nextTick(ii,r),e(t)):jt().nextTick(ii,r)})),this)}function ri(t,e){oi(t,e),ii(t)}function ii(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function ni(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function oi(t,e){t.emit("error",e)}function si(t,e){var r=t._readableState,i=t._writableState;r&&r.autoDestroy||i&&i.autoDestroy?t.destroy(e):t.emit("error",e)}function ai(){return ti||(ti=!0,Qr={},jt(),Qr={destroy:ei,undestroy:ni,errorOrDestroy:si}),Qr}var hi,ui,fi,li=!1;function di(t,e,r){r||(r=Error);var i=function(t){var r,i;function n(r,i,n){return t.call(this,function(t,r,i){return"string"==typeof e?e:e(t,r,i)}(r,i,n))||this}return i=t,(r=n).prototype=Object.create(i.prototype),r.prototype.constructor=r,r.__proto__=i,n}(r);i.prototype.name=r.name,i.prototype.code=t,ui[t]=i}function ci(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}function pi(){return li||(li=!0,hi={},ui={},di("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),di("ERR_INVALID_ARG_TYPE",(function(t,e,r){var i,n,o,s;if("string"==typeof e&&(n="not ",e.substr(!o||o<0?0:+o,n.length)===n)?(i="must not be",e=e.replace(/^not /,"")):i="must be",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}(t," argument"))s="The ".concat(t," ").concat(i," ").concat(ci(e,"type"));else{var a=function(t,e,r){return"number"!=typeof r&&(r=0),!(r+e.length>t.length)&&-1!==t.indexOf(e,r)}(t,".")?"property":"argument";s='The "'.concat(t,'" ').concat(a," ").concat(i," ").concat(ci(e,"type"))}return s+". Received type ".concat(typeof r)}),TypeError),di("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),di("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),di("ERR_STREAM_PREMATURE_CLOSE","Premature close"),di("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),di("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),di("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),di("ERR_STREAM_WRITE_AFTER_END","write after end"),di("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),di("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),di("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),fi=ui,hi.codes=fi),hi}var mi,gi,vi=!1;function bi(t,e,r,i){var n=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=n){if(!isFinite(n)||Math.floor(n)!==n||n<0)throw new gi(i?r:"highWaterMark",n);return Math.floor(n)}return t.objectMode?16:16384}function yi(){return vi||(vi=!0,mi={},gi=pi().codes.ERR_INVALID_OPT_VALUE,mi={getHighWaterMark:bi}),mi}var wi,Mi=!1;function _i(t,e){if(Ai("noDeprecation"))return t;var r=!1;return function(){if(!r){if(Ai("throwDeprecation"))throw new Error(e);Ai("traceDeprecation")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}function Ai(e){try{if(!t.localStorage)return!1}catch(t){return!1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}function Ei(){return Mi||(Mi=!0,wi={},wi=_i),wi}var Si,ki,Bi,Ri,Ti,xi,Ii,Ci,Pi,Di,Li,Oi,ji,Ui,Ni,zi,qi,Fi,Zi=!1;function Hi(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var i=t.entry;t.entry=null;for(;i;){var n=i.callback;e.pendingcb--,n(r),i=i.next}e.corkedRequestsFree.next=t}(e,t)}}function Ki(){}function Wi(t,e,r){ki=ki||pn(),t=t||{},"boolean"!=typeof r&&(r=e instanceof ki),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=Ii(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=!1===t.decodeStrings;this.decodeStrings=!i,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,i=r.sync,n=r.writecb;if("function"!=typeof n)throw new Li;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,i,n){--e.pendingcb,r?(jt().nextTick(n,i),jt().nextTick(tn,t,e),t._writableState.errorEmitted=!0,qi(t,i)):(n(i),t._writableState.errorEmitted=!0,qi(t,i),tn(t,e))}(t,r,i,e,n);else{var o=Ji(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||Xi(t,r),i?jt().nextTick($i,t,r,o,n):$i(t,r,o,n)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new Hi(this)}function Gi(t){var e=this instanceof(ki=ki||pn());if(!e&&!Fi.call(Gi,this))return new Gi(t);this._writableState=new Wi(t,this,e),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),Ri.call(this)}function Yi(t,e,r,i,n,o){if(!r){var s=function(t,e,r){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=Ti.from(e,r)),e}(e,i,n);i!==s&&(r=!0,n="buffer",i=s)}var a=e.objectMode?1:i.length;e.length+=a;var h=e.length<e.highWaterMark;if(h||(e.needDrain=!0),e.writing||e.corked){var u=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:r,callback:o,next:null},u?u.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else Vi(t,e,!1,a,i,n,o);return h}function Vi(t,e,r,i,n,o,s){e.writelen=i,e.writecb=s,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new ji("write")):r?t._writev(n,e.onwrite):t._write(n,o,e.onwrite),e.sync=!1}function $i(t,e,r,i){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,i(),tn(t,e)}function Xi(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var i=e.bufferedRequestCount,n=new Array(i),o=e.corkedRequestsFree;o.entry=r;for(var s=0,a=!0;r;)n[s]=r,r.isBuf||(a=!1),r=r.next,s+=1;n.allBuffers=a,Vi(t,e,!0,e.length,n,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new Hi(e),e.bufferedRequestCount=0}else{for(;r;){var h=r.chunk,u=r.encoding,f=r.callback;if(Vi(t,e,!1,e.objectMode?1:h.length,h,u,f),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function Ji(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function Qi(t,e){t._final((function(r){e.pendingcb--,r&&qi(t,r),e.prefinished=!0,t.emit("prefinish"),tn(t,e)}))}function tn(t,e){var r=Ji(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||("function"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit("prefinish")):(e.pendingcb++,e.finalCalled=!0,jt().nextTick(Qi,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"),e.autoDestroy))){var i=t._readableState;(!i||i.autoDestroy&&i.endEmitted)&&t.destroy()}return r}function en(){Si={},jt(),Si=Gi,Gi.WritableState=Wi,Bi={deprecate:Ei()},Ri=Zr(),Ti=Ye().Buffer,xi=t.Uint8Array||function(){},ai(),yi(),Ii=yi().getHighWaterMark,Ci=pi().codes,Pi=Ci.ERR_INVALID_ARG_TYPE,Di=Ci.ERR_METHOD_NOT_IMPLEMENTED,Li=Ci.ERR_MULTIPLE_CALLBACK,Oi=Ci.ERR_STREAM_CANNOT_PIPE,ji=Ci.ERR_STREAM_DESTROYED,Ui=Ci.ERR_STREAM_NULL_VALUES,Ni=Ci.ERR_STREAM_WRITE_AFTER_END,zi=Ci.ERR_UNKNOWN_ENCODING,qi=ai().errorOrDestroy,Ar()(Gi,Ri),Wi.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(Wi.prototype,"buffer",{get:Bi.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(Fi=Function.prototype[Symbol.hasInstance],Object.defineProperty(Gi,Symbol.hasInstance,{value:function(t){return!!Fi.call(this,t)||this===Gi&&(t&&t._writableState instanceof Wi)}})):Fi=function(t){return t instanceof this},Gi.prototype.pipe=function(){qi(this,new Oi)},Gi.prototype.write=function(t,e,r){var i,n=this._writableState,o=!1,s=!n.objectMode&&(i=t,Ti.isBuffer(i)||i instanceof xi);return s&&!Ti.isBuffer(t)&&(t=function(t){return Ti.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=n.defaultEncoding),"function"!=typeof r&&(r=Ki),n.ending?function(t,e){var r=new Ni;qi(t,r),jt().nextTick(e,r)}(this,r):(s||function(t,e,r,i){var n;return null===r?n=new Ui:"string"==typeof r||e.objectMode||(n=new Pi("chunk",["string","Buffer"],r)),!n||(qi(t,n),jt().nextTick(i,n),!1)}(this,n,t,r))&&(n.pendingcb++,o=Yi(this,n,s,t,e,r)),o},Gi.prototype.cork=function(){this._writableState.corked++},Gi.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.bufferProcessing||!t.bufferedRequest||Xi(this,t))},Gi.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new zi(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(Gi.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(Gi.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Gi.prototype._write=function(t,e,r){r(new Di("_write()"))},Gi.prototype._writev=null,Gi.prototype.end=function(t,e,r){var i=this._writableState;return"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||function(t,e,r){e.ending=!0,tn(t,e),r&&(e.finished?jt().nextTick(r):t.once("finish",r)),e.ended=!0,t.writable=!1}(this,i,r),this},Object.defineProperty(Gi.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(Gi.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),Gi.prototype.destroy=ai().destroy,Gi.prototype._undestroy=ai().undestroy,Gi.prototype._destroy=function(t,e){e(t)}}function rn(){return Zi||(Zi=!0,en()),Si}var nn,on,sn,an,hn,un,fn=!1;function ln(t){if(!(this instanceof ln))return new ln(t);sn.call(this,t),rn().call(this,t),this.allowHalfOpen=!0,t&&(!1===t.readable&&(this.readable=!1),!1===t.writable&&(this.writable=!1),!1===t.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",dn)))}function dn(){this._writableState.ended||jt().nextTick(cn,this)}function cn(t){t.end()}function pn(){return fn||(fn=!0,function(){for(nn={},jt(),on=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e},nn=ln,sn=Wo(),rn(),Ar()(ln,sn),an=on(rn().prototype),hn=0;hn<an.length;hn++)un=an[hn],ln.prototype[un]||(ln.prototype[un]=rn().prototype[un]);Object.defineProperty(ln.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(ln.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(ln.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(ln.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}})}()),nn}var mn,gn,vn,bn,yn=!1;function wn(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(gn.isEncoding===vn||!vn(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=Sn,this.end=kn,e=4;break;case"utf8":this.fillLast=_n,e=4;break;case"base64":this.text=Bn,this.end=Rn,e=3;break;default:return this.write=Tn,void(this.end=xn)}this.lastNeed=0,this.lastTotal=0,this.lastChar=gn.allocUnsafe(e)}function Mn(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function _n(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function An(t,e){var r=function(t,e,r){var i=e.length-1;if(i<r)return 0;var n=Mn(e[i]);return n>=0?(n>0&&(t.lastNeed=n-1),n):--i<r||-2===n?0:(n=Mn(e[i]))>=0?(n>0&&(t.lastNeed=n-2),n):--i<r||-2===n?0:(n=Mn(e[i]))>=0?(n>0&&(2===n?n=0:t.lastNeed=n-3),n):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)}function En(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"�":e}function Sn(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function kn(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function Bn(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function Rn(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function Tn(t){return t.toString(this.encoding)}function xn(t){return t&&t.length?this.write(t):""}function In(){return yn||(yn=!0,mn={},gn=lr().Buffer,vn=gn.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},bn=wn,mn.StringDecoder=bn,wn.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||""},wn.prototype.end=En,wn.prototype.text=An,wn.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}),mn}var Cn,Pn,Dn=!1;function Ln(){}function On(t,e,r){if("function"==typeof e)return On(t,null,e);e||(e={}),r=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,i=new Array(r),n=0;n<r;n++)i[n]=arguments[n];t.apply(this,i)}}}(r||Ln);var i=e.readable||!1!==e.readable&&t.readable,n=e.writable||!1!==e.writable&&t.writable,o=function(){t.writable||a()},s=t._writableState&&t._writableState.finished,a=function(){n=!1,s=!0,i||r.call(t)},h=t._readableState&&t._readableState.endEmitted,u=function(){i=!1,h=!0,n||r.call(t)},f=function(e){r.call(t,e)},l=function(){var e;return i&&!h?(t._readableState&&t._readableState.ended||(e=new Pn),r.call(t,e)):n&&!s?(t._writableState&&t._writableState.ended||(e=new Pn),r.call(t,e)):void 0},d=function(){t.req.on("finish",a)};return!function(t){return t.setHeader&&"function"==typeof t.abort}(t)?n&&!t._writableState&&(t.on("end",o),t.on("close",o)):(t.on("complete",a),t.on("abort",l),t.req?d():t.on("request",d)),t.on("end",u),t.on("finish",a),!1!==e.error&&t.on("error",f),t.on("close",l),function(){t.removeListener("complete",a),t.removeListener("abort",l),t.removeListener("request",d),t.req&&t.req.removeListener("finish",a),t.removeListener("end",o),t.removeListener("close",o),t.removeListener("finish",a),t.removeListener("end",u),t.removeListener("error",f),t.removeListener("close",l)}}function jn(){return Dn||(Dn=!0,Cn={},Pn=pi().codes.ERR_STREAM_PREMATURE_CLOSE,Cn=On),Cn}var Un,Nn,zn,qn,Fn,Zn,Hn,Kn,Wn,Gn,Yn,Vn,$n=!1;function Xn(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Jn(t,e){return{value:t,done:e}}function Qn(t){var e=t[qn];if(null!==e){var r=t[Gn].read();null!==r&&(t[Kn]=null,t[qn]=null,t[Fn]=null,e(Jn(r,!1)))}}function to(t){jt().nextTick(Qn,t)}function eo(){Un={},jt(),zn=jn(),qn=Symbol("lastResolve"),Fn=Symbol("lastReject"),Zn=Symbol("error"),Hn=Symbol("ended"),Kn=Symbol("lastPromise"),Wn=Symbol("handlePromise"),Gn=Symbol("stream"),Yn=Object.getPrototypeOf((function(){})),Vn=Object.setPrototypeOf((Xn(Nn={get stream(){return this[Gn]},next:function(){var t=this,e=this[Zn];if(null!==e)return Promise.reject(e);if(this[Hn])return Promise.resolve(Jn(void 0,!0));if(this[Gn].destroyed)return new Promise((function(e,r){jt().nextTick((function(){t[Zn]?r(t[Zn]):e(Jn(void 0,!0))}))}));var r,i=this[Kn];if(i)r=new Promise(function(t,e){return function(r,i){t.then((function(){e[Hn]?r(Jn(void 0,!0)):e[Wn](r,i)}),i)}}(i,this));else{var n=this[Gn].read();if(null!==n)return Promise.resolve(Jn(n,!1));r=new Promise(this[Wn])}return this[Kn]=r,r}},Symbol.asyncIterator,(function(){return this})),Xn(Nn,"return",(function(){var t=this;return new Promise((function(e,r){t[Gn].destroy(null,(function(t){t?r(t):e(Jn(void 0,!0))}))}))})),Nn),Yn),Un=function(t){var e,r=Object.create(Vn,(Xn(e={},Gn,{value:t,writable:!0}),Xn(e,qn,{value:null,writable:!0}),Xn(e,Fn,{value:null,writable:!0}),Xn(e,Zn,{value:null,writable:!0}),Xn(e,Hn,{value:t._readableState.endEmitted,writable:!0}),Xn(e,Wn,{value:function(t,e){var i=r[Gn].read();i?(r[Kn]=null,r[qn]=null,r[Fn]=null,t(Jn(i,!1))):(r[qn]=t,r[Fn]=e)},writable:!0}),e));return r[Kn]=null,zn(t,(function(t){if(t&&"ERR_STREAM_PREMATURE_CLOSE"!==t.code){var e=r[Fn];return null!==e&&(r[Kn]=null,r[qn]=null,r[Fn]=null,e(t)),void(r[Zn]=t)}var i=r[qn];null!==i&&(r[Kn]=null,r[qn]=null,r[Fn]=null,i(Jn(void 0,!0))),r[Hn]=!0})),t.on("readable",to.bind(null,r)),r}}var ro,io=!1;function no(){return io||(io=!0,ro={},ro=function(){throw new Error("Readable.from is not available in the browser")}),ro}var oo,so,ao,ho,uo,fo,lo,co,po,mo,go,vo,bo,yo,wo,Mo,_o,Ao,Eo,So,ko,Bo=!1;function Ro(t,e,r){so=so||pn(),t=t||{},"boolean"!=typeof r&&(r=e instanceof so),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=mo(this,t,"readableHighWaterMark",r),this.buffer=new po,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(Mo||(Mo=In().StringDecoder),this.decoder=new Mo(t.encoding),this.encoding=t.encoding)}function To(t){if(so=so||pn(),!(this instanceof To))return new To(t);var e=this instanceof so;this._readableState=new Ro(t,this,e),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),ho.call(this)}function xo(t,e,r,i,n){co("readableAddChunk",e);var o,s=t._readableState;if(null===e)s.reading=!1,function(t,e){if(co("onEofChunk"),e.ended)return;if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?Po(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Do(t)))}(t,s);else if(n||(o=function(t,e){var r;i=e,uo.isBuffer(i)||i instanceof fo||"string"==typeof e||void 0===e||t.objectMode||(r=new vo("chunk",["string","Buffer","Uint8Array"],e));var i;return r}(s,e)),o)Eo(t,o);else if(s.objectMode||e&&e.length>0)if("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===uo.prototype||(e=function(t){return uo.from(t)}(e)),i)s.endEmitted?Eo(t,new wo):Io(t,s,e,!0);else if(s.ended)Eo(t,new bo);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?Io(t,s,e,!1):Lo(t,s)):Io(t,s,e,!1)}else i||(s.reading=!1,Lo(t,s));return!s.ended&&(s.length<s.highWaterMark||0===s.length)}function Io(t,e,r,i){e.flowing&&0===e.length&&!e.sync?(e.awaitDrain=0,t.emit("data",r)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&Po(t)),Lo(t,e)}function Co(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=function(t){return t>=ko?t=ko:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function Po(t){var e=t._readableState;co("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(co("emitReadable",e.flowing),e.emittedReadable=!0,jt().nextTick(Do,t))}function Do(t){var e=t._readableState;co("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zo(t)}function Lo(t,e){e.readingMore||(e.readingMore=!0,jt().nextTick(Oo,t,e))}function Oo(t,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&0===e.length);){var r=e.length;if(co("maybeReadMore read 0"),t.read(0),r===e.length)break}e.readingMore=!1}function jo(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function Uo(t){co("readable nexttick read 0"),t.read(0)}function No(t,e){co("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),zo(t),e.flowing&&!e.reading&&t.read(0)}function zo(t){var e=t._readableState;for(co("flow",e.flowing);e.flowing&&null!==t.read(););}function qo(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function Fo(t){var e=t._readableState;co("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,jt().nextTick(Zo,e,t))}function Zo(t,e){if(co("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function Ho(t,e){for(var r=0,i=t.length;r<i;r++)if(t[r]===e)return r;return-1}function Ko(){oo={},jt(),oo=To,To.ReadableState=Ro,zr().EventEmitter,ao=function(t,e){return t.listeners(e).length},ho=Zr(),uo=Ye().Buffer,fo=t.Uint8Array||function(){},lo=ir(),co=lo&&lo.debuglog?lo.debuglog("stream"):function(){},Yr||(Yr=!0,Jr()),po=Hr,ai(),yi(),mo=yi().getHighWaterMark,go=pi().codes,vo=go.ERR_INVALID_ARG_TYPE,bo=go.ERR_STREAM_PUSH_AFTER_EOF,yo=go.ERR_METHOD_NOT_IMPLEMENTED,wo=go.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Ar()(To,ho),Eo=ai().errorOrDestroy,So=["error","close","destroy","pause","resume"],Object.defineProperty(To.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),To.prototype.destroy=ai().destroy,To.prototype._undestroy=ai().undestroy,To.prototype._destroy=function(t,e){e(t)},To.prototype.push=function(t,e){var r,i=this._readableState;return i.objectMode?r=!0:"string"==typeof t&&((e=e||i.defaultEncoding)!==i.encoding&&(t=uo.from(t,e),e=""),r=!0),xo(this,t,e,!1,r)},To.prototype.unshift=function(t){return xo(this,t,null,!0,!1)},To.prototype.isPaused=function(){return!1===this._readableState.flowing},To.prototype.setEncoding=function(t){Mo||(Mo=In().StringDecoder);var e=new Mo(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var r=this._readableState.buffer.head,i="";null!==r;)i+=e.write(r.data),r=r.next;return this._readableState.buffer.clear(),""!==i&&this._readableState.buffer.push(i),this._readableState.length=i.length,this},ko=1073741824,To.prototype.read=function(t){co("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&((0!==e.highWaterMark?e.length>=e.highWaterMark:e.length>0)||e.ended))return co("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?Fo(this):Po(this),null;if(0===(t=Co(t,e))&&e.ended)return 0===e.length&&Fo(this),null;var i,n=e.needReadable;return co("need readable",n),(0===e.length||e.length-t<e.highWaterMark)&&co("length less than watermark",n=!0),e.ended||e.reading?co("reading or ended",n=!1):n&&(co("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=Co(r,e))),null===(i=t>0?qo(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Fo(this)),null!==i&&this.emit("data",i),i},To.prototype._read=function(t){Eo(this,new yo("_read()"))},To.prototype.pipe=function(t,e){var r=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=t;break;case 1:i.pipes=[i.pipes,t];break;default:i.pipes.push(t)}i.pipesCount+=1,co("pipe count=%d opts=%j",i.pipesCount,e);var n=(!e||!1!==e.end)&&t!==jt().stdout&&t!==jt().stderr?s:c;function o(e,n){co("onunpipe"),e===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,co("cleanup"),t.removeListener("close",l),t.removeListener("finish",d),t.removeListener("drain",a),t.removeListener("error",f),t.removeListener("unpipe",o),r.removeListener("end",s),r.removeListener("end",c),r.removeListener("data",u),h=!0,!i.awaitDrain||t._writableState&&!t._writableState.needDrain||a())}function s(){co("onend"),t.end()}i.endEmitted?jt().nextTick(n):r.once("end",n),t.on("unpipe",o);var a=function(t){return function(){var e=t._readableState;co("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&ao(t,"data")&&(e.flowing=!0,zo(t))}}(r);t.on("drain",a);var h=!1;function u(e){co("ondata");var n=t.write(e);co("dest.write",n),!1===n&&((1===i.pipesCount&&i.pipes===t||i.pipesCount>1&&-1!==Ho(i.pipes,t))&&!h&&(co("false write response, pause",i.awaitDrain),i.awaitDrain++),r.pause())}function f(e){co("onerror",e),c(),t.removeListener("error",f),0===ao(t,"error")&&Eo(t,e)}function l(){t.removeListener("finish",d),c()}function d(){co("onfinish"),t.removeListener("close",l),c()}function c(){co("unpipe"),r.unpipe(t)}return r.on("data",u),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",f),t.once("close",l),t.once("finish",d),t.emit("pipe",r),i.flowing||(co("pipe resume"),r.resume()),t},To.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r)),this;if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o<n;o++)i[o].emit("unpipe",this,{hasUnpiped:!1});return this}var s=Ho(e.pipes,t);return-1===s||(e.pipes.splice(s,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this,r)),this},To.prototype.on=function(t,e){var r=ho.prototype.on.call(this,t,e),i=this._readableState;return"data"===t?(i.readableListening=this.listenerCount("readable")>0,!1!==i.flowing&&this.resume()):"readable"===t&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,co("on readable",i.length,i.reading),i.length?Po(this):i.reading||jt().nextTick(Uo,this))),r},To.prototype.addListener=To.prototype.on,To.prototype.removeListener=function(t,e){var r=ho.prototype.removeListener.call(this,t,e);return"readable"===t&&jt().nextTick(jo,this),r},To.prototype.removeAllListeners=function(t){var e=ho.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||jt().nextTick(jo,this),e},To.prototype.resume=function(){var t=this._readableState;return t.flowing||(co("resume"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,jt().nextTick(No,t,e))}(this,t)),t.paused=!1,this},To.prototype.pause=function(){return co("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(co("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},To.prototype.wrap=function(t){var e=this,r=this._readableState,i=!1;for(var n in t.on("end",(function(){if(co("wrapped end"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on("data",(function(n){(co("wrapped data"),r.decoder&&(n=r.decoder.write(n)),r.objectMode&&null==n)||(r.objectMode||n&&n.length)&&(e.push(n)||(i=!0,t.pause()))})),t)void 0===this[n]&&"function"==typeof t[n]&&(this[n]=function(e){return function(){return t[e].apply(t,arguments)}}(n));for(var o=0;o<So.length;o++)t.on(So[o],this.emit.bind(this,So[o]));return this._read=function(e){co("wrapped _read",e),i&&(i=!1,t.resume())},this},"function"==typeof Symbol&&(To.prototype[Symbol.asyncIterator]=function(){return void 0===_o&&($n||($n=!0,eo()),_o=Un),_o(this)}),Object.defineProperty(To.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(To.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(To.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t)}}),To._fromList=qo,Object.defineProperty(To.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),"function"==typeof Symbol&&(To.from=function(t,e){return void 0===Ao&&(Ao=no()),Ao(To,t,e)})}function Wo(){return Bo||(Bo=!0,Ko()),oo}var Go,Yo,Vo,$o,Xo,Jo,Qo,ts=!1;function es(t,e){var r=this._transformState;r.transforming=!1;var i=r.writecb;if(null===i)return this.emit("error",new $o);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),i(t);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function rs(t){if(!(this instanceof rs))return new rs(t);Qo.call(this,t),this._transformState={afterTransform:es.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.on("prefinish",is)}function is(){var t=this;"function"!=typeof this._flush||this._readableState.destroyed?ns(this,null,null):this._flush((function(e,r){ns(t,e,r)}))}function ns(t,e,r){if(e)return t.emit("error",e);if(null!=r&&t.push(r),t._writableState.length)throw new Jo;if(t._transformState.transforming)throw new Xo;return t.push(null)}function os(){return ts||(ts=!0,Go={},Go=rs,Yo=pi().codes,Vo=Yo.ERR_METHOD_NOT_IMPLEMENTED,$o=Yo.ERR_MULTIPLE_CALLBACK,Xo=Yo.ERR_TRANSFORM_ALREADY_TRANSFORMING,Jo=Yo.ERR_TRANSFORM_WITH_LENGTH_0,Qo=pn(),Ar()(rs,Qo),rs.prototype.push=function(t,e){return this._transformState.needTransform=!1,Qo.prototype.push.call(this,t,e)},rs.prototype._transform=function(t,e,r){r(new Vo("_transform()"))},rs.prototype._write=function(t,e,r){var i=this._transformState;if(i.writecb=r,i.writechunk=t,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}},rs.prototype._read=function(t){var e=this._transformState;null===e.writechunk||e.transforming?e.needTransform=!0:(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform))},rs.prototype._destroy=function(t,e){Qo.prototype._destroy.call(this,t,(function(t){e(t)}))}),Go}var ss,as,hs=!1;function us(t){if(!(this instanceof us))return new us(t);as.call(this,t)}function fs(){return hs||(hs=!0,ss={},ss=us,as=os(),Ar()(us,as),us.prototype._transform=function(t,e,r){r(null,t)}),ss}var ls,ds,cs,ps,ms,gs=!1;function vs(t){if(t)throw t}function bs(t,e,r,i){i=function(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}(i);var n=!1;t.on("close",(function(){n=!0})),void 0===ds&&(ds=jn()),ds(t,{readable:e,writable:r},(function(t){if(t)return i(t);n=!0,i()}));var o=!1;return function(e){if(!n&&!o)return o=!0,function(t){return t.setHeader&&"function"==typeof t.abort}(t)?t.abort():"function"==typeof t.destroy?t.destroy():void i(e||new ms("pipe"))}}function ys(t){t()}function ws(t,e){return t.pipe(e)}function Ms(t){return t.length?"function"!=typeof t[t.length-1]?vs:t.pop():vs}function _s(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];var i,n=Ms(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new ps("streams");var o=e.map((function(t,r){var s=r<e.length-1;return bs(t,s,r>0,(function(t){i||(i=t),t&&o.forEach(ys),s||(o.forEach(ys),n(i))}))}));return e.reduce(ws)}function As(){return gs||(gs=!0,ls={},cs=pi().codes,ps=cs.ERR_MISSING_ARGS,ms=cs.ERR_STREAM_DESTROYED,ls=_s),ls}var Es,Ss,ks,Bs,Rs,Ts,xs,Is,Cs,Ps,Ds=!1;function Ls(){return Ds||(Ds=!0,Ss={},Es=Ss=Wo(),ks=Es,Ss.Stream=ks,Bs=Es,Ss.Readable=Bs,Rs=rn(),Ss.Writable=Rs,Ts=pn(),Ss.Duplex=Ts,xs=os(),Ss.Transform=xs,Is=fs(),Ss.PassThrough=Is,Cs=jn(),Ss.finished=Cs,Ps=As(),Ss.pipeline=Ps),Ss}var Os,js,Us,Ns=!1;function zs(t){Us.call(this),this._block=js.allocUnsafe(t),this._blockSize=t,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}function qs(){Os={},js=lr().Buffer,Us=Ls().Transform,Ar()(zs,Us),zs.prototype._transform=function(t,e,r){var i=null;try{this.update(t,e)}catch(t){i=t}r(i)},zs.prototype._flush=function(t){var e=null;try{this.push(this.digest())}catch(t){e=t}t(e)},zs.prototype.update=function(t,e){if(function(t,e){if(!js.isBuffer(t)&&"string"!=typeof t)throw new TypeError(e+" must be a string or a buffer")}(t,"Data"),this._finalized)throw new Error("Digest already called");js.isBuffer(t)||(t=js.from(t,e));for(var r=this._block,i=0;this._blockOffset+t.length-i>=this._blockSize;){for(var n=this._blockOffset;n<this._blockSize;)r[n++]=t[i++];this._update(),this._blockOffset=0}for(;i<t.length;)r[this._blockOffset++]=t[i++];for(var o=0,s=8*t.length;s>0;++o)this._length[o]+=s,(s=this._length[o]/4294967296|0)>0&&(this._length[o]-=4294967296*s);return this},zs.prototype._update=function(){throw new Error("_update is not implemented")},zs.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return e},zs.prototype._digest=function(){throw new Error("_digest is not implemented")},Os=zs}function Fs(){return Ns||(Ns=!0,qs()),Os}var Zs,Hs,Ks,Ws,Gs,Ys=!1;function Vs(){Ks.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function $s(t,e){return t<<e|t>>>32-e}function Xs(t,e,r,i,n,o,s){return $s(t+(e&r|~e&i)+n+o|0,s)+e|0}function Js(t,e,r,i,n,o,s){return $s(t+(e&i|r&~i)+n+o|0,s)+e|0}function Qs(t,e,r,i,n,o,s){return $s(t+(e^r^i)+n+o|0,s)+e|0}function ta(t,e,r,i,n,o,s){return $s(t+(r^(e|~i))+n+o|0,s)+e|0}function ea(){return Ys||(Ys=!0,Zs={},Hs=Ar(),Ks=Fs(),Ws=lr().Buffer,Gs=new Array(16),Hs(Vs,Ks),Vs.prototype._update=function(){for(var t=Gs,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var r=this._a,i=this._b,n=this._c,o=this._d;r=Xs(r,i,n,o,t[0],3614090360,7),o=Xs(o,r,i,n,t[1],3905402710,12),n=Xs(n,o,r,i,t[2],606105819,17),i=Xs(i,n,o,r,t[3],3250441966,22),r=Xs(r,i,n,o,t[4],4118548399,7),o=Xs(o,r,i,n,t[5],1200080426,12),n=Xs(n,o,r,i,t[6],2821735955,17),i=Xs(i,n,o,r,t[7],4249261313,22),r=Xs(r,i,n,o,t[8],1770035416,7),o=Xs(o,r,i,n,t[9],2336552879,12),n=Xs(n,o,r,i,t[10],4294925233,17),i=Xs(i,n,o,r,t[11],2304563134,22),r=Xs(r,i,n,o,t[12],1804603682,7),o=Xs(o,r,i,n,t[13],4254626195,12),n=Xs(n,o,r,i,t[14],2792965006,17),r=Js(r,i=Xs(i,n,o,r,t[15],1236535329,22),n,o,t[1],4129170786,5),o=Js(o,r,i,n,t[6],3225465664,9),n=Js(n,o,r,i,t[11],643717713,14),i=Js(i,n,o,r,t[0],3921069994,20),r=Js(r,i,n,o,t[5],3593408605,5),o=Js(o,r,i,n,t[10],38016083,9),n=Js(n,o,r,i,t[15],3634488961,14),i=Js(i,n,o,r,t[4],3889429448,20),r=Js(r,i,n,o,t[9],568446438,5),o=Js(o,r,i,n,t[14],3275163606,9),n=Js(n,o,r,i,t[3],4107603335,14),i=Js(i,n,o,r,t[8],1163531501,20),r=Js(r,i,n,o,t[13],2850285829,5),o=Js(o,r,i,n,t[2],4243563512,9),n=Js(n,o,r,i,t[7],1735328473,14),r=Qs(r,i=Js(i,n,o,r,t[12],2368359562,20),n,o,t[5],4294588738,4),o=Qs(o,r,i,n,t[8],2272392833,11),n=Qs(n,o,r,i,t[11],1839030562,16),i=Qs(i,n,o,r,t[14],4259657740,23),r=Qs(r,i,n,o,t[1],2763975236,4),o=Qs(o,r,i,n,t[4],1272893353,11),n=Qs(n,o,r,i,t[7],4139469664,16),i=Qs(i,n,o,r,t[10],3200236656,23),r=Qs(r,i,n,o,t[13],681279174,4),o=Qs(o,r,i,n,t[0],3936430074,11),n=Qs(n,o,r,i,t[3],3572445317,16),i=Qs(i,n,o,r,t[6],76029189,23),r=Qs(r,i,n,o,t[9],3654602809,4),o=Qs(o,r,i,n,t[12],3873151461,11),n=Qs(n,o,r,i,t[15],530742520,16),r=ta(r,i=Qs(i,n,o,r,t[2],3299628645,23),n,o,t[0],4096336452,6),o=ta(o,r,i,n,t[7],1126891415,10),n=ta(n,o,r,i,t[14],2878612391,15),i=ta(i,n,o,r,t[5],4237533241,21),r=ta(r,i,n,o,t[12],1700485571,6),o=ta(o,r,i,n,t[3],2399980690,10),n=ta(n,o,r,i,t[10],4293915773,15),i=ta(i,n,o,r,t[1],2240044497,21),r=ta(r,i,n,o,t[8],1873313359,6),o=ta(o,r,i,n,t[15],4264355552,10),n=ta(n,o,r,i,t[6],2734768916,15),i=ta(i,n,o,r,t[13],1309151649,21),r=ta(r,i,n,o,t[4],4149444226,6),o=ta(o,r,i,n,t[11],3174756917,10),n=ta(n,o,r,i,t[2],718787259,15),i=ta(i,n,o,r,t[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+i|0,this._c=this._c+n|0,this._d=this._d+o|0},Vs.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=Ws.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},Zs=Vs),Zs}var ra,ia,na,oa,sa,aa,ha,ua,fa,la,da,ca=!1;function pa(){oa.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function ma(t,e){return t<<e|t>>>32-e}function ga(t,e,r,i,n,o,s,a){return ma(t+(e^r^i)+o+s|0,a)+n|0}function va(t,e,r,i,n,o,s,a){return ma(t+(e&r|~e&i)+o+s|0,a)+n|0}function ba(t,e,r,i,n,o,s,a){return ma(t+((e|~r)^i)+o+s|0,a)+n|0}function ya(t,e,r,i,n,o,s,a){return ma(t+(e&i|r&~i)+o+s|0,a)+n|0}function wa(t,e,r,i,n,o,s,a){return ma(t+(e^(r|~i))+o+s|0,a)+n|0}function Ma(){return ca||(ca=!0,ra={},ia=Ye().Buffer,na=Ar(),oa=Fs(),sa=new Array(16),aa=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],ha=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],ua=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],fa=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],la=[0,1518500249,1859775393,2400959708,2840853838],da=[1352829926,1548603684,1836072691,2053994217,0],na(pa,oa),pa.prototype._update=function(){for(var t=sa,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var r=0|this._a,i=0|this._b,n=0|this._c,o=0|this._d,s=0|this._e,a=0|this._a,h=0|this._b,u=0|this._c,f=0|this._d,l=0|this._e,d=0;d<80;d+=1){var c,p;d<16?(c=ga(r,i,n,o,s,t[aa[d]],la[0],ua[d]),p=wa(a,h,u,f,l,t[ha[d]],da[0],fa[d])):d<32?(c=va(r,i,n,o,s,t[aa[d]],la[1],ua[d]),p=ya(a,h,u,f,l,t[ha[d]],da[1],fa[d])):d<48?(c=ba(r,i,n,o,s,t[aa[d]],la[2],ua[d]),p=ba(a,h,u,f,l,t[ha[d]],da[2],fa[d])):d<64?(c=ya(r,i,n,o,s,t[aa[d]],la[3],ua[d]),p=va(a,h,u,f,l,t[ha[d]],da[3],fa[d])):(c=wa(r,i,n,o,s,t[aa[d]],la[4],ua[d]),p=ga(a,h,u,f,l,t[ha[d]],da[4],fa[d])),r=s,s=o,o=ma(n,10),n=i,i=c,a=l,l=f,f=ma(u,10),u=h,h=p}var m=this._b+n+f|0;this._b=this._c+o+l|0,this._c=this._d+s+a|0,this._d=this._e+r+h|0,this._e=this._a+i+u|0,this._a=m},pa.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=ia.alloc?ia.alloc(20):new ia(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},ra=pa),ra}var _a,Aa,Ea=!1;function Sa(t,e){this._block=Aa.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}function ka(){return Ea||(Ea=!0,_a={},Aa=lr().Buffer,Sa.prototype.update=function(t,e){"string"==typeof t&&(e=e||"utf8",t=Aa.from(t,e));for(var r=this._block,i=this._blockSize,n=t.length,o=this._len,s=0;s<n;){for(var a=o%i,h=Math.min(n-s,i-a),u=0;u<h;u++)r[a+u]=t[s+u];s+=h,(o+=h)%i==0&&this._update(r)}return this._len+=n,this},Sa.prototype.digest=function(t){var e=this._len%this._blockSize;this._block[e]=128,this._block.fill(0,e+1),e>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var i=(4294967295&r)>>>0,n=(r-i)/4294967296;this._block.writeUInt32BE(n,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},Sa.prototype._update=function(){throw new Error("_update must be implemented by subclass")},_a=Sa),_a}var Ba,Ra,Ta,xa,Ia,Ca,Pa=!1;function Da(){this.init(),this._w=Ca,Ta.call(this,64,56)}function La(t){return t<<30|t>>>2}function Oa(t,e,r,i){return 0===t?e&r|~e&i:2===t?e&r|e&i|r&i:e^r^i}function ja(){return Pa||(Pa=!0,Ba={},Ra=Ar(),Ta=ka(),xa=lr().Buffer,Ia=[1518500249,1859775393,-1894007588,-899497514],Ca=new Array(80),Ra(Da,Ta),Da.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Da.prototype._update=function(t){for(var e,r=this._w,i=0|this._a,n=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,h=0;h<16;++h)r[h]=t.readInt32BE(4*h);for(;h<80;++h)r[h]=r[h-3]^r[h-8]^r[h-14]^r[h-16];for(var u=0;u<80;++u){var f=~~(u/20),l=0|((e=i)<<5|e>>>27)+Oa(f,n,o,s)+a+r[u]+Ia[f];a=s,s=o,o=La(n),n=i,i=l}this._a=i+this._a|0,this._b=n+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0},Da.prototype._hash=function(){var t=xa.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},Ba=Da),Ba}var Ua,Na,za,qa,Fa,Za,Ha=!1;function Ka(){this.init(),this._w=Za,za.call(this,64,56)}function Wa(t){return t<<5|t>>>27}function Ga(t){return t<<30|t>>>2}function Ya(t,e,r,i){return 0===t?e&r|~e&i:2===t?e&r|e&i|r&i:e^r^i}function Va(){return Ha||(Ha=!0,Ua={},Na=Ar(),za=ka(),qa=lr().Buffer,Fa=[1518500249,1859775393,-1894007588,-899497514],Za=new Array(80),Na(Ka,za),Ka.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Ka.prototype._update=function(t){for(var e,r=this._w,i=0|this._a,n=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,h=0;h<16;++h)r[h]=t.readInt32BE(4*h);for(;h<80;++h)r[h]=(e=r[h-3]^r[h-8]^r[h-14]^r[h-16])<<1|e>>>31;for(var u=0;u<80;++u){var f=~~(u/20),l=Wa(i)+Ya(f,n,o,s)+a+r[u]+Fa[f]|0;a=s,s=o,o=Ga(n),n=i,i=l}this._a=i+this._a|0,this._b=n+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0},Ka.prototype._hash=function(){var t=qa.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},Ua=Ka),Ua}var $a,Xa,Ja,Qa,th,eh,rh=!1;function ih(){this.init(),this._w=eh,Ja.call(this,64,56)}function nh(t,e,r){return r^t&(e^r)}function oh(t,e,r){return t&e|r&(t|e)}function sh(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function ah(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function hh(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}function uh(){return rh||(rh=!0,$a={},Xa=Ar(),Ja=ka(),Qa=lr().Buffer,th=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],eh=new Array(64),Xa(ih,Ja),ih.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},ih.prototype._update=function(t){for(var e,r=this._w,i=0|this._a,n=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,h=0|this._f,u=0|this._g,f=0|this._h,l=0;l<16;++l)r[l]=t.readInt32BE(4*l);for(;l<64;++l)r[l]=0|(((e=r[l-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+r[l-7]+hh(r[l-15])+r[l-16];for(var d=0;d<64;++d){var c=f+ah(a)+nh(a,h,u)+th[d]+r[d]|0,p=sh(i)+oh(i,n,o)|0;f=u,u=h,h=a,a=s+c|0,s=o,o=n,n=i,i=c+p|0}this._a=i+this._a|0,this._b=n+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0,this._f=h+this._f|0,this._g=u+this._g|0,this._h=f+this._h|0},ih.prototype._hash=function(){var t=Qa.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},$a=ih),$a}var fh,lh,dh,ch,ph,mh=!1;function gh(){this.init(),this._w=ph,ka().call(this,64,56)}function vh(){return mh||(mh=!0,fh={},lh=Ar(),dh=uh(),ka(),ch=lr().Buffer,ph=new Array(64),lh(gh,dh),gh.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},gh.prototype._hash=function(){var t=ch.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},fh=gh),fh}var bh,yh,wh,Mh,_h,Ah,Eh=!1;function Sh(){this.init(),this._w=Ah,wh.call(this,128,112)}function kh(t,e,r){return r^t&(e^r)}function Bh(t,e,r){return t&e|r&(t|e)}function Rh(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function Th(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function xh(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function Ih(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function Ch(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function Ph(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function Dh(t,e){return t>>>0<e>>>0?1:0}function Lh(){return Eh||(Eh=!0,bh={},yh=Ar(),wh=ka(),Mh=lr().Buffer,_h=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Ah=new Array(160),yh(Sh,wh),Sh.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},Sh.prototype._update=function(t){for(var e=this._w,r=0|this._ah,i=0|this._bh,n=0|this._ch,o=0|this._dh,s=0|this._eh,a=0|this._fh,h=0|this._gh,u=0|this._hh,f=0|this._al,l=0|this._bl,d=0|this._cl,c=0|this._dl,p=0|this._el,m=0|this._fl,g=0|this._gl,v=0|this._hl,b=0;b<32;b+=2)e[b]=t.readInt32BE(4*b),e[b+1]=t.readInt32BE(4*b+4);for(;b<160;b+=2){var y=e[b-30],w=e[b-30+1],M=xh(y,w),_=Ih(w,y),A=Ch(y=e[b-4],w=e[b-4+1]),E=Ph(w,y),S=e[b-14],k=e[b-14+1],B=e[b-32],R=e[b-32+1],T=_+k|0,x=M+S+Dh(T,_)|0;x=(x=x+A+Dh(T=T+E|0,E)|0)+B+Dh(T=T+R|0,R)|0,e[b]=x,e[b+1]=T}for(var I=0;I<160;I+=2){x=e[I],T=e[I+1];var C=Bh(r,i,n),P=Bh(f,l,d),D=Rh(r,f),L=Rh(f,r),O=Th(s,p),j=Th(p,s),U=_h[I],N=_h[I+1],z=kh(s,a,h),q=kh(p,m,g),F=v+j|0,Z=u+O+Dh(F,v)|0;Z=(Z=(Z=Z+z+Dh(F=F+q|0,q)|0)+U+Dh(F=F+N|0,N)|0)+x+Dh(F=F+T|0,T)|0;var H=L+P|0,K=D+C+Dh(H,L)|0;u=h,v=g,h=a,g=m,a=s,m=p,s=o+Z+Dh(p=c+F|0,c)|0,o=n,c=d,n=i,d=l,i=r,l=f,r=Z+K+Dh(f=F+H|0,F)|0}this._al=this._al+f|0,this._bl=this._bl+l|0,this._cl=this._cl+d|0,this._dl=this._dl+c|0,this._el=this._el+p|0,this._fl=this._fl+m|0,this._gl=this._gl+g|0,this._hl=this._hl+v|0,this._ah=this._ah+r+Dh(this._al,f)|0,this._bh=this._bh+i+Dh(this._bl,l)|0,this._ch=this._ch+n+Dh(this._cl,d)|0,this._dh=this._dh+o+Dh(this._dl,c)|0,this._eh=this._eh+s+Dh(this._el,p)|0,this._fh=this._fh+a+Dh(this._fl,m)|0,this._gh=this._gh+h+Dh(this._gl,g)|0,this._hh=this._hh+u+Dh(this._hl,v)|0},Sh.prototype._hash=function(){var t=Mh.allocUnsafe(64);function e(e,r,i){t.writeInt32BE(e,i),t.writeInt32BE(r,i+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},bh=Sh),bh}var Oh,jh,Uh,Nh,zh,qh=!1;function Fh(){this.init(),this._w=zh,ka().call(this,128,112)}function Zh(){return qh||(qh=!0,Oh={},jh=Ar(),Uh=Lh(),ka(),Nh=lr().Buffer,zh=new Array(160),jh(Fh,Uh),Fh.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},Fh.prototype._hash=function(){var t=Nh.allocUnsafe(48);function e(e,r,i){t.writeInt32BE(e,i),t.writeInt32BE(r,i+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},Oh=Fh),Oh}var Hh,Kh,Wh=!1;function Gh(){return Wh||(Wh=!0,Hh={},(Kh=Hh=function(t){t=t.toLowerCase();var e=Kh[t];if(!e)throw new Error(t+" is not supported (we accept pull requests)");return new e}).sha=ja(),Kh.sha1=Va(),Kh.sha224=vh(),Kh.sha256=uh(),Kh.sha384=Zh(),Kh.sha512=Lh()),Hh}var Yh,Vh,$h,Xh,Jh=!1;function Qh(t){$h.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}function tu(){return Jh||(Jh=!0,Yh={},Vh=lr().Buffer,$h=Ls().Transform,Xh=In().StringDecoder,Ar()(Qh,$h),Qh.prototype.update=function(t,e,r){"string"==typeof t&&(t=Vh.from(t,e));var i=this._update(t);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},Qh.prototype.setAutoPadding=function(){},Qh.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},Qh.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},Qh.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},Qh.prototype._transform=function(t,e,r){var i;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){i=t}finally{r(i)}},Qh.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},Qh.prototype._finalOrDigest=function(t){var e=this.__final()||Vh.alloc(0);return t&&(e=this._toString(e,t,!0)),e},Qh.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new Xh(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var i=this._decoder.write(t);return r&&(i+=this._decoder.end()),i},Yh=Qh),Yh}var eu,ru,iu,nu,ou,su,au=!1;function hu(t){su.call(this,"digest"),this._hash=t}function uu(){return au||(au=!0,eu={},ru=Ar(),iu=ea(),nu=Ma(),ou=Gh(),su=tu(),ru(hu,su),hu.prototype._update=function(t){this._hash.update(t)},hu.prototype._final=function(){return this._hash.digest()},eu=function(t){return"md5"===(t=t.toLowerCase())?new iu:"rmd160"===t||"ripemd160"===t?new nu:new hu(ou(t))}),eu}var fu,lu,du,cu,pu,mu,gu=!1;function vu(t,e){cu.call(this,"digest"),"string"==typeof e&&(e=du.from(e)),this._alg=t,this._key=e,e.length>mu?e=t(e):e.length<mu&&(e=du.concat([e,pu],mu));for(var r=this._ipad=du.allocUnsafe(mu),i=this._opad=du.allocUnsafe(mu),n=0;n<mu;n++)r[n]=54^e[n],i[n]=92^e[n];this._hash=[r]}function bu(){return gu||(gu=!0,fu={},lu=Ar(),du=lr().Buffer,cu=tu(),pu=du.alloc(128),mu=64,lu(vu,cu),vu.prototype._update=function(t){this._hash.push(t)},vu.prototype._final=function(){var t=this._alg(du.concat(this._hash));return this._alg(du.concat([this._opad,t]))},fu=vu),fu}var yu,wu,Mu=!1;function _u(){return Mu||(Mu=!0,yu={},wu=ea(),yu=function(t){return(new wu).update(t).digest()}),yu}var Au,Eu,Su,ku,Bu,Ru,Tu,xu,Iu,Cu=!1;function Pu(t,e){ku.call(this,"digest"),"string"==typeof e&&(e=Bu.from(e));var r="sha512"===t||"sha384"===t?128:64;(this._alg=t,this._key=e,e.length>r)?e=("rmd160"===t?new Tu:xu(t)).update(e).digest():e.length<r&&(e=Bu.concat([e,Iu],r));for(var i=this._ipad=Bu.allocUnsafe(r),n=this._opad=Bu.allocUnsafe(r),o=0;o<r;o++)i[o]=54^e[o],n[o]=92^e[o];this._hash="rmd160"===t?new Tu:xu(t),this._hash.update(i)}function Du(){return Cu||(Cu=!0,Au={},Eu=Ar(),Su=bu(),ku=tu(),Bu=lr().Buffer,Ru=_u(),Tu=Ma(),xu=Gh(),Iu=Bu.alloc(128),Eu(Pu,ku),Pu.prototype._update=function(t){this._hash.update(t)},Pu.prototype._final=function(){var t=this._hash.digest();return("rmd160"===this._alg?new Tu:xu(this._alg)).update(this._opad).update(t).digest()},Au=function(t,e){return"rmd160"===(t=t.toLowerCase())||"ripemd160"===t?new Pu("rmd160",e):"md5"===t?new Su(Ru,e):new Pu(t,e)}),Au}var Lu,Ou=!1;function ju(){return Ou||(Ou=!0,Lu={},Lu=JSON.parse('{"sha224WithRSAEncryption":{"sign":"rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"RSA-SHA224":{"sign":"ecdsa/rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"sha256WithRSAEncryption":{"sign":"rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"RSA-SHA256":{"sign":"ecdsa/rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"sha384WithRSAEncryption":{"sign":"rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"RSA-SHA384":{"sign":"ecdsa/rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"sha512WithRSAEncryption":{"sign":"rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA512":{"sign":"ecdsa/rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA1":{"sign":"rsa","hash":"sha1","id":"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{"sign":"ecdsa","hash":"sha1","id":""},"sha256":{"sign":"ecdsa","hash":"sha256","id":""},"sha224":{"sign":"ecdsa","hash":"sha224","id":""},"sha384":{"sign":"ecdsa","hash":"sha384","id":""},"sha512":{"sign":"ecdsa","hash":"sha512","id":""},"DSA-SHA":{"sign":"dsa","hash":"sha1","id":""},"DSA-SHA1":{"sign":"dsa","hash":"sha1","id":""},"DSA":{"sign":"dsa","hash":"sha1","id":""},"DSA-WITH-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-WITH-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-WITH-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-WITH-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-RIPEMD160":{"sign":"dsa","hash":"rmd160","id":""},"ripemd160WithRSA":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"RSA-RIPEMD160":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"md5WithRSAEncryption":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"},"RSA-MD5":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"}}')),Lu}var Uu,Nu=!1;function zu(){return Nu||(Nu=!0,Uu={},Uu=ju()),Uu}var qu,Fu,Zu=!1;function Hu(){return Zu||(Zu=!0,qu={},Fu=Math.pow(2,30)-1,qu=function(t,e){if("number"!=typeof t)throw new TypeError("Iterations not a number");if(t<0)throw new TypeError("Bad iterations");if("number"!=typeof e)throw new TypeError("Key length not a number");if(e<0||e>Fu||e!=e)throw new TypeError("Bad key length")}),qu}var Ku,Wu,Gu,Yu=!1;function Vu(){return Yu||(Yu=!0,Ku={},jt(),t.process&&t.process.browser?Wu="utf-8":t.process&&t.process.version?(Gu=parseInt(jt().version.split(".")[0].slice(1),10),Wu=Gu>=6?"utf-8":"binary"):Wu="utf-8",Ku=Wu),Ku}var $u,Xu,Ju=!1;function Qu(){return Ju||(Ju=!0,$u={},Xu=lr().Buffer,$u=function(t,e,r){if(Xu.isBuffer(t))return t;if("string"==typeof t)return Xu.from(t,e);if(ArrayBuffer.isView(t))return Xu.from(t.buffer);throw new TypeError(r+" must be a string, a Buffer, a typed array or a DataView")}),$u}var tf,ef,rf,nf,of,sf,af,hf,uf,ff,lf=!1;function df(t,e,r){var i=function(t){function e(e){return nf(t).update(e).digest()}function r(t){return(new rf).update(t).digest()}return"rmd160"===t||"ripemd160"===t?r:"md5"===t?ef:e}(t),n="sha512"===t||"sha384"===t?128:64;e.length>n?e=i(e):e.length<n&&(e=of.concat([e,uf],n));for(var o=of.allocUnsafe(n+ff[t]),s=of.allocUnsafe(n+ff[t]),a=0;a<n;a++)o[a]=54^e[a],s[a]=92^e[a];var h=of.allocUnsafe(n+r+4);o.copy(h,0,0,n),this.ipad1=h,this.ipad2=o,this.opad=s,this.alg=t,this.blocksize=n,this.hash=i,this.size=ff[t]}function cf(t,e,r,i,n){sf(r,i);var o=new df(n=n||"sha1",t=hf(t,af,"Password"),(e=hf(e,af,"Salt")).length),s=of.allocUnsafe(i),a=of.allocUnsafe(e.length+4);e.copy(a,0,0,e.length);for(var h=0,u=ff[n],f=Math.ceil(i/u),l=1;l<=f;l++){a.writeUInt32BE(l,e.length);for(var d=o.run(a,o.ipad1),c=d,p=1;p<r;p++){c=o.run(c,o.ipad2);for(var m=0;m<u;m++)d[m]^=c[m]}d.copy(s,h),h+=u}return s}function pf(){return lf||(lf=!0,tf={},ef=_u(),rf=Ma(),nf=Gh(),of=lr().Buffer,sf=Hu(),af=Vu(),hf=Qu(),uf=of.alloc(128),ff={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20},df.prototype.run=function(t,e){return t.copy(e,this.blocksize),this.hash(e).copy(this.opad,this.blocksize),this.hash(this.opad)},tf=cf),tf}var mf,gf,vf,bf,yf,wf,Mf,_f,Af,Ef,Sf,kf=!1;function Bf(){return Sf||(Sf=t.process&&t.process.nextTick?t.process.nextTick:t.queueMicrotask?t.queueMicrotask:t.setImmediate?t.setImmediate:t.setTimeout)}function Rf(t,e,r,i,n){return _f.importKey("raw",t,{name:"PBKDF2"},!1,["deriveBits"]).then((function(t){return _f.deriveBits({name:"PBKDF2",salt:e,iterations:r,hash:{name:n}},t,i<<3)})).then((function(t){return gf.from(t)}))}function Tf(){mf={},gf=lr().Buffer,vf=Hu(),bf=Vu(),yf=pf(),wf=Qu(),_f=t.crypto&&t.crypto.subtle,Af={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},Ef=[],mf=function(e,r,i,n,o,s){"function"==typeof o&&(s=o,o=void 0);var a=Af[(o=o||"sha1").toLowerCase()];if(a&&"function"==typeof t.Promise){if(vf(i,n),e=wf(e,bf,"Password"),r=wf(r,bf,"Salt"),"function"!=typeof s)throw new Error("No callback provided to pbkdf2");!function(t,e){t.then((function(t){Bf()((function(){e(null,t)}))}),(function(t){Bf()((function(){e(t)}))}))}(function(e){if(t.process&&!t.process.browser)return Promise.resolve(!1);if(!_f||!_f.importKey||!_f.deriveBits)return Promise.resolve(!1);if(void 0!==Ef[e])return Ef[e];var r=Rf(Mf=Mf||gf.alloc(8),Mf,10,128,e).then((function(){return!0})).catch((function(){return!1}));return Ef[e]=r,r}(a).then((function(t){return t?Rf(e,r,i,n,a):yf(e,r,i,n,o)})),s)}else Bf()((function(){var t;try{t=yf(e,r,i,n,o)}catch(t){return s(t)}s(null,t)}))}}var xf,If,Cf,Pf=!1;function Df(){xf={},kf||(kf=!0,Tf()),If=mf,xf.pbkdf2=If,Cf=pf(),xf.pbkdf2Sync=Cf}function Lf(){return Pf||(Pf=!0,Df()),xf}var Of,jf,Uf,Nf,zf,qf,Ff,Zf,Hf,Kf,Wf,Gf,Yf,Vf,$f=!1;function Xf(){return $f||($f=!0,(Of={}).readUInt32BE=function(t,e){return(t[0+e]<<24|t[1+e]<<16|t[2+e]<<8|t[3+e])>>>0},jf=function(t,e,r){t[0+r]=e>>>24,t[1+r]=e>>>16&255,t[2+r]=e>>>8&255,t[3+r]=255&e},Of.writeUInt32BE=jf,Uf=function(t,e,r,i){for(var n=0,o=0,s=6;s>=0;s-=2){for(var a=0;a<=24;a+=8)n<<=1,n|=e>>>a+s&1;for(a=0;a<=24;a+=8)n<<=1,n|=t>>>a+s&1}for(s=6;s>=0;s-=2){for(a=1;a<=25;a+=8)o<<=1,o|=e>>>a+s&1;for(a=1;a<=25;a+=8)o<<=1,o|=t>>>a+s&1}r[i+0]=n>>>0,r[i+1]=o>>>0},Of.ip=Uf,Nf=function(t,e,r,i){for(var n=0,o=0,s=0;s<4;s++)for(var a=24;a>=0;a-=8)n<<=1,n|=e>>>a+s&1,n<<=1,n|=t>>>a+s&1;for(s=4;s<8;s++)for(a=24;a>=0;a-=8)o<<=1,o|=e>>>a+s&1,o<<=1,o|=t>>>a+s&1;r[i+0]=n>>>0,r[i+1]=o>>>0},Of.rip=Nf,zf=function(t,e,r,i){for(var n=0,o=0,s=7;s>=5;s--){for(var a=0;a<=24;a+=8)n<<=1,n|=e>>a+s&1;for(a=0;a<=24;a+=8)n<<=1,n|=t>>a+s&1}for(a=0;a<=24;a+=8)n<<=1,n|=e>>a+s&1;for(s=1;s<=3;s++){for(a=0;a<=24;a+=8)o<<=1,o|=e>>a+s&1;for(a=0;a<=24;a+=8)o<<=1,o|=t>>a+s&1}for(a=0;a<=24;a+=8)o<<=1,o|=t>>a+s&1;r[i+0]=n>>>0,r[i+1]=o>>>0},Of.pc1=zf,qf=function(t,e){return t<<e&268435455|t>>>28-e},Of.r28shl=qf,Ff=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24],Zf=function(t,e,r,i){for(var n=0,o=0,s=Ff.length>>>1,a=0;a<s;a++)n<<=1,n|=t>>>Ff[a]&1;for(a=s;a<Ff.length;a++)o<<=1,o|=e>>>Ff[a]&1;r[i+0]=n>>>0,r[i+1]=o>>>0},Of.pc2=Zf,Hf=function(t,e,r){var i=0,n=0;i=(1&t)<<5|t>>>27;for(var o=23;o>=15;o-=4)i<<=6,i|=t>>>o&63;for(o=11;o>=3;o-=4)n|=t>>>o&63,n<<=6;n|=(31&t)<<1|t>>>31,e[r+0]=i>>>0,e[r+1]=n>>>0},Of.expand=Hf,Kf=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11],Wf=function(t,e){for(var r=0,i=0;i<4;i++)r<<=4,r|=Kf[64*i+(t>>>18-6*i&63)];for(i=0;i<4;i++)r<<=4,r|=Kf[256+64*i+(e>>>18-6*i&63)];return r>>>0},Of.substitute=Wf,Gf=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7],Yf=function(t){for(var e=0,r=0;r<Gf.length;r++)e<<=1,e|=t>>>Gf[r]&1;return e>>>0},Of.permute=Yf,Vf=function(t,e,r){for(var i=t.toString(2);i.length<e;)i="0"+i;for(var n=[],o=0;o<e;o+=r)n.push(i.slice(o,o+r));return n.join(" ")},Of.padSplit=Vf),Of}var Jf,Qf=!1;function tl(t,e){if(!t)throw new Error(e||"Assertion failed")}function el(){return Qf||(Qf=!0,Jf={},Jf=tl,tl.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}),Jf}var rl,il=!1;function nl(t){this.options=t,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}function ol(){return il||(il=!0,rl={},el(),rl=nl,nl.prototype._init=function(){},nl.prototype.update=function(t){return 0===t.length?[]:"decrypt"===this.type?this._updateDecrypt(t):this._updateEncrypt(t)},nl.prototype._buffer=function(t,e){for(var r=Math.min(this.buffer.length-this.bufferOff,t.length-e),i=0;i<r;i++)this.buffer[this.bufferOff+i]=t[e+i];return this.bufferOff+=r,r},nl.prototype._flushBuffer=function(t,e){return this._update(this.buffer,0,t,e),this.bufferOff=0,this.blockSize},nl.prototype._updateEncrypt=function(t){var e=0,r=0,i=(this.bufferOff+t.length)/this.blockSize|0,n=new Array(i*this.blockSize);0!==this.bufferOff&&(e+=this._buffer(t,e),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(n,r)));for(var o=t.length-(t.length-e)%this.blockSize;e<o;e+=this.blockSize)this._update(t,e,n,r),r+=this.blockSize;for(;e<t.length;e++,this.bufferOff++)this.buffer[this.bufferOff]=t[e];return n},nl.prototype._updateDecrypt=function(t){for(var e=0,r=0,i=Math.ceil((this.bufferOff+t.length)/this.blockSize)-1,n=new Array(i*this.blockSize);i>0;i--)e+=this._buffer(t,e),r+=this._flushBuffer(n,r);return e+=this._buffer(t,e),n},nl.prototype.final=function(t){var e,r;return t&&(e=this.update(t)),r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),e?e.concat(r):r},nl.prototype._pad=function(t,e){if(0===e)return!1;for(;e<t.length;)t[e++]=0;return!0},nl.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var t=new Array(this.blockSize);return this._update(this.buffer,0,t,0),t},nl.prototype._unpad=function(t){return t},nl.prototype._finalDecrypt=function(){el().equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var t=new Array(this.blockSize);return this._flushBuffer(t,0),this._unpad(t)}),rl}var sl,al,hl,ul,fl=!1;function ll(){this.tmp=new Array(2),this.keys=null}function dl(t){hl.call(this,t);var e=new ll;this._desState=e,this.deriveKeys(e,t.key)}function cl(){return fl||(fl=!0,sl={},el(),al=Ar(),Xf(),hl=ol(),al(dl,hl),sl=dl,dl.create=function(t){return new dl(t)},ul=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1],dl.prototype.deriveKeys=function(t,e){t.keys=new Array(32),el().equal(e.length,this.blockSize,"Invalid key length");var r=Xf().readUInt32BE(e,0),i=Xf().readUInt32BE(e,4);Xf().pc1(r,i,t.tmp,0),r=t.tmp[0],i=t.tmp[1];for(var n=0;n<t.keys.length;n+=2){var o=ul[n>>>1];r=Xf().r28shl(r,o),i=Xf().r28shl(i,o),Xf().pc2(r,i,t.keys,n)}},dl.prototype._update=function(t,e,r,i){var n=this._desState,o=Xf().readUInt32BE(t,e),s=Xf().readUInt32BE(t,e+4);Xf().ip(o,s,n.tmp,0),o=n.tmp[0],s=n.tmp[1],"encrypt"===this.type?this._encrypt(n,o,s,n.tmp,0):this._decrypt(n,o,s,n.tmp,0),o=n.tmp[0],s=n.tmp[1],Xf().writeUInt32BE(r,o,i),Xf().writeUInt32BE(r,s,i+4)},dl.prototype._pad=function(t,e){for(var r=t.length-e,i=e;i<t.length;i++)t[i]=r;return!0},dl.prototype._unpad=function(t){for(var e=t[t.length-1],r=t.length-e;r<t.length;r++)el().equal(t[r],e);return t.slice(0,t.length-e)},dl.prototype._encrypt=function(t,e,r,i,n){for(var o=e,s=r,a=0;a<t.keys.length;a+=2){var h=t.keys[a],u=t.keys[a+1];Xf().expand(s,t.tmp,0),h^=t.tmp[0],u^=t.tmp[1];var f=Xf().substitute(h,u),l=s;s=(o^Xf().permute(f))>>>0,o=l}Xf().rip(s,o,i,n)},dl.prototype._decrypt=function(t,e,r,i,n){for(var o=r,s=e,a=t.keys.length-2;a>=0;a-=2){var h=t.keys[a],u=t.keys[a+1];Xf().expand(o,t.tmp,0),h^=t.tmp[0],u^=t.tmp[1];var f=Xf().substitute(h,u),l=o;o=(s^Xf().permute(f))>>>0,s=l}Xf().rip(o,s,i,n)}),sl}var pl,ml,gl,vl,bl=!1;function yl(t){el().equal(t.length,8,"Invalid IV length"),this.iv=new Array(8);for(var e=0;e<this.iv.length;e++)this.iv[e]=t[e]}function wl(t){function e(e){t.call(this,e),this._cbcInit()}ml(e,t);for(var r=Object.keys(gl),i=0;i<r.length;i++){var n=r[i];e.prototype[n]=gl[n]}return e.create=function(t){return new e(t)},e}function Ml(){return bl||(bl=!0,pl={},el(),ml=Ar(),gl={},vl=wl,pl.instantiate=vl,gl._cbcInit=function(){var t=new yl(this.options.iv);this._cbcState=t},gl._update=function(t,e,r,i){var n=this._cbcState,o=this.constructor.super_.prototype,s=n.iv;if("encrypt"===this.type){for(var a=0;a<this.blockSize;a++)s[a]^=t[e+a];for(o._update.call(this,s,0,r,i),a=0;a<this.blockSize;a++)s[a]=r[i+a]}else{for(o._update.call(this,t,e,r,i),a=0;a<this.blockSize;a++)r[i+a]^=s[a];for(a=0;a<this.blockSize;a++)s[a]=t[e+a]}}),pl}var _l,Al,El,Sl=!1;function kl(t,e){el().equal(e.length,24,"Invalid key length");var r=e.slice(0,8),i=e.slice(8,16),n=e.slice(16,24);this.ciphers="encrypt"===t?[cl().create({type:"encrypt",key:r}),cl().create({type:"decrypt",key:i}),cl().create({type:"encrypt",key:n})]:[cl().create({type:"decrypt",key:n}),cl().create({type:"encrypt",key:i}),cl().create({type:"decrypt",key:r})]}function Bl(t){El.call(this,t);var e=new kl(this.type,this.options.key);this._edeState=e}function Rl(){return Sl||(Sl=!0,_l={},el(),Al=Ar(),El=ol(),cl(),Al(Bl,El),_l=Bl,Bl.create=function(t){return new Bl(t)},Bl.prototype._update=function(t,e,r,i){var n=this._edeState;n.ciphers[0]._update(t,e,r,i),n.ciphers[1]._update(r,i,r,i),n.ciphers[2]._update(r,i,r,i)},Bl.prototype._pad=cl().prototype._pad,Bl.prototype._unpad=cl().prototype._unpad),_l}var Tl,xl,Il,Cl,Pl,Dl,Ll=!1;function Ol(){return Ll||(Ll=!0,Tl={},xl=Xf(),Tl.utils=xl,Il=ol(),Tl.Cipher=Il,Cl=cl(),Tl.DES=Cl,Pl=Ml(),Tl.CBC=Pl,Dl=Rl(),Tl.EDE=Dl),Tl}var jl,Ul,Nl,zl,ql,Fl=!1;function Zl(t){Ul.call(this);var e,r=t.mode.toLowerCase(),i=ql[r];e=t.decrypt?"decrypt":"encrypt";var n=t.key;zl.isBuffer(n)||(n=zl.from(n)),"des-ede"!==r&&"des-ede-cbc"!==r||(n=zl.concat([n,n.slice(0,8)]));var o=t.iv;zl.isBuffer(o)||(o=zl.from(o)),this._des=i.create({key:n,iv:o,type:e})}function Hl(){return Fl||(Fl=!0,jl={},Ul=tu(),Ol(),Nl=Ar(),zl=lr().Buffer,(ql={"des-ede3-cbc":Ol().CBC.instantiate(Ol().EDE),"des-ede3":Ol().EDE,"des-ede-cbc":Ol().CBC.instantiate(Ol().EDE),"des-ede":Ol().EDE,"des-cbc":Ol().CBC.instantiate(Ol().DES),"des-ecb":Ol().DES}).des=ql["des-cbc"],ql.des3=ql["des-ede3-cbc"],jl=Zl,Nl(Zl,Ul),Zl.prototype._update=function(t){return zl.from(this._des.update(t))},Zl.prototype._final=function(){return zl.from(this._des.final())}),jl}var Kl,Wl,Gl=!1;function Yl(){return Gl||(Gl=!0,(Kl={}).encrypt=function(t,e){return t._cipher.encryptBlock(e)},Wl=function(t,e){return t._cipher.decryptBlock(e)},Kl.decrypt=Wl),Kl}var Vl,$l,Xl=!1;function Jl(){return Xl||(Xl=!0,Vl={},$l=Ye().Buffer,Vl=function(t,e){for(var r=Math.min(t.length,e.length),i=new $l(r),n=0;n<r;++n)i[n]=t[n]^e[n];return i}),Vl}var Ql,td,ed,rd,id=!1;function nd(){return id||(id=!0,Ql={},td=Jl(),ed=function(t,e){var r=td(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},Ql.encrypt=ed,rd=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return td(i,r)},Ql.decrypt=rd),Ql}var od,sd,ad,hd,ud=!1;function fd(t,e,r){var i=e.length,n=ad(e,t._cache);return t._cache=t._cache.slice(i),t._prev=sd.concat([t._prev,r?e:n]),n}function ld(){return ud||(ud=!0,od={},sd=lr().Buffer,ad=Jl(),hd=function(t,e,r){for(var i,n=sd.allocUnsafe(0);e.length;){if(0===t._cache.length&&(t._cache=t._cipher.encryptBlock(t._prev),t._prev=sd.allocUnsafe(0)),!(t._cache.length<=e.length)){n=sd.concat([n,fd(t,e,r)]);break}i=t._cache.length,n=sd.concat([n,fd(t,e.slice(0,i),r)]),e=e.slice(i)}return n},od.encrypt=hd),od}var dd,cd,pd,md=!1;function gd(t,e,r){var i=t._cipher.encryptBlock(t._prev)[0]^e;return t._prev=cd.concat([t._prev.slice(1),cd.from([r?e:i])]),i}function vd(){return md||(md=!0,dd={},cd=lr().Buffer,pd=function(t,e,r){for(var i=e.length,n=cd.allocUnsafe(i),o=-1;++o<i;)n[o]=gd(t,e[o],r);return n},dd.encrypt=pd),dd}var bd,yd,wd,Md=!1;function _d(t,e,r){for(var i,n,o=-1,s=0;++o<8;)i=e&1<<7-o?128:0,s+=(128&(n=t._cipher.encryptBlock(t._prev)[0]^i))>>o%8,t._prev=Ad(t._prev,r?i:n);return s}function Ad(t,e){var r=t.length,i=-1,n=yd.allocUnsafe(t.length);for(t=yd.concat([t,yd.from([e])]);++i<r;)n[i]=t[i]<<1|t[i+1]>>7;return n}function Ed(){return Md||(Md=!0,bd={},yd=lr().Buffer,wd=function(t,e,r){for(var i=e.length,n=yd.allocUnsafe(i),o=-1;++o<i;)n[o]=_d(t,e[o],r);return n},bd.encrypt=wd),bd}var Sd,kd,Bd,Rd,Td=!1;function xd(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}function Id(){return Td||(Td=!0,Sd={},kd=Ye().Buffer,Bd=Jl(),Rd=function(t,e){for(;t._cache.length<e.length;)t._cache=kd.concat([t._cache,xd(t)]);var r=t._cache.slice(0,e.length);return t._cache=t._cache.slice(e.length),Bd(e,r)},Sd.encrypt=Rd),Sd}var Cd,Pd=!1;function Dd(t){for(var e,r=t.length;r--;){if(255!==(e=t.readUInt8(r))){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function Ld(){return Pd||(Pd=!0,Cd={},Cd=Dd),Cd}var Od,jd,Ud,Nd,zd,qd=!1;function Fd(t){var e=t._cipher.encryptBlockRaw(t._prev);return Nd(t._prev),e}function Zd(){return qd||(qd=!0,Od={},jd=Jl(),Ud=lr().Buffer,Nd=Ld(),16,zd=function(t,e){var r=Math.ceil(e.length/16),i=t._cache.length;t._cache=Ud.concat([t._cache,Ud.allocUnsafe(16*r)]);for(var n=0;n<r;n++){var o=Fd(t),s=i+16*n;t._cache.writeUInt32BE(o[0],s+0),t._cache.writeUInt32BE(o[1],s+4),t._cache.writeUInt32BE(o[2],s+8),t._cache.writeUInt32BE(o[3],s+12)}var a=t._cache.slice(0,e.length);return t._cache=t._cache.slice(e.length),jd(e,a)},Od.encrypt=zd),Od}var Hd,Kd=!1;function Wd(){return Kd||(Kd=!0,Hd={},Hd=JSON.parse('{"aes-128-ecb":{"cipher":"AES","key":128,"iv":0,"mode":"ECB","type":"block"},"aes-192-ecb":{"cipher":"AES","key":192,"iv":0,"mode":"ECB","type":"block"},"aes-256-ecb":{"cipher":"AES","key":256,"iv":0,"mode":"ECB","type":"block"},"aes-128-cbc":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes-192-cbc":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes-256-cbc":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes128":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes192":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes256":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes-128-cfb":{"cipher":"AES","key":128,"iv":16,"mode":"CFB","type":"stream"},"aes-192-cfb":{"cipher":"AES","key":192,"iv":16,"mode":"CFB","type":"stream"},"aes-256-cfb":{"cipher":"AES","key":256,"iv":16,"mode":"CFB","type":"stream"},"aes-128-cfb8":{"cipher":"AES","key":128,"iv":16,"mode":"CFB8","type":"stream"},"aes-192-cfb8":{"cipher":"AES","key":192,"iv":16,"mode":"CFB8","type":"stream"},"aes-256-cfb8":{"cipher":"AES","key":256,"iv":16,"mode":"CFB8","type":"stream"},"aes-128-cfb1":{"cipher":"AES","key":128,"iv":16,"mode":"CFB1","type":"stream"},"aes-192-cfb1":{"cipher":"AES","key":192,"iv":16,"mode":"CFB1","type":"stream"},"aes-256-cfb1":{"cipher":"AES","key":256,"iv":16,"mode":"CFB1","type":"stream"},"aes-128-ofb":{"cipher":"AES","key":128,"iv":16,"mode":"OFB","type":"stream"},"aes-192-ofb":{"cipher":"AES","key":192,"iv":16,"mode":"OFB","type":"stream"},"aes-256-ofb":{"cipher":"AES","key":256,"iv":16,"mode":"OFB","type":"stream"},"aes-128-ctr":{"cipher":"AES","key":128,"iv":16,"mode":"CTR","type":"stream"},"aes-192-ctr":{"cipher":"AES","key":192,"iv":16,"mode":"CTR","type":"stream"},"aes-256-ctr":{"cipher":"AES","key":256,"iv":16,"mode":"CTR","type":"stream"},"aes-128-gcm":{"cipher":"AES","key":128,"iv":12,"mode":"GCM","type":"auth"},"aes-192-gcm":{"cipher":"AES","key":192,"iv":12,"mode":"GCM","type":"auth"},"aes-256-gcm":{"cipher":"AES","key":256,"iv":12,"mode":"GCM","type":"auth"}}')),Hd}var Gd,Yd,Vd,$d,Xd=!1;function Jd(){return Xd||(Xd=!0,function(){for($d in Gd={},Yd={ECB:Yl(),CBC:nd(),CFB:ld(),CFB8:vd(),CFB1:Ed(),OFB:Id(),CTR:Zd(),GCM:Zd()},Vd=Wd())Vd[$d].module=Yd[Vd[$d].mode];Gd=Vd}()),Gd}var Qd,tc,ec,rc,ic,nc=!1;function oc(t){tc.isBuffer(t)||(t=tc.from(t));for(var e=t.length/4|0,r=new Array(e),i=0;i<e;i++)r[i]=t.readUInt32BE(4*i);return r}function sc(t){for(;0<t.length;t++)t[0]=0}function ac(t,e,r,i,n){for(var o,s,a,h,u=r[0],f=r[1],l=r[2],d=r[3],c=t[0]^e[0],p=t[1]^e[1],m=t[2]^e[2],g=t[3]^e[3],v=4,b=1;b<n;b++)o=u[c>>>24]^f[p>>>16&255]^l[m>>>8&255]^d[255&g]^e[v++],s=u[p>>>24]^f[m>>>16&255]^l[g>>>8&255]^d[255&c]^e[v++],a=u[m>>>24]^f[g>>>16&255]^l[c>>>8&255]^d[255&p]^e[v++],h=u[g>>>24]^f[c>>>16&255]^l[p>>>8&255]^d[255&m]^e[v++],c=o,p=s,m=a,g=h;return o=(i[c>>>24]<<24|i[p>>>16&255]<<16|i[m>>>8&255]<<8|i[255&g])^e[v++],s=(i[p>>>24]<<24|i[m>>>16&255]<<16|i[g>>>8&255]<<8|i[255&c])^e[v++],a=(i[m>>>24]<<24|i[g>>>16&255]<<16|i[c>>>8&255]<<8|i[255&p])^e[v++],h=(i[g>>>24]<<24|i[c>>>16&255]<<16|i[p>>>8&255]<<8|i[255&m])^e[v++],[o>>>=0,s>>>=0,a>>>=0,h>>>=0]}function hc(t){this._key=oc(t),this._reset()}function uc(){return nc||(nc=!0,Qd={},tc=lr().Buffer,ec=[0,1,2,4,8,16,32,64,128,27,54],rc=function(){for(var t=new Array(256),e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=[],i=[],n=[[],[],[],[]],o=[[],[],[],[]],s=0,a=0,h=0;h<256;++h){var u=a^a<<1^a<<2^a<<3^a<<4;u=u>>>8^255&u^99,r[s]=u,i[u]=s;var f=t[s],l=t[f],d=t[l],c=257*t[u]^16843008*u;n[0][s]=c<<24|c>>>8,n[1][s]=c<<16|c>>>16,n[2][s]=c<<8|c>>>24,n[3][s]=c,c=16843009*d^65537*l^257*f^16843008*s,o[0][u]=c<<24|c>>>8,o[1][u]=c<<16|c>>>16,o[2][u]=c<<8|c>>>24,o[3][u]=c,0===s?s=a=1:(s=f^t[t[t[d^f]]],a^=t[t[a]])}return{SBOX:r,INV_SBOX:i,SUB_MIX:n,INV_SUB_MIX:o}}(),hc.blockSize=16,hc.keySize=32,hc.prototype.blockSize=hc.blockSize,hc.prototype.keySize=hc.keySize,hc.prototype._reset=function(){for(var t=this._key,e=t.length,r=e+6,i=4*(r+1),n=[],o=0;o<e;o++)n[o]=t[o];for(o=e;o<i;o++){var s=n[o-1];o%e==0?(s=s<<8|s>>>24,s=rc.SBOX[s>>>24]<<24|rc.SBOX[s>>>16&255]<<16|rc.SBOX[s>>>8&255]<<8|rc.SBOX[255&s],s^=ec[o/e|0]<<24):e>6&&o%e==4&&(s=rc.SBOX[s>>>24]<<24|rc.SBOX[s>>>16&255]<<16|rc.SBOX[s>>>8&255]<<8|rc.SBOX[255&s]),n[o]=n[o-e]^s}for(var a=[],h=0;h<i;h++){var u=i-h,f=n[u-(h%4?0:4)];a[h]=h<4||u<=4?f:rc.INV_SUB_MIX[0][rc.SBOX[f>>>24]]^rc.INV_SUB_MIX[1][rc.SBOX[f>>>16&255]]^rc.INV_SUB_MIX[2][rc.SBOX[f>>>8&255]]^rc.INV_SUB_MIX[3][rc.SBOX[255&f]]}this._nRounds=r,this._keySchedule=n,this._invKeySchedule=a},hc.prototype.encryptBlockRaw=function(t){return ac(t=oc(t),this._keySchedule,rc.SUB_MIX,rc.SBOX,this._nRounds)},hc.prototype.encryptBlock=function(t){var e=this.encryptBlockRaw(t),r=tc.allocUnsafe(16);return r.writeUInt32BE(e[0],0),r.writeUInt32BE(e[1],4),r.writeUInt32BE(e[2],8),r.writeUInt32BE(e[3],12),r},hc.prototype.decryptBlock=function(t){var e=(t=oc(t))[1];t[1]=t[3],t[3]=e;var r=ac(t,this._invKeySchedule,rc.INV_SUB_MIX,rc.INV_SBOX,this._nRounds),i=tc.allocUnsafe(16);return i.writeUInt32BE(r[0],0),i.writeUInt32BE(r[3],4),i.writeUInt32BE(r[2],8),i.writeUInt32BE(r[1],12),i},hc.prototype.scrub=function(){sc(this._keySchedule),sc(this._invKeySchedule),sc(this._key)},ic=hc,Qd.AES=ic),Qd}var fc,lc,dc,cc=!1;function pc(t){var e=lc.allocUnsafe(16);return e.writeUInt32BE(t[0]>>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function mc(t){this.h=t,this.state=lc.alloc(16,0),this.cache=lc.allocUnsafe(0)}function gc(){return cc||(cc=!0,fc={},lc=lr().Buffer,dc=lc.alloc(16,0),mc.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},mc.prototype._multiply=function(){for(var t,e,r,i=[(t=this.h).readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)],n=[0,0,0,0],o=-1;++o<128;){for(0!=(this.state[~~(o/8)]&1<<7-o%8)&&(n[0]^=i[0],n[1]^=i[1],n[2]^=i[2],n[3]^=i[3]),r=0!=(1&i[3]),e=3;e>0;e--)i[e]=i[e]>>>1|(1&i[e-1])<<31;i[0]=i[0]>>>1,r&&(i[0]=i[0]^225<<24)}this.state=pc(n)},mc.prototype.update=function(t){var e;for(this.cache=lc.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},mc.prototype.final=function(t,e){return this.cache.length&&this.ghash(lc.concat([this.cache,dc],16)),this.ghash(pc([0,t,0,e])),this.state},fc=mc),fc}var vc,bc,yc,wc,Mc,_c,Ac,Ec=!1;function Sc(t,e,r,i){yc.call(this);var n=bc.alloc(4,0);this._cipher=new(uc().AES)(e);var o=this._cipher.encryptBlock(n);this._ghash=new Mc(o),r=function(t,e,r){if(12===e.length)return t._finID=bc.concat([e,bc.from([0,0,0,1])]),bc.concat([e,bc.from([0,0,0,2])]);var i=new Mc(r),n=e.length,o=n%16;i.update(e),o&&(o=16-o,i.update(bc.alloc(o,0))),i.update(bc.alloc(8,0));var s=8*n,a=bc.alloc(8);a.writeUIntBE(s,0,8),i.update(a),t._finID=i.state;var h=bc.from(t._finID);return Ac(h),h}(this,r,o),this._prev=bc.from(r),this._cache=bc.allocUnsafe(0),this._secCache=bc.allocUnsafe(0),this._decrypt=i,this._alen=0,this._len=0,this._mode=t,this._authTag=null,this._called=!1}function kc(){vc={},uc(),bc=lr().Buffer,yc=tu(),wc=Ar(),Mc=gc(),_c=Jl(),Ac=Ld(),wc(Sc,yc),Sc.prototype._update=function(t){if(!this._called&&this._alen){var e=16-this._alen%16;e<16&&(e=bc.alloc(e,0),this._ghash.update(e))}this._called=!0;var r=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(r),this._len+=t.length,r},Sc.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=_c(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(t,e){var r=0;t.length!==e.length&&r++;for(var i=Math.min(t.length,e.length),n=0;n<i;++n)r+=t[n]^e[n];return r}(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data");this._authTag=t,this._cipher.scrub()},Sc.prototype.getAuthTag=function(){if(this._decrypt||!bc.isBuffer(this._authTag))throw new Error("Attempting to get auth tag in unsupported state");return this._authTag},Sc.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},Sc.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length},vc=Sc}function Bc(){return Ec||(Ec=!0,kc()),vc}var Rc,Tc,xc,Ic=!1;function Cc(t,e,r,i){xc.call(this),this._cipher=new(uc().AES)(e),this._prev=Tc.from(r),this._cache=Tc.allocUnsafe(0),this._secCache=Tc.allocUnsafe(0),this._decrypt=i,this._mode=t}function Pc(){return Ic||(Ic=!0,Rc={},uc(),Tc=lr().Buffer,xc=tu(),Ar()(Cc,xc),Cc.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},Cc.prototype._final=function(){this._cipher.scrub()},Rc=Cc),Rc}var Dc,Lc,Oc,jc=!1;function Uc(t,e,r,i){if(Lc.isBuffer(t)||(t=Lc.from(t,"binary")),e&&(Lc.isBuffer(e)||(e=Lc.from(e,"binary")),8!==e.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var n=r/8,o=Lc.alloc(n),s=Lc.alloc(i||0),a=Lc.alloc(0);n>0||i>0;){var h=new Oc;h.update(a),h.update(t),e&&h.update(e),a=h.digest();var u=0;if(n>0){var f=o.length-n;u=Math.min(n,a.length),a.copy(o,f,0,u),n-=u}if(u<a.length&&i>0){var l=s.length-i,d=Math.min(i,a.length-u);a.copy(s,l,u,u+d),i-=d}}return a.fill(0),{key:o,iv:s}}function Nc(){return jc||(jc=!0,Dc={},Lc=lr().Buffer,Oc=ea(),Dc=Uc),Dc}var zc,qc,Fc,Zc,Hc,Kc,Wc,Gc,Yc,Vc,$c=!1;function Xc(t,e,r){Kc.call(this),this._cache=new Jc,this._cipher=new(uc().AES)(e),this._prev=Zc.from(r),this._mode=t,this._autopadding=!0}function Jc(){this.cache=Zc.allocUnsafe(0)}function Qc(t,e,r){var i=qc[t.toLowerCase()];if(!i)throw new TypeError("invalid suite type");if("string"==typeof e&&(e=Zc.from(e)),e.length!==i.key/8)throw new TypeError("invalid key length "+e.length);if("string"==typeof r&&(r=Zc.from(r)),"GCM"!==i.mode&&r.length!==i.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===i.type?new Hc(i.module,e,r):"auth"===i.type?new Fc(i.module,e,r):new Xc(i.module,e,r)}function tp(t,e){var r=qc[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=Wc(e,!1,r.key,r.iv);return Qc(t,i.key,i.iv)}function ep(){return $c||($c=!0,zc={},qc=Jd(),Fc=Bc(),Zc=lr().Buffer,Hc=Pc(),Kc=tu(),uc(),Wc=Nc(),Ar()(Xc,Kc),Xc.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get();)r=this._mode.encrypt(this,e),i.push(r);return Zc.concat(i)},Gc=Zc.alloc(16,16),Xc.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if(!t.equals(Gc))throw this._cipher.scrub(),new Error("data not multiple of block length")},Xc.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},Jc.prototype.add=function(t){this.cache=Zc.concat([this.cache,t])},Jc.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},Jc.prototype.flush=function(){for(var t=16-this.cache.length,e=Zc.allocUnsafe(t),r=-1;++r<t;)e.writeUInt8(t,r);return Zc.concat([this.cache,e])},Yc=Qc,zc.createCipheriv=Yc,Vc=tp,zc.createCipher=Vc),zc}var rp,ip,np,op,sp,ap,hp,up,fp,lp=!1;function dp(t,e,r){ap.call(this),this._cache=new cp,this._last=void 0,this._cipher=new(uc().AES)(e),this._prev=np.from(r),this._mode=t,this._autopadding=!0}function cp(){this.cache=np.allocUnsafe(0)}function pp(t,e,r){var i=op[t.toLowerCase()];if(!i)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=np.from(r)),"GCM"!==i.mode&&r.length!==i.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=np.from(e)),e.length!==i.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===i.type?new sp(i.module,e,r,!0):"auth"===i.type?new ip(i.module,e,r,!0):new dp(i.module,e,r)}function mp(t,e){var r=op[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=hp(e,!1,r.key,r.iv);return pp(t,i.key,i.iv)}function gp(){rp={},ip=Bc(),np=lr().Buffer,op=Jd(),sp=Pc(),ap=tu(),uc(),hp=Nc(),Ar()(dp,ap),dp.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return np.concat(i)},dp.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");for(var r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},dp.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},cp.prototype.add=function(t){this.cache=np.concat([this.cache,t])},cp.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},cp.prototype.flush=function(){if(this.cache.length)return this.cache},up=mp,rp.createDecipher=up,fp=pp,rp.createDecipheriv=fp}function vp(){return lp||(lp=!0,gp()),rp}var bp,yp,wp,Mp,_p,Ap,Ep,Sp,kp,Bp,Rp,Tp,xp=!1;function Ip(){return Object.keys(Ep)}function Cp(){return xp||(xp=!0,Ap={},ep(),vp(),Ep=Wd(),bp=ep().createCipher,Sp=Ap.Cipher=bp,Ap.createCipher=Sp,yp=ep().createCipheriv,kp=Ap.Cipheriv=yp,Ap.createCipheriv=kp,wp=vp().createDecipher,Bp=Ap.Decipher=wp,Ap.createDecipher=Bp,Mp=vp().createDecipheriv,Rp=Ap.Decipheriv=Mp,Ap.createDecipheriv=Rp,_p=Ip,Tp=Ap.getCiphers=_p,Ap.listCiphers=Tp),Ap}var Pp,Dp,Lp,Op,jp,Up,Np,zp,qp=!1;function Fp(){return qp||(qp=!0,(Lp={})["des-ecb"]={key:8,iv:0},Pp={key:8,iv:8},Op=Lp.des=Pp,Lp["des-cbc"]=Op,Dp={key:24,iv:8},jp=Lp.des3=Dp,Lp["des-ede3-cbc"]=jp,Up={key:24,iv:0},Lp["des-ede3"]=Up,Np={key:16,iv:8},Lp["des-ede-cbc"]=Np,zp={key:16,iv:0},Lp["des-ede"]=zp),Lp}var Zp,Hp,Kp,Wp,Gp,Yp,Vp,$p,Xp,Jp,Qp,tm,em,rm,im,nm=!1;function om(t,e){var r,i;if(t=t.toLowerCase(),$p[t])r=$p[t].key,i=$p[t].iv;else{if(!Xp[t])throw new TypeError("invalid suite type");r=8*Xp[t].key,i=Xp[t].iv}var n=Jp(e,!1,r,i);return am(t,n.key,n.iv)}function sm(t,e){var r,i;if(t=t.toLowerCase(),$p[t])r=$p[t].key,i=$p[t].iv;else{if(!Xp[t])throw new TypeError("invalid suite type");r=8*Xp[t].key,i=Xp[t].iv}var n=Jp(e,!1,r,i);return hm(t,n.key,n.iv)}function am(t,e,r){if(t=t.toLowerCase(),$p[t])return Cp().createCipheriv(t,e,r);if(Xp[t])return new Vp({key:e,iv:r,mode:t});throw new TypeError("invalid suite type")}function hm(t,e,r){if(t=t.toLowerCase(),$p[t])return Cp().createDecipheriv(t,e,r);if(Xp[t])return new Vp({key:e,iv:r,mode:t,decrypt:!0});throw new TypeError("invalid suite type")}function um(){return Object.keys(Xp).concat(Cp().getCiphers())}function fm(){return nm||(nm=!0,Yp={},Vp=Hl(),Cp(),$p=Jd(),Xp=Fp(),Jp=Nc(),Zp=om,Qp=Yp.Cipher=Zp,Yp.createCipher=Qp,Hp=am,tm=Yp.Cipheriv=Hp,Yp.createCipheriv=tm,Kp=sm,em=Yp.Decipher=Kp,Yp.createDecipher=em,Wp=hm,rm=Yp.Decipheriv=Wp,Yp.createDecipheriv=rm,Gp=um,im=Yp.getCiphers=Gp,Yp.listCiphers=im),Yp}var lm,dm=!1;function cm(){lm=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}function pm(){return dm||(dm=!0,cm()),lm}var mm,gm=!1;function vm(){mm=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}var bm,ym,wm,Mm=!1;function _m(t){this.rand=t}function Am(){return Mm||(Mm=!0,function(){if(bm={},bm=function(t){return ym||(ym=new _m(null)),ym.generate(t)},wm=_m,bm.Rand=wm,_m.prototype.generate=function(t){return this._rand(t)},_m.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?_m.prototype._rand=function(t){var e=new Uint8Array(t);return self.crypto.getRandomValues(e),e}:self.msCrypto&&self.msCrypto.getRandomValues?_m.prototype._rand=function(t){var e=new Uint8Array(t);return self.msCrypto.getRandomValues(e),e}:"object"==typeof window&&(_m.prototype._rand=function(){throw new Error("Not implemented yet")});else try{if(ir(),"function"!=typeof ir().randomBytes)throw new Error("Not supported");_m.prototype._rand=function(t){return ir().randomBytes(t)}}catch(t){}}()),bm}var Em,Sm,km=!1;function Bm(t){this.rand=t||new(Am().Rand)}function Rm(){Em={},gm||(gm=!0,vm()),Sm=mm,Am(),Em=Bm,Bm.create=function(t){return new Bm(t)},Bm.prototype._randbelow=function(t){var e=t.bitLength(),r=Math.ceil(e/8);do{var i=new Sm(this.rand.generate(r))}while(i.cmp(t)>=0);return i},Bm.prototype._randrange=function(t,e){var r=e.sub(t);return t.add(this._randbelow(r))},Bm.prototype.test=function(t,e,r){var i=t.bitLength(),n=Sm.mont(t),o=new Sm(1).toRed(n);e||(e=Math.max(1,i/48|0));for(var s=t.subn(1),a=0;!s.testn(a);a++);for(var h=t.shrn(a),u=s.toRed(n);e>0;e--){var f=this._randrange(new Sm(2),s);r&&r(f);var l=f.toRed(n).redPow(h);if(0!==l.cmp(o)&&0!==l.cmp(u)){for(var d=1;d<a;d++){if(0===(l=l.redSqr()).cmp(o))return!1;if(0===l.cmp(u))break}if(d===a)return!1}}return!0},Bm.prototype.getDivisor=function(t,e){var r=t.bitLength(),i=Sm.mont(t),n=new Sm(1).toRed(i);e||(e=Math.max(1,r/48|0));for(var o=t.subn(1),s=0;!o.testn(s);s++);for(var a=t.shrn(s),h=o.toRed(i);e>0;e--){var u=this._randrange(new Sm(2),o),f=t.gcd(u);if(0!==f.cmpn(1))return f;var l=u.toRed(i).redPow(a);if(0!==l.cmp(n)&&0!==l.cmp(h)){for(var d=1;d<s;d++){if(0===(l=l.redSqr()).cmp(n))return l.fromRed().subn(1).gcd(t);if(0===l.cmp(h))break}if(d===s)return(l=l.redSqr()).fromRed().subn(1).gcd(t)}}return!1}}function Tm(){return km||(km=!0,Rm()),Em}var xm,Im,Cm,Pm,Dm,Lm,Om,jm,Um,Nm,zm,qm,Fm,Zm,Hm=!1;function Km(t){for(var e=function(){if(null!==Zm)return Zm;var t=[];t[0]=2;for(var e=1,r=3;r<1048576;r+=2){for(var i=Math.ceil(Math.sqrt(r)),n=0;n<e&&t[n]<=i&&r%t[n]!=0;n++);e!==n&&t[n]<=i||(t[e++]=r)}return Zm=t,t}(),r=0;r<e.length;r++)if(0===t.modn(e[r]))return 0===t.cmpn(e[r]);return!0}function Wm(t){var e=Cm.mont(t);return 0===jm.toRed(e).redPow(t.subn(1)).fromRed().cmpn(1)}function Gm(t,e){if(t<16)return new Cm(2===e||5===e?[140,123]:[140,39]);var r,i;for(e=new Cm(e);;){for(r=new Cm(Im(Math.ceil(t/8)));r.bitLength()>t;)r.ishrn(1);if(r.isEven()&&r.iadd(Om),r.testn(1)||r.iadd(jm),e.cmp(jm)){if(!e.cmp(Um))for(;r.mod(Nm).cmp(zm);)r.iadd(Fm)}else for(;r.mod(Pm).cmp(qm);)r.iadd(Fm);if(Km(i=r.shrn(1))&&Km(r)&&Wm(i)&&Wm(r)&&Lm.test(i)&&Lm.test(r))return r}}function Ym(){return Hm||(Hm=!0,xm={},Im=wr(),xm=Gm,Gm.simpleSieve=Km,Gm.fermatTest=Wm,Cm=pm(),Pm=new Cm(24),Dm=Tm(),Lm=new Dm,Om=new Cm(1),jm=new Cm(2),Um=new Cm(5),new Cm(16),new Cm(8),Nm=new Cm(10),zm=new Cm(3),new Cm(7),qm=new Cm(11),Fm=new Cm(4),new Cm(12),Zm=null),xm}var Vm,$m=!1;function Xm(){return $m||($m=!0,Vm={},Vm=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')),Vm}var Jm,Qm,tg,eg,rg,ig,ng,og,sg,ag,hg,ug,fg=!1;function lg(t,e){return e=e||"utf8",Qm.isBuffer(t)||(t=new Qm(t,e)),this._pub=new tg(t),this}function dg(t,e){return e=e||"utf8",Qm.isBuffer(t)||(t=new Qm(t,e)),this._priv=new tg(t),this}function cg(t,e,r){this.setGenerator(e),this.__prime=new tg(t),this._prime=tg.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=lg,this.setPrivateKey=dg):this._primeCode=8}function pg(t,e){var r=new Qm(t.toArray());return e?r.toString(e):r}function mg(){Jm={},Qm=Ye().Buffer,tg=pm(),eg=Tm(),rg=new eg,ig=new tg(24),ng=new tg(11),og=new tg(10),sg=new tg(3),ag=new tg(7),Ym(),hg=wr(),Jm=cg,ug={},Object.defineProperty(cg.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(t,e){var r=e.toString("hex"),i=[r,t.toString(16)].join("_");if(i in ug)return ug[i];var n,o=0;if(t.isEven()||!Ym().simpleSieve||!Ym().fermatTest(t)||!rg.test(t))return o+=1,o+="02"===r||"05"===r?8:4,ug[i]=o,o;switch(rg.test(t.shrn(1))||(o+=2),r){case"02":t.mod(ig).cmp(ng)&&(o+=8);break;case"05":(n=t.mod(og)).cmp(sg)&&n.cmp(ag)&&(o+=8);break;default:o+=4}return ug[i]=o,o}(this.__prime,this.__gen)),this._primeCode}}),cg.prototype.generateKeys=function(){return this._priv||(this._priv=new tg(hg(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},cg.prototype.computeSecret=function(t){var e=(t=(t=new tg(t)).toRed(this._prime)).redPow(this._priv).fromRed(),r=new Qm(e.toArray()),i=this.getPrime();if(r.length<i.length){var n=new Qm(i.length-r.length);n.fill(0),r=Qm.concat([n,r])}return r},cg.prototype.getPublicKey=function(t){return pg(this._pub,t)},cg.prototype.getPrivateKey=function(t){return pg(this._priv,t)},cg.prototype.getPrime=function(t){return pg(this.__prime,t)},cg.prototype.getGenerator=function(t){return pg(this._gen,t)},cg.prototype.setGenerator=function(t,e){return e=e||"utf8",Qm.isBuffer(t)||(t=new Qm(t,e)),this.__gen=t,this._gen=new tg(t),this}}var gg,vg,bg,yg,wg,Mg,_g,Ag,Eg,Sg,kg,Bg=!1;function Rg(t){var e=new wg(_g[t].prime,"hex"),r=new wg(_g[t].gen,"hex");return new Ag(e,r)}function Tg(t,e,r,i){return wg.isBuffer(e)||void 0===Eg[e]?Tg(t,"binary",e,r):(e=e||"binary",i=i||"binary",r=r||new wg([2]),wg.isBuffer(r)||(r=new wg(r,i)),"number"==typeof t?new Ag(Mg(t,r),r,!0):(wg.isBuffer(t)||(t=new wg(t,e)),new Ag(t,r,!0)))}function xg(){yg={},wg=Ye().Buffer,Mg=Ym(),_g=Xm(),fg||(fg=!0,mg()),Ag=Jm,Eg={binary:!0,hex:!0,base64:!0},vg=Rg,gg=yg.getDiffieHellman=vg,Sg=yg.createDiffieHellmanGroup=gg,yg.DiffieHellmanGroup=Sg,bg=Tg,kg=yg.DiffieHellman=bg,yg.createDiffieHellman=kg}var Ig,Cg=!1;function Pg(){Ig=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var i=t.charCodeAt(e);return i>=48&&i<=57?i-48:i>=65&&i<=70?i-55:i>=97&&i<=102?i-87:void r(!1,"Invalid character in "+t)}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,i,n){for(var o=0,s=0,a=Math.min(t.length,i),h=e;h<a;h++){var u=t.charCodeAt(h)-48;o*=n,s=u>=49?u-49+10:u>=17?u-17+10:u,r(u>=0&&s<n,"Invalid character"),o+=s}return o}function u(t,e){t.words=e.words,t.length=e.length,t.negative=e.negative,t.red=e.red}if(n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this._strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this._strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this._strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype._move=function(t){u(t,this)},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype._strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{n.prototype[Symbol.for("nodejs.util.inspect.custom")]=f}catch(t){n.prototype.inspect=f}else n.prototype.inspect=f;function f(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],c=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?l[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var u=d[t],f=c[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modrn(f).toString(t);i=(p=p.idivn(f)).isZero()?m+i:l[u-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16,2)},o&&(n.prototype.toBuffer=function(t,e){return this.toArrayLike(o,t,e)}),n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)};function p(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r._strip()}n.prototype.toArrayLike=function(t,e,i){this._strip();var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0");var s=function(t,e){return t.allocUnsafe?t.allocUnsafe(e):new t(e)}(t,o);return this["_toArrayLike"+("le"===e?"LE":"BE")](s,n),s},n.prototype._toArrayLikeLE=function(t,e){for(var r=0,i=0,n=0,o=0;n<this.length;n++){var s=this.words[n]<<o|i;t[r++]=255&s,r<t.length&&(t[r++]=s>>8&255),r<t.length&&(t[r++]=s>>16&255),6===o?(r<t.length&&(t[r++]=s>>24&255),i=0,o=0):(i=s>>>24,o+=2)}if(r<t.length)for(t[r++]=i;r<t.length;)t[r++]=0},n.prototype._toArrayLikeBE=function(t,e){for(var r=t.length-1,i=0,n=0,o=0;n<this.length;n++){var s=this.words[n]<<o|i;t[r--]=255&s,r>=0&&(t[r--]=s>>8&255),r>=0&&(t[r--]=s>>16&255),6===o?(r>=0&&(t[r--]=s>>24&255),i=0,o=0):(i=s>>>24,o+=2)}if(r>=0)for(t[r--]=i;r>=0;)t[r--]=0},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this._strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this._strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this._strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this._strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this._strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this._strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var m=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function g(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r._strip()}function v(t,e,r){return g(t,e,r)}function b(t,e){this.x=t,this.y=e}Math.imul||(m=p),n.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?m(this,t,e):r<63?p(this,t,e):r<1024?g(this,t,e):v(this,t,e)},b.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},b.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},b.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},b.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},b.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},b.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},b.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},b.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},b.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},b.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r._strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),v(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){var e=t<0;e&&(t=-t),r("number"==typeof t),r(t<67108864);for(var i=0,n=0;n<this.length;n++){var o=(0|this.words[n])*t,s=(67108863&o)+(67108863&i);i>>=26,i+=o/67108864|0,i+=s>>>26,this.words[n]=67108863&s}return 0!==i&&(this.words[n]=i,this.length++),e?this.ineg():this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=t.words[i]>>>n&1}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this._strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this._strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<=t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this._strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this._strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this._strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a._strip(),i._strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modrn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modrn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modrn=function(t){var e=t<0;e&&(t=-t),r(t<=67108863);for(var i=(1<<26)%t,n=0,o=this.length-1;o>=0;o--)n=(i*n+(0|this.words[o]))%t;return e?-n:n},n.prototype.modn=function(t){return this.modrn(t)},n.prototype.idivn=function(t){var e=t<0;e&&(t=-t),r(t<=67108863);for(var i=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*i;this.words[n]=o/t|0,i=o%t}return this._strip(),e?this.ineg():this},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this._strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new S(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var y={k256:null,p224:null,p192:null,p25519:null};function w(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function M(){w.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function _(){w.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function A(){w.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function E(){w.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function k(t){S.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}w.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},w.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},w.prototype.split=function(t,e){t.iushrn(this.n,0,e)},w.prototype.imulK=function(t){return t.imul(this.k)},i(M,w),M.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},M.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(_,w),i(A,w),i(E,w),E.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(y[t])return y[t];var e;if("k256"===t)e=new M;else if("p224"===t)e=new _;else if("p192"===t)e=new A;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new E}return y[t]=e,e},S.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},S.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},S.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):(u(t,t.umod(this.m)._forceRed(this)),t)},S.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},S.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},S.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},S.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},S.prototype.isqr=function(t){return this.imul(t,t.clone())},S.prototype.sqr=function(t){return this.mul(t,t)},S.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},S.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},S.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},S.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},S.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new k(t)},i(k,S),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}function Dg(){return Cg||(Cg=!0,Pg()),Ig}var Lg,Og,jg,Ug,Ng=!1;function zg(t){var e,r=t.modulus.byteLength();do{e=new jg(Ug(r))}while(e.cmp(t.modulus)>=0||!e.umod(t.prime1)||!e.umod(t.prime2));return e}function qg(t,e){var r=function(t){var e=zg(t);return{blinder:e.toRed(jg.mont(t.modulus)).redPow(new jg(t.publicExponent)).fromRed(),unblinder:e.invm(t.modulus)}}(e),i=e.modulus.byteLength(),n=new jg(t).mul(r.blinder).umod(e.modulus),o=n.toRed(jg.mont(e.prime1)),s=n.toRed(jg.mont(e.prime2)),a=e.coefficient,h=e.prime1,u=e.prime2,f=o.redPow(e.exponent1).fromRed(),l=s.redPow(e.exponent2).fromRed(),d=f.isub(l).imul(a).umod(h).imul(u);return l.iadd(d).imul(r.unblinder).umod(e.modulus).toArrayLike(Og,"be",i)}function Fg(){return Ng||(Ng=!0,Lg={},Og=Ye().Buffer,jg=Dg(),Ug=wr(),qg.getr=zg,Lg=qg),Lg}var Zg,Hg=!1;function Kg(){return Hg||(Hg=!0,Zg={},Zg=JSON.parse('{"_from":"elliptic@^6.5.3","_id":"elliptic@6.5.4","_inBundle":false,"_integrity":"sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==","_location":"/elliptic","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"elliptic@^6.5.3","name":"elliptic","escapedName":"elliptic","rawSpec":"^6.5.3","saveSpec":null,"fetchSpec":"^6.5.3"},"_requiredBy":["/browserify-sign","/create-ecdh"],"_resolved":"https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz","_shasum":"da37cebd31e79a1367e941b592ed1fbebd58abbb","_spec":"elliptic@^6.5.3","_where":"/home/lin/server/jessibuca/node_modules/browserify-sign","author":{"name":"Fedor Indutny","email":"fedor@indutny.com"},"bugs":{"url":"https://github.com/indutny/elliptic/issues"},"bundleDependencies":false,"dependencies":{"bn.js":"^4.11.9","brorand":"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1","inherits":"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"},"deprecated":false,"description":"EC cryptography","devDependencies":{"brfs":"^2.0.2","coveralls":"^3.1.0","eslint":"^7.6.0","grunt":"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1","istanbul":"^0.4.5","mocha":"^8.0.1"},"files":["lib"],"homepage":"https://github.com/indutny/elliptic","keywords":["EC","Elliptic","curve","Cryptography"],"license":"MIT","main":"lib/elliptic.js","name":"elliptic","repository":{"type":"git","url":"git+ssh://git@github.com/indutny/elliptic.git"},"scripts":{"lint":"eslint lib test","lint:fix":"npm run lint -- --fix","test":"npm run lint && npm run unit","unit":"istanbul test _mocha --reporter=spec test/index.js","version":"grunt dist && git add dist/"},"version":"6.5.4"}')),Zg}var Wg,Gg=!1;function Yg(){Wg=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}function Vg(){return Gg||(Gg=!0,Yg()),Wg}var $g,Xg,Jg=!1;function Qg(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t){for(var i=0;i<t.length;i++)r[i]=0|t[i];return r}if("hex"===e){(t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t);for(i=0;i<t.length;i+=2)r.push(parseInt(t[i]+t[i+1],16))}else for(i=0;i<t.length;i++){var n=t.charCodeAt(i),o=n>>8,s=255&n;o?r.push(o,s):r.push(s)}return r}function tv(t){return 1===t.length?"0"+t:t}function ev(t){for(var e="",r=0;r<t.length;r++)e+=tv(t[r].toString(16));return e}function rv(){return Jg||(Jg=!0,(Xg=$g={}).toArray=Qg,Xg.zero2=tv,Xg.toHex=ev,Xg.encode=function(t,e){return"hex"===e?ev(t):t}),$g}var iv,nv,ov,sv,av=!1;function hv(t,e,r){var i=new Array(Math.max(t.bitLength(),r)+1);i.fill(0);for(var n=1<<e+1,o=t.clone(),s=0;s<i.length;s++){var a,h=o.andln(n-1);o.isOdd()?(a=h>(n>>1)-1?(n>>1)-h:h,o.isubn(a)):a=0,i[s]=a,o.iushrn(1)}return i}function uv(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var i,n=0,o=0;t.cmpn(-n)>0||e.cmpn(-o)>0;){var s,a,h=t.andln(3)+n&3,u=e.andln(3)+o&3;3===h&&(h=-1),3===u&&(u=-1),s=0==(1&h)?0:3!==(i=t.andln(7)+n&7)&&5!==i||2!==u?h:-h,r[0].push(s),a=0==(1&u)?0:3!==(i=e.andln(7)+o&7)&&5!==i||2!==h?u:-u,r[1].push(a),2*n===s+1&&(n=1-n),2*o===a+1&&(o=1-o),t.iushrn(1),e.iushrn(1)}return r}function fv(t,e,r){var i="_"+e;t.prototype[e]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}}function lv(t){return"string"==typeof t?nv.toArray(t,"hex"):t}function dv(t){return new ov(t,"hex","le")}function cv(){return av||(av=!0,nv=iv={},ov=Vg(),sv=el(),rv(),nv.assert=sv,nv.toArray=rv().toArray,nv.zero2=rv().zero2,nv.toHex=rv().toHex,nv.encode=rv().encode,nv.getNAF=hv,nv.getJSF=uv,nv.cachedProperty=fv,nv.parseBytes=lv,nv.intFromLE=dv),iv}var pv,mv,gv,vv,bv,yv=!1;function wv(t,e){this.type=t,this.p=new mv(e.p,16),this.red=e.prime?mv.red(e.prime):mv.mont(this.p),this.zero=new mv(0).toRed(this.red),this.one=new mv(1).toRed(this.red),this.two=new mv(2).toRed(this.red),this.n=e.n&&new mv(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function Mv(t,e){this.curve=t,this.type=e,this.precomputed=null}function _v(){return yv||(yv=!0,pv={},mv=Vg(),cv(),gv=cv().getNAF,vv=cv().getJSF,bv=cv().assert,pv=wv,wv.prototype.point=function(){throw new Error("Not implemented")},wv.prototype.validate=function(){throw new Error("Not implemented")},wv.prototype._fixedNafMul=function(t,e){bv(t.precomputed);var r=t._getDoubles(),i=gv(e,1,this._bitLength),n=(1<<r.step+1)-(r.step%2==0?2:1);n/=3;var o,s,a=[];for(o=0;o<i.length;o+=r.step){s=0;for(var h=o+r.step-1;h>=o;h--)s=(s<<1)+i[h];a.push(s)}for(var u=this.jpoint(null,null,null),f=this.jpoint(null,null,null),l=n;l>0;l--){for(o=0;o<a.length;o++)(s=a[o])===l?f=f.mixedAdd(r.points[o]):s===-l&&(f=f.mixedAdd(r.points[o].neg()));u=u.add(f)}return u.toP()},wv.prototype._wnafMul=function(t,e){var r=4,i=t._getNAFPoints(r);r=i.wnd;for(var n=i.points,o=gv(e,r,this._bitLength),s=this.jpoint(null,null,null),a=o.length-1;a>=0;a--){for(var h=0;a>=0&&0===o[a];a--)h++;if(a>=0&&h++,s=s.dblp(h),a<0)break;var u=o[a];bv(0!==u),s="affine"===t.type?u>0?s.mixedAdd(n[u-1>>1]):s.mixedAdd(n[-u-1>>1].neg()):u>0?s.add(n[u-1>>1]):s.add(n[-u-1>>1].neg())}return"affine"===t.type?s.toP():s},wv.prototype._wnafMulAdd=function(t,e,r,i,n){var o,s,a,h=this._wnafT1,u=this._wnafT2,f=this._wnafT3,l=0;for(o=0;o<i;o++){var d=(a=e[o])._getNAFPoints(t);h[o]=d.wnd,u[o]=d.points}for(o=i-1;o>=1;o-=2){var c=o-1,p=o;if(1===h[c]&&1===h[p]){var m=[e[c],null,null,e[p]];0===e[c].y.cmp(e[p].y)?(m[1]=e[c].add(e[p]),m[2]=e[c].toJ().mixedAdd(e[p].neg())):0===e[c].y.cmp(e[p].y.redNeg())?(m[1]=e[c].toJ().mixedAdd(e[p]),m[2]=e[c].add(e[p].neg())):(m[1]=e[c].toJ().mixedAdd(e[p]),m[2]=e[c].toJ().mixedAdd(e[p].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],v=vv(r[c],r[p]);for(l=Math.max(v[0].length,l),f[c]=new Array(l),f[p]=new Array(l),s=0;s<l;s++){var b=0|v[0][s],y=0|v[1][s];f[c][s]=g[3*(b+1)+(y+1)],f[p][s]=0,u[c]=m}}else f[c]=gv(r[c],h[c],this._bitLength),f[p]=gv(r[p],h[p],this._bitLength),l=Math.max(f[c].length,l),l=Math.max(f[p].length,l)}var w=this.jpoint(null,null,null),M=this._wnafT4;for(o=l;o>=0;o--){for(var _=0;o>=0;){var A=!0;for(s=0;s<i;s++)M[s]=0|f[s][o],0!==M[s]&&(A=!1);if(!A)break;_++,o--}if(o>=0&&_++,w=w.dblp(_),o<0)break;for(s=0;s<i;s++){var E=M[s];0!==E&&(E>0?a=u[s][E-1>>1]:E<0&&(a=u[s][-E-1>>1].neg()),w="affine"===a.type?w.mixedAdd(a):w.add(a))}}for(o=0;o<i;o++)u[o]=null;return n?w:w.toP()},wv.BasePoint=Mv,Mv.prototype.eq=function(){throw new Error("Not implemented")},Mv.prototype.validate=function(){return this.curve.validate(this)},wv.prototype.decodePoint=function(t,e){t=cv().toArray(t,e);var r=this.p.byteLength();if((4===t[0]||6===t[0]||7===t[0])&&t.length-1==2*r)return 6===t[0]?bv(t[t.length-1]%2==0):7===t[0]&&bv(t[t.length-1]%2==1),this.point(t.slice(1,1+r),t.slice(1+r,1+2*r));if((2===t[0]||3===t[0])&&t.length-1===r)return this.pointFromX(t.slice(1,1+r),3===t[0]);throw new Error("Unknown point format")},Mv.prototype.encodeCompressed=function(t){return this.encode(t,!0)},Mv.prototype._encode=function(t){var e=this.curve.p.byteLength(),r=this.getX().toArray("be",e);return t?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",e))},Mv.prototype.encode=function(t,e){return cv().encode(this._encode(e),t)},Mv.prototype.precompute=function(t){if(this.precomputed)return this;var e={doubles:null,naf:null,beta:null};return e.naf=this._getNAFPoints(8),e.doubles=this._getDoubles(4,t),e.beta=this._getBeta(),this.precomputed=e,this},Mv.prototype._hasDoubles=function(t){if(!this.precomputed)return!1;var e=this.precomputed.doubles;return!!e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)},Mv.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],i=this,n=0;n<e;n+=t){for(var o=0;o<t;o++)i=i.dbl();r.push(i)}return{step:t,points:r}},Mv.prototype._getNAFPoints=function(t){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var e=[this],r=(1<<t)-1,i=1===r?null:this.dbl(),n=1;n<r;n++)e[n]=e[n-1].add(i);return{wnd:t,points:e}},Mv.prototype._getBeta=function(){return null},Mv.prototype.dblp=function(t){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}),pv}var Av,Ev,Sv,kv,Bv,Rv=!1;function Tv(t){kv.call(this,"short",t),this.a=new Ev(t.a,16).toRed(this.red),this.b=new Ev(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function xv(t,e,r,i){kv.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new Ev(e,16),this.y=new Ev(r,16),i&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function Iv(t,e,r,i){kv.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new Ev(0)):(this.x=new Ev(e,16),this.y=new Ev(r,16),this.z=new Ev(i,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}function Cv(){return Rv||(Rv=!0,Av={},cv(),Ev=Vg(),Sv=Ar(),kv=_v(),Bv=cv().assert,Sv(Tv,kv),Av=Tv,Tv.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new Ev(t.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);e=(e=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(t.lambda)r=new Ev(t.lambda,16);else{var n=this._getEndoRoots(this.n);0===this.g.mul(n[0]).x.cmp(this.g.x.redMul(e))?r=n[0]:(r=n[1],Bv(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return{beta:e,lambda:r,basis:t.basis?t.basis.map((function(t){return{a:new Ev(t.a,16),b:new Ev(t.b,16)}})):this._getEndoBasis(r)}}},Tv.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:Ev.mont(t),r=new Ev(2).toRed(e).redInvm(),i=r.redNeg(),n=new Ev(3).toRed(e).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]},Tv.prototype._getEndoBasis=function(t){for(var e,r,i,n,o,s,a,h,u,f=this.n.ushrn(Math.floor(this.n.bitLength()/2)),l=t,d=this.n.clone(),c=new Ev(1),p=new Ev(0),m=new Ev(0),g=new Ev(1),v=0;0!==l.cmpn(0);){var b=d.div(l);h=d.sub(b.mul(l)),u=m.sub(b.mul(c));var y=g.sub(b.mul(p));if(!i&&h.cmp(f)<0)e=a.neg(),r=c,i=h.neg(),n=u;else if(i&&2==++v)break;a=h,d=l,l=h,m=c,c=u,g=p,p=y}o=h.neg(),s=u;var w=i.sqr().add(n.sqr());return o.sqr().add(s.sqr()).cmp(w)>=0&&(o=e,s=r),i.negative&&(i=i.neg(),n=n.neg()),o.negative&&(o=o.neg(),s=s.neg()),[{a:i,b:n},{a:o,b:s}]},Tv.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],i=e[1],n=i.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),s=n.mul(r.a),a=o.mul(i.a),h=n.mul(r.b),u=o.mul(i.b);return{k1:t.sub(s).sub(a),k2:h.add(u).neg()}},Tv.prototype.pointFromX=function(t,e){(t=new Ev(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),i=r.redSqrt();if(0!==i.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var n=i.fromRed().isOdd();return(e&&!n||!e&&n)&&(i=i.redNeg()),this.point(t,i)},Tv.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,i=this.a.redMul(e),n=e.redSqr().redMul(e).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)},Tv.prototype._endoWnafMulAdd=function(t,e,r){for(var i=this._endoWnafT1,n=this._endoWnafT2,o=0;o<t.length;o++){var s=this._endoSplit(e[o]),a=t[o],h=a._getBeta();s.k1.negative&&(s.k1.ineg(),a=a.neg(!0)),s.k2.negative&&(s.k2.ineg(),h=h.neg(!0)),i[2*o]=a,i[2*o+1]=h,n[2*o]=s.k1,n[2*o+1]=s.k2}for(var u=this._wnafMulAdd(1,i,n,2*o,r),f=0;f<2*o;f++)i[f]=null,n[f]=null;return u},Sv(xv,kv.BasePoint),Tv.prototype.point=function(t,e,r){return new xv(this,t,e,r)},Tv.prototype.pointFromJSON=function(t,e){return xv.fromJSON(this,t,e)},xv.prototype._getBeta=function(){if(this.curve.endo){var t=this.precomputed;if(t&&t.beta)return t.beta;var e=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(t){var r=this.curve,i=function(t){return r.point(t.x.redMul(r.endo.beta),t.y)};t.beta=e,e.precomputed={beta:null,naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(i)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(i)}}}return e}},xv.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},xv.fromJSON=function(t,e,r){"string"==typeof e&&(e=JSON.parse(e));var i=t.point(e[0],e[1],r);if(!e[2])return i;function n(e){return t.point(e[0],e[1],r)}var o=e[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},xv.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},xv.prototype.isInfinity=function(){return this.inf},xv.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),i=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},xv.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),i=t.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(i),o=n.redSqr().redISub(this.x.redAdd(this.x)),s=n.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},xv.prototype.getX=function(){return this.x.fromRed()},xv.prototype.getY=function(){return this.y.fromRed()},xv.prototype.mul=function(t){return t=new Ev(t,16),this.isInfinity()?this:this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},xv.prototype.mulAdd=function(t,e,r){var i=[this,e],n=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n):this.curve._wnafMulAdd(1,i,n,2)},xv.prototype.jmulAdd=function(t,e,r){var i=[this,e],n=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n,!0):this.curve._wnafMulAdd(1,i,n,2,!0)},xv.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},xv.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,i=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(i)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(i)}}}return e},xv.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},Sv(Iv,kv.BasePoint),Tv.prototype.jpoint=function(t,e,r){return new Iv(this,t,e,r)},Iv.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),i=this.y.redMul(e).redMul(t);return this.curve.point(r,i)},Iv.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},Iv.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(e),n=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),s=t.y.redMul(r.redMul(this.z)),a=i.redSub(n),h=o.redSub(s);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),l=i.redMul(u),d=h.redSqr().redIAdd(f).redISub(l).redISub(l),c=h.redMul(l.redISub(d)).redISub(o.redMul(f)),p=this.z.redMul(t.z).redMul(a);return this.curve.jpoint(d,c,p)},Iv.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,i=t.x.redMul(e),n=this.y,o=t.y.redMul(e).redMul(this.z),s=r.redSub(i),a=n.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var h=s.redSqr(),u=h.redMul(s),f=r.redMul(h),l=a.redSqr().redIAdd(u).redISub(f).redISub(f),d=a.redMul(f.redISub(l)).redISub(n.redMul(u)),c=this.z.redMul(s);return this.curve.jpoint(l,d,c)},Iv.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();var e;if(this.curve.zeroA||this.curve.threeA){var r=this;for(e=0;e<t;e++)r=r.dbl();return r}var i=this.curve.a,n=this.curve.tinv,o=this.x,s=this.y,a=this.z,h=a.redSqr().redSqr(),u=s.redAdd(s);for(e=0;e<t;e++){var f=o.redSqr(),l=u.redSqr(),d=l.redSqr(),c=f.redAdd(f).redIAdd(f).redIAdd(i.redMul(h)),p=o.redMul(l),m=c.redSqr().redISub(p.redAdd(p)),g=p.redISub(m),v=c.redMul(g);v=v.redIAdd(v).redISub(d);var b=u.redMul(a);e+1<t&&(h=h.redMul(d)),o=m,a=b,u=v}return this.curve.jpoint(o,u.redMul(n),a)},Iv.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},Iv.prototype._zeroDbl=function(){var t,e,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),o=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(o);s=s.redIAdd(s);var a=i.redAdd(i).redIAdd(i),h=a.redSqr().redISub(s).redISub(s),u=o.redIAdd(o);u=(u=u.redIAdd(u)).redIAdd(u),t=h,e=a.redMul(s.redISub(h)).redISub(u),r=this.y.redAdd(this.y)}else{var f=this.x.redSqr(),l=this.y.redSqr(),d=l.redSqr(),c=this.x.redAdd(l).redSqr().redISub(f).redISub(d);c=c.redIAdd(c);var p=f.redAdd(f).redIAdd(f),m=p.redSqr(),g=d.redIAdd(d);g=(g=g.redIAdd(g)).redIAdd(g),t=m.redISub(c).redISub(c),e=p.redMul(c.redISub(t)).redISub(g),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(t,e,r)},Iv.prototype._threeDbl=function(){var t,e,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),o=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(o);s=s.redIAdd(s);var a=i.redAdd(i).redIAdd(i).redIAdd(this.curve.a),h=a.redSqr().redISub(s).redISub(s);t=h;var u=o.redIAdd(o);u=(u=u.redIAdd(u)).redIAdd(u),e=a.redMul(s.redISub(h)).redISub(u),r=this.y.redAdd(this.y)}else{var f=this.z.redSqr(),l=this.y.redSqr(),d=this.x.redMul(l),c=this.x.redSub(f).redMul(this.x.redAdd(f));c=c.redAdd(c).redIAdd(c);var p=d.redIAdd(d),m=(p=p.redIAdd(p)).redAdd(p);t=c.redSqr().redISub(m),r=this.y.redAdd(this.z).redSqr().redISub(l).redISub(f);var g=l.redSqr();g=(g=(g=g.redIAdd(g)).redIAdd(g)).redIAdd(g),e=c.redMul(p.redISub(t)).redISub(g)}return this.curve.jpoint(t,e,r)},Iv.prototype._dbl=function(){var t=this.curve.a,e=this.x,r=this.y,i=this.z,n=i.redSqr().redSqr(),o=e.redSqr(),s=r.redSqr(),a=o.redAdd(o).redIAdd(o).redIAdd(t.redMul(n)),h=e.redAdd(e),u=(h=h.redIAdd(h)).redMul(s),f=a.redSqr().redISub(u.redAdd(u)),l=u.redISub(f),d=s.redSqr();d=(d=(d=d.redIAdd(d)).redIAdd(d)).redIAdd(d);var c=a.redMul(l).redISub(d),p=r.redAdd(r).redMul(i);return this.curve.jpoint(f,c,p)},Iv.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr(),i=e.redSqr(),n=t.redAdd(t).redIAdd(t),o=n.redSqr(),s=this.x.redAdd(e).redSqr().redISub(t).redISub(i),a=(s=(s=(s=s.redIAdd(s)).redAdd(s).redIAdd(s)).redISub(o)).redSqr(),h=i.redIAdd(i);h=(h=(h=h.redIAdd(h)).redIAdd(h)).redIAdd(h);var u=n.redIAdd(s).redSqr().redISub(o).redISub(a).redISub(h),f=e.redMul(u);f=(f=f.redIAdd(f)).redIAdd(f);var l=this.x.redMul(a).redISub(f);l=(l=l.redIAdd(l)).redIAdd(l);var d=this.y.redMul(u.redMul(h.redISub(u)).redISub(s.redMul(a)));d=(d=(d=d.redIAdd(d)).redIAdd(d)).redIAdd(d);var c=this.z.redAdd(s).redSqr().redISub(r).redISub(a);return this.curve.jpoint(l,d,c)},Iv.prototype.mul=function(t,e){return t=new Ev(t,e),this.curve._wnafMul(this,t)},Iv.prototype.eq=function(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;var e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;var i=e.redMul(this.z),n=r.redMul(t.z);return 0===this.y.redMul(n).redISub(t.y.redMul(i)).cmpn(0)},Iv.prototype.eqXToP=function(t){var e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;for(var i=t.clone(),n=this.curve.redN.redMul(e);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},Iv.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},Iv.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}),Av}var Pv,Dv,Lv,Ov,jv=!1;function Uv(t){Ov.call(this,"mont",t),this.a=new Dv(t.a,16).toRed(this.red),this.b=new Dv(t.b,16).toRed(this.red),this.i4=new Dv(4).toRed(this.red).redInvm(),this.two=new Dv(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function Nv(t,e,r){Ov.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new Dv(e,16),this.z=new Dv(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}function zv(){return jv||(jv=!0,Pv={},Dv=Vg(),Lv=Ar(),Ov=_v(),cv(),Lv(Uv,Ov),Pv=Uv,Uv.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),i=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e);return 0===i.redSqrt().redSqr().cmp(i)},Lv(Nv,Ov.BasePoint),Uv.prototype.decodePoint=function(t,e){return this.point(cv().toArray(t,e),1)},Uv.prototype.point=function(t,e){return new Nv(this,t,e)},Uv.prototype.pointFromJSON=function(t){return Nv.fromJSON(this,t)},Nv.prototype.precompute=function(){},Nv.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},Nv.fromJSON=function(t,e){return new Nv(t,e[0],e[1]||t.one)},Nv.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},Nv.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},Nv.prototype.dbl=function(){var t=this.x.redAdd(this.z).redSqr(),e=this.x.redSub(this.z).redSqr(),r=t.redSub(e),i=t.redMul(e),n=r.redMul(e.redAdd(this.curve.a24.redMul(r)));return this.curve.point(i,n)},Nv.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},Nv.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),i=this.x.redSub(this.z),n=t.x.redAdd(t.z),o=t.x.redSub(t.z).redMul(r),s=n.redMul(i),a=e.z.redMul(o.redAdd(s).redSqr()),h=e.x.redMul(o.redISub(s).redSqr());return this.curve.point(a,h)},Nv.prototype.mul=function(t){for(var e=t.clone(),r=this,i=this.curve.point(null,null),n=[];0!==e.cmpn(0);e.iushrn(1))n.push(e.andln(1));for(var o=n.length-1;o>=0;o--)0===n[o]?(r=r.diffAdd(i,this),i=i.dbl()):(i=r.diffAdd(i,this),r=r.dbl());return i},Nv.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},Nv.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},Nv.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},Nv.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},Nv.prototype.getX=function(){return this.normalize(),this.x.fromRed()}),Pv}var qv,Fv,Zv,Hv,Kv,Wv=!1;function Gv(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,Hv.call(this,"edwards",t),this.a=new Fv(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new Fv(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new Fv(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),Kv(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function Yv(t,e,r,i,n){Hv.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new Fv(e,16),this.y=new Fv(r,16),this.z=i?new Fv(i,16):this.curve.one,this.t=n&&new Fv(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}function Vv(){return Wv||(Wv=!0,qv={},cv(),Fv=Vg(),Zv=Ar(),Hv=_v(),Kv=cv().assert,Zv(Gv,Hv),qv=Gv,Gv.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},Gv.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},Gv.prototype.jpoint=function(t,e,r,i){return this.point(t,e,r,i)},Gv.prototype.pointFromX=function(t,e){(t=new Fv(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),i=this.c2.redSub(this.a.redMul(r)),n=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=i.redMul(n.redInvm()),s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var a=s.fromRed().isOdd();return(e&&!a||!e&&a)&&(s=s.redNeg()),this.point(t,s)},Gv.prototype.pointFromY=function(t,e){(t=new Fv(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),i=r.redSub(this.c2),n=r.redMul(this.d).redMul(this.c2).redSub(this.a),o=i.redMul(n.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==e&&(s=s.redNeg()),this.point(s,t)},Gv.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),i=e.redMul(this.a).redAdd(r),n=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===i.cmp(n)},Zv(Yv,Hv.BasePoint),Gv.prototype.pointFromJSON=function(t){return Yv.fromJSON(this,t)},Gv.prototype.point=function(t,e,r,i){return new Yv(this,t,e,r,i)},Yv.fromJSON=function(t,e){return new Yv(t,e[0],e[1],e[2])},Yv.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},Yv.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},Yv.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var i=this.curve._mulA(t),n=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=i.redAdd(e),s=o.redSub(r),a=i.redSub(e),h=n.redMul(s),u=o.redMul(a),f=n.redMul(a),l=s.redMul(o);return this.curve.point(h,u,l,f)},Yv.prototype._projDbl=function(){var t,e,r,i,n,o,s=this.x.redAdd(this.y).redSqr(),a=this.x.redSqr(),h=this.y.redSqr();if(this.curve.twisted){var u=(i=this.curve._mulA(a)).redAdd(h);this.zOne?(t=s.redSub(a).redSub(h).redMul(u.redSub(this.curve.two)),e=u.redMul(i.redSub(h)),r=u.redSqr().redSub(u).redSub(u)):(n=this.z.redSqr(),o=u.redSub(n).redISub(n),t=s.redSub(a).redISub(h).redMul(o),e=u.redMul(i.redSub(h)),r=u.redMul(o))}else i=a.redAdd(h),n=this.curve._mulC(this.z).redSqr(),o=i.redSub(n).redSub(n),t=this.curve._mulC(s.redISub(i)).redMul(o),e=this.curve._mulC(i).redMul(a.redISub(h)),r=i.redMul(o);return this.curve.point(t,e,r)},Yv.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},Yv.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),i=this.t.redMul(this.curve.dd).redMul(t.t),n=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),s=n.redSub(i),a=n.redAdd(i),h=r.redAdd(e),u=o.redMul(s),f=a.redMul(h),l=o.redMul(h),d=s.redMul(a);return this.curve.point(u,f,d,l)},Yv.prototype._projAdd=function(t){var e,r,i=this.z.redMul(t.z),n=i.redSqr(),o=this.x.redMul(t.x),s=this.y.redMul(t.y),a=this.curve.d.redMul(o).redMul(s),h=n.redSub(a),u=n.redAdd(a),f=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(s),l=i.redMul(h).redMul(f);return this.curve.twisted?(e=i.redMul(u).redMul(s.redSub(this.curve._mulA(o))),r=h.redMul(u)):(e=i.redMul(u).redMul(s.redSub(o)),r=this.curve._mulC(h).redMul(u)),this.curve.point(l,e,r)},Yv.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},Yv.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},Yv.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},Yv.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},Yv.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},Yv.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},Yv.prototype.getX=function(){return this.normalize(),this.x.fromRed()},Yv.prototype.getY=function(){return this.normalize(),this.y.fromRed()},Yv.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},Yv.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),i=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(i),0===this.x.cmp(e))return!0}},Yv.prototype.toP=Yv.prototype.normalize,Yv.prototype.mixedAdd=Yv.prototype.add),qv}var $v,Xv,Jv=!1;function Qv(){return Jv||(Jv=!0,(Xv=$v={}).base=_v(),Xv.short=Cv(),Xv.mont=zv(),Xv.edwards=Vv()),$v}var tb,eb,rb,ib,nb,ob,sb,ab,hb,ub,fb,lb,db,cb,pb,mb,gb,vb,bb,yb,wb,Mb,_b,Ab,Eb,Sb,kb,Bb,Rb,Tb=!1;function xb(t,e){return 55296==(64512&t.charCodeAt(e))&&(!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1)))}function Ib(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}else for(var i=0,n=0;n<t.length;n++){var o=t.charCodeAt(n);o<128?r[i++]=o:o<2048?(r[i++]=o>>6|192,r[i++]=63&o|128):xb(t,n)?(o=65536+((1023&o)<<10)+(1023&t.charCodeAt(++n)),r[i++]=o>>18|240,r[i++]=o>>12&63|128,r[i++]=o>>6&63|128,r[i++]=63&o|128):(r[i++]=o>>12|224,r[i++]=o>>6&63|128,r[i++]=63&o|128)}else for(n=0;n<t.length;n++)r[n]=0|t[n];return r}function Cb(t){for(var e="",r=0;r<t.length;r++)e+=Lb(t[r].toString(16));return e}function Pb(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function Db(t,e){for(var r="",i=0;i<t.length;i++){var n=t[i];"little"===e&&(n=Pb(n)),r+=Ob(n.toString(16))}return r}function Lb(t){return 1===t.length?"0"+t:t}function Ob(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}function jb(t,e,r,i){var n=r-e;eb(n%4==0);for(var o=new Array(n/4),s=0,a=e;s<o.length;s++,a+=4){var h;h="big"===i?t[a]<<24|t[a+1]<<16|t[a+2]<<8|t[a+3]:t[a+3]<<24|t[a+2]<<16|t[a+1]<<8|t[a],o[s]=h>>>0}return o}function Ub(t,e){for(var r=new Array(4*t.length),i=0,n=0;i<t.length;i++,n+=4){var o=t[i];"big"===e?(r[n]=o>>>24,r[n+1]=o>>>16&255,r[n+2]=o>>>8&255,r[n+3]=255&o):(r[n+3]=o>>>24,r[n+2]=o>>>16&255,r[n+1]=o>>>8&255,r[n]=255&o)}return r}function Nb(t,e){return t>>>e|t<<32-e}function zb(t,e){return t<<e|t>>>32-e}function qb(t,e){return t+e>>>0}function Fb(t,e,r){return t+e+r>>>0}function Zb(t,e,r,i){return t+e+r+i>>>0}function Hb(t,e,r,i,n){return t+e+r+i+n>>>0}function Kb(t,e,r,i){var n=t[e],o=i+t[e+1]>>>0,s=(o<i?1:0)+r+n;t[e]=s>>>0,t[e+1]=o}function Wb(t,e,r,i){return(e+i>>>0<e?1:0)+t+r>>>0}function Gb(t,e,r,i){return e+i>>>0}function Yb(t,e,r,i,n,o,s,a){var h=0,u=e;return h+=(u=u+i>>>0)<e?1:0,h+=(u=u+o>>>0)<o?1:0,t+r+n+s+(h+=(u=u+a>>>0)<a?1:0)>>>0}function Vb(t,e,r,i,n,o,s,a){return e+i+o+a>>>0}function $b(t,e,r,i,n,o,s,a,h,u){var f=0,l=e;return f+=(l=l+i>>>0)<e?1:0,f+=(l=l+o>>>0)<o?1:0,f+=(l=l+a>>>0)<a?1:0,t+r+n+s+h+(f+=(l=l+u>>>0)<u?1:0)>>>0}function Xb(t,e,r,i,n,o,s,a,h,u){return e+i+o+a+u>>>0}function Jb(t,e,r){return(e<<32-r|t>>>r)>>>0}function Qb(t,e,r){return(t<<32-r|e>>>r)>>>0}function ty(t,e,r){return t>>>r}function ey(t,e,r){return(t<<32-r|e>>>r)>>>0}function ry(){return Tb||(Tb=!0,tb={},eb=el(),rb=Ar(),ib=rb,tb.inherits=ib,nb=Ib,tb.toArray=nb,ob=Cb,tb.toHex=ob,sb=Pb,tb.htonl=sb,ab=Db,tb.toHex32=ab,hb=Lb,tb.zero2=hb,ub=Ob,tb.zero8=ub,fb=jb,tb.join32=fb,lb=Ub,tb.split32=lb,db=Nb,tb.rotr32=db,cb=zb,tb.rotl32=cb,pb=qb,tb.sum32=pb,mb=Fb,tb.sum32_3=mb,gb=Zb,tb.sum32_4=gb,vb=Hb,tb.sum32_5=vb,bb=Kb,tb.sum64=bb,yb=Wb,tb.sum64_hi=yb,wb=Gb,tb.sum64_lo=wb,Mb=Yb,tb.sum64_4_hi=Mb,_b=Vb,tb.sum64_4_lo=_b,Ab=$b,tb.sum64_5_hi=Ab,Eb=Xb,tb.sum64_5_lo=Eb,Sb=Jb,tb.rotr64_hi=Sb,kb=Qb,tb.rotr64_lo=kb,Bb=ty,tb.shr64_hi=Bb,Rb=ey,tb.shr64_lo=Rb),tb}var iy,ny,oy,sy=!1;function ay(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}function hy(){return sy||(sy=!0,iy={},ry(),ny=el(),oy=ay,iy.BlockHash=oy,ay.prototype.update=function(t,e){if(t=ry().toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){var r=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=ry().join32(t,0,t.length-r,this.endian);for(var i=0;i<t.length;i+=this._delta32)this._update(t,i,i+this._delta32)}return this},ay.prototype.digest=function(t){return this.update(this._pad()),ny(null===this.pending),this._digest(t)},ay.prototype._pad=function(){var t=this.pendingTotal,e=this._delta8,r=e-(t+this.padLength)%e,i=new Array(r+this.padLength);i[0]=128;for(var n=1;n<r;n++)i[n]=0;if(t<<=3,"big"===this.endian){for(var o=8;o<this.padLength;o++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=t>>>24&255,i[n++]=t>>>16&255,i[n++]=t>>>8&255,i[n++]=255&t}else for(i[n++]=255&t,i[n++]=t>>>8&255,i[n++]=t>>>16&255,i[n++]=t>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,o=8;o<this.padLength;o++)i[n++]=0;return i}),iy}var uy,fy,ly,dy,cy,py,my,gy,vy,by=!1;function yy(t,e,r,i){return 0===t?wy(e,r,i):1===t||3===t?function(t,e,r){return t^e^r}(e,r,i):2===t?My(e,r,i):void 0}function wy(t,e,r){return t&e^~t&r}function My(t,e,r){return t&e^t&r^e&r}function _y(t){return fy(t,2)^fy(t,13)^fy(t,22)}function Ay(t){return fy(t,6)^fy(t,11)^fy(t,25)}function Ey(t){return fy(t,7)^fy(t,18)^t>>>3}function Sy(t){return fy(t,17)^fy(t,19)^t>>>10}function ky(){return by||(by=!0,uy={},ry(),fy=ry().rotr32,ly=yy,uy.ft_1=ly,dy=wy,uy.ch32=dy,cy=My,uy.maj32=cy,py=_y,uy.s0_256=py,my=Ay,uy.s1_256=my,gy=Ey,uy.g0_256=gy,vy=Sy,uy.g1_256=vy),uy}var By,Ry,Ty,xy,Iy,Cy,Py,Dy=!1;function Ly(){if(!(this instanceof Ly))return new Ly;Cy.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}function Oy(){return Dy||(Dy=!0,By={},ry(),hy(),ky(),Ry=ry().rotl32,Ty=ry().sum32,xy=ry().sum32_5,Iy=ky().ft_1,Cy=hy().BlockHash,Py=[1518500249,1859775393,2400959708,3395469782],ry().inherits(Ly,Cy),By=Ly,Ly.blockSize=512,Ly.outSize=160,Ly.hmacStrength=80,Ly.padLength=64,Ly.prototype._update=function(t,e){for(var r=this.W,i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=Ry(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);var n=this.h[0],o=this.h[1],s=this.h[2],a=this.h[3],h=this.h[4];for(i=0;i<r.length;i++){var u=~~(i/20),f=xy(Ry(n,5),Iy(u,o,s,a),h,r[i],Py[u]);h=a,a=s,s=Ry(o,30),o=n,n=f}this.h[0]=Ty(this.h[0],n),this.h[1]=Ty(this.h[1],o),this.h[2]=Ty(this.h[2],s),this.h[3]=Ty(this.h[3],a),this.h[4]=Ty(this.h[4],h)},Ly.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h,"big"):ry().split32(this.h,"big")}),By}var jy,Uy,Ny,zy,qy,Fy,Zy,Hy,Ky,Wy,Gy,Yy,Vy,$y=!1;function Xy(){if(!(this instanceof Xy))return new Xy;Yy.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Vy,this.W=new Array(64)}function Jy(){return $y||($y=!0,jy={},ry(),hy(),ky(),Uy=el(),Ny=ry().sum32,zy=ry().sum32_4,qy=ry().sum32_5,Fy=ky().ch32,Zy=ky().maj32,Hy=ky().s0_256,Ky=ky().s1_256,Wy=ky().g0_256,Gy=ky().g1_256,Yy=hy().BlockHash,Vy=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],ry().inherits(Xy,Yy),jy=Xy,Xy.blockSize=512,Xy.outSize=256,Xy.hmacStrength=192,Xy.padLength=64,Xy.prototype._update=function(t,e){for(var r=this.W,i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=zy(Gy(r[i-2]),r[i-7],Wy(r[i-15]),r[i-16]);var n=this.h[0],o=this.h[1],s=this.h[2],a=this.h[3],h=this.h[4],u=this.h[5],f=this.h[6],l=this.h[7];for(Uy(this.k.length===r.length),i=0;i<r.length;i++){var d=qy(l,Ky(h),Fy(h,u,f),this.k[i],r[i]),c=Ny(Hy(n),Zy(n,o,s));l=f,f=u,u=h,h=Ny(a,d),a=s,s=o,o=n,n=Ny(d,c)}this.h[0]=Ny(this.h[0],n),this.h[1]=Ny(this.h[1],o),this.h[2]=Ny(this.h[2],s),this.h[3]=Ny(this.h[3],a),this.h[4]=Ny(this.h[4],h),this.h[5]=Ny(this.h[5],u),this.h[6]=Ny(this.h[6],f),this.h[7]=Ny(this.h[7],l)},Xy.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h,"big"):ry().split32(this.h,"big")}),jy}var Qy,tw,ew=!1;function rw(){if(!(this instanceof rw))return new rw;tw.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}function iw(){return ew||(ew=!0,Qy={},ry(),tw=Jy(),ry().inherits(rw,tw),Qy=rw,rw.blockSize=512,rw.outSize=224,rw.hmacStrength=192,rw.padLength=64,rw.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h.slice(0,7),"big"):ry().split32(this.h.slice(0,7),"big")}),Qy}var nw,ow,sw,aw,hw,uw,fw,lw,dw,cw,pw,mw,gw,vw,bw,yw=!1;function ww(){if(!(this instanceof ww))return new ww;vw.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=bw,this.W=new Array(160)}function Mw(t,e,r,i,n){var o=t&r^~t&n;return o<0&&(o+=4294967296),o}function _w(t,e,r,i,n,o){var s=e&i^~e&o;return s<0&&(s+=4294967296),s}function Aw(t,e,r,i,n){var o=t&r^t&n^r&n;return o<0&&(o+=4294967296),o}function Ew(t,e,r,i,n,o){var s=e&i^e&o^i&o;return s<0&&(s+=4294967296),s}function Sw(t,e){var r=sw(t,e,28)^sw(e,t,2)^sw(e,t,7);return r<0&&(r+=4294967296),r}function kw(t,e){var r=aw(t,e,28)^aw(e,t,2)^aw(e,t,7);return r<0&&(r+=4294967296),r}function Bw(t,e){var r=aw(t,e,14)^aw(t,e,18)^aw(e,t,9);return r<0&&(r+=4294967296),r}function Rw(t,e){var r=sw(t,e,1)^sw(t,e,8)^hw(t,e,7);return r<0&&(r+=4294967296),r}function Tw(t,e){var r=aw(t,e,1)^aw(t,e,8)^uw(t,e,7);return r<0&&(r+=4294967296),r}function xw(t,e){var r=aw(t,e,19)^aw(e,t,29)^uw(t,e,6);return r<0&&(r+=4294967296),r}function Iw(){return yw||(yw=!0,nw={},ry(),hy(),ow=el(),sw=ry().rotr64_hi,aw=ry().rotr64_lo,hw=ry().shr64_hi,uw=ry().shr64_lo,fw=ry().sum64,lw=ry().sum64_hi,dw=ry().sum64_lo,cw=ry().sum64_4_hi,pw=ry().sum64_4_lo,mw=ry().sum64_5_hi,gw=ry().sum64_5_lo,vw=hy().BlockHash,bw=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],ry().inherits(ww,vw),nw=ww,ww.blockSize=1024,ww.outSize=512,ww.hmacStrength=192,ww.padLength=128,ww.prototype._prepareBlock=function(t,e){for(var r,i,n,o=this.W,s=0;s<32;s++)o[s]=t[e+s];for(;s<o.length;s+=2){var a=(r=o[s-4],i=o[s-3],n=void 0,(n=sw(r,i,19)^sw(i,r,29)^hw(r,i,6))<0&&(n+=4294967296),n),h=xw(o[s-4],o[s-3]),u=o[s-14],f=o[s-13],l=Rw(o[s-30],o[s-29]),d=Tw(o[s-30],o[s-29]),c=o[s-32],p=o[s-31];o[s]=cw(a,h,u,f,l,d,c,p),o[s+1]=pw(a,h,u,f,l,d,c,p)}},ww.prototype._update=function(t,e){this._prepareBlock(t,e);var r,i,n,o=this.W,s=this.h[0],a=this.h[1],h=this.h[2],u=this.h[3],f=this.h[4],l=this.h[5],d=this.h[6],c=this.h[7],p=this.h[8],m=this.h[9],g=this.h[10],v=this.h[11],b=this.h[12],y=this.h[13],w=this.h[14],M=this.h[15];ow(this.k.length===o.length);for(var _=0;_<o.length;_+=2){var A=w,E=M,S=(n=void 0,(n=sw(r=p,i=m,14)^sw(r,i,18)^sw(i,r,9))<0&&(n+=4294967296),n),k=Bw(p,m),B=Mw(p,0,g,0,b),R=_w(0,m,0,v,0,y),T=this.k[_],x=this.k[_+1],I=o[_],C=o[_+1],P=mw(A,E,S,k,B,R,T,x,I,C),D=gw(A,E,S,k,B,R,T,x,I,C);A=Sw(s,a),E=kw(s,a),S=Aw(s,0,h,0,f),k=Ew(0,a,0,u,0,l);var L=lw(A,E,S,k),O=dw(A,E,S,k);w=b,M=y,b=g,y=v,g=p,v=m,p=lw(d,c,P,D),m=dw(c,c,P,D),d=f,c=l,f=h,l=u,h=s,u=a,s=lw(P,D,L,O),a=dw(P,D,L,O)}fw(this.h,0,s,a),fw(this.h,2,h,u),fw(this.h,4,f,l),fw(this.h,6,d,c),fw(this.h,8,p,m),fw(this.h,10,g,v),fw(this.h,12,b,y),fw(this.h,14,w,M)},ww.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h,"big"):ry().split32(this.h,"big")}),nw}var Cw,Pw,Dw=!1;function Lw(){if(!(this instanceof Lw))return new Lw;Pw.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}function Ow(){return Dw||(Dw=!0,Cw={},ry(),Pw=Iw(),ry().inherits(Lw,Pw),Cw=Lw,Lw.blockSize=1024,Lw.outSize=384,Lw.hmacStrength=192,Lw.padLength=128,Lw.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h.slice(0,12),"big"):ry().split32(this.h.slice(0,12),"big")}),Cw}var jw,Uw,Nw,zw,qw,Fw,Zw=!1;function Hw(){return Zw||(Zw=!0,jw={},Uw=Oy(),jw.sha1=Uw,Nw=iw(),jw.sha224=Nw,zw=Jy(),jw.sha256=zw,qw=Ow(),jw.sha384=qw,Fw=Iw(),jw.sha512=Fw),jw}var Kw,Ww,Gw,Yw,Vw,$w,Xw,Jw,Qw,tM,eM,rM=!1;function iM(){if(!(this instanceof iM))return new iM;$w.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function nM(t,e,r,i){return t<=15?e^r^i:t<=31?e&r|~e&i:t<=47?(e|~r)^i:t<=63?e&i|r&~i:e^(r|~i)}function oM(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function sM(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}function aM(){return rM||(rM=!0,Kw={},ry(),hy(),Ww=ry().rotl32,Gw=ry().sum32,Yw=ry().sum32_3,Vw=ry().sum32_4,$w=hy().BlockHash,ry().inherits(iM,$w),Xw=iM,Kw.ripemd160=Xw,iM.blockSize=512,iM.outSize=160,iM.hmacStrength=192,iM.padLength=64,iM.prototype._update=function(t,e){for(var r=this.h[0],i=this.h[1],n=this.h[2],o=this.h[3],s=this.h[4],a=r,h=i,u=n,f=o,l=s,d=0;d<80;d++){var c=Gw(Ww(Vw(r,nM(d,i,n,o),t[Jw[d]+e],oM(d)),tM[d]),s);r=s,s=o,o=Ww(n,10),n=i,i=c,c=Gw(Ww(Vw(a,nM(79-d,h,u,f),t[Qw[d]+e],sM(d)),eM[d]),l),a=l,l=f,f=Ww(u,10),u=h,h=c}c=Yw(this.h[1],n,f),this.h[1]=Yw(this.h[2],o,l),this.h[2]=Yw(this.h[3],s,a),this.h[3]=Yw(this.h[4],r,h),this.h[4]=Yw(this.h[0],i,u),this.h[0]=c},iM.prototype._digest=function(t){return"hex"===t?ry().toHex32(this.h,"little"):ry().split32(this.h,"little")},Jw=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],Qw=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],tM=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],eM=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),Kw}var hM,uM,fM=!1;function lM(t,e,r){if(!(this instanceof lM))return new lM(t,e,r);this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,this._init(ry().toArray(e,r))}function dM(){return fM||(fM=!0,hM={},ry(),uM=el(),hM=lM,lM.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),uM(t.length<=this.blockSize);for(var e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new this.Hash).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new this.Hash).update(t)},lM.prototype.update=function(t,e){return this.inner.update(t,e),this},lM.prototype.digest=function(t){return this.outer.update(this.inner.digest()),this.outer.digest(t)}),hM}var cM,pM,mM=!1;function gM(){return mM||(mM=!0,(pM=cM={}).utils=ry(),pM.common=hy(),pM.sha=Hw(),pM.ripemd=aM(),pM.hmac=dM(),pM.sha1=pM.sha.sha1,pM.sha256=pM.sha.sha256,pM.sha224=pM.sha.sha224,pM.sha384=pM.sha.sha384,pM.sha512=pM.sha.sha512,pM.ripemd160=pM.ripemd.ripemd160),cM}var vM,bM=!1;function yM(){return bM||(bM=!0,vM={},vM={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}),vM}var wM,MM,_M,AM,EM=!1;function SM(t){"short"===t.type?this.curve=new(Qv().short)(t):"edwards"===t.type?this.curve=new(Qv().edwards)(t):this.curve=new(Qv().mont)(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,_M(this.g.validate(),"Invalid curve"),_M(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function kM(t,e){Object.defineProperty(MM,t,{configurable:!0,enumerable:!0,get:function(){var r=new SM(e);return Object.defineProperty(MM,t,{configurable:!0,enumerable:!0,value:r}),r}})}function BM(){return EM||(EM=!0,function(){MM=wM={},gM(),Qv(),cv(),_M=cv().assert,MM.PresetCurve=SM,kM("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:gM().sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),kM("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:gM().sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),kM("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:gM().sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),kM("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:gM().sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),kM("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:gM().sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),kM("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:gM().sha256,gRed:!1,g:["9"]}),kM("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:gM().sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{AM=yM()}catch(t){AM=void 0}kM("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:gM().sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",AM]})}()),wM}var RM,TM,xM=!1;function IM(t){if(!(this instanceof IM))return new IM(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=rv().toArray(t.entropy,t.entropyEnc||"hex"),r=rv().toArray(t.nonce,t.nonceEnc||"hex"),i=rv().toArray(t.pers,t.persEnc||"hex");TM(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}function CM(){return xM||(xM=!0,RM={},gM(),rv(),TM=el(),RM=IM,IM.prototype._init=function(t,e,r){var i=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var n=0;n<this.V.length;n++)this.K[n]=0,this.V[n]=1;this._update(i),this._reseed=1,this.reseedInterval=281474976710656},IM.prototype._hmac=function(){return new(gM().hmac)(this.hash,this.K)},IM.prototype._update=function(t){var e=this._hmac().update(this.V).update([0]);t&&(e=e.update(t)),this.K=e.digest(),this.V=this._hmac().update(this.V).digest(),t&&(this.K=this._hmac().update(this.V).update([1]).update(t).digest(),this.V=this._hmac().update(this.V).digest())},IM.prototype.reseed=function(t,e,r,i){"string"!=typeof e&&(i=r,r=e,e=null),t=rv().toArray(t,e),r=rv().toArray(r,i),TM(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this._reseed=1},IM.prototype.generate=function(t,e,r,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(i=r,r=e,e=null),r&&(r=rv().toArray(r,i||"hex"),this._update(r));for(var n=[];n.length<t;)this.V=this._hmac().update(this.V).digest(),n=n.concat(this.V);var o=n.slice(0,t);return this._update(r),this._reseed++,rv().encode(o,e)}),RM}var PM,DM,LM,OM=!1;function jM(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}function UM(){return OM||(OM=!0,PM={},DM=Vg(),cv(),LM=cv().assert,PM=jM,jM.fromPublic=function(t,e,r){return e instanceof jM?e:new jM(t,{pub:e,pubEnc:r})},jM.fromPrivate=function(t,e,r){return e instanceof jM?e:new jM(t,{priv:e,privEnc:r})},jM.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},jM.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},jM.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},jM.prototype._importPrivate=function(t,e){this.priv=new DM(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},jM.prototype._importPublic=function(t,e){if(t.x||t.y)return"mont"===this.ec.curve.type?LM(t.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||LM(t.x&&t.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(t.x,t.y));this.pub=this.ec.curve.decodePoint(t,e)},jM.prototype.derive=function(t){return t.validate()||LM(t.validate(),"public point not validated"),t.mul(this.priv).getX()},jM.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},jM.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},jM.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}),PM}var NM,zM,qM,FM=!1;function ZM(t,e){if(t instanceof ZM)return t;this._importDER(t,e)||(qM(t.r&&t.s,"Signature without r or s"),this.r=new zM(t.r,16),this.s=new zM(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function HM(){this.place=0}function KM(t,e){var r=t[e.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var n=0,o=0,s=e.place;o<i;o++,s++)n<<=8,n|=t[s],n>>>=0;return!(n<=127)&&(e.place=s,n)}function WM(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)}function GM(t,e){if(e<128)t.push(e);else{var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}function YM(){return FM||(FM=!0,NM={},zM=Vg(),cv(),qM=cv().assert,NM=ZM,ZM.prototype._importDER=function(t,e){t=cv().toArray(t,e);var r=new HM;if(48!==t[r.place++])return!1;var i=KM(t,r);if(!1===i)return!1;if(i+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var n=KM(t,r);if(!1===n)return!1;var o=t.slice(r.place,n+r.place);if(r.place+=n,2!==t[r.place++])return!1;var s=KM(t,r);if(!1===s)return!1;if(t.length!==s+r.place)return!1;var a=t.slice(r.place,s+r.place);if(0===o[0]){if(!(128&o[1]))return!1;o=o.slice(1)}if(0===a[0]){if(!(128&a[1]))return!1;a=a.slice(1)}return this.r=new zM(o),this.s=new zM(a),this.recoveryParam=null,!0},ZM.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=WM(e),r=WM(r);!(r[0]||128&r[1]);)r=r.slice(1);var i=[2];GM(i,e.length),(i=i.concat(e)).push(2),GM(i,r.length);var n=i.concat(r),o=[48];return GM(o,n.length),o=o.concat(n),cv().encode(o,t)}),NM}var VM,$M,XM,JM,QM,t_,e_,r_,i_=!1;function n_(t){if(!(this instanceof n_))return new n_(t);"string"==typeof t&&(t_(Object.prototype.hasOwnProperty.call(JM,t),"Unknown curve "+t),t=JM[t]),t instanceof JM.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),this.hash=t.hash||t.curve.hash}function o_(){return i_||(i_=!0,VM={},$M=Vg(),XM=CM(),cv(),JM=BM(),QM=Am(),t_=cv().assert,e_=UM(),r_=YM(),VM=n_,n_.prototype.keyPair=function(t){return new e_(this,t)},n_.prototype.keyFromPrivate=function(t,e){return e_.fromPrivate(this,t,e)},n_.prototype.keyFromPublic=function(t,e){return e_.fromPublic(this,t,e)},n_.prototype.genKeyPair=function(t){t||(t={});for(var e=new XM({hash:this.hash,pers:t.pers,persEnc:t.persEnc||"utf8",entropy:t.entropy||QM(this.hash.hmacStrength),entropyEnc:t.entropy&&t.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),i=this.n.sub(new $M(2));;){var n=new $M(e.generate(r));if(!(n.cmp(i)>0))return n.iaddn(1),this.keyFromPrivate(n)}},n_.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},n_.prototype.sign=function(t,e,r,i){"object"==typeof r&&(i=r,r=null),i||(i={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new $M(t,16));for(var n=this.n.byteLength(),o=e.getPrivate().toArray("be",n),s=t.toArray("be",n),a=new XM({hash:this.hash,entropy:o,nonce:s,pers:i.pers,persEnc:i.persEnc||"utf8"}),h=this.n.sub(new $M(1)),u=0;;u++){var f=i.k?i.k(u):new $M(a.generate(this.n.byteLength()));if(!((f=this._truncateToN(f,!0)).cmpn(1)<=0||f.cmp(h)>=0)){var l=this.g.mul(f);if(!l.isInfinity()){var d=l.getX(),c=d.umod(this.n);if(0!==c.cmpn(0)){var p=f.invm(this.n).mul(c.mul(e.getPrivate()).iadd(t));if(0!==(p=p.umod(this.n)).cmpn(0)){var m=(l.getY().isOdd()?1:0)|(0!==d.cmp(c)?2:0);return i.canonical&&p.cmp(this.nh)>0&&(p=this.n.sub(p),m^=1),new r_({r:c,s:p,recoveryParam:m})}}}}}},n_.prototype.verify=function(t,e,r,i){t=this._truncateToN(new $M(t,16)),r=this.keyFromPublic(r,i);var n=(e=new r_(e,"hex")).r,o=e.s;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;var s,a=o.invm(this.n),h=a.mul(t).umod(this.n),u=a.mul(n).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(h,r.getPublic(),u)).isInfinity()&&s.eqXToP(n):!(s=this.g.mulAdd(h,r.getPublic(),u)).isInfinity()&&0===s.getX().umod(this.n).cmp(n)},n_.prototype.recoverPubKey=function(t,e,r,i){t_((3&r)===r,"The recovery param is more than two bits"),e=new r_(e,i);var n=this.n,o=new $M(t),s=e.r,a=e.s,h=1&r,u=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");s=u?this.curve.pointFromX(s.add(this.curve.n),h):this.curve.pointFromX(s,h);var f=e.r.invm(n),l=n.sub(o).mul(f).umod(n),d=a.mul(f).umod(n);return this.g.mulAdd(l,s,d)},n_.prototype.getKeyRecoveryParam=function(t,e,r,i){if(null!==(e=new r_(e,i)).recoveryParam)return e.recoveryParam;for(var n=0;n<4;n++){var o;try{o=this.recoverPubKey(t,e,n)}catch(t){continue}if(o.eq(r))return n}throw new Error("Unable to find valid recovery factor")}),VM}var s_,a_,h_,u_,f_=!1;function l_(t,e){this.eddsa=t,this._secret=h_(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=h_(e.pub)}function d_(){return f_||(f_=!0,s_={},cv(),a_=cv().assert,h_=cv().parseBytes,u_=cv().cachedProperty,l_.fromPublic=function(t,e){return e instanceof l_?e:new l_(t,{pub:e})},l_.fromSecret=function(t,e){return e instanceof l_?e:new l_(t,{secret:e})},l_.prototype.secret=function(){return this._secret},u_(l_,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),u_(l_,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),u_(l_,"privBytes",(function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,i=e.slice(0,t.encodingLength);return i[0]&=248,i[r]&=127,i[r]|=64,i})),u_(l_,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),u_(l_,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),u_(l_,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),l_.prototype.sign=function(t){return a_(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},l_.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},l_.prototype.getSecret=function(t){return a_(this._secret,"KeyPair is public only"),cv().encode(this.secret(),t)},l_.prototype.getPublic=function(t){return cv().encode(this.pubBytes(),t)},s_=l_),s_}var c_,p_,m_,g_,v_,b_=!1;function y_(t,e){this.eddsa=t,"object"!=typeof e&&(e=v_(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),m_(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof p_&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}function w_(){return b_||(b_=!0,c_={},p_=Vg(),cv(),m_=cv().assert,g_=cv().cachedProperty,v_=cv().parseBytes,g_(y_,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),g_(y_,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),g_(y_,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),g_(y_,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),y_.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},y_.prototype.toHex=function(){return cv().encode(this.toBytes(),"hex").toUpperCase()},c_=y_),c_}var M_,__,A_,E_,S_,k_=!1;function B_(t){if(A_("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof B_))return new B_(t);t=__[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=gM().sha512}function R_(){return k_||(k_=!0,M_={},gM(),__=BM(),cv(),A_=cv().assert,E_=cv().parseBytes,d_(),S_=w_(),M_=B_,B_.prototype.sign=function(t,e){t=E_(t);var r=this.keyFromSecret(e),i=this.hashInt(r.messagePrefix(),t),n=this.g.mul(i),o=this.encodePoint(n),s=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),a=i.add(s).umod(this.curve.n);return this.makeSignature({R:n,S:a,Rencoded:o})},B_.prototype.verify=function(t,e,r){t=E_(t),e=this.makeSignature(e);var i=this.keyFromPublic(r),n=this.hashInt(e.Rencoded(),i.pubBytes(),t),o=this.g.mul(e.S());return e.R().add(i.pub().mul(n)).eq(o)},B_.prototype.hashInt=function(){for(var t=this.hash(),e=0;e<arguments.length;e++)t.update(arguments[e]);return cv().intFromLE(t.digest()).umod(this.curve.n)},B_.prototype.keyFromPublic=function(t){return d_().fromPublic(this,t)},B_.prototype.keyFromSecret=function(t){return d_().fromSecret(this,t)},B_.prototype.makeSignature=function(t){return t instanceof S_?t:new S_(this,t)},B_.prototype.encodePoint=function(t){var e=t.getY().toArray("le",this.encodingLength);return e[this.encodingLength-1]|=t.getX().isOdd()?128:0,e},B_.prototype.decodePoint=function(t){var e=(t=cv().parseBytes(t)).length-1,r=t.slice(0,e).concat(-129&t[e]),i=0!=(128&t[e]),n=cv().intFromLE(r);return this.curve.pointFromY(n,i)},B_.prototype.encodeInt=function(t){return t.toArray("le",this.encodingLength)},B_.prototype.decodeInt=function(t){return cv().intFromLE(t)},B_.prototype.isPoint=function(t){return t instanceof this.pointClass}),M_}var T_,x_,I_=!1;function C_(){return I_||(I_=!0,(x_=T_={}).version=Kg().version,x_.utils=cv(),x_.rand=Am(),x_.curve=Qv(),x_.curves=BM(),x_.ec=o_(),x_.eddsa=R_()),T_}var P_,D_=!1;function L_(){P_=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}function O_(){return D_||(D_=!0,L_()),P_}var j_,U_,N_,z_,q_,F_,Z_=!1;function H_(){return Z_||(Z_=!0,function(){for(q_ in j_={},jt(),U_=Ye(),N_=U_.Buffer,z_={},U_)U_.hasOwnProperty(q_)&&"SlowBuffer"!==q_&&"Buffer"!==q_&&(z_[q_]=U_[q_]);for(q_ in F_=z_.Buffer={},N_)N_.hasOwnProperty(q_)&&"allocUnsafe"!==q_&&"allocUnsafeSlow"!==q_&&(F_[q_]=N_[q_]);if(z_.Buffer.prototype=N_.prototype,F_.from&&F_.from!==Uint8Array.from||(F_.from=function(t,e,r){if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof t);if(t&&void 0===t.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);return N_(t,e,r)}),F_.alloc||(F_.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError('The "size" argument must be of type number. Received type '+typeof t);if(t<0||t>=2*(1<<30))throw new RangeError('The value "'+t+'" is invalid for option "size"');var i=N_(t);return e&&0!==e.length?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i}),!z_.kStringMaxLength)try{z_.kStringMaxLength=jt().binding("buffer").kStringMaxLength}catch(t){}z_.constants||(z_.constants={MAX_LENGTH:z_.kMaxLength},z_.kStringMaxLength&&(z_.constants.MAX_STRING_LENGTH=z_.kStringMaxLength)),j_=z_}()),j_}var K_,W_,G_,Y_=!1;function V_(t){this._reporterState={obj:null,path:[],options:t||{},errors:[]}}function $_(t,e){this.path=t,this.rethrow(e)}function X_(){return Y_||(Y_=!0,K_={},W_=Ar(),G_=V_,K_.Reporter=G_,V_.prototype.isError=function(t){return t instanceof $_},V_.prototype.save=function(){const t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},V_.prototype.restore=function(t){const e=this._reporterState;e.obj=t.obj,e.path=e.path.slice(0,t.pathLen)},V_.prototype.enterKey=function(t){return this._reporterState.path.push(t)},V_.prototype.exitKey=function(t){const e=this._reporterState;e.path=e.path.slice(0,t-1)},V_.prototype.leaveKey=function(t,e,r){const i=this._reporterState;this.exitKey(t),null!==i.obj&&(i.obj[e]=r)},V_.prototype.path=function(){return this._reporterState.path.join("/")},V_.prototype.enterObject=function(){const t=this._reporterState,e=t.obj;return t.obj={},e},V_.prototype.leaveObject=function(t){const e=this._reporterState,r=e.obj;return e.obj=t,r},V_.prototype.error=function(t){let e;const r=this._reporterState,i=t instanceof $_;if(e=i?t:new $_(r.path.map((function(t){return"["+JSON.stringify(t)+"]"})).join(""),t.message||t,t.stack),!r.options.partial)throw e;return i||r.errors.push(e),e},V_.prototype.wrapResult=function(t){const e=this._reporterState;return e.options.partial?{result:this.isError(t)?null:t,errors:e.errors}:t},W_($_,Error),$_.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,$_),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}),K_}var J_,Q_,tA,eA,rA,iA,nA=!1;function oA(t,e){tA.call(this,e),eA.isBuffer(t)?(this.base=t,this.offset=0,this.length=t.length):this.error("Input not Buffer")}function sA(t,e){if(Array.isArray(t))this.length=0,this.value=t.map((function(t){return sA.isEncoderBuffer(t)||(t=new sA(t,e)),this.length+=t.length,t}),this);else if("number"==typeof t){if(!(0<=t&&t<=255))return e.error("non-byte EncoderBuffer value");this.value=t,this.length=1}else if("string"==typeof t)this.value=t,this.length=eA.byteLength(t);else{if(!eA.isBuffer(t))return e.error("Unsupported type: "+typeof t);this.value=t,this.length=t.length}}function aA(){return nA||(nA=!0,J_={},Q_=Ar(),tA=X_().Reporter,eA=H_().Buffer,Q_(oA,tA),rA=oA,J_.DecoderBuffer=rA,oA.isDecoderBuffer=function(t){return t instanceof oA||"object"==typeof t&&eA.isBuffer(t.base)&&"DecoderBuffer"===t.constructor.name&&"number"==typeof t.offset&&"number"==typeof t.length&&"function"==typeof t.save&&"function"==typeof t.restore&&"function"==typeof t.isEmpty&&"function"==typeof t.readUInt8&&"function"==typeof t.skip&&"function"==typeof t.raw},oA.prototype.save=function(){return{offset:this.offset,reporter:tA.prototype.save.call(this)}},oA.prototype.restore=function(t){const e=new oA(this.base);return e.offset=t.offset,e.length=this.offset,this.offset=t.offset,tA.prototype.restore.call(this,t.reporter),e},oA.prototype.isEmpty=function(){return this.offset===this.length},oA.prototype.readUInt8=function(t){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(t||"DecoderBuffer overrun")},oA.prototype.skip=function(t,e){if(!(this.offset+t<=this.length))return this.error(e||"DecoderBuffer overrun");const r=new oA(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+t,this.offset+=t,r},oA.prototype.raw=function(t){return this.base.slice(t?t.offset:this.offset,this.length)},iA=sA,J_.EncoderBuffer=iA,sA.isEncoderBuffer=function(t){return t instanceof sA||"object"==typeof t&&"EncoderBuffer"===t.constructor.name&&"number"==typeof t.length&&"function"==typeof t.join},sA.prototype.join=function(t,e){return t||(t=eA.alloc(this.length)),e||(e=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(t,e),e+=r.length})):("number"==typeof this.value?t[e]=this.value:"string"==typeof this.value?t.write(this.value,e):eA.isBuffer(this.value)&&this.value.copy(t,e),e+=this.length)),t}),J_}var hA,uA,fA,lA,dA,cA,pA,mA,gA,vA=!1;function bA(t,e,r){const i={};this._baseState=i,i.name=r,i.enc=t,i.parent=e||null,i.children=null,i.tag=null,i.args=null,i.reverseArgs=null,i.choice=null,i.optional=!1,i.any=!1,i.obj=!1,i.use=null,i.useDecoder=null,i.key=null,i.default=null,i.explicit=null,i.implicit=null,i.contains=null,i.parent||(i.children=[],this._wrap())}function yA(){return vA||(vA=!0,hA={},uA=X_().Reporter,fA=aA().EncoderBuffer,lA=aA().DecoderBuffer,dA=el(),pA=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(cA=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"]),mA=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"],hA=bA,gA=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"],bA.prototype.clone=function(){const t=this._baseState,e={};gA.forEach((function(r){e[r]=t[r]}));const r=new this.constructor(e.parent);return r._baseState=e,r},bA.prototype._wrap=function(){const t=this._baseState;pA.forEach((function(e){this[e]=function(){const r=new this.constructor(this);return t.children.push(r),r[e].apply(r,arguments)}}),this)},bA.prototype._init=function(t){const e=this._baseState;dA(null===e.parent),t.call(this),e.children=e.children.filter((function(t){return t._baseState.parent===this}),this),dA.equal(e.children.length,1,"Root node can have only one child")},bA.prototype._useArgs=function(t){const e=this._baseState,r=t.filter((function(t){return t instanceof this.constructor}),this);t=t.filter((function(t){return!(t instanceof this.constructor)}),this),0!==r.length&&(dA(null===e.children),e.children=r,r.forEach((function(t){t._baseState.parent=this}),this)),0!==t.length&&(dA(null===e.args),e.args=t,e.reverseArgs=t.map((function(t){if("object"!=typeof t||t.constructor!==Object)return t;const e={};return Object.keys(t).forEach((function(r){r==(0|r)&&(r|=0);const i=t[r];e[i]=r})),e})))},mA.forEach((function(t){bA.prototype[t]=function(){const e=this._baseState;throw new Error(t+" not implemented for encoding: "+e.enc)}})),cA.forEach((function(t){bA.prototype[t]=function(){const e=this._baseState,r=Array.prototype.slice.call(arguments);return dA(null===e.tag),e.tag=t,this._useArgs(r),this}})),bA.prototype.use=function(t){dA(t);const e=this._baseState;return dA(null===e.use),e.use=t,this},bA.prototype.optional=function(){return this._baseState.optional=!0,this},bA.prototype.def=function(t){const e=this._baseState;return dA(null===e.default),e.default=t,e.optional=!0,this},bA.prototype.explicit=function(t){const e=this._baseState;return dA(null===e.explicit&&null===e.implicit),e.explicit=t,this},bA.prototype.implicit=function(t){const e=this._baseState;return dA(null===e.explicit&&null===e.implicit),e.implicit=t,this},bA.prototype.obj=function(){const t=this._baseState,e=Array.prototype.slice.call(arguments);return t.obj=!0,0!==e.length&&this._useArgs(e),this},bA.prototype.key=function(t){const e=this._baseState;return dA(null===e.key),e.key=t,this},bA.prototype.any=function(){return this._baseState.any=!0,this},bA.prototype.choice=function(t){const e=this._baseState;return dA(null===e.choice),e.choice=t,this._useArgs(Object.keys(t).map((function(e){return t[e]}))),this},bA.prototype.contains=function(t){const e=this._baseState;return dA(null===e.use),e.contains=t,this},bA.prototype._decode=function(t,e){const r=this._baseState;if(null===r.parent)return t.wrapResult(r.children[0]._decode(t,e));let i,n=r.default,o=!0,s=null;if(null!==r.key&&(s=t.enterKey(r.key)),r.optional){let i=null;if(null!==r.explicit?i=r.explicit:null!==r.implicit?i=r.implicit:null!==r.tag&&(i=r.tag),null!==i||r.any){if(o=this._peekTag(t,i,r.any),t.isError(o))return o}else{const i=t.save();try{null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),o=!0}catch(t){o=!1}t.restore(i)}}if(r.obj&&o&&(i=t.enterObject()),o){if(null!==r.explicit){const e=this._decodeTag(t,r.explicit);if(t.isError(e))return e;t=e}const i=t.offset;if(null===r.use&&null===r.choice){let e;r.any&&(e=t.save());const i=this._decodeTag(t,null!==r.implicit?r.implicit:r.tag,r.any);if(t.isError(i))return i;r.any?n=t.raw(e):t=i}if(e&&e.track&&null!==r.tag&&e.track(t.path(),i,t.length,"tagged"),e&&e.track&&null!==r.tag&&e.track(t.path(),t.offset,t.length,"content"),r.any||(n=null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e)),t.isError(n))return n;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(t,e)})),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){const i=new lA(n);n=this._getUse(r.contains,t._reporterState.obj)._decode(i,e)}}return r.obj&&o&&(n=t.leaveObject(i)),null===r.key||null===n&&!0!==o?null!==s&&t.exitKey(s):t.leaveKey(s,r.key,n),n},bA.prototype._decodeGeneric=function(t,e,r){const i=this._baseState;return"seq"===t||"set"===t?null:"seqof"===t||"setof"===t?this._decodeList(e,t,i.args[0],r):/str$/.test(t)?this._decodeStr(e,t,r):"objid"===t&&i.args?this._decodeObjid(e,i.args[0],i.args[1],r):"objid"===t?this._decodeObjid(e,null,null,r):"gentime"===t||"utctime"===t?this._decodeTime(e,t,r):"null_"===t?this._decodeNull(e,r):"bool"===t?this._decodeBool(e,r):"objDesc"===t?this._decodeStr(e,t,r):"int"===t||"enum"===t?this._decodeInt(e,i.args&&i.args[0],r):null!==i.use?this._getUse(i.use,e._reporterState.obj)._decode(e,r):e.error("unknown tag: "+t)},bA.prototype._getUse=function(t,e){const r=this._baseState;return r.useDecoder=this._use(t,e),dA(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},bA.prototype._decodeChoice=function(t,e){const r=this._baseState;let i=null,n=!1;return Object.keys(r.choice).some((function(o){const s=t.save(),a=r.choice[o];try{const r=a._decode(t,e);if(t.isError(r))return!1;i={type:o,value:r},n=!0}catch(e){return t.restore(s),!1}return!0}),this),n?i:t.error("Choice not matched")},bA.prototype._createEncoderBuffer=function(t){return new fA(t,this.reporter)},bA.prototype._encode=function(t,e,r){const i=this._baseState;if(null!==i.default&&i.default===t)return;const n=this._encodeValue(t,e,r);return void 0===n||this._skipDefault(n,e,r)?void 0:n},bA.prototype._encodeValue=function(t,e,r){const i=this._baseState;if(null===i.parent)return i.children[0]._encode(t,e||new uA);let n=null;if(this.reporter=e,i.optional&&void 0===t){if(null===i.default)return;t=i.default}let o=null,s=!1;if(i.any)n=this._createEncoderBuffer(t);else if(i.choice)n=this._encodeChoice(t,e);else if(i.contains)o=this._getUse(i.contains,r)._encode(t,e),s=!0;else if(i.children)o=i.children.map((function(r){if("null_"===r._baseState.tag)return r._encode(null,e,t);if(null===r._baseState.key)return e.error("Child should have a key");const i=e.enterKey(r._baseState.key);if("object"!=typeof t)return e.error("Child expected, but input is not object");const n=r._encode(t[r._baseState.key],e,t);return e.leaveKey(i),n}),this).filter((function(t){return t})),o=this._createEncoderBuffer(o);else if("seqof"===i.tag||"setof"===i.tag){if(!i.args||1!==i.args.length)return e.error("Too many args for : "+i.tag);if(!Array.isArray(t))return e.error("seqof/setof, but data is not Array");const r=this.clone();r._baseState.implicit=null,o=this._createEncoderBuffer(t.map((function(r){const i=this._baseState;return this._getUse(i.args[0],t)._encode(r,e)}),r))}else null!==i.use?n=this._getUse(i.use,r)._encode(t,e):(o=this._encodePrimitive(i.tag,t),s=!0);if(!i.any&&null===i.choice){const t=null!==i.implicit?i.implicit:i.tag,r=null===i.implicit?"universal":"context";null===t?null===i.use&&e.error("Tag could be omitted only for .use()"):null===i.use&&(n=this._encodeComposite(t,s,r,o))}return null!==i.explicit&&(n=this._encodeComposite(i.explicit,!1,"context",n)),n},bA.prototype._encodeChoice=function(t,e){const r=this._baseState,i=r.choice[t.type];return i||dA(!1,t.type+" not found in "+JSON.stringify(Object.keys(r.choice))),i._encode(t.value,e)},bA.prototype._encodePrimitive=function(t,e){const r=this._baseState;if(/str$/.test(t))return this._encodeStr(e,t);if("objid"===t&&r.args)return this._encodeObjid(e,r.reverseArgs[0],r.args[1]);if("objid"===t)return this._encodeObjid(e,null,null);if("gentime"===t||"utctime"===t)return this._encodeTime(e,t);if("null_"===t)return this._encodeNull();if("int"===t||"enum"===t)return this._encodeInt(e,r.args&&r.reverseArgs[0]);if("bool"===t)return this._encodeBool(e);if("objDesc"===t)return this._encodeStr(e,t);throw new Error("Unsupported tag: "+t)},bA.prototype._isNumstr=function(t){return/^[0-9 ]*$/.test(t)},bA.prototype._isPrintstr=function(t){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(t)}),hA}var wA,MA,_A,AA,EA,SA=!1;function kA(t){const e={};return Object.keys(t).forEach((function(r){(0|r)==r&&(r|=0);const i=t[r];e[i]=r})),e}function BA(){return SA||(SA=!0,(wA={}).tagClass=MA={0:"universal",1:"application",2:"context",3:"private"},_A=kA(MA),wA.tagClassByName=_A,AA={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},wA.tag=AA,EA=kA(AA),wA.tagByName=EA),wA}var RA,TA,xA,IA,CA=!1;function PA(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new DA,this.tree._init(t.body)}function DA(t){IA.call(this,"der",t)}function LA(t){return t<10?"0"+t:t}function OA(){RA={},TA=Ar(),xA=H_().Buffer,IA=yA(),BA(),RA=PA,PA.prototype.encode=function(t,e){return this.tree._encode(t,e).join()},TA(DA,IA),DA.prototype._encodeComposite=function(t,e,r,i){const n=function(t,e,r,i){let n;if("seqof"===t?t="seq":"setof"===t&&(t="set"),BA().tagByName.hasOwnProperty(t))n=BA().tagByName[t];else{if("number"!=typeof t||(0|t)!==t)return i.error("Unknown tag: "+t);n=t}return n>=31?i.error("Multi-octet tag encoding unsupported"):(e||(n|=32),n|=BA().tagClassByName[r||"universal"]<<6,n)}(t,e,r,this.reporter);if(i.length<128){const t=xA.alloc(2);return t[0]=n,t[1]=i.length,this._createEncoderBuffer([t,i])}let o=1;for(let t=i.length;t>=256;t>>=8)o++;const s=xA.alloc(2+o);s[0]=n,s[1]=128|o;for(let t=1+o,e=i.length;e>0;t--,e>>=8)s[t]=255&e;return this._createEncoderBuffer([s,i])},DA.prototype._encodeStr=function(t,e){if("bitstr"===e)return this._createEncoderBuffer([0|t.unused,t.data]);if("bmpstr"===e){const e=xA.alloc(2*t.length);for(let r=0;r<t.length;r++)e.writeUInt16BE(t.charCodeAt(r),2*r);return this._createEncoderBuffer(e)}return"numstr"===e?this._isNumstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===e?this._isPrintstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(e)||"objDesc"===e?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: "+e+" unsupported")},DA.prototype._encodeObjid=function(t,e,r){if("string"==typeof t){if(!e)return this.reporter.error("string objid given, but no values map found");if(!e.hasOwnProperty(t))return this.reporter.error("objid not found in values map");t=e[t].split(/[\s.]+/g);for(let e=0;e<t.length;e++)t[e]|=0}else if(Array.isArray(t)){t=t.slice();for(let e=0;e<t.length;e++)t[e]|=0}if(!Array.isArray(t))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(t));if(!r){if(t[1]>=40)return this.reporter.error("Second objid identifier OOB");t.splice(0,2,40*t[0]+t[1])}let i=0;for(let e=0;e<t.length;e++){let r=t[e];for(i++;r>=128;r>>=7)i++}const n=xA.alloc(i);let o=n.length-1;for(let e=t.length-1;e>=0;e--){let r=t[e];for(n[o--]=127&r;(r>>=7)>0;)n[o--]=128|127&r}return this._createEncoderBuffer(n)},DA.prototype._encodeTime=function(t,e){let r;const i=new Date(t);return"gentime"===e?r=[LA(i.getUTCFullYear()),LA(i.getUTCMonth()+1),LA(i.getUTCDate()),LA(i.getUTCHours()),LA(i.getUTCMinutes()),LA(i.getUTCSeconds()),"Z"].join(""):"utctime"===e?r=[LA(i.getUTCFullYear()%100),LA(i.getUTCMonth()+1),LA(i.getUTCDate()),LA(i.getUTCHours()),LA(i.getUTCMinutes()),LA(i.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+e+" time is not supported yet"),this._encodeStr(r,"octstr")},DA.prototype._encodeNull=function(){return this._createEncoderBuffer("")},DA.prototype._encodeInt=function(t,e){if("string"==typeof t){if(!e)return this.reporter.error("String int or enum given, but no values map");if(!e.hasOwnProperty(t))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(t));t=e[t]}if("number"!=typeof t&&!xA.isBuffer(t)){const e=t.toArray();!t.sign&&128&e[0]&&e.unshift(0),t=xA.from(e)}if(xA.isBuffer(t)){let e=t.length;0===t.length&&e++;const r=xA.alloc(e);return t.copy(r),0===t.length&&(r[0]=0),this._createEncoderBuffer(r)}if(t<128)return this._createEncoderBuffer(t);if(t<256)return this._createEncoderBuffer([0,t]);let r=1;for(let e=t;e>=256;e>>=8)r++;const i=new Array(r);for(let e=i.length-1;e>=0;e--)i[e]=255&t,t>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(xA.from(i))},DA.prototype._encodeBool=function(t){return this._createEncoderBuffer(t?255:0)},DA.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getEncoder("der").tree},DA.prototype._skipDefault=function(t,e,r){const i=this._baseState;let n;if(null===i.default)return!1;const o=t.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,e,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n<o.length;n++)if(o[n]!==i.defaultBuffer[n])return!1;return!0}}function jA(){return CA||(CA=!0,OA()),RA}var UA,NA,zA,qA=!1;function FA(t){zA.call(this,t),this.enc="pem"}function ZA(){return qA||(qA=!0,UA={},NA=Ar(),zA=jA(),NA(FA,zA),UA=FA,FA.prototype.encode=function(t,e){const r=zA.prototype.encode.call(this,t).toString("base64"),i=["-----BEGIN "+e.label+"-----"];for(let t=0;t<r.length;t+=64)i.push(r.slice(t,t+64));return i.push("-----END "+e.label+"-----"),i.join("\n")}),UA}var HA,KA,WA=!1;function GA(){return WA||(WA=!0,(KA=HA={}).der=jA(),KA.pem=ZA()),HA}var YA,VA,$A,XA,JA,QA=!1;function tE(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new eE,this.tree._init(t.body)}function eE(t){JA.call(this,"der",t)}function rE(t,e){let r=t.readUInt8(e);if(t.isError(r))return r;const i=BA().tagClass[r>>6],n=0==(32&r);if(31==(31&r)){let i=r;for(r=0;128==(128&i);){if(i=t.readUInt8(e),t.isError(i))return i;r<<=7,r|=127&i}}else r&=31;return{cls:i,primitive:n,tag:r,tagStr:BA().tag[r]}}function iE(t,e,r){let i=t.readUInt8(r);if(t.isError(i))return i;if(!e&&128===i)return null;if(0==(128&i))return i;const n=127&i;if(n>4)return t.error("length octect is too long");i=0;for(let e=0;e<n;e++){i<<=8;const e=t.readUInt8(r);if(t.isError(e))return e;i|=e}return i}function nE(){return QA||(QA=!0,YA={},VA=Ar(),$A=O_(),XA=aA().DecoderBuffer,JA=yA(),BA(),YA=tE,tE.prototype.decode=function(t,e){return XA.isDecoderBuffer(t)||(t=new XA(t,e)),this.tree._decode(t,e)},VA(eE,JA),eE.prototype._peekTag=function(t,e,r){if(t.isEmpty())return!1;const i=t.save(),n=rE(t,'Failed to peek tag: "'+e+'"');return t.isError(n)?n:(t.restore(i),n.tag===e||n.tagStr===e||n.tagStr+"of"===e||r)},eE.prototype._decodeTag=function(t,e,r){const i=rE(t,'Failed to decode tag of "'+e+'"');if(t.isError(i))return i;let n=iE(t,i.primitive,'Failed to get length of "'+e+'"');if(t.isError(n))return n;if(!r&&i.tag!==e&&i.tagStr!==e&&i.tagStr+"of"!==e)return t.error('Failed to match tag: "'+e+'"');if(i.primitive||null!==n)return t.skip(n,'Failed to match body of: "'+e+'"');const o=t.save(),s=this._skipUntilEnd(t,'Failed to skip indefinite length body: "'+this.tag+'"');return t.isError(s)?s:(n=t.offset-o.offset,t.restore(o),t.skip(n,'Failed to match body of: "'+e+'"'))},eE.prototype._skipUntilEnd=function(t,e){for(;;){const r=rE(t,e);if(t.isError(r))return r;const i=iE(t,r.primitive,e);if(t.isError(i))return i;let n;if(n=r.primitive||null!==i?t.skip(i):this._skipUntilEnd(t,e),t.isError(n))return n;if("end"===r.tagStr)break}},eE.prototype._decodeList=function(t,e,r,i){const n=[];for(;!t.isEmpty();){const e=this._peekTag(t,"end");if(t.isError(e))return e;const o=r.decode(t,"der",i);if(t.isError(o)&&e)break;n.push(o)}return n},eE.prototype._decodeStr=function(t,e){if("bitstr"===e){const e=t.readUInt8();return t.isError(e)?e:{unused:e,data:t.raw()}}if("bmpstr"===e){const e=t.raw();if(e.length%2==1)return t.error("Decoding of string type: bmpstr length mismatch");let r="";for(let t=0;t<e.length/2;t++)r+=String.fromCharCode(e.readUInt16BE(2*t));return r}if("numstr"===e){const e=t.raw().toString("ascii");return this._isNumstr(e)?e:t.error("Decoding of string type: numstr unsupported characters")}if("octstr"===e)return t.raw();if("objDesc"===e)return t.raw();if("printstr"===e){const e=t.raw().toString("ascii");return this._isPrintstr(e)?e:t.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(e)?t.raw().toString():t.error("Decoding of string type: "+e+" unsupported")},eE.prototype._decodeObjid=function(t,e,r){let i;const n=[];let o=0,s=0;for(;!t.isEmpty();)s=t.readUInt8(),o<<=7,o|=127&s,0==(128&s)&&(n.push(o),o=0);128&s&&n.push(o);const a=n[0]/40|0,h=n[0]%40;if(i=r?n:[a,h].concat(n.slice(1)),e){let t=e[i.join(" ")];void 0===t&&(t=e[i.join(".")]),void 0!==t&&(i=t)}return i},eE.prototype._decodeTime=function(t,e){const r=t.raw().toString();let i,n,o,s,a,h;if("gentime"===e)i=0|r.slice(0,4),n=0|r.slice(4,6),o=0|r.slice(6,8),s=0|r.slice(8,10),a=0|r.slice(10,12),h=0|r.slice(12,14);else{if("utctime"!==e)return t.error("Decoding "+e+" time is not supported yet");i=0|r.slice(0,2),n=0|r.slice(2,4),o=0|r.slice(4,6),s=0|r.slice(6,8),a=0|r.slice(8,10),h=0|r.slice(10,12),i=i<70?2e3+i:1900+i}return Date.UTC(i,n-1,o,s,a,h,0)},eE.prototype._decodeNull=function(){return null},eE.prototype._decodeBool=function(t){const e=t.readUInt8();return t.isError(e)?e:0!==e},eE.prototype._decodeInt=function(t,e){const r=t.raw();let i=new $A(r);return e&&(i=e[i.toString(10)]||i),i},eE.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getDecoder("der").tree}),YA}var oE,sE,aE,hE,uE=!1;function fE(t){hE.call(this,t),this.enc="pem"}function lE(){return uE||(uE=!0,oE={},sE=Ar(),aE=H_().Buffer,hE=nE(),sE(fE,hE),oE=fE,fE.prototype.decode=function(t,e){const r=t.toString().split(/[\r\n]+/g),i=e.label.toUpperCase(),n=/^-----(BEGIN|END) ([^-]+)-----$/;let o=-1,s=-1;for(let t=0;t<r.length;t++){const e=r[t].match(n);if(null!==e&&e[2]===i){if(-1!==o){if("END"!==e[1])break;s=t;break}if("BEGIN"!==e[1])break;o=t}}if(-1===o||-1===s)throw new Error("PEM section not found for: "+i);const a=r.slice(o+1,s).join("");a.replace(/[^a-z0-9+/=]+/gi,"");const h=aE.from(a,"base64");return hE.prototype.decode.call(this,h,e)}),oE}var dE,cE,pE=!1;function mE(){return pE||(pE=!0,(cE=dE={}).der=nE(),cE.pem=lE()),dE}var gE,vE,bE,yE,wE=!1;function ME(t,e){this.name=t,this.body=e,this.decoders={},this.encoders={}}function _E(){return wE||(wE=!0,gE={},vE=GA(),bE=mE(),yE=Ar(),gE.define=function(t,e){return new ME(t,e)},ME.prototype._createNamed=function(t){const e=this.name;function r(t){this._initNamed(t,e)}return yE(r,t),r.prototype._initNamed=function(e,r){t.call(this,e,r)},new r(this)},ME.prototype._getDecoder=function(t){return t=t||"der",this.decoders.hasOwnProperty(t)||(this.decoders[t]=this._createNamed(bE[t])),this.decoders[t]},ME.prototype.decode=function(t,e,r){return this._getDecoder(e).decode(t,r)},ME.prototype._getEncoder=function(t){return t=t||"der",this.encoders.hasOwnProperty(t)||(this.encoders[t]=this._createNamed(vE[t])),this.encoders[t]},ME.prototype.encode=function(t,e,r){return this._getEncoder(e).encode(t,r)}),gE}var AE,EE,SE=!1;function kE(){return SE||(SE=!0,(EE=AE={}).Reporter=X_().Reporter,EE.DecoderBuffer=aA().DecoderBuffer,EE.EncoderBuffer=aA().EncoderBuffer,EE.Node=yA()),AE}var BE,RE,TE=!1;function xE(){return TE||(TE=!0,(RE=BE={})._reverse=function(t){const e={};return Object.keys(t).forEach((function(r){(0|r)==r&&(r|=0);const i=t[r];e[i]=r})),e},RE.der=BA()),BE}var IE,CE,PE=!1;function DE(){return PE||(PE=!0,(CE=IE={}).bignum=O_(),CE.define=_E().define,CE.base=kE(),CE.constants=xE(),CE.decoders=mE(),CE.encoders=GA()),IE}var LE,OE,jE,UE,NE,zE,qE,FE,ZE,HE,KE,WE,GE=!1;function YE(){return GE||(GE=!0,LE={},DE(),OE=DE().define("Time",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),jE=DE().define("AttributeTypeValue",(function(){this.seq().obj(this.key("type").objid(),this.key("value").any())})),UE=DE().define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional(),this.key("curve").objid().optional())})),NE=DE().define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(UE),this.key("subjectPublicKey").bitstr())})),zE=DE().define("RelativeDistinguishedName",(function(){this.setof(jE)})),qE=DE().define("RDNSequence",(function(){this.seqof(zE)})),FE=DE().define("Name",(function(){this.choice({rdnSequence:this.use(qE)})})),ZE=DE().define("Validity",(function(){this.seq().obj(this.key("notBefore").use(OE),this.key("notAfter").use(OE))})),HE=DE().define("Extension",(function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())})),KE=DE().define("TBSCertificate",(function(){this.seq().obj(this.key("version").explicit(0).int().optional(),this.key("serialNumber").int(),this.key("signature").use(UE),this.key("issuer").use(FE),this.key("validity").use(ZE),this.key("subject").use(FE),this.key("subjectPublicKeyInfo").use(NE),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(HE).optional())})),WE=DE().define("X509Certificate",(function(){this.seq().obj(this.key("tbsCertificate").use(KE),this.key("signatureAlgorithm").use(UE),this.key("signatureValue").bitstr())})),LE=WE),LE}var VE,$E,XE,JE,QE,tS,eS,rS,iS,nS,oS,sS,aS,hS,uS,fS,lS,dS,cS,pS,mS=!1;function gS(){return mS||(mS=!0,VE={},DE(),$E=YE(),VE.certificate=$E,XE=DE().define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())})),JE=XE,VE.RSAPrivateKey=JE,QE=DE().define("RSAPublicKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())})),tS=QE,VE.RSAPublicKey=tS,eS=DE().define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(iS),this.key("subjectPublicKey").bitstr())})),rS=eS,VE.PublicKey=rS,iS=DE().define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())})),nS=DE().define("PrivateKeyInfo",(function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(iS),this.key("subjectPrivateKey").octstr())})),oS=nS,VE.PrivateKey=oS,sS=DE().define("EncryptedPrivateKeyInfo",(function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())})),aS=sS,VE.EncryptedPrivateKey=aS,hS=DE().define("DSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())})),uS=hS,VE.DSAPrivateKey=uS,fS=DE().define("DSAparam",(function(){this.int()})),VE.DSAparam=fS,lS=DE().define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(cS),this.key("publicKey").optional().explicit(1).bitstr())})),dS=lS,VE.ECPrivateKey=dS,cS=DE().define("ECParameters",(function(){this.choice({namedCurve:this.objid()})})),pS=DE().define("signature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())})),VE.signature=pS),VE}var vS,bS=!1;function yS(){return bS||(bS=!0,vS={},vS=JSON.parse('{"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}')),vS}var wS,MS,_S,AS,ES,SS,kS=!1;function BS(){return kS||(kS=!0,wS={},MS=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m,_S=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,AS=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m,ES=Nc(),Cp(),SS=lr().Buffer,wS=function(t,e){var r,i=t.toString(),n=i.match(MS);if(n){var o="aes"+n[1],s=SS.from(n[2],"hex"),a=SS.from(n[3].replace(/[\r\n]/g,""),"base64"),h=ES(e,s.slice(0,8),parseInt(n[1],10)).key,u=[],f=Cp().createDecipheriv(o,h,s);u.push(f.update(a)),u.push(f.final()),r=SS.concat(u)}else{var l=i.match(AS);r=SS.from(l[2].replace(/[\r\n]/g,""),"base64")}return{tag:i.match(_S)[1],data:r}}),wS}var RS,TS,xS,IS,CS=!1;function PS(t){var e;"object"!=typeof t||IS.isBuffer(t)||(e=t.passphrase,t=t.key),"string"==typeof t&&(t=IS.from(t));var r,i,n=xS(t,e),o=n.tag,s=n.data;switch(o){case"CERTIFICATE":i=gS().certificate.decode(s,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(i||(i=gS().PublicKey.decode(s,"der")),r=i.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return gS().RSAPublicKey.decode(i.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return i.subjectPrivateKey=i.subjectPublicKey,{type:"ec",data:i};case"1.2.840.10040.4.1":return i.algorithm.params.pub_key=gS().DSAparam.decode(i.subjectPublicKey.data,"der"),{type:"dsa",data:i.algorithm.params};default:throw new Error("unknown key id "+r)}case"ENCRYPTED PRIVATE KEY":s=function(t,e){var r=t.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(t.algorithm.decrypt.kde.kdeparams.iters.toString(),10),n=TS[t.algorithm.decrypt.cipher.algo.join(".")],o=t.algorithm.decrypt.cipher.iv,s=t.subjectPrivateKey,a=parseInt(n.split("-")[1],10)/8,h=Lf().pbkdf2Sync(e,r,i,a,"sha1"),u=Cp().createDecipheriv(n,h,o),f=[];return f.push(u.update(s)),f.push(u.final()),IS.concat(f)}(s=gS().EncryptedPrivateKey.decode(s,"der"),e);case"PRIVATE KEY":switch(r=(i=gS().PrivateKey.decode(s,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return gS().RSAPrivateKey.decode(i.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:i.algorithm.curve,privateKey:gS().ECPrivateKey.decode(i.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return i.algorithm.params.priv_key=gS().DSAparam.decode(i.subjectPrivateKey,"der"),{type:"dsa",params:i.algorithm.params};default:throw new Error("unknown key id "+r)}case"RSA PUBLIC KEY":return gS().RSAPublicKey.decode(s,"der");case"RSA PRIVATE KEY":return gS().RSAPrivateKey.decode(s,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:gS().DSAPrivateKey.decode(s,"der")};case"EC PRIVATE KEY":return{curve:(s=gS().ECPrivateKey.decode(s,"der")).parameters.value,privateKey:s.privateKey};default:throw new Error("unknown key type "+o)}}function DS(){return CS||(CS=!0,RS={},gS(),TS=yS(),xS=BS(),Cp(),Lf(),IS=lr().Buffer,RS=PS,PS.signature=gS().signature),RS}var LS,OS=!1;function jS(){return OS||(OS=!0,LS={},LS=JSON.parse('{"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}')),LS}var US,NS,zS,qS,FS,ZS,HS,KS,WS,GS,YS=!1;function VS(t,e,r,i,n){var o=HS(e);if(o.curve){if("ecdsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong private key type");return function(t,e){var r=KS[e.curve.join(".")];if(!r)throw new Error("unknown curve "+e.curve.join("."));var i=new FS(r).keyFromPrivate(e.privateKey).sign(t);return NS.from(i.toDER())}(t,o)}if("dsa"===o.type){if("dsa"!==i)throw new Error("wrong private key type");return function(t,e,r){var i,n=e.params.priv_key,o=e.params.p,s=e.params.q,a=e.params.g,h=new ZS(0),u=XS(t,s).mod(s),f=!1,l=$S(n,s,t,r);for(;!1===f;)h=QS(a,i=JS(s,l,r),o,s),0===(f=i.invm(s).imul(u.add(n.mul(h))).mod(s)).cmpn(0)&&(f=!1,h=new ZS(0));return function(t,e){t=t.toArray(),e=e.toArray(),128&t[0]&&(t=[0].concat(t));128&e[0]&&(e=[0].concat(e));var r=[48,t.length+e.length+4,2,t.length];return r=r.concat(t,[2,e.length],e),NS.from(r)}(h,f)}(t,o,r)}if("rsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong private key type");t=NS.concat([n,t]);for(var s=o.modulus.byteLength(),a=[0,1];t.length+a.length+1<s;)a.push(255);a.push(0);for(var h=-1;++h<t.length;)a.push(t[h]);return qS(a,o)}function $S(t,e,r,i){if((t=NS.from(t.toArray())).length<e.byteLength()){var n=NS.alloc(e.byteLength()-t.length);t=NS.concat([n,t])}var o=r.length,s=function(t,e){t=(t=XS(t,e)).mod(e);var r=NS.from(t.toArray());if(r.length<e.byteLength()){var i=NS.alloc(e.byteLength()-r.length);r=NS.concat([i,r])}return r}(r,e),a=NS.alloc(o);a.fill(1);var h=NS.alloc(o);return h=zS(i,h).update(a).update(NS.from([0])).update(t).update(s).digest(),a=zS(i,h).update(a).digest(),{k:h=zS(i,h).update(a).update(NS.from([1])).update(t).update(s).digest(),v:a=zS(i,h).update(a).digest()}}function XS(t,e){var r=new ZS(t),i=(t.length<<3)-e.bitLength();return i>0&&r.ishrn(i),r}function JS(t,e,r){var i,n;do{for(i=NS.alloc(0);8*i.length<t.bitLength();)e.v=zS(r,e.k).update(e.v).digest(),i=NS.concat([i,e.v]);n=XS(i,t),e.k=zS(r,e.k).update(e.v).update(NS.from([0])).digest(),e.v=zS(r,e.k).update(e.v).digest()}while(-1!==n.cmp(t));return n}function QS(t,e,r,i){return t.toRed(ZS.mont(r)).redPow(e).fromRed().mod(i)}function tk(){return YS||(YS=!0,US={},NS=lr().Buffer,zS=Du(),qS=Fg(),FS=C_().ec,ZS=Dg(),HS=DS(),KS=jS(),WS=$S,(US=VS).getKey=WS,GS=JS,US.makeKey=GS),US}var ek,rk,ik,nk,ok,sk,ak=!1;function hk(t,e,r,i,n){var o=ok(r);if("ec"===o.type){if("ecdsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong public key type");return function(t,e,r){var i=sk[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new nk(i),o=r.data.subjectPrivateKey.data;return n.verify(e,t,o)}(t,e,o)}if("dsa"===o.type){if("dsa"!==i)throw new Error("wrong public key type");return function(t,e,r){var i=r.data.p,n=r.data.q,o=r.data.g,s=r.data.pub_key,a=ok.signature.decode(t,"der"),h=a.s,u=a.r;uk(h,n),uk(u,n);var f=ik.mont(i),l=h.invm(n);return 0===o.toRed(f).redPow(new ik(e).mul(l).mod(n)).fromRed().mul(s.toRed(f).redPow(u.mul(l).mod(n)).fromRed()).mod(i).mod(n).cmp(u)}(t,e,o)}if("rsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong public key type");e=rk.concat([n,e]);for(var s=o.modulus.byteLength(),a=[1],h=0;e.length+a.length+2<s;)a.push(255),h++;a.push(0);for(var u=-1;++u<e.length;)a.push(e[u]);a=rk.from(a);var f=ik.mont(o.modulus);t=(t=new ik(t).toRed(f)).redPow(new ik(o.publicExponent)),t=rk.from(t.fromRed().toArray());var l=h<8?1:0;for(s=Math.min(t.length,a.length),t.length!==a.length&&(l=1),u=-1;++u<s;)l|=t[u]^a[u];return 0===l}function uk(t,e){if(t.cmpn(0)<=0)throw new Error("invalid sig");if(t.cmp(e)>=e)throw new Error("invalid sig")}function fk(){return ak||(ak=!0,ek={},rk=lr().Buffer,ik=Dg(),nk=C_().ec,ok=DS(),sk=jS(),ek=hk),ek}var lk,dk,ck,pk,mk,gk,vk,bk=!1;function yk(t){Ls().Writable.call(this);var e=vk[t];if(!e)throw new Error("Unknown message digest");this._hashType=e.hash,this._hash=ck(e.hash),this._tag=e.id,this._signType=e.sign}function wk(t){Ls().Writable.call(this);var e=vk[t];if(!e)throw new Error("Unknown message digest");this._hash=ck(e.hash),this._tag=e.id,this._signType=e.sign}function Mk(t){return new yk(t)}function _k(t){return new wk(t)}function Ak(){return bk||(bk=!0,lk={},dk=lr().Buffer,ck=uu(),Ls(),pk=Ar(),mk=tk(),gk=fk(),vk=ju(),Object.keys(vk).forEach((function(t){vk[t].id=dk.from(vk[t].id,"hex"),vk[t.toLowerCase()]=vk[t]})),pk(yk,Ls().Writable),yk.prototype._write=function(t,e,r){this._hash.update(t),r()},yk.prototype.update=function(t,e){return"string"==typeof t&&(t=dk.from(t,e)),this._hash.update(t),this},yk.prototype.sign=function(t,e){this.end();var r=this._hash.digest(),i=mk(r,t,this._hashType,this._signType,this._tag);return e?i.toString(e):i},pk(wk,Ls().Writable),wk.prototype._write=function(t,e,r){this._hash.update(t),r()},wk.prototype.update=function(t,e){return"string"==typeof t&&(t=dk.from(t,e)),this._hash.update(t),this},wk.prototype.verify=function(t,e,r){"string"==typeof e&&(e=dk.from(e,r)),this.end();var i=this._hash.digest();return gk(e,i,t,this._signType,this._tag)},lk={Sign:Mk,Verify:_k,createSign:Mk,createVerify:_k}),lk}var Ek,Sk=!1;function kk(){Ek=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}var Bk,Rk,Tk,xk,Ik=!1;function Ck(t){this.curveType=xk[t],this.curveType||(this.curveType={name:t}),this.curve=new(C_().ec)(this.curveType.name),this.keys=void 0}function Pk(t,e,r){Array.isArray(t)||(t=t.toArray());var i=new Rk(t);if(r&&i.length<r){var n=new Rk(r-i.length);n.fill(0),i=Rk.concat([n,i])}return e?i.toString(e):i}function Dk(){Bk={},Rk=Ye().Buffer,C_(),Sk||(Sk=!0,kk()),Tk=Ek,Bk=function(t){return new Ck(t)},(xk={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}}).p224=xk.secp224r1,xk.p256=xk.secp256r1=xk.prime256v1,xk.p192=xk.secp192r1=xk.prime192v1,xk.p384=xk.secp384r1,xk.p521=xk.secp521r1,Ck.prototype.generateKeys=function(t,e){return this.keys=this.curve.genKeyPair(),this.getPublicKey(t,e)},Ck.prototype.computeSecret=function(t,e,r){return e=e||"utf8",Rk.isBuffer(t)||(t=new Rk(t,e)),Pk(this.curve.keyFromPublic(t).getPublic().mul(this.keys.getPrivate()).getX(),r,this.curveType.byteLength)},Ck.prototype.getPublicKey=function(t,e){var r=this.keys.getPublic("compressed"===e,!0);return"hybrid"===e&&(r[r.length-1]%2?r[0]=7:r[0]=6),Pk(r,t)},Ck.prototype.getPrivateKey=function(t){return Pk(this.keys.getPrivate(),t)},Ck.prototype.setPublicKey=function(t,e){return e=e||"utf8",Rk.isBuffer(t)||(t=new Rk(t,e)),this.keys._importPublic(t),this},Ck.prototype.setPrivateKey=function(t,e){e=e||"utf8",Rk.isBuffer(t)||(t=new Rk(t,e));var r=new Tk(t);return r=r.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(r),this}}var Lk,Ok,jk,Uk=!1;function Nk(t){var e=jk.allocUnsafe(4);return e.writeUInt32BE(t,0),e}function zk(){return Uk||(Uk=!0,Lk={},Ok=uu(),jk=lr().Buffer,Lk=function(t,e){for(var r,i=jk.alloc(0),n=0;i.length<e;)r=Nk(n++),i=jk.concat([i,Ok("sha1").update(t).update(r).digest()]);return i.slice(0,e)}),Lk}var qk,Fk=!1;function Zk(){return Fk||(Fk=!0,qk={},qk=function(t,e){for(var r=t.length,i=-1;++i<r;)t[i]^=e[i];return t}),qk}var Hk,Kk=!1;function Wk(){Hk=function(){var t={exports:this};return function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function n(t,e,r){if(n.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof t?t.exports=n:e.BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:ir().Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function a(t,e,r){var i=s(t,r);return r-1>=e&&(i|=s(t,r-1)<<4),i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s<o;s++){var a=t.charCodeAt(s)-48;n*=i,n+=a>=49?a-49+10:a>=17?a-17+10:a}return n}n.isBN=function(t){return t instanceof n||null!==t&&"object"==typeof t&&t.constructor.wordSize===n.wordSize&&Array.isArray(t.words)},n.max=function(t,e){return t.cmp(e)>0?t:e},n.min=function(t,e){return t.cmp(e)<0?t:e},n.prototype._init=function(t,e,i){if("number"==typeof t)return this._initNumber(t,e,i);if("object"==typeof t)return this._initArray(t,e,i);"hex"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var n=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(n++,this.negative=1),n<t.length&&(16===e?this._parseHex(t,n,i):(this._parseBase(t,e,n),"le"===i&&this._initArray(this.toArray(),e,i)))},n.prototype._initNumber=function(t,e,i){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),e,i)},n.prototype._initArray=function(t,e,i){if(r("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,s,a=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)s=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===i)for(n=0,o=0;n<t.length;n+=3)s=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=s<<a&67108863,this.words[o+1]=s>>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},n.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var n,o=0,s=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=a(t,e,i)<<o,this.words[s]|=67108863&n,o>=18?(o-=18,s+=1,this.words[s]|=n>>>26):o+=8;this.strip()},n.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=e)i++;i--,n=n/e|0;for(var o=t.length-r,s=o%i,a=Math.min(o,o-s)+r,u=0,f=r;f<a;f+=i)u=h(t,f,f+i,e),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var l=1;for(u=h(t,f,t.length,e),f=0;f<s;f++)l*=e;this.imuln(l),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}this.strip()},n.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},n.prototype.clone=function(){var t=new n(null);return this.copy(t),t},n.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u<i;u++){for(var f=h>>>26,l=67108863&h,d=Math.min(u,e.length-1),c=Math.max(0,u-t.length+1);c<=d;c++){var p=u-c|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[c])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}n.prototype.toString=function(t,e){var i;if(e=0|e||1,16===(t=t||10)||"hex"===t){i="";for(var n=0,o=0,s=0;s<this.length;s++){var a=this.words[s],h=(16777215&(a<<n|o)).toString(16);i=0!==(o=a>>>24-n&16777215)||s!==this.length-1?u[6-h.length]+h+i:h+i,(n+=2)>=26&&(n-=26,s--)}for(0!==o&&(i=o.toString(16)+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&t<=36){var d=f[t],c=l[t];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(c).toString(t);i=(p=p.idivn(c)).isZero()?m+i:u[d-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%e!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},n.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},n.prototype.toArrayLike=function(t,e,i){var n=this.byteLength(),o=i||Math.max(1,n);r(n<=o,"byte array longer than desired length"),r(o>0,"Requested array length <= 0"),this.strip();var s,a,h="le"===e,u=new t(o),f=this.clone();if(h){for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[a]=s;for(;a<o;a++)u[a]=0}else{for(a=0;a<o-n;a++)u[a]=0;for(a=0;!f.isZero();a++)s=f.andln(255),f.iushrn(8),u[o-a-1]=s}return u},Math.clz32?n.prototype._countBits=function(t){return 32-Math.clz32(t)}:n.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},n.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},n.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},n.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},n.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},n.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},n.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},n.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},n.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},n.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},n.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},n.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var i=0;i<r.length;i++)this.words[i]=e.words[i]^r.words[i];if(this!==e)for(;i<e.length;i++)this.words[i]=e.words[i];return this.length=e.length,this.strip()},n.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},n.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},n.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},n.prototype.inotn=function(t){r("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),i=t%26;this._expand(e),i>0&&e--;for(var n=0;n<e;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(t){return this.clone().inotn(t)},n.prototype.setn=function(t,e){r("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=e?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(t){var e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);for(var n=0,o=0;o<i.length;o++)e=(0|r.words[o])+(0|i.words[o])+n,this.words[o]=67108863&e,n=e>>>26;for(;0!==n&&o<r.length;o++)e=(0|r.words[o])+n,this.words[o]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},n.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},n.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,i,n=this.cmp(t);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=t):(r=t,i=this);for(var o=0,s=0;s<i.length;s++)o=(e=(0|r.words[s])-(0|i.words[s])+o)>>26,this.words[s]=67108863&e;for(;0!==o&&s<r.length;s++)o=(e=(0|r.words[s])+o)>>26,this.words[s]=67108863&e;if(0===o&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(t){return this.clone().isub(t)};var c=function(t,e,r){var i,n,o,s=t.words,a=e.words,h=r.words,u=0,f=0|s[0],l=8191&f,d=f>>>13,c=0|s[1],p=8191&c,m=c>>>13,g=0|s[2],v=8191&g,b=g>>>13,y=0|s[3],w=8191&y,M=y>>>13,_=0|s[4],A=8191&_,E=_>>>13,S=0|s[5],k=8191&S,B=S>>>13,R=0|s[6],T=8191&R,x=R>>>13,I=0|s[7],C=8191&I,P=I>>>13,D=0|s[8],L=8191&D,O=D>>>13,j=0|s[9],U=8191&j,N=j>>>13,z=0|a[0],q=8191&z,F=z>>>13,Z=0|a[1],H=8191&Z,K=Z>>>13,W=0|a[2],G=8191&W,Y=W>>>13,V=0|a[3],$=8191&V,X=V>>>13,J=0|a[4],Q=8191&J,tt=J>>>13,et=0|a[5],rt=8191&et,it=et>>>13,nt=0|a[6],ot=8191&nt,st=nt>>>13,at=0|a[7],ht=8191&at,ut=at>>>13,ft=0|a[8],lt=8191&ft,dt=ft>>>13,ct=0|a[9],pt=8191&ct,mt=ct>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(i=Math.imul(l,q))|0)+((8191&(n=(n=Math.imul(l,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,i=Math.imul(p,q),n=(n=Math.imul(p,F))+Math.imul(m,q)|0,o=Math.imul(m,F);var vt=(u+(i=i+Math.imul(l,H)|0)|0)+((8191&(n=(n=n+Math.imul(l,K)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,K)|0)+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,i=Math.imul(v,q),n=(n=Math.imul(v,F))+Math.imul(b,q)|0,o=Math.imul(b,F),i=i+Math.imul(p,H)|0,n=(n=n+Math.imul(p,K)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,K)|0;var bt=(u+(i=i+Math.imul(l,G)|0)|0)+((8191&(n=(n=n+Math.imul(l,Y)|0)+Math.imul(d,G)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,i=Math.imul(w,q),n=(n=Math.imul(w,F))+Math.imul(M,q)|0,o=Math.imul(M,F),i=i+Math.imul(v,H)|0,n=(n=n+Math.imul(v,K)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,K)|0,i=i+Math.imul(p,G)|0,n=(n=n+Math.imul(p,Y)|0)+Math.imul(m,G)|0,o=o+Math.imul(m,Y)|0;var yt=(u+(i=i+Math.imul(l,$)|0)|0)+((8191&(n=(n=n+Math.imul(l,X)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,i=Math.imul(A,q),n=(n=Math.imul(A,F))+Math.imul(E,q)|0,o=Math.imul(E,F),i=i+Math.imul(w,H)|0,n=(n=n+Math.imul(w,K)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,K)|0,i=i+Math.imul(v,G)|0,n=(n=n+Math.imul(v,Y)|0)+Math.imul(b,G)|0,o=o+Math.imul(b,Y)|0,i=i+Math.imul(p,$)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,X)|0;var wt=(u+(i=i+Math.imul(l,Q)|0)|0)+((8191&(n=(n=n+Math.imul(l,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,i=Math.imul(k,q),n=(n=Math.imul(k,F))+Math.imul(B,q)|0,o=Math.imul(B,F),i=i+Math.imul(A,H)|0,n=(n=n+Math.imul(A,K)|0)+Math.imul(E,H)|0,o=o+Math.imul(E,K)|0,i=i+Math.imul(w,G)|0,n=(n=n+Math.imul(w,Y)|0)+Math.imul(M,G)|0,o=o+Math.imul(M,Y)|0,i=i+Math.imul(v,$)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,X)|0,i=i+Math.imul(p,Q)|0,n=(n=n+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(u+(i=i+Math.imul(l,rt)|0)|0)+((8191&(n=(n=n+Math.imul(l,it)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,it)|0)+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,i=Math.imul(T,q),n=(n=Math.imul(T,F))+Math.imul(x,q)|0,o=Math.imul(x,F),i=i+Math.imul(k,H)|0,n=(n=n+Math.imul(k,K)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(A,G)|0,n=(n=n+Math.imul(A,Y)|0)+Math.imul(E,G)|0,o=o+Math.imul(E,Y)|0,i=i+Math.imul(w,$)|0,n=(n=n+Math.imul(w,X)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(v,Q)|0,n=(n=n+Math.imul(v,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,i=i+Math.imul(p,rt)|0,n=(n=n+Math.imul(p,it)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,it)|0;var _t=(u+(i=i+Math.imul(l,ot)|0)|0)+((8191&(n=(n=n+Math.imul(l,st)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,st)|0)+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,i=Math.imul(C,q),n=(n=Math.imul(C,F))+Math.imul(P,q)|0,o=Math.imul(P,F),i=i+Math.imul(T,H)|0,n=(n=n+Math.imul(T,K)|0)+Math.imul(x,H)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(k,G)|0,n=(n=n+Math.imul(k,Y)|0)+Math.imul(B,G)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(A,$)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(w,Q)|0,n=(n=n+Math.imul(w,tt)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,tt)|0,i=i+Math.imul(v,rt)|0,n=(n=n+Math.imul(v,it)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,it)|0,i=i+Math.imul(p,ot)|0,n=(n=n+Math.imul(p,st)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,st)|0;var At=(u+(i=i+Math.imul(l,ht)|0)|0)+((8191&(n=(n=n+Math.imul(l,ut)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(n>>>13)|0)+(At>>>26)|0,At&=67108863,i=Math.imul(L,q),n=(n=Math.imul(L,F))+Math.imul(O,q)|0,o=Math.imul(O,F),i=i+Math.imul(C,H)|0,n=(n=n+Math.imul(C,K)|0)+Math.imul(P,H)|0,o=o+Math.imul(P,K)|0,i=i+Math.imul(T,G)|0,n=(n=n+Math.imul(T,Y)|0)+Math.imul(x,G)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(k,$)|0,n=(n=n+Math.imul(k,X)|0)+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,i=i+Math.imul(A,Q)|0,n=(n=n+Math.imul(A,tt)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,i=i+Math.imul(w,rt)|0,n=(n=n+Math.imul(w,it)|0)+Math.imul(M,rt)|0,o=o+Math.imul(M,it)|0,i=i+Math.imul(v,ot)|0,n=(n=n+Math.imul(v,st)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,st)|0,i=i+Math.imul(p,ht)|0,n=(n=n+Math.imul(p,ut)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,ut)|0;var Et=(u+(i=i+Math.imul(l,lt)|0)|0)+((8191&(n=(n=n+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,i=Math.imul(U,q),n=(n=Math.imul(U,F))+Math.imul(N,q)|0,o=Math.imul(N,F),i=i+Math.imul(L,H)|0,n=(n=n+Math.imul(L,K)|0)+Math.imul(O,H)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(C,G)|0,n=(n=n+Math.imul(C,Y)|0)+Math.imul(P,G)|0,o=o+Math.imul(P,Y)|0,i=i+Math.imul(T,$)|0,n=(n=n+Math.imul(T,X)|0)+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,i=i+Math.imul(k,Q)|0,n=(n=n+Math.imul(k,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,i=i+Math.imul(A,rt)|0,n=(n=n+Math.imul(A,it)|0)+Math.imul(E,rt)|0,o=o+Math.imul(E,it)|0,i=i+Math.imul(w,ot)|0,n=(n=n+Math.imul(w,st)|0)+Math.imul(M,ot)|0,o=o+Math.imul(M,st)|0,i=i+Math.imul(v,ht)|0,n=(n=n+Math.imul(v,ut)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,ut)|0,i=i+Math.imul(p,lt)|0,n=(n=n+Math.imul(p,dt)|0)+Math.imul(m,lt)|0,o=o+Math.imul(m,dt)|0;var St=(u+(i=i+Math.imul(l,pt)|0)|0)+((8191&(n=(n=n+Math.imul(l,mt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,mt)|0)+(n>>>13)|0)+(St>>>26)|0,St&=67108863,i=Math.imul(U,H),n=(n=Math.imul(U,K))+Math.imul(N,H)|0,o=Math.imul(N,K),i=i+Math.imul(L,G)|0,n=(n=n+Math.imul(L,Y)|0)+Math.imul(O,G)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(C,$)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(T,Q)|0,n=(n=n+Math.imul(T,tt)|0)+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,i=i+Math.imul(k,rt)|0,n=(n=n+Math.imul(k,it)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,i=i+Math.imul(A,ot)|0,n=(n=n+Math.imul(A,st)|0)+Math.imul(E,ot)|0,o=o+Math.imul(E,st)|0,i=i+Math.imul(w,ht)|0,n=(n=n+Math.imul(w,ut)|0)+Math.imul(M,ht)|0,o=o+Math.imul(M,ut)|0,i=i+Math.imul(v,lt)|0,n=(n=n+Math.imul(v,dt)|0)+Math.imul(b,lt)|0,o=o+Math.imul(b,dt)|0;var kt=(u+(i=i+Math.imul(p,pt)|0)|0)+((8191&(n=(n=n+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,mt)|0)+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,i=Math.imul(U,G),n=(n=Math.imul(U,Y))+Math.imul(N,G)|0,o=Math.imul(N,Y),i=i+Math.imul(L,$)|0,n=(n=n+Math.imul(L,X)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(C,Q)|0,n=(n=n+Math.imul(C,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,i=i+Math.imul(T,rt)|0,n=(n=n+Math.imul(T,it)|0)+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,i=i+Math.imul(k,ot)|0,n=(n=n+Math.imul(k,st)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,st)|0,i=i+Math.imul(A,ht)|0,n=(n=n+Math.imul(A,ut)|0)+Math.imul(E,ht)|0,o=o+Math.imul(E,ut)|0,i=i+Math.imul(w,lt)|0,n=(n=n+Math.imul(w,dt)|0)+Math.imul(M,lt)|0,o=o+Math.imul(M,dt)|0;var Bt=(u+(i=i+Math.imul(v,pt)|0)|0)+((8191&(n=(n=n+Math.imul(v,mt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,mt)|0)+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,i=Math.imul(U,$),n=(n=Math.imul(U,X))+Math.imul(N,$)|0,o=Math.imul(N,X),i=i+Math.imul(L,Q)|0,n=(n=n+Math.imul(L,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,i=i+Math.imul(C,rt)|0,n=(n=n+Math.imul(C,it)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,i=i+Math.imul(T,ot)|0,n=(n=n+Math.imul(T,st)|0)+Math.imul(x,ot)|0,o=o+Math.imul(x,st)|0,i=i+Math.imul(k,ht)|0,n=(n=n+Math.imul(k,ut)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,ut)|0,i=i+Math.imul(A,lt)|0,n=(n=n+Math.imul(A,dt)|0)+Math.imul(E,lt)|0,o=o+Math.imul(E,dt)|0;var Rt=(u+(i=i+Math.imul(w,pt)|0)|0)+((8191&(n=(n=n+Math.imul(w,mt)|0)+Math.imul(M,pt)|0))<<13)|0;u=((o=o+Math.imul(M,mt)|0)+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,i=Math.imul(U,Q),n=(n=Math.imul(U,tt))+Math.imul(N,Q)|0,o=Math.imul(N,tt),i=i+Math.imul(L,rt)|0,n=(n=n+Math.imul(L,it)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,it)|0,i=i+Math.imul(C,ot)|0,n=(n=n+Math.imul(C,st)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,st)|0,i=i+Math.imul(T,ht)|0,n=(n=n+Math.imul(T,ut)|0)+Math.imul(x,ht)|0,o=o+Math.imul(x,ut)|0,i=i+Math.imul(k,lt)|0,n=(n=n+Math.imul(k,dt)|0)+Math.imul(B,lt)|0,o=o+Math.imul(B,dt)|0;var Tt=(u+(i=i+Math.imul(A,pt)|0)|0)+((8191&(n=(n=n+Math.imul(A,mt)|0)+Math.imul(E,pt)|0))<<13)|0;u=((o=o+Math.imul(E,mt)|0)+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,i=Math.imul(U,rt),n=(n=Math.imul(U,it))+Math.imul(N,rt)|0,o=Math.imul(N,it),i=i+Math.imul(L,ot)|0,n=(n=n+Math.imul(L,st)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,st)|0,i=i+Math.imul(C,ht)|0,n=(n=n+Math.imul(C,ut)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,ut)|0,i=i+Math.imul(T,lt)|0,n=(n=n+Math.imul(T,dt)|0)+Math.imul(x,lt)|0,o=o+Math.imul(x,dt)|0;var xt=(u+(i=i+Math.imul(k,pt)|0)|0)+((8191&(n=(n=n+Math.imul(k,mt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,mt)|0)+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,i=Math.imul(U,ot),n=(n=Math.imul(U,st))+Math.imul(N,ot)|0,o=Math.imul(N,st),i=i+Math.imul(L,ht)|0,n=(n=n+Math.imul(L,ut)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,ut)|0,i=i+Math.imul(C,lt)|0,n=(n=n+Math.imul(C,dt)|0)+Math.imul(P,lt)|0,o=o+Math.imul(P,dt)|0;var It=(u+(i=i+Math.imul(T,pt)|0)|0)+((8191&(n=(n=n+Math.imul(T,mt)|0)+Math.imul(x,pt)|0))<<13)|0;u=((o=o+Math.imul(x,mt)|0)+(n>>>13)|0)+(It>>>26)|0,It&=67108863,i=Math.imul(U,ht),n=(n=Math.imul(U,ut))+Math.imul(N,ht)|0,o=Math.imul(N,ut),i=i+Math.imul(L,lt)|0,n=(n=n+Math.imul(L,dt)|0)+Math.imul(O,lt)|0,o=o+Math.imul(O,dt)|0;var Ct=(u+(i=i+Math.imul(C,pt)|0)|0)+((8191&(n=(n=n+Math.imul(C,mt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,mt)|0)+(n>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,i=Math.imul(U,lt),n=(n=Math.imul(U,dt))+Math.imul(N,lt)|0,o=Math.imul(N,dt);var Pt=(u+(i=i+Math.imul(L,pt)|0)|0)+((8191&(n=(n=n+Math.imul(L,mt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,mt)|0)+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863;var Dt=(u+(i=Math.imul(U,pt))|0)+((8191&(n=(n=Math.imul(U,mt))+Math.imul(N,pt)|0))<<13)|0;return u=((o=Math.imul(N,mt))+(n>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,h[0]=gt,h[1]=vt,h[2]=bt,h[3]=yt,h[4]=wt,h[5]=Mt,h[6]=_t,h[7]=At,h[8]=Et,h[9]=St,h[10]=kt,h[11]=Bt,h[12]=Rt,h[13]=Tt,h[14]=xt,h[15]=It,h[16]=Ct,h[17]=Pt,h[18]=Dt,0!==u&&(h[19]=u,r.length++),r};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(c=d),n.prototype.mulTo=function(t,e){var r,i=this.length+t.length;return r=10===this.length&&10===t.length?c(this,t,e):i<63?d(this,t,e):i<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o<r.length-1;o++){var s=n;n=0;for(var a=67108863&i,h=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=h;u++){var f=o-u,l=(0|t.words[f])*(0|e.words[u]),d=67108863&l;a=67108863&(d=d+a|0),n+=(s=(s=s+(l/67108864|0)|0)+(d>>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,t,e):p(this,t,e),r},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=n.prototype._countBits(t)-1,i=0;i<t;i++)e[i]=this.revBin(i,r,t);return e},m.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var i=0,n=0;n<e;n++)i|=(1&t)<<e-n-1,t>>=1;return i},m.prototype.permute=function(t,e,r,i,n,o){for(var s=0;s<o;s++)i[s]=e[t[s]],n[s]=r[t[s]]},m.prototype.transform=function(t,e,r,i,n,o){this.permute(o,t,e,r,i,n);for(var s=1;s<n;s<<=1)for(var a=s<<1,h=Math.cos(2*Math.PI/a),u=Math.sin(2*Math.PI/a),f=0;f<n;f+=a)for(var l=h,d=u,c=0;c<s;c++){var p=r[f+c],m=i[f+c],g=r[f+c+s],v=i[f+c+s],b=l*g-d*v;v=l*v+d*g,g=b,r[f+c]=p+g,i[f+c]=m+v,r[f+c+s]=p-g,i[f+c+s]=m-v,c!==a&&(b=h*l-u*d,d=h*d+u*l,l=b)}},m.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},m.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=t[i];t[i]=t[r-i-1],t[r-i-1]=n,n=e[i],e[i]=-e[r-i-1],e[r-i-1]=-n}},m.prototype.normalize13b=function(t,e){for(var r=0,i=0;i<e/2;i++){var n=8192*Math.round(t[2*i+1]/e)+Math.round(t[2*i]/e)+r;t[i]=67108863&n,r=n<67108864?0:n/67108864|0}return t},m.prototype.convert13b=function(t,e,i,n){for(var o=0,s=0;s<e;s++)o+=0|t[s],i[2*s]=8191&o,o>>>=13,i[2*s+1]=8191&o,o>>>=13;for(s=2*e;s<n;++s)i[s]=0;r(0===o),r(0==(-8192&o))},m.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},m.prototype.mulp=function(t,e,r){var i=2*this.guessLen13b(t.length,e.length),n=this.makeRBT(i),o=this.stub(i),s=new Array(i),a=new Array(i),h=new Array(i),u=new Array(i),f=new Array(i),l=new Array(i),d=r.words;d.length=i,this.convert13b(t.words,t.length,s,i),this.convert13b(e.words,e.length,u,i),this.transform(s,o,a,h,i,n),this.transform(u,o,f,l,i,n);for(var c=0;c<i;c++){var p=a[c]*f[c]-h[c]*l[c];h[c]=a[c]*l[c]+h[c]*f[c],a[c]=p}return this.conjugate(a,h,i),this.transform(a,h,d,o,i,n),this.conjugate(d,o,i),this.normalize13b(d,i),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},n.prototype.mul=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},n.prototype.mulf=function(t){var e=new n(null);return e.words=new Array(this.length+t.length),p(this,t,e)},n.prototype.imul=function(t){return this.clone().mulTo(t,this)},n.prototype.imuln=function(t){r("number"==typeof t),r(t<67108864);for(var e=0,i=0;i<this.length;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&e);e>>=26,e+=n/67108864|0,e+=o>>>26,this.words[i]=67108863&o}return 0!==e&&(this.words[i]=e,this.length++),this},n.prototype.muln=function(t){return this.clone().imuln(t)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var i=r/26|0,n=r%26;e[r]=(t.words[i]&1<<n)>>>n}return e}(t);if(0===e.length)return new n(1);for(var r=this,i=0;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(var o=r.sqr();i<e.length;i++,o=o.sqr())0!==e[i]&&(r=r.mul(o));return r},n.prototype.iushln=function(t){r("number"==typeof t&&t>=0);var e,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(e=0;e<this.length;e++){var a=this.words[e]&o,h=(0|this.words[e])-a<<i;this.words[e]=h|s,s=a>>>26-i}s&&(this.words[e]=s,this.length++)}if(0!==n){for(e=this.length-1;e>=0;e--)this.words[e+n]=this.words[e];for(e=0;e<n;e++)this.words[e]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},n.prototype.iushrn=function(t,e,i){var n;r("number"==typeof t&&t>=0),n=e?(e-e%26)/26:0;var o=t%26,s=Math.min((t-o)/26,this.length),a=67108863^67108863>>>o<<o,h=i;if(n-=s,n=Math.max(0,n),h){for(var u=0;u<s;u++)h.words[u]=this.words[u];h.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var f=0;for(u=this.length-1;u>=0&&(0!==f||u>=n);u--){var l=0|this.words[u];this.words[u]=f<<26-o|l>>>o,f=l&a}return h&&0!==f&&(h.words[h.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(t,e,i){return r(0===this.negative),this.iushrn(t,e,i)},n.prototype.shln=function(t){return this.clone().ishln(t)},n.prototype.ushln=function(t){return this.clone().iushln(t)},n.prototype.shrn=function(t){return this.clone().ishrn(t)},n.prototype.ushrn=function(t){return this.clone().iushrn(t)},n.prototype.testn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26,n=1<<e;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(t){r("number"==typeof t&&t>=0);var e=t%26,i=(t-e)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==e&&i++,this.length=Math.min(i,this.length),0!==e){var n=67108863^67108863>>>e<<e;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(t){return this.clone().imaskn(t)},n.prototype.iaddn=function(t){return r("number"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},n.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},n.prototype.isubn=function(t){if(r("number"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},n.prototype.addn=function(t){return this.clone().iaddn(t)},n.prototype.subn=function(t){return this.clone().isubn(t)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(t,e,i){var n,o,s=t.length+i;this._expand(s);var a=0;for(n=0;n<t.length;n++){o=(0|this.words[n+i])+a;var h=(0|t.words[n])*e;a=((o-=67108863&h)>>26)-(h/67108864|0),this.words[n+i]=67108863&o}for(;n<this.length-i;n++)a=(o=(0|this.words[n+i])+a)>>26,this.words[n+i]=67108863&o;if(0===a)return this.strip();for(r(-1===a),a=0,n=0;n<this.length;n++)a=(o=-(0|this.words[n])+a)>>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},n.prototype._wordDiv=function(t,e){var r=(this.length,t.length),i=this.clone(),o=t,s=0|o.words[o.length-1];0!==(r=26-this._countBits(s))&&(o=o.ushln(r),i.iushln(r),s=0|o.words[o.length-1]);var a,h=i.length-o.length;if("mod"!==e){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var u=0;u<a.length;u++)a.words[u]=0}var f=i.clone()._ishlnsubmul(o,1,h);0===f.negative&&(i=f,a&&(a.words[h]=1));for(var l=h-1;l>=0;l--){var d=67108864*(0|i.words[o.length+l])+(0|i.words[o.length+l-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(o,d,l);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(o,1,l),i.isZero()||(i.negative^=1);a&&(a.words[l]=d)}return a&&a.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(t,e,i){return r(!t.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===t.negative?(a=this.neg().divmod(t,e),"mod"!==e&&(o=a.div.neg()),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.iadd(t)),{div:o,mod:s}):0===this.negative&&0!==t.negative?(a=this.divmod(t.neg(),e),"mod"!==e&&(o=a.div.neg()),{div:o,mod:a.mod}):0!=(this.negative&t.negative)?(a=this.neg().divmod(t.neg(),e),"div"!==e&&(s=a.mod.neg(),i&&0!==s.negative&&s.isub(t)),{div:a.div,mod:s}):t.length>this.length||this.cmp(t)<0?{div:new n(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new n(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new n(this.modn(t.words[0]))}:this._wordDiv(t,e);var o,s,a},n.prototype.div=function(t){return this.divmod(t,"div",!1).div},n.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},n.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},n.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),o=r.cmp(i);return o<0||1===n&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},n.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(e*i+(0|this.words[n]))%t;return i},n.prototype.idivn=function(t){r(t<=67108863);for(var e=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*e;this.words[i]=n/t|0,e=n%t}return this.strip()},n.prototype.divn=function(t){return this.clone().idivn(t)},n.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o=new n(1),s=new n(0),a=new n(0),h=new n(1),u=0;e.isEven()&&i.isEven();)e.iushrn(1),i.iushrn(1),++u;for(var f=i.clone(),l=e.clone();!e.isZero();){for(var d=0,c=1;0==(e.words[0]&c)&&d<26;++d,c<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(l)),o.iushrn(1),s.iushrn(1);for(var p=0,m=1;0==(i.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(f),h.isub(l)),a.iushrn(1),h.iushrn(1);e.cmp(i)>=0?(e.isub(i),o.isub(a),s.isub(h)):(i.isub(e),a.isub(o),h.isub(s))}return{a:a,b:h,gcd:i.iushln(u)}},n.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,i=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var o,s=new n(1),a=new n(0),h=i.clone();e.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,f=1;0==(e.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(e.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(h),s.iushrn(1);for(var l=0,d=1;0==(i.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(i.iushrn(l);l-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);e.cmp(i)>=0?(e.isub(i),s.isub(a)):(i.isub(e),a.isub(s))}return(o=0===e.cmpn(1)?s:a).cmpn(0)<0&&o.iadd(t),o},n.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var i=0;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=e.cmp(r);if(n<0){var o=e;e=r,r=o}else if(0===n||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)},n.prototype.invm=function(t){return this.egcd(t).a.umod(t)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(t){return this.words[0]&t},n.prototype.bincn=function(t){r("number"==typeof t);var e=t%26,i=(t-e)/26,n=1<<e;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,s=i;0!==o&&s<this.length;s++){var a=0|this.words[s];o=(a+=o)>>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(t){var e,i=t<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)e=1;else{i&&(t=-t),r(t<=67108863,"Number is too big");var n=0|this.words[0];e=n===t?0:n<t?-1:1}return 0!==this.negative?0|-e:e},n.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},n.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e},n.prototype.gtn=function(t){return 1===this.cmpn(t)},n.prototype.gt=function(t){return 1===this.cmp(t)},n.prototype.gten=function(t){return this.cmpn(t)>=0},n.prototype.gte=function(t){return this.cmp(t)>=0},n.prototype.ltn=function(t){return-1===this.cmpn(t)},n.prototype.lt=function(t){return-1===this.cmp(t)},n.prototype.lten=function(t){return this.cmpn(t)<=0},n.prototype.lte=function(t){return this.cmp(t)<=0},n.prototype.eqn=function(t){return 0===this.cmpn(t)},n.prototype.eq=function(t){return 0===this.cmp(t)},n.red=function(t){return new _(t)},n.prototype.toRed=function(t){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(t){return this.red=t,this},n.prototype.forceRed=function(t){return r(!this.red,"Already a number in reduction context"),this._forceRed(t)},n.prototype.redAdd=function(t){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},n.prototype.redIAdd=function(t){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},n.prototype.redSub=function(t){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},n.prototype.redISub=function(t){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},n.prototype.redShl=function(t){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},n.prototype.redMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},n.prototype.redIMul=function(t){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(t){return r(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new n(e,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(t){if("string"==typeof t){var e=n._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){_.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new n(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(b,v),b.prototype.split=function(t,e){for(var r=4194303,i=Math.min(t.length,9),n=0;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,n=10;n<t.length;n++){var s=0|t.words[n];t.words[n-10]=(s&r)<<4|o>>>22,o=s}o>>>=22,t.words[n-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},b.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(y,v),i(w,v),i(M,v),M.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var i=19*(0|t.words[r])+e,n=67108863&i;i>>>=26,t.words[r]=n,e=i}return 0!==e&&(t.words[t.length++]=e),t},n._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new b;else if("p224"===t)e=new y;else if("p192"===t)e=new w;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new M}return g[t]=e,e},_.prototype._verify1=function(t){r(0===t.negative,"red works only with positives"),r(t.red,"red works only with red numbers")},_.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),"red works only with positives"),r(t.red&&t.red===e.red,"red works only with red numbers")},_.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},_.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},_.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},_.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},_.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},_.prototype.isqr=function(t){return this.imul(t,t.clone())},_.prototype.sqr=function(t){return this.mul(t,t)},_.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var i=this.m.add(new n(1)).iushrn(2);return this.pow(t,i)}for(var o=this.m.subn(1),s=0;!o.isZero()&&0===o.andln(1);)s++,o.iushrn(1);r(!o.isZero());var a=new n(1).toRed(this),h=a.redNeg(),u=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new n(2*f*f).toRed(this);0!==this.pow(f,u).cmp(h);)f.redIAdd(h);for(var l=this.pow(f,o),d=this.pow(t,o.addn(1).iushrn(1)),c=this.pow(t,o),p=s;0!==c.cmp(a);){for(var m=c,g=0;0!==m.cmp(a);g++)m=m.redSqr();r(g<p);var v=this.pow(l,new n(1).iushln(p-g-1));d=d.redMul(v),l=v.redSqr(),c=c.redMul(l),p=g}return d},_.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},_.prototype.pow=function(t,e){if(e.isZero())return new n(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=t;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],t);var o=r[0],s=0,a=0,h=e.bitLength()%26;for(0===h&&(h=26),i=e.length-1;i>=0;i--){for(var u=e.words[i],f=h-1;f>=0;f--){var l=u>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==s?(s<<=1,s|=l,(4===++a||0===i&&0===f)&&(o=this.mul(o,r[s]),a=0,s=0)):a=0}h=26}return o},_.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},_.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},n.mont=function(t){return new A(t)},i(A,_),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),o=n;return n.cmp(this.m)>=0?o=n.isub(this.m):n.cmpn(0)<0&&(o=n.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new n(0)._forceRed(this);var r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(i).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this),t.exports}.call({})}function Gk(){return Kk||(Kk=!0,Wk()),Hk}var Yk,Vk,$k,Xk=!1;function Jk(t,e){return $k.from(t.toRed(Vk.mont(e.modulus)).redPow(new Vk(e.publicExponent)).fromRed().toArray())}function Qk(){return Xk||(Xk=!0,Yk={},Vk=Gk(),$k=lr().Buffer,Yk=Jk),Yk}var tB,eB,rB,iB,nB,oB,sB,aB,hB,uB,fB=!1;function lB(t,e,r){var i,n=e.length,o=t.modulus.byteLength();if(n>o-11)throw new Error("message too long");return i=r?uB.alloc(o-n-3,255):function(t){var e,r=uB.allocUnsafe(t),i=0,n=rB(2*t),o=0;for(;i<t;)o===n.length&&(n=rB(2*t),o=0),(e=n[o++])&&(r[i++]=e);return r}(o-n-3),new sB(uB.concat([uB.from([0,r?1:2]),i,uB.alloc(1),e],o))}function dB(){tB={},eB=DS(),rB=wr(),iB=uu(),nB=zk(),oB=Zk(),sB=Gk(),aB=Qk(),hB=Fg(),uB=lr().Buffer,tB=function(t,e,r){var i;i=t.padding?t.padding:r?1:4;var n,o=eB(t);if(4===i)n=function(t,e){var r=t.modulus.byteLength(),i=e.length,n=iB("sha1").update(uB.alloc(0)).digest(),o=n.length,s=2*o;if(i>r-s-2)throw new Error("message too long");var a=uB.alloc(r-i-s-2),h=r-o-1,u=rB(o),f=oB(uB.concat([n,a,uB.alloc(1,1),e],h),nB(u,h)),l=oB(u,nB(f,o));return new sB(uB.concat([uB.alloc(1),l,f],r))}(o,e);else if(1===i)n=lB(o,e,r);else{if(3!==i)throw new Error("unknown padding");if((n=new sB(e)).cmp(o.modulus)>=0)throw new Error("data too long for modulus")}return r?hB(n,o):aB(n,o)}}var cB,pB,mB,gB,vB,bB,yB,wB,MB,_B=!1;function AB(t,e){var r=t.modulus.byteLength(),i=yB("sha1").update(MB.alloc(0)).digest(),n=i.length;if(0!==e[0])throw new Error("decryption error");var o=e.slice(1,n+1),s=e.slice(n+1),a=gB(o,mB(s,n)),h=gB(s,mB(a,r-n-1));if(function(t,e){t=MB.from(t),e=MB.from(e);var r=0,i=t.length;t.length!==e.length&&(r++,i=Math.min(t.length,e.length));var n=-1;for(;++n<i;)r+=t[n]^e[n];return r}(i,h.slice(0,n)))throw new Error("decryption error");for(var u=n;0===h[u];)u++;if(1!==h[u++])throw new Error("decryption error");return h.slice(u)}function EB(){cB={},pB=DS(),mB=zk(),gB=Zk(),vB=Gk(),bB=Fg(),yB=uu(),wB=Qk(),MB=lr().Buffer,cB=function(t,e,r){var i;i=t.padding?t.padding:r?1:4;var n,o=pB(t),s=o.modulus.byteLength();if(e.length>s||new vB(e).cmp(o.modulus)>=0)throw new Error("decryption error");n=r?wB(new vB(e),o):bB(e,o);var a=MB.alloc(s-n.length);if(n=MB.concat([a,n],s),4===i)return AB(o,n);if(1===i)return function(t,e,r){for(var i=e.slice(0,2),n=2,o=0;0!==e[n++];)if(n>=e.length){o++;break}var s=e.slice(2,n-1);if(("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&o++,s.length<8&&o++,o)throw new Error("decryption error");return e.slice(n)}(0,n,r);if(3===i)return n;throw new Error("unknown padding")}}var SB,kB,BB,RB,TB,xB=!1;function IB(){SB={},fB||(fB=!0,dB()),kB=tB,SB.publicEncrypt=kB,_B||(_B=!0,EB()),BB=cB,SB.privateDecrypt=BB,RB=function(t,e){return kB(t,e,!0)},SB.privateEncrypt=RB,TB=function(t,e){return BB(t,e,!0)},SB.publicDecrypt=TB}var CB,PB,DB,LB,OB,jB,UB,NB=!1;function zB(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}function qB(t,e){if("number"!=typeof t||t!=t)throw new TypeError("offset must be a number");if(t>UB||t<0)throw new TypeError("offset must be a uint32");if(t>OB||t>e)throw new RangeError("offset out of range")}function FB(t,e,r){if("number"!=typeof t||t!=t)throw new TypeError("size must be a number");if(t>UB||t<0)throw new TypeError("size must be a uint32");if(t+e>r||t>OB)throw new RangeError("buffer too small")}function ZB(e,r,i,n){if(!(LB.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)n=r,r=0,i=e.length;else if("function"==typeof i)n=i,i=e.length-r;else if("function"!=typeof n)throw new TypeError('"cb" argument must be a function');return qB(r,e.length),FB(i,r,e.length),HB(e,r,i,n)}function HB(t,e,r,i){var n=t.buffer,o=new Uint8Array(n,e,r);return jB.getRandomValues(o),i?void jt().nextTick((function(){i(null,t)})):t}function KB(e,r,i){if(void 0===r&&(r=0),!(LB.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return qB(r,e.length),void 0===i&&(i=e.length-r),FB(i,r,e.length),HB(e,r,i)}function WB(){return NB||(NB=!0,DB={},jt(),lr(),wr(),LB=lr().Buffer,OB=lr().kMaxLength,jB=t.crypto||t.msCrypto,UB=Math.pow(2,32)-1,jB&&jB.getRandomValues?(CB=ZB,DB.randomFill=CB,PB=KB,DB.randomFillSync=PB):(CB=zB,DB.randomFill=CB,PB=zB,DB.randomFillSync=PB)),DB}var GB,YB,VB,$B,XB,JB,QB,tR,eR,rR,iR,nR,oR=!1;function sR(){JB={},VB=wr(),YB=JB.prng=VB,GB=JB.pseudoRandomBytes=YB,QB=JB.rng=GB,JB.randomBytes=QB,$B=uu(),tR=JB.Hash=$B,JB.createHash=tR,XB=Du(),eR=JB.Hmac=XB,JB.createHmac=eR,rR=zu(),iR=Object.keys(rR),["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(iR),Lf(),fm(),Bg||(Bg=!0,xg()),Ak(),Ik||(Ik=!0,Dk()),nR=Bk,JB.createECDH=nR,xB||(xB=!0,IB()),WB()}function aR(){return oR||(oR=!0,sR()),JB}var hR,uR,fR,lR,dR,cR,pR,mR,gR,vR,bR,yR,wR,MR,_R,AR,ER,SR,kR,BR,RR,TR,xR,IR,CR,PR,DR,LR,OR,jR,UR,NR,zR,qR,FR,ZR,HR,KR,WR,GR,YR,VR,$R,XR,JR,QR,tT,eT,rT,iT,nT,oT,sT,aT,hT,uT,fT,lT,dT,cT,pT,mT,gT,vT,bT,yT,wT,MT,_T,AT,ET,ST,kT,BT,RT,TT,xT,IT,CT,PT,DT,LT,OT,jT=!1;function UT(t){return lR.locateFile?lR.locateFile(t,wR):wR+t}function NT(t){NT.shown||(NT.shown={}),NT.shown[t]||(NT.shown[t]=1,BR(t))}function zT(t,e){t||tx("Assertion failed: "+e)}function qT(t,e,r){for(var i=e+r,n=e;t[n]&&!(n>=i);)++n;if(n-e>16&&t.subarray&&PR)return PR.decode(t.subarray(e,n));for(var o="";e<n;){var s=t[e++];if(128&s){var a=63&t[e++];if(192!=(224&s)){var h=63&t[e++];if((s=224==(240&s)?(15&s)<<12|a<<6|h:(7&s)<<18|a<<12|h<<6|63&t[e++])<65536)o+=String.fromCharCode(s);else{var u=s-65536;o+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else o+=String.fromCharCode((31&s)<<6|a)}else o+=String.fromCharCode(s)}return o}function FT(t,e){return t?qT(jR,t,e):""}function ZT(t,e,r,i){if(!(i>0))return 0;for(var n=r,o=r+i-1,s=0;s<t.length;++s){var a=t.charCodeAt(s);if(a>=55296&&a<=57343)a=65536+((1023&a)<<10)|1023&t.charCodeAt(++s);if(a<=127){if(r>=o)break;e[r++]=a}else if(a<=2047){if(r+1>=o)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=o)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=o)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}return e[r]=0,r-n}function HT(t,e,r){return ZT(t,jR,e,r)}function KT(t){for(var e=0,r=0;r<t.length;++r){var i=t.charCodeAt(r);i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&t.charCodeAt(++r)),i<=127?++e:e+=i<=2047?2:i<=65535?3:4}return e}function WT(t,e){for(var r=t,i=r>>1,n=i+e/2;!(i>=n)&&NR[i];)++i;if((r=i<<1)-t>32&&DR)return DR.decode(jR.subarray(t,r));for(var o="",s=0;!(s>=e/2);++s){var a=UR[t+2*s>>1];if(0==a)break;o+=String.fromCharCode(a)}return o}function GT(t,e,r){if(void 0===r&&(r=2147483647),r<2)return 0;for(var i=e,n=(r-=2)<2*t.length?r/2:t.length,o=0;o<n;++o){var s=t.charCodeAt(o);UR[e>>1]=s,e+=2}return UR[e>>1]=0,e-i}function YT(t){return 2*t.length}function VT(t,e){for(var r=0,i="";!(r>=e/4);){var n=zR[t+4*r>>2];if(0==n)break;if(++r,n>=65536){var o=n-65536;i+=String.fromCharCode(55296|o>>10,56320|1023&o)}else i+=String.fromCharCode(n)}return i}function $T(t,e,r){if(void 0===r&&(r=2147483647),r<4)return 0;for(var i=e,n=i+r-4,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o);if(zR[e>>2]=s,(e+=4)+4>n)break}return zR[e>>2]=0,e-i}function XT(t){for(var e=0,r=0;r<t.length;++r){var i=t.charCodeAt(r);i>=55296&&i<=57343&&++r,e+=4}return e}function JT(t){YR++,lR.monitorRunDependencies&&lR.monitorRunDependencies(YR)}function QT(t){if(YR--,lR.monitorRunDependencies&&lR.monitorRunDependencies(YR),0==YR&&(null!==VR&&(clearInterval(VR),VR=null),$R)){var e=$R;$R=null,e()}}function tx(t){throw lR.onAbort&&lR.onAbort(t),BR(t+=""),CR=!0,1,t="abort("+t+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(t)}function ex(t){return t.startsWith(XR)}function rx(t){return t.startsWith("file://")}function ix(t){try{if(t==JR&&xR)return new Uint8Array(xR);if(AR)return AR(t);throw"both async and sync fetching of the wasm failed"}catch(t){tx(t)}}function nx(){var t={a:TT};function e(t,e){var r,i,n=t.exports;lR.asm=n,IR=lR.asm.J,r=IR.buffer,LR=r,lR.HEAP8=OR=new Int8Array(r),lR.HEAP16=UR=new Int16Array(r),lR.HEAP32=zR=new Int32Array(r),lR.HEAPU8=jR=new Uint8Array(r),lR.HEAPU16=NR=new Uint16Array(r),lR.HEAPU32=qR=new Uint32Array(r),lR.HEAPF32=FR=new Float32Array(r),lR.HEAPF64=ZR=new Float64Array(r),HR=lR.asm.N,i=lR.asm.K,WR.unshift(i),QT()}function r(t){e(t.instance)}function i(e){return function(){if(!xR&&(gR||vR)){if("function"==typeof fetch&&!rx(JR))return fetch(JR,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+JR+"'";return t.arrayBuffer()})).catch((function(){return ix(JR)}));if(_R)return new Promise((function(t,e){_R(JR,(function(e){t(new Uint8Array(e))}),e)}))}return Promise.resolve().then((function(){return ix(JR)}))}().then((function(e){return WebAssembly.instantiate(e,t)})).then(e,(function(t){BR("failed to asynchronously prepare wasm: "+t),tx(t)}))}if(JT(),lR.instantiateWasm)try{return lR.instantiateWasm(t,e)}catch(t){return BR("Module.instantiateWasm callback failed with error: "+t),!1}return xR||"function"!=typeof WebAssembly.instantiateStreaming||ex(JR)||rx(JR)||"function"!=typeof fetch?i(r):fetch(JR,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(r,(function(t){return BR("wasm streaming compile failed: "+t),BR("falling back to ArrayBuffer instantiation"),i(r)}))})),{}}function ox(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var r=e.func;"number"==typeof r?void 0===e.arg?HR.get(r)():HR.get(r)(e.arg):r(void 0===e.arg?null:e.arg)}else e(lR)}}function sx(){var t=new Error;if(!t.stack){try{throw new Error}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function ax(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}if(bR)try{return aR(),function(){return aR().randomBytes(1)[0]}}catch(t){}return function(){tx("randomDevice")}}function hx(t){for(var e=function(t,e){return e||(e=RR),Math.ceil(t/e)*e}(t,65536),r=IT(e);t<e;)OR[r+t++]=0;return r}function ux(t,e,r){sT.varargs=r;try{var i=sT.getStreamFromFD(t);switch(e){case 0:return(n=sT.get())<0?-28:oT.open(i.path,i.flags,0,n).fd;case 1:case 2:case 13:case 14:return 0;case 3:return i.flags;case 4:var n=sT.get();return i.flags|=n,0;case 12:n=sT.get();return UR[n+0>>1]=2,0;default:return-28;case 9:return o=28,zR[PT()>>2]=o,-1}}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),-t.errno}var o}function fx(t,e,r){sT.varargs=r;try{var i=sT.getStr(t),n=r?sT.get():0;return oT.open(i,e,n).fd}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),-t.errno}}function lx(t,e,r,i,n){}function dx(t){switch(t){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+t)}}function cx(){for(var t=new Array(256),e=0;e<256;++e)t[e]=String.fromCharCode(e);aT=t}function px(t){for(var e="",r=t;jR[r];)e+=aT[jR[r++]];return e}function mx(t){if(void 0===t)return"_unknown";var e=(t=t.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return e>=lT&&e<=dT?"_"+t:t}function gx(t,e){return t=mx(t),new Function("body","return function "+t+'() {\n    "use strict";    return body.apply(this, arguments);\n};\n')(e)}function vx(t,e){var r=gx(e,(function(t){this.name=e,this.message=t;var r=new Error(t).stack;void 0!==r&&(this.stack=this.toString()+"\n"+r.replace(/^Error(:[^\n]*)?\n/,""))}));return r.prototype=Object.create(t.prototype),r.prototype.constructor=r,r.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},r}function bx(t){throw new cT(t)}function yx(t){throw new pT(t)}function wx(t,e,r){function i(e){var i=r(e);i.length!==t.length&&yx("Mismatched type converter count");for(var n=0;n<t.length;++n)Mx(t[n],i[n])}t.forEach((function(t){fT[t]=e}));var n=new Array(e.length),o=[],s=0;e.forEach((function(t,e){uT.hasOwnProperty(t)?n[e]=uT[t]:(o.push(t),hT.hasOwnProperty(t)||(hT[t]=[]),hT[t].push((function(){n[e]=uT[t],++s===o.length&&i(n)})))})),0===o.length&&i(n)}function Mx(t,e,r){if(r=r||{},!("argPackAdvance"in e))throw new TypeError("registerType registeredInstance requires argPackAdvance");var i=e.name;if(t||bx('type "'+i+'" must have a positive integer typeid pointer'),uT.hasOwnProperty(t)){if(r.ignoreDuplicateRegistrations)return;bx("Cannot register type '"+i+"' twice")}if(uT[t]=e,delete fT[t],hT.hasOwnProperty(t)){var n=hT[t];delete hT[t],n.forEach((function(t){t()}))}}function _x(t,e,r,i,n){var o=dx(r);Mx(t,{name:e=px(e),fromWireType:function(t){return!!t},toWireType:function(t,e){return e?i:n},argPackAdvance:8,readValueFromPointer:function(t){var i;if(1===r)i=OR;else if(2===r)i=UR;else{if(4!==r)throw new TypeError("Unknown boolean type size: "+e);i=zR}return this.fromWireType(i[t>>o])},destructorFunction:null})}function Ax(t){if(!(this instanceof Dx))return!1;if(!(t instanceof Dx))return!1;for(var e=this.$$.ptrType.registeredClass,r=this.$$.ptr,i=t.$$.ptrType.registeredClass,n=t.$$.ptr;e.baseClass;)r=e.upcast(r),e=e.baseClass;for(;i.baseClass;)n=i.upcast(n),i=i.baseClass;return e===i&&r===n}function Ex(t){bx(t.$$.ptrType.registeredClass.name+" instance already deleted")}function Sx(t){}function kx(t){t.count.value-=1,0===t.count.value&&function(t){t.smartPtr?t.smartPtrType.rawDestructor(t.smartPtr):t.ptrType.registeredClass.rawDestructor(t.ptr)}(t)}function Bx(t){return"undefined"==typeof FinalizationGroup?(Bx=function(t){return t},t):(mT=new FinalizationGroup((function(t){for(var e=t.next();!e.done;e=t.next()){var r=e.value;r.ptr?kx(r):console.warn("object already deleted: "+r.ptr)}})),Bx=function(t){return mT.register(t,t.$$,t.$$),t},Sx=function(t){mT.unregister(t.$$)},Bx(t))}function Rx(){if(this.$$.ptr||Ex(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var t,e=Bx(Object.create(Object.getPrototypeOf(this),{$$:{value:(t=this.$$,{count:t.count,deleteScheduled:t.deleteScheduled,preservePointerOnDelete:t.preservePointerOnDelete,ptr:t.ptr,ptrType:t.ptrType,smartPtr:t.smartPtr,smartPtrType:t.smartPtrType})}}));return e.$$.count.value+=1,e.$$.deleteScheduled=!1,e}function Tx(){this.$$.ptr||Ex(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&bx("Object already scheduled for deletion"),Sx(this),kx(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function xx(){return!this.$$.ptr}function Ix(){for(;vT.length;){var t=vT.pop();t.$$.deleteScheduled=!1,t.delete()}}function Cx(){return this.$$.ptr||Ex(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&bx("Object already scheduled for deletion"),vT.push(this),1===vT.length&&gT&&gT(Ix),this.$$.deleteScheduled=!0,this}function Px(){Dx.prototype.isAliasOf=Ax,Dx.prototype.clone=Rx,Dx.prototype.delete=Tx,Dx.prototype.isDeleted=xx,Dx.prototype.deleteLater=Cx}function Dx(){}function Lx(t,e,r){if(void 0===t[e].overloadTable){var i=t[e];t[e]=function(){return t[e].overloadTable.hasOwnProperty(arguments.length)||bx("Function '"+r+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+t[e].overloadTable+")!"),t[e].overloadTable[arguments.length].apply(this,arguments)},t[e].overloadTable=[],t[e].overloadTable[i.argCount]=i}}function Ox(t,e,r,i,n,o,s,a){this.name=t,this.constructor=e,this.instancePrototype=r,this.rawDestructor=i,this.baseClass=n,this.getActualType=o,this.upcast=s,this.downcast=a,this.pureVirtualFunctions=[]}function jx(t,e,r){for(;e!==r;)e.upcast||bx("Expected null or instance of "+r.name+", got an instance of "+e.name),t=e.upcast(t),e=e.baseClass;return t}function Ux(t,e){if(null===e)return this.isReference&&bx("null is not a valid "+this.name),0;e.$$||bx('Cannot pass "'+yI(e)+'" as a '+this.name),e.$$.ptr||bx("Cannot pass deleted object as a pointer of type "+this.name);var r=e.$$.ptrType.registeredClass;return jx(e.$$.ptr,r,this.registeredClass)}function Nx(t,e){var r;if(null===e)return this.isReference&&bx("null is not a valid "+this.name),this.isSmartPointer?(r=this.rawConstructor(),null!==t&&t.push(this.rawDestructor,r),r):0;e.$$||bx('Cannot pass "'+yI(e)+'" as a '+this.name),e.$$.ptr||bx("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&e.$$.ptrType.isConst&&bx("Cannot convert argument of type "+(e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name)+" to parameter type "+this.name);var i=e.$$.ptrType.registeredClass;if(r=jx(e.$$.ptr,i,this.registeredClass),this.isSmartPointer)switch(void 0===e.$$.smartPtr&&bx("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:e.$$.smartPtrType===this?r=e.$$.smartPtr:bx("Cannot convert argument of type "+(e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:r=e.$$.smartPtr;break;case 2:if(e.$$.smartPtrType===this)r=e.$$.smartPtr;else{var n=e.clone();r=this.rawShare(r,vI((function(){n.delete()}))),null!==t&&t.push(this.rawDestructor,r)}break;default:bx("Unsupporting sharing policy")}return r}function zx(t,e){if(null===e)return this.isReference&&bx("null is not a valid "+this.name),0;e.$$||bx('Cannot pass "'+yI(e)+'" as a '+this.name),e.$$.ptr||bx("Cannot pass deleted object as a pointer of type "+this.name),e.$$.ptrType.isConst&&bx("Cannot convert argument of type "+e.$$.ptrType.name+" to parameter type "+this.name);var r=e.$$.ptrType.registeredClass;return jx(e.$$.ptr,r,this.registeredClass)}function qx(t){return this.fromWireType(qR[t>>2])}function Fx(t){return this.rawGetPointee&&(t=this.rawGetPointee(t)),t}function Zx(t){this.rawDestructor&&this.rawDestructor(t)}function Hx(t){null!==t&&t.delete()}function Kx(t,e,r){if(e===r)return t;if(void 0===r.baseClass)return null;var i=Kx(t,e,r.baseClass);return null===i?null:r.downcast(i)}function Wx(){return Object.keys(yT).length}function Gx(){var t=[];for(var e in yT)yT.hasOwnProperty(e)&&t.push(yT[e]);return t}function Yx(t){gT=t,vT.length&&gT&&gT(Ix)}function Vx(){lR.getInheritedInstanceCount=Wx,lR.getLiveInheritedInstances=Gx,lR.flushPendingDeletes=Ix,lR.setDelayFunction=Yx}function $x(t,e){return e=function(t,e){for(void 0===e&&bx("ptr should not be undefined");t.baseClass;)e=t.upcast(e),t=t.baseClass;return e}(t,e),yT[e]}function Xx(t,e){return e.ptrType&&e.ptr||yx("makeClassHandle requires ptr and ptrType"),!!e.smartPtrType!==!!e.smartPtr&&yx("Both smartPtrType and smartPtr must be specified"),e.count={value:1},Bx(Object.create(t,{$$:{value:e}}))}function Jx(t){var e=this.getPointee(t);if(!e)return this.destructor(t),null;var r=$x(this.registeredClass,e);if(void 0!==r){if(0===r.$$.count.value)return r.$$.ptr=e,r.$$.smartPtr=t,r.clone();var i=r.clone();return this.destructor(t),i}function n(){return this.isSmartPointer?Xx(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:e,smartPtrType:this,smartPtr:t}):Xx(this.registeredClass.instancePrototype,{ptrType:this,ptr:t})}var o,s=this.registeredClass.getActualType(e),a=bT[s];if(!a)return n.call(this);o=this.isConst?a.constPointerType:a.pointerType;var h=Kx(e,this.registeredClass,o.registeredClass);return null===h?n.call(this):this.isSmartPointer?Xx(o.registeredClass.instancePrototype,{ptrType:o,ptr:h,smartPtrType:this,smartPtr:t}):Xx(o.registeredClass.instancePrototype,{ptrType:o,ptr:h})}function Qx(){tI.prototype.getPointee=Fx,tI.prototype.destructor=Zx,tI.prototype.argPackAdvance=8,tI.prototype.readValueFromPointer=qx,tI.prototype.deleteObject=Hx,tI.prototype.fromWireType=Jx}function tI(t,e,r,i,n,o,s,a,h,u,f){this.name=t,this.registeredClass=e,this.isReference=r,this.isConst=i,this.isSmartPointer=n,this.pointeeType=o,this.sharingPolicy=s,this.rawGetPointee=a,this.rawConstructor=h,this.rawShare=u,this.rawDestructor=f,n||void 0!==e.baseClass?this.toWireType=Nx:i?(this.toWireType=Ux,this.destructorFunction=null):(this.toWireType=zx,this.destructorFunction=null)}function eI(t,e,r){return t.includes("j")?function(t,e,r){var i=lR["dynCall_"+t];return r&&r.length?i.apply(null,[e].concat(r)):i.call(null,e)}(t,e,r):HR.get(e).apply(null,r)}function rI(t,e){var r,i,n,o=(t=px(t)).includes("j")?(r=t,i=e,n=[],function(){n.length=arguments.length;for(var t=0;t<arguments.length;t++)n[t]=arguments[t];return eI(r,i,n)}):HR.get(e);return"function"!=typeof o&&bx("unknown function pointer with signature "+t+": "+e),o}function iI(t){var e=DT(t),r=px(e);return xT(e),r}function nI(t,e){var r=[],i={};throw e.forEach((function t(e){i[e]||uT[e]||(fT[e]?fT[e].forEach(t):(r.push(e),i[e]=!0))})),new wT(t+": "+r.map(iI).join([", "]))}function oI(t,e,r,i,n,o,s,a,h,u,f,l,d){f=px(f),o=rI(n,o),a&&(a=rI(s,a)),u&&(u=rI(h,u)),d=rI(l,d);var c=mx(f);!function(t,e,r){lR.hasOwnProperty(t)?((void 0===r||void 0!==lR[t].overloadTable&&void 0!==lR[t].overloadTable[r])&&bx("Cannot register public name '"+t+"' twice"),Lx(lR,t,t),lR.hasOwnProperty(r)&&bx("Cannot register multiple overloads of a function with the same number of arguments ("+r+")!"),lR[t].overloadTable[r]=e):(lR[t]=e,void 0!==r&&(lR[t].numArguments=r))}(c,(function(){nI("Cannot construct "+f+" due to unbound types",[i])})),wx([t,e,r],i?[i]:[],(function(e){var r,n;e=e[0],n=i?(r=e.registeredClass).instancePrototype:Dx.prototype;var s=gx(c,(function(){if(Object.getPrototypeOf(this)!==h)throw new cT("Use 'new' to construct "+f);if(void 0===l.constructor_body)throw new cT(f+" has no accessible constructor");var t=l.constructor_body[arguments.length];if(void 0===t)throw new cT("Tried to invoke ctor of "+f+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(l.constructor_body).toString()+") parameters instead!");return t.apply(this,arguments)})),h=Object.create(n,{constructor:{value:s}});s.prototype=h;var l=new Ox(f,s,h,d,r,o,a,u),p=new tI(f,l,!0,!1,!1),m=new tI(f+"*",l,!1,!1,!1),g=new tI(f+" const*",l,!1,!0,!1);return bT[t]={pointerType:m,constPointerType:g},function(t,e,r){lR.hasOwnProperty(t)||yx("Replacing nonexistant public symbol"),void 0!==lR[t].overloadTable&&void 0!==r?lR[t].overloadTable[r]=e:(lR[t]=e,lR[t].argCount=r)}(c,s),[p,m,g]}))}function sI(t,e){for(var r=[],i=0;i<t;i++)r.push(zR[(e>>2)+i]);return r}function aI(t){for(;t.length;){var e=t.pop();t.pop()(e)}}function hI(t,e,r,i,n,o){zT(e>0);var s=sI(e,r);n=rI(i,n);var a=[o],h=[];wx([],[t],(function(t){var r="constructor "+(t=t[0]).name;if(void 0===t.registeredClass.constructor_body&&(t.registeredClass.constructor_body=[]),void 0!==t.registeredClass.constructor_body[e-1])throw new cT("Cannot register multiple constructors with identical number of parameters ("+(e-1)+") for class '"+t.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return t.registeredClass.constructor_body[e-1]=function(){nI("Cannot construct "+t.name+" due to unbound types",s)},wx([],s,(function(i){return t.registeredClass.constructor_body[e-1]=function(){arguments.length!==e-1&&bx(r+" called with "+arguments.length+" arguments, expected "+(e-1)),h.length=0,a.length=e;for(var t=1;t<e;++t)a[t]=i[t].toWireType(h,arguments[t-1]);var o=n.apply(null,a);return aI(h),i[0].fromWireType(o)},[]})),[]}))}function uI(t,e){if(!(t instanceof Function))throw new TypeError("new_ called with constructor type "+typeof t+" which is not a function");var r=gx(t.name||"unknownFunctionName",(function(){}));r.prototype=t.prototype;var i=new r,n=t.apply(i,e);return n instanceof Object?n:i}function fI(t,e,r,i,n,o,s,a){var h=sI(r,i);e=px(e),o=rI(n,o),wx([],[t],(function(t){var i=(t=t[0]).name+"."+e;function n(){nI("Cannot call "+i+" due to unbound types",h)}a&&t.registeredClass.pureVirtualFunctions.push(e);var u=t.registeredClass.instancePrototype,f=u[e];return void 0===f||void 0===f.overloadTable&&f.className!==t.name&&f.argCount===r-2?(n.argCount=r-2,n.className=t.name,u[e]=n):(Lx(u,e,i),u[e].overloadTable[r-2]=n),wx([],h,(function(n){var a=function(t,e,r,i,n){var o=e.length;o<2&&bx("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var s=null!==e[1]&&null!==r,a=!1,h=1;h<e.length;++h)if(null!==e[h]&&void 0===e[h].destructorFunction){a=!0;break}var u="void"!==e[0].name,f="",l="";for(h=0;h<o-2;++h)f+=(0!==h?", ":"")+"arg"+h,l+=(0!==h?", ":"")+"arg"+h+"Wired";var d="return function "+mx(t)+"("+f+") {\nif (arguments.length !== "+(o-2)+") {\nthrowBindingError('function "+t+" called with ' + arguments.length + ' arguments, expected "+(o-2)+" args!');\n}\n";a&&(d+="var destructors = [];\n");var c=a?"destructors":"null",p=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],m=[bx,i,n,aI,e[0],e[1]];for(s&&(d+="var thisWired = classParam.toWireType("+c+", this);\n"),h=0;h<o-2;++h)d+="var arg"+h+"Wired = argType"+h+".toWireType("+c+", arg"+h+"); // "+e[h+2].name+"\n",p.push("argType"+h),m.push(e[h+2]);if(s&&(l="thisWired"+(l.length>0?", ":"")+l),d+=(u?"var rv = ":"")+"invoker(fn"+(l.length>0?", ":"")+l+");\n",a)d+="runDestructors(destructors);\n";else for(h=s?1:2;h<e.length;++h){var g=1===h?"thisWired":"arg"+(h-2)+"Wired";null!==e[h].destructorFunction&&(d+=g+"_dtor("+g+"); // "+e[h].name+"\n",p.push(g+"_dtor"),m.push(e[h].destructorFunction))}return u&&(d+="var ret = retType.fromWireType(rv);\nreturn ret;\n"),d+="}\n",p.push(d),uI(Function,p).apply(null,m)}(i,n,t,o,s);return void 0===u[e].overloadTable?(a.argCount=r-2,u[e]=a):u[e].overloadTable[r-2]=a,[]})),[]}))}function lI(t,e,r){return t instanceof Object||bx(r+' with invalid "this": '+t),t instanceof e.registeredClass.constructor||bx(r+' incompatible with "this" of type '+t.constructor.name),t.$$.ptr||bx("cannot call emscripten binding method "+r+" on deleted object"),jx(t.$$.ptr,t.$$.ptrType.registeredClass,e.registeredClass)}function dI(t,e,r,i,n,o,s,a,h,u){e=px(e),n=rI(i,n),wx([],[t],(function(t){var i=(t=t[0]).name+"."+e,f={get:function(){nI("Cannot access "+i+" due to unbound types",[r,s])},enumerable:!0,configurable:!0};return f.set=h?function(){nI("Cannot access "+i+" due to unbound types",[r,s])}:function(t){bx(i+" is a read-only property")},Object.defineProperty(t.registeredClass.instancePrototype,e,f),wx([],h?[r,s]:[r],(function(r){var s=r[0],f={get:function(){var e=lI(this,t,i+" getter");return s.fromWireType(n(o,e))},enumerable:!0};if(h){h=rI(a,h);var l=r[1];f.set=function(e){var r=lI(this,t,i+" setter"),n=[];h(u,r,l.toWireType(n,e)),aI(n)}}return Object.defineProperty(t.registeredClass.instancePrototype,e,f),[]})),[]}))}function cI(t){t>4&&0==--_T[t].refcount&&(_T[t]=void 0,MT.push(t))}function pI(){for(var t=0,e=5;e<_T.length;++e)void 0!==_T[e]&&++t;return t}function mI(){for(var t=5;t<_T.length;++t)if(void 0!==_T[t])return _T[t];return null}function gI(){lR.count_emval_handles=pI,lR.get_first_emval=mI}function vI(t){switch(t){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var e=MT.length?MT.pop():_T.length;return _T[e]={refcount:1,value:t},e}}function bI(t,e){Mx(t,{name:e=px(e),fromWireType:function(t){var e=_T[t].value;return cI(t),e},toWireType:function(t,e){return vI(e)},argPackAdvance:8,readValueFromPointer:qx,destructorFunction:null})}function yI(t){if(null===t)return"null";var e=typeof t;return"object"===e||"array"===e||"function"===e?t.toString():""+t}function wI(t,e){switch(e){case 2:return function(t){return this.fromWireType(FR[t>>2])};case 3:return function(t){return this.fromWireType(ZR[t>>3])};default:throw new TypeError("Unknown float type: "+t)}}function MI(t,e,r){var i=dx(r);Mx(t,{name:e=px(e),fromWireType:function(t){return t},toWireType:function(t,e){if("number"!=typeof e&&"boolean"!=typeof e)throw new TypeError('Cannot convert "'+yI(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:wI(e,i),destructorFunction:null})}function _I(t,e,r){switch(e){case 0:return r?function(t){return OR[t]}:function(t){return jR[t]};case 1:return r?function(t){return UR[t>>1]}:function(t){return NR[t>>1]};case 2:return r?function(t){return zR[t>>2]}:function(t){return qR[t>>2]};default:throw new TypeError("Unknown integer type: "+t)}}function AI(t,e,r,i,n){e=px(e),-1===n&&(n=4294967295);var o=dx(r),s=function(t){return t};if(0===i){var a=32-8*r;s=function(t){return t<<a>>>a}}var h=e.includes("unsigned");Mx(t,{name:e,fromWireType:s,toWireType:function(t,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+yI(r)+'" to '+this.name);if(r<i||r>n)throw new TypeError('Passing a number "'+yI(r)+'" from JS side to C/C++ side to an argument of type "'+e+'", which is outside the valid range ['+i+", "+n+"]!");return h?r>>>0:0|r},argPackAdvance:8,readValueFromPointer:_I(e,o,0!==i),destructorFunction:null})}function EI(t,e,r){var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][e];function n(t){var e=qR,r=e[t>>=2],n=e[t+1];return new i(LR,n,r)}Mx(t,{name:r=px(r),fromWireType:n,argPackAdvance:8,readValueFromPointer:n},{ignoreDuplicateRegistrations:!0})}function SI(t,e){var r="std::string"===(e=px(e));Mx(t,{name:e,fromWireType:function(t){var e,i=qR[t>>2];if(r)for(var n=t+4,o=0;o<=i;++o){var s=t+4+o;if(o==i||0==jR[s]){var a=FT(n,s-n);void 0===e?e=a:(e+=String.fromCharCode(0),e+=a),n=s+1}}else{var h=new Array(i);for(o=0;o<i;++o)h[o]=String.fromCharCode(jR[t+4+o]);e=h.join("")}return xT(t),e},toWireType:function(t,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var i="string"==typeof e;i||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||bx("Cannot pass non-string to std::string");var n=(r&&i?function(){return KT(e)}:function(){return e.length})(),o=IT(4+n+1);if(qR[o>>2]=n,r&&i)HT(e,o+4,n+1);else if(i)for(var s=0;s<n;++s){var a=e.charCodeAt(s);a>255&&(xT(o),bx("String has UTF-16 code units that do not fit in 8 bits")),jR[o+4+s]=a}else for(s=0;s<n;++s)jR[o+4+s]=e[s];return null!==t&&t.push(xT,o),o},argPackAdvance:8,readValueFromPointer:qx,destructorFunction:function(t){xT(t)}})}function kI(t,e,r){var i,n,o,s,a;r=px(r),2===e?(i=WT,n=GT,s=YT,o=function(){return NR},a=1):4===e&&(i=VT,n=$T,s=XT,o=function(){return qR},a=2),Mx(t,{name:r,fromWireType:function(t){for(var r,n=qR[t>>2],s=o(),h=t+4,u=0;u<=n;++u){var f=t+4+u*e;if(u==n||0==s[f>>a]){var l=i(h,f-h);void 0===r?r=l:(r+=String.fromCharCode(0),r+=l),h=f+e}}return xT(t),r},toWireType:function(t,i){"string"!=typeof i&&bx("Cannot pass non-string to C++ string type "+r);var o=s(i),h=IT(4+o+e);return qR[h>>2]=o>>a,n(i,h+4,o+e),null!==t&&t.push(xT,h),h},argPackAdvance:8,readValueFromPointer:qx,destructorFunction:function(t){xT(t)}})}function BI(t,e){Mx(t,{isVoid:!0,name:e=px(e),argPackAdvance:0,fromWireType:function(){},toWireType:function(t,e){}})}function RI(t){return t||bx("Cannot use deleted val. handle = "+t),_T[t].value}function TI(t,e){var r=uT[t];return void 0===r&&bx(e+" has unknown type "+iI(t)),r}function xI(t,e,r){t=RI(t),e=TI(e,"emval::as");var i=[],n=vI(i);return zR[r>>2]=n,e.toWireType(i,t)}function II(t,e,r,i){var n,o;(t=ET[t])(e=RI(e),r=void 0===(o=AT[n=r])?px(n):o,null,i)}function CI(t,e){for(var r=function(t,e){for(var r=new Array(t),i=0;i<t;++i)r[i]=TI(zR[(e>>2)+i],"parameter "+i);return r}(t,e),i=r[0],n=i.name+"_$"+r.slice(1).map((function(t){return t.name})).join("_")+"$",o=["retType"],s=[i],a="",h=0;h<t-1;++h)a+=(0!==h?", ":"")+"arg"+h,o.push("argType"+h),s.push(r[1+h]);var u="return function "+mx("methodCaller_"+n)+"(handle, name, destructors, args) {\n",f=0;for(h=0;h<t-1;++h)u+="    var arg"+h+" = argType"+h+".readValueFromPointer(args"+(f?"+"+f:"")+");\n",f+=r[h+1].argPackAdvance;u+="    var rv = handle[name]("+a+");\n";for(h=0;h<t-1;++h)r[h+1].deleteObject&&(u+="    argType"+h+".deleteObject(arg"+h+");\n");i.isVoid||(u+="    return retType.toWireType(destructors, rv);\n"),u+="};\n",o.push(u);var l,d,c=uI(Function,o).apply(null,s);return l=c,d=ET.length,ET.push(l),d}function PI(t){t>4&&(_T[t].refcount+=1)}function DI(t){aI(_T[t].value),cI(t)}function LI(t,e){return vI((t=TI(t,"_emval_take_value")).readValueFromPointer(e))}function OI(){tx()}function jI(){return void 0===jI.start&&(jI.start=Date.now()),1e3*(Date.now()-jI.start)|0}function UI(t,e){return(t>>>0)+4294967296*e}function NI(t,e){if(t<=0)return t;var r=e<=32?Math.abs(1<<e-1):Math.pow(2,e-1);return t>=r&&(e<=32||t>r)&&(t=-2*r+t),t}function zI(t,e){return t>=0?t:e<=32?2*Math.abs(1<<e-1)+t:Math.pow(2,e)+t}function qI(t){if(!t||!t.callee||!t.callee.name)return[null,"",""];t.callee.toString();var e=t.callee.name,r="(",i=!0;for(var n in t){var o=t[n];i||(r+=", "),i=!1,r+="number"==typeof o||"string"==typeof o?o:"("+typeof o+")"}r+=")";var s=t.callee.caller;return i&&(r=""),[t=s?s.arguments:[],e,r]}function FI(t,e){24&t&&(e=e.replace(/\s+$/,""),e+=(e.length>0?"\n":"")+function(t){var e=sx(),r=e.lastIndexOf("_emscripten_log"),i=e.lastIndexOf("_emscripten_get_callstack"),n=e.indexOf("\n",Math.max(r,i))+1;e=e.slice(n),32&t&&NT("EM_LOG_DEMANGLE is deprecated; ignoring"),8&t&&"undefined"==typeof emscripten_source_map&&(NT('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.'),t^=8,t|=16);var o=null;if(128&t)for(o=qI(arguments);o[1].includes("_emscripten_");)o=qI(o[0]);var s=e.split("\n");e="";var a=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),h=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"),u=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var f in s){var l=s[f],d="",c="",p=0,m=0,g=u.exec(l);if(g&&5==g.length)d=g[1],c=g[2],p=g[3],m=g[4];else{if((g=a.exec(l))||(g=h.exec(l)),!(g&&g.length>=4)){e+=l+"\n";continue}d=g[1],c=g[2],p=g[3],m=0|g[4]}var v=!1;if(8&t){var b=emscripten_source_map.originalPositionFor({line:p,column:m});(v=b&&b.source)&&(64&t&&(b.source=b.source.substring(b.source.replace(/\\/g,"/").lastIndexOf("/")+1)),e+="    at "+d+" ("+b.source+":"+b.line+":"+b.column+")\n")}(16&t||!v)&&(64&t&&(c=c.substring(c.replace(/\\/g,"/").lastIndexOf("/")+1)),e+=(v?"     = "+d:"    at "+d)+" ("+c+":"+p+":"+m+")\n"),128&t&&o[0]&&(o[1]==d&&o[2].length>0&&(e=e.replace(/\s+$/,""),e+=" with values: "+o[1]+o[2]+"\n"),o=qI(o[0]))}return e.replace(/\s+$/,"")}(t)),1&t?4&t?console.error(e):2&t?console.warn(e):512&t?console.info(e):256&t?console.debug(e):console.log(e):6&t?BR(e):kR(e)}function ZI(t,e,r){var i=function(t,e){var r=t,i=e;function n(t){var e;return i=function(t,e){return"double"!==e&&"i64"!==e||7&t&&(t+=4),t}(i,t),"double"===t?(e=ZR[i>>3],i+=8):"i64"==t?(e=[zR[i>>2],zR[i+4>>2]],i+=8):(t="i32",e=zR[i>>2],i+=4),e}for(var o,s,a,h,u=[];;){var f=r;if(0===(o=OR[r>>0]))break;if(s=OR[r+1>>0],37==o){var l=!1,d=!1,c=!1,p=!1,m=!1;t:for(;;){switch(s){case 43:l=!0;break;case 45:d=!0;break;case 35:c=!0;break;case 48:if(p)break t;p=!0;break;case 32:m=!0;break;default:break t}r++,s=OR[r+1>>0]}var g=0;if(42==s)g=n("i32"),r++,s=OR[r+1>>0];else for(;s>=48&&s<=57;)g=10*g+(s-48),r++,s=OR[r+1>>0];var v,b=!1,y=-1;if(46==s){if(y=0,b=!0,r++,42==(s=OR[r+1>>0]))y=n("i32"),r++;else for(;;){var w=OR[r+1>>0];if(w<48||w>57)break;y=10*y+(w-48),r++}s=OR[r+1>>0]}switch(y<0&&(y=6,b=!1),String.fromCharCode(s)){case"h":104==OR[r+2>>0]?(r++,v=1):v=2;break;case"l":108==OR[r+2>>0]?(r++,v=8):v=4;break;case"L":case"q":case"j":v=8;break;case"z":case"t":case"I":v=4;break;default:v=null}switch(v&&r++,s=OR[r+1>>0],String.fromCharCode(s)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":var M=100==s||105==s;a=n("i"+8*(v=v||4)),8==v&&(a=117==s?(a[0]>>>0)+4294967296*(a[1]>>>0):UI(a[0],a[1])),v<=4&&(a=(M?NI:zI)(a&Math.pow(256,v)-1,8*v));var _=Math.abs(a),A="";if(100==s||105==s)k=NI(a,8*v).toString(10);else if(117==s)k=zI(a,8*v).toString(10),a=Math.abs(a);else if(111==s)k=(c?"0":"")+_.toString(8);else if(120==s||88==s){if(A=c&&0!=a?"0x":"",a<0){a=-a,k=(_-1).toString(16);for(var E=[],S=0;S<k.length;S++)E.push((15-parseInt(k[S],16)).toString(16));for(k=E.join("");k.length<2*v;)k="f"+k}else k=_.toString(16);88==s&&(A=A.toUpperCase(),k=k.toUpperCase())}else 112==s&&(0===_?k="(nil)":(A="0x",k=_.toString(16)));if(b)for(;k.length<y;)k="0"+k;for(a>=0&&(l?A="+"+A:m&&(A=" "+A)),"-"==k.charAt(0)&&(A="-"+A,k=k.substr(1));A.length+k.length<g;)d?k+=" ":p?k="0"+k:A=" "+A;(k=A+k).split("").forEach((function(t){u.push(t.charCodeAt(0))}));break;case"f":case"F":case"e":case"E":case"g":case"G":var k;if(a=n("double"),isNaN(a))k="nan",p=!1;else if(isFinite(a)){var B=!1,R=Math.min(y,20);if(103==s||71==s){B=!0,y=y||1;var T=parseInt(a.toExponential(R).split("e")[1],10);y>T&&T>=-4?(s=(103==s?"f":"F").charCodeAt(0),y-=T+1):(s=(103==s?"e":"E").charCodeAt(0),y--),R=Math.min(y,20)}101==s||69==s?(k=a.toExponential(R),/[eE][-+]\d$/.test(k)&&(k=k.slice(0,-1)+"0"+k.slice(-1))):102!=s&&70!=s||(k=a.toFixed(R),0===a&&((h=a)<0||0===h&&1/h==-1/0)&&(k="-"+k));var x=k.split("e");if(B&&!c)for(;x[0].length>1&&x[0].includes(".")&&("0"==x[0].slice(-1)||"."==x[0].slice(-1));)x[0]=x[0].slice(0,-1);else for(c&&-1==k.indexOf(".")&&(x[0]+=".");y>R++;)x[0]+="0";k=x[0]+(x.length>1?"e"+x[1]:""),69==s&&(k=k.toUpperCase()),a>=0&&(l?k="+"+k:m&&(k=" "+k))}else k=(a<0?"-":"")+"inf",p=!1;for(;k.length<g;)d?k+=" ":k=!p||"-"!=k[0]&&"+"!=k[0]?(p?"0":" ")+k:k[0]+"0"+k.slice(1);s<97&&(k=k.toUpperCase()),k.split("").forEach((function(t){u.push(t.charCodeAt(0))}));break;case"s":var I=n("i8*"),C=I?CT(I):"(null)".length;if(b&&(C=Math.min(C,y)),!d)for(;C<g--;)u.push(32);if(I)for(S=0;S<C;S++)u.push(jR[I++>>0]);else u=u.concat(eC("(null)".substr(0,C),!0));if(d)for(;C<g--;)u.push(32);break;case"c":for(d&&u.push(n("i8"));--g>0;)u.push(32);d||u.push(n("i8"));break;case"n":var P=n("i32*");zR[P>>2]=u.length;break;case"%":u.push(o);break;default:for(S=f;S<r+2;S++)u.push(OR[S>>0])}r+=2}else u.push(o),r+=1}return u}(e,r);FI(t,qT(i,0))}function HI(t){jR.length;tx("OOM")}function KI(){if(!KI.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:mR||"./this.program"};for(var e in ST)t[e]=ST[e];var r=[];for(var e in t)r.push(e+"="+t[e]);KI.strings=r}return KI.strings}function WI(t,e){try{var r=0;return KI().forEach((function(i,n){var o=e+r;zR[t+4*n>>2]=o,function(t,e,r){for(var i=0;i<t.length;++i)OR[e++>>0]=t.charCodeAt(i);r||(OR[e>>0]=0)}(i,o),r+=i.length+1})),0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function GI(t,e){try{var r=KI();zR[t>>2]=r.length;var i=0;return r.forEach((function(t){i+=t.length+1})),zR[e>>2]=i,0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function YI(t){try{var e=sT.getStreamFromFD(t);return oT.close(e),0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function VI(t,e){try{var r=sT.getStreamFromFD(t),i=r.tty?2:oT.isDir(r.mode)?3:oT.isLink(r.mode)?7:4;return OR[e>>0]=i,0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function $I(t,e,r,i){try{var n=sT.getStreamFromFD(t),o=sT.doReadv(n,e,r);return zR[i>>2]=o,0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function XI(t,e,r,i,n){try{var o=sT.getStreamFromFD(t),s=4294967296*r+(e>>>0),a=9007199254740992;return s<=-a||s>=a?-61:(oT.llseek(o,s,i),tT=[o.position>>>0,(QR=o.position,+Math.abs(QR)>=1?QR>0?(0|Math.min(+Math.floor(QR/4294967296),4294967295))>>>0:~~+Math.ceil((QR-+(~~QR>>>0))/4294967296)>>>0:0)],zR[n>>2]=tT[0],zR[n+4>>2]=tT[1],o.getdents&&0===s&&0===i&&(o.getdents=null),0)}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function JI(t,e,r,i){try{var n=sT.getStreamFromFD(t),o=sT.doWritev(n,e,r);return zR[i>>2]=o,0}catch(t){return void 0!==oT&&t instanceof oT.ErrnoError||tx(t),t.errno}}function QI(t){var e=Date.now();return zR[t>>2]=e/1e3|0,zR[t+4>>2]=e%1e3*1e3|0,0}function tC(t){TR(t)}function eC(t,e,r){var i=r>0?r:KT(t)+1,n=new Array(i),o=ZT(t,n,0,n.length);return e&&(n.length=o),n}function rC(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function iC(t){function e(){LT||(LT=!0,lR.calledRun=!0,CR||(!0,lR.noFSInit||oT.init.initialized||oT.init(),iT.init(),ox(WR),lR.onRuntimeInitialized&&lR.onRuntimeInitialized(),function(){if(lR.postRun)for("function"==typeof lR.postRun&&(lR.postRun=[lR.postRun]);lR.postRun.length;)t=lR.postRun.shift(),GR.unshift(t);var t;ox(GR)}()))}t=t||pR,YR>0||(!function(){if(lR.preRun)for("function"==typeof lR.preRun&&(lR.preRun=[lR.preRun]);lR.preRun.length;)t=lR.preRun.shift(),KR.unshift(t);var t;ox(KR)}(),YR>0||(lR.setStatus?(lR.setStatus("Running..."),setTimeout((function(){setTimeout((function(){lR.setStatus("")}),1),e()}),1)):e()))}function nC(){for(cR in{},hR=jt(),uR="/home/lin/server/jessibuca/demo/public",fR=Ye().Buffer,dR={},lR=void 0!==lR?lR:{})lR.hasOwnProperty(cR)&&(dR[cR]=lR[cR]);for(cR in pR=[],mR="./this.program",function(t,e){throw e},gR=!1,vR=!1,bR=!1,yR=!1,gR="object"==typeof window,vR="function"==typeof importScripts,bR="object"==typeof hR&&"object"==typeof hR.versions&&"string"==typeof hR.versions.node,yR=!gR&&!bR&&!vR,wR="",bR?(wR=vR?tr().dirname(wR)+"/":uR+"/",MR=function(t,e){return ER||(ER=ir()),SR||(SR=tr()),t=SR.normalize(t),ER.readFileSync(t,e?null:"utf8")},AR=function(t){var e=MR(t,!0);return e.buffer||(e=new Uint8Array(e)),zT(e.buffer),e},hR.argv.length>1&&(mR=hR.argv[1].replace(/\\/g,"/")),pR=hR.argv.slice(2),lR,hR.on("uncaughtException",(function(t){if(!(t instanceof rC))throw t})),hR.on("unhandledRejection",tx),function(t){hR.exit(t)},lR.inspect=function(){return"[Emscripten Module object]"}):yR?("undefined"!=typeof read&&(MR=function(t){return read(t)}),AR=function(t){var e;return"function"==typeof readbuffer?new Uint8Array(readbuffer(t)):(zT("object"==typeof(e=read(t,"binary"))),e)},"undefined"!=typeof scriptArgs?pR=scriptArgs:void 0!==arguments&&(pR=arguments),"function"==typeof quit&&function(t){quit(t)},"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(gR||vR)&&(vR?wR=self.location.href:"undefined"!=typeof document&&document.currentScript&&(wR=document.currentScript.src),wR=0!==wR.indexOf("blob:")?wR.substr(0,wR.lastIndexOf("/")+1):"",MR=function(t){var e=new XMLHttpRequest;return e.open("GET",t,!1),e.send(null),e.responseText},vR&&(AR=function(t){var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),_R=function(t,e,r){var i=new XMLHttpRequest;i.open("GET",t,!0),i.responseType="arraybuffer",i.onload=function(){200==i.status||0==i.status&&i.response?e(i.response):r()},i.onerror=r,i.send(null)},function(t){document.title=t}),kR=lR.print||console.log.bind(console),BR=lR.printErr||console.warn.bind(console),dR)dR.hasOwnProperty(cR)&&(lR[cR]=dR[cR]);if(dR=null,lR.arguments&&(pR=lR.arguments),lR.thisProgram&&(mR=lR.thisProgram),lR.quit&&lR.quit,RR=16,0,TR=function(t){t},lR.wasmBinary&&(xR=lR.wasmBinary),lR.noExitRuntime||!0,"object"!=typeof WebAssembly&&tx("no native wasm support detected"),CR=!1,PR="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,DR="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,lR.INITIAL_MEMORY||67108864,KR=[],WR=[],GR=[],!1,YR=0,VR=null,$R=null,lR.preloadedImages={},lR.preloadedAudios={},XR="data:application/octet-stream;base64,",ex(JR="ff.wasm")||(JR=UT(JR)),eT={splitPath:function(t){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(t).slice(1)},normalizeArray:function(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r;r--)t.unshift("..");return t},normalize:function(t){var e="/"===t.charAt(0),r="/"===t.substr(-1);return(t=eT.normalizeArray(t.split("/").filter((function(t){return!!t})),!e).join("/"))||e||(t="."),t&&r&&(t+="/"),(e?"/":"")+t},dirname:function(t){var e=eT.splitPath(t),r=e[0],i=e[1];return r||i?(i&&(i=i.substr(0,i.length-1)),r+i):"."},basename:function(t){if("/"===t)return"/";var e=(t=(t=eT.normalize(t)).replace(/\/$/,"")).lastIndexOf("/");return-1===e?t:t.substr(e+1)},extname:function(t){return eT.splitPath(t)[3]},join:function(){var t=Array.prototype.slice.call(arguments,0);return eT.normalize(t.join("/"))},join2:function(t,e){return eT.normalize(t+"/"+e)}},rT={resolve:function(){for(var t="",e=!1,r=arguments.length-1;r>=-1&&!e;r--){var i=r>=0?arguments[r]:oT.cwd();if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");if(!i)return"";t=i+"/"+t,e="/"===i.charAt(0)}return(e?"/":"")+(t=eT.normalizeArray(t.split("/").filter((function(t){return!!t})),!e).join("/"))||"."},relative:function(t,e){function r(t){for(var e=0;e<t.length&&""===t[e];e++);for(var r=t.length-1;r>=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=rT.resolve(t).substr(1),e=rT.resolve(e).substr(1);for(var i=r(t.split("/")),n=r(e.split("/")),o=Math.min(i.length,n.length),s=o,a=0;a<o;a++)if(i[a]!==n[a]){s=a;break}var h=[];for(a=s;a<i.length;a++)h.push("..");return(h=h.concat(n.slice(s))).join("/")}},iT={ttys:[],init:function(){},shutdown:function(){},register:function(t,e){iT.ttys[t]={input:[],output:[],ops:e},oT.registerDevice(t,iT.stream_ops)},stream_ops:{open:function(t){var e=iT.ttys[t.node.rdev];if(!e)throw new oT.ErrnoError(43);t.tty=e,t.seekable=!1},close:function(t){t.tty.ops.flush(t.tty)},flush:function(t){t.tty.ops.flush(t.tty)},read:function(t,e,r,i,n){if(!t.tty||!t.tty.ops.get_char)throw new oT.ErrnoError(60);for(var o=0,s=0;s<i;s++){var a;try{a=t.tty.ops.get_char(t.tty)}catch(t){throw new oT.ErrnoError(29)}if(void 0===a&&0===o)throw new oT.ErrnoError(6);if(null==a)break;o++,e[r+s]=a}return o&&(t.node.timestamp=Date.now()),o},write:function(t,e,r,i,n){if(!t.tty||!t.tty.ops.put_char)throw new oT.ErrnoError(60);try{for(var o=0;o<i;o++)t.tty.ops.put_char(t.tty,e[r+o])}catch(t){throw new oT.ErrnoError(29)}return i&&(t.node.timestamp=Date.now()),o}},default_tty_ops:{get_char:function(t){if(!t.input.length){var e=null;if(bR){var r=fR.alloc?fR.alloc(256):new fR(256),i=0;try{i=ER.readSync(hR.stdin.fd,r,0,256,null)}catch(t){if(!t.toString().includes("EOF"))throw t;i=0}e=i>0?r.slice(0,i).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(e=window.prompt("Input: "))&&(e+="\n"):"function"==typeof readline&&null!==(e=readline())&&(e+="\n");if(!e)return null;t.input=eC(e,!0)}return t.input.shift()},put_char:function(t,e){null===e||10===e?(kR(qT(t.output,0)),t.output=[]):0!=e&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&(kR(qT(t.output,0)),t.output=[])}},default_tty1_ops:{put_char:function(t,e){null===e||10===e?(BR(qT(t.output,0)),t.output=[]):0!=e&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&(BR(qT(t.output,0)),t.output=[])}}},nT={ops_table:null,mount:function(t){return nT.createNode(null,"/",16895,0)},createNode:function(t,e,r,i){if(oT.isBlkdev(r)||oT.isFIFO(r))throw new oT.ErrnoError(63);nT.ops_table||(nT.ops_table={dir:{node:{getattr:nT.node_ops.getattr,setattr:nT.node_ops.setattr,lookup:nT.node_ops.lookup,mknod:nT.node_ops.mknod,rename:nT.node_ops.rename,unlink:nT.node_ops.unlink,rmdir:nT.node_ops.rmdir,readdir:nT.node_ops.readdir,symlink:nT.node_ops.symlink},stream:{llseek:nT.stream_ops.llseek}},file:{node:{getattr:nT.node_ops.getattr,setattr:nT.node_ops.setattr},stream:{llseek:nT.stream_ops.llseek,read:nT.stream_ops.read,write:nT.stream_ops.write,allocate:nT.stream_ops.allocate,mmap:nT.stream_ops.mmap,msync:nT.stream_ops.msync}},link:{node:{getattr:nT.node_ops.getattr,setattr:nT.node_ops.setattr,readlink:nT.node_ops.readlink},stream:{}},chrdev:{node:{getattr:nT.node_ops.getattr,setattr:nT.node_ops.setattr},stream:oT.chrdev_stream_ops}});var n=oT.createNode(t,e,r,i);return oT.isDir(n.mode)?(n.node_ops=nT.ops_table.dir.node,n.stream_ops=nT.ops_table.dir.stream,n.contents={}):oT.isFile(n.mode)?(n.node_ops=nT.ops_table.file.node,n.stream_ops=nT.ops_table.file.stream,n.usedBytes=0,n.contents=null):oT.isLink(n.mode)?(n.node_ops=nT.ops_table.link.node,n.stream_ops=nT.ops_table.link.stream):oT.isChrdev(n.mode)&&(n.node_ops=nT.ops_table.chrdev.node,n.stream_ops=nT.ops_table.chrdev.stream),n.timestamp=Date.now(),t&&(t.contents[e]=n,t.timestamp=n.timestamp),n},getFileDataAsTypedArray:function(t){return t.contents?t.contents.subarray?t.contents.subarray(0,t.usedBytes):new Uint8Array(t.contents):new Uint8Array(0)},expandFileStorage:function(t,e){var r=t.contents?t.contents.length:0;if(!(r>=e)){e=Math.max(e,r*(r<1048576?2:1.125)>>>0),0!=r&&(e=Math.max(e,256));var i=t.contents;t.contents=new Uint8Array(e),t.usedBytes>0&&t.contents.set(i.subarray(0,t.usedBytes),0)}},resizeFileStorage:function(t,e){if(t.usedBytes!=e)if(0==e)t.contents=null,t.usedBytes=0;else{var r=t.contents;t.contents=new Uint8Array(e),r&&t.contents.set(r.subarray(0,Math.min(e,t.usedBytes))),t.usedBytes=e}},node_ops:{getattr:function(t){var e={};return e.dev=oT.isChrdev(t.mode)?t.id:1,e.ino=t.id,e.mode=t.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=t.rdev,oT.isDir(t.mode)?e.size=4096:oT.isFile(t.mode)?e.size=t.usedBytes:oT.isLink(t.mode)?e.size=t.link.length:e.size=0,e.atime=new Date(t.timestamp),e.mtime=new Date(t.timestamp),e.ctime=new Date(t.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(t,e){void 0!==e.mode&&(t.mode=e.mode),void 0!==e.timestamp&&(t.timestamp=e.timestamp),void 0!==e.size&&nT.resizeFileStorage(t,e.size)},lookup:function(t,e){throw oT.genericErrors[44]},mknod:function(t,e,r,i){return nT.createNode(t,e,r,i)},rename:function(t,e,r){if(oT.isDir(t.mode)){var i;try{i=oT.lookupNode(e,r)}catch(t){}if(i)for(var n in i.contents)throw new oT.ErrnoError(55)}delete t.parent.contents[t.name],t.parent.timestamp=Date.now(),t.name=r,e.contents[r]=t,e.timestamp=t.parent.timestamp,t.parent=e},unlink:function(t,e){delete t.contents[e],t.timestamp=Date.now()},rmdir:function(t,e){var r=oT.lookupNode(t,e);for(var i in r.contents)throw new oT.ErrnoError(55);delete t.contents[e],t.timestamp=Date.now()},readdir:function(t){var e=[".",".."];for(var r in t.contents)t.contents.hasOwnProperty(r)&&e.push(r);return e},symlink:function(t,e,r){var i=nT.createNode(t,e,41471,0);return i.link=r,i},readlink:function(t){if(!oT.isLink(t.mode))throw new oT.ErrnoError(28);return t.link}},stream_ops:{read:function(t,e,r,i,n){var o=t.node.contents;if(n>=t.node.usedBytes)return 0;var s=Math.min(t.node.usedBytes-n,i);if(s>8&&o.subarray)e.set(o.subarray(n,n+s),r);else for(var a=0;a<s;a++)e[r+a]=o[n+a];return s},write:function(t,e,r,i,n,o){if(!i)return 0;var s=t.node;if(s.timestamp=Date.now(),e.subarray&&(!s.contents||s.contents.subarray)){if(o)return s.contents=e.subarray(r,r+i),s.usedBytes=i,i;if(0===s.usedBytes&&0===n)return s.contents=e.slice(r,r+i),s.usedBytes=i,i;if(n+i<=s.usedBytes)return s.contents.set(e.subarray(r,r+i),n),i}if(nT.expandFileStorage(s,n+i),s.contents.subarray&&e.subarray)s.contents.set(e.subarray(r,r+i),n);else for(var a=0;a<i;a++)s.contents[n+a]=e[r+a];return s.usedBytes=Math.max(s.usedBytes,n+i),i},llseek:function(t,e,r){var i=e;if(1===r?i+=t.position:2===r&&oT.isFile(t.node.mode)&&(i+=t.node.usedBytes),i<0)throw new oT.ErrnoError(28);return i},allocate:function(t,e,r){nT.expandFileStorage(t.node,e+r),t.node.usedBytes=Math.max(t.node.usedBytes,e+r)},mmap:function(t,e,r,i,n,o){if(0!==e)throw new oT.ErrnoError(28);if(!oT.isFile(t.node.mode))throw new oT.ErrnoError(43);var s,a,h=t.node.contents;if(2&o||h.buffer!==LR){if((i>0||i+r<h.length)&&(h=h.subarray?h.subarray(i,i+r):Array.prototype.slice.call(h,i,i+r)),a=!0,!(s=hx(r)))throw new oT.ErrnoError(48);OR.set(h,s)}else a=!1,s=h.byteOffset;return{ptr:s,allocated:a}},msync:function(t,e,r,i,n){if(!oT.isFile(t.node.mode))throw new oT.ErrnoError(43);if(2&n)return 0;nT.stream_ops.write(t,e,0,i,r,!1);return 0}}},oT={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(t,e){if(e=e||{},!(t=rT.resolve(oT.cwd(),t)))return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var i in r)void 0===e[i]&&(e[i]=r[i]);if(e.recurse_count>8)throw new oT.ErrnoError(32);for(var n=eT.normalizeArray(t.split("/").filter((function(t){return!!t})),!1),o=oT.root,s="/",a=0;a<n.length;a++){var h=a===n.length-1;if(h&&e.parent)break;if(o=oT.lookupNode(o,n[a]),s=eT.join2(s,n[a]),oT.isMountpoint(o)&&(!h||h&&e.follow_mount)&&(o=o.mounted.root),!h||e.follow)for(var u=0;oT.isLink(o.mode);){var f=oT.readlink(s);if(s=rT.resolve(eT.dirname(s),f),o=oT.lookupPath(s,{recurse_count:e.recurse_count}).node,u++>40)throw new oT.ErrnoError(32)}}return{path:s,node:o}},getPath:function(t){for(var e;;){if(oT.isRoot(t)){var r=t.mount.mountpoint;return e?"/"!==r[r.length-1]?r+"/"+e:r+e:r}e=e?t.name+"/"+e:t.name,t=t.parent}},hashName:function(t,e){for(var r=0,i=0;i<e.length;i++)r=(r<<5)-r+e.charCodeAt(i)|0;return(t+r>>>0)%oT.nameTable.length},hashAddNode:function(t){var e=oT.hashName(t.parent.id,t.name);t.name_next=oT.nameTable[e],oT.nameTable[e]=t},hashRemoveNode:function(t){var e=oT.hashName(t.parent.id,t.name);if(oT.nameTable[e]===t)oT.nameTable[e]=t.name_next;else for(var r=oT.nameTable[e];r;){if(r.name_next===t){r.name_next=t.name_next;break}r=r.name_next}},lookupNode:function(t,e){var r=oT.mayLookup(t);if(r)throw new oT.ErrnoError(r,t);for(var i=oT.hashName(t.id,e),n=oT.nameTable[i];n;n=n.name_next){var o=n.name;if(n.parent.id===t.id&&o===e)return n}return oT.lookup(t,e)},createNode:function(t,e,r,i){var n=new oT.FSNode(t,e,r,i);return oT.hashAddNode(n),n},destroyNode:function(t){oT.hashRemoveNode(t)},isRoot:function(t){return t===t.parent},isMountpoint:function(t){return!!t.mounted},isFile:function(t){return 32768==(61440&t)},isDir:function(t){return 16384==(61440&t)},isLink:function(t){return 40960==(61440&t)},isChrdev:function(t){return 8192==(61440&t)},isBlkdev:function(t){return 24576==(61440&t)},isFIFO:function(t){return 4096==(61440&t)},isSocket:function(t){return 49152==(49152&t)},flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:function(t){var e=oT.flagModes[t];if(void 0===e)throw new Error("Unknown file open mode: "+t);return e},flagsToPermissionString:function(t){var e=["r","w","rw"][3&t];return 512&t&&(e+="w"),e},nodePermissions:function(t,e){return oT.ignorePermissions||(!e.includes("r")||292&t.mode)&&(!e.includes("w")||146&t.mode)&&(!e.includes("x")||73&t.mode)?0:2},mayLookup:function(t){var e=oT.nodePermissions(t,"x");return e||(t.node_ops.lookup?0:2)},mayCreate:function(t,e){try{oT.lookupNode(t,e);return 20}catch(t){}return oT.nodePermissions(t,"wx")},mayDelete:function(t,e,r){var i;try{i=oT.lookupNode(t,e)}catch(t){return t.errno}var n=oT.nodePermissions(t,"wx");if(n)return n;if(r){if(!oT.isDir(i.mode))return 54;if(oT.isRoot(i)||oT.getPath(i)===oT.cwd())return 10}else if(oT.isDir(i.mode))return 31;return 0},mayOpen:function(t,e){return t?oT.isLink(t.mode)?32:oT.isDir(t.mode)&&("r"!==oT.flagsToPermissionString(e)||512&e)?31:oT.nodePermissions(t,oT.flagsToPermissionString(e)):44},MAX_OPEN_FDS:4096,nextfd:function(t,e){t=t||0,e=e||oT.MAX_OPEN_FDS;for(var r=t;r<=e;r++)if(!oT.streams[r])return r;throw new oT.ErrnoError(33)},getStream:function(t){return oT.streams[t]},createStream:function(t,e,r){oT.FSStream||(oT.FSStream=function(){},oT.FSStream.prototype={object:{get:function(){return this.node},set:function(t){this.node=t}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}});var i=new oT.FSStream;for(var n in t)i[n]=t[n];t=i;var o=oT.nextfd(e,r);return t.fd=o,oT.streams[o]=t,t},closeStream:function(t){oT.streams[t]=null},chrdev_stream_ops:{open:function(t){var e=oT.getDevice(t.node.rdev);t.stream_ops=e.stream_ops,t.stream_ops.open&&t.stream_ops.open(t)},llseek:function(){throw new oT.ErrnoError(70)}},major:function(t){return t>>8},minor:function(t){return 255&t},makedev:function(t,e){return t<<8|e},registerDevice:function(t,e){oT.devices[t]={stream_ops:e}},getDevice:function(t){return oT.devices[t]},getMounts:function(t){for(var e=[],r=[t];r.length;){var i=r.pop();e.push(i),r.push.apply(r,i.mounts)}return e},syncfs:function(t,e){"function"==typeof t&&(e=t,t=!1),oT.syncFSRequests++,oT.syncFSRequests>1&&BR("warning: "+oT.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=oT.getMounts(oT.root.mount),i=0;function n(t){return oT.syncFSRequests--,e(t)}function o(t){if(t)return o.errored?void 0:(o.errored=!0,n(t));++i>=r.length&&n(null)}r.forEach((function(e){if(!e.type.syncfs)return o(null);e.type.syncfs(e,t,o)}))},mount:function(t,e,r){var i,n="/"===r,o=!r;if(n&&oT.root)throw new oT.ErrnoError(10);if(!n&&!o){var s=oT.lookupPath(r,{follow_mount:!1});if(r=s.path,i=s.node,oT.isMountpoint(i))throw new oT.ErrnoError(10);if(!oT.isDir(i.mode))throw new oT.ErrnoError(54)}var a={type:t,opts:e,mountpoint:r,mounts:[]},h=t.mount(a);return h.mount=a,a.root=h,n?oT.root=h:i&&(i.mounted=a,i.mount&&i.mount.mounts.push(a)),h},unmount:function(t){var e=oT.lookupPath(t,{follow_mount:!1});if(!oT.isMountpoint(e.node))throw new oT.ErrnoError(28);var r=e.node,i=r.mounted,n=oT.getMounts(i);Object.keys(oT.nameTable).forEach((function(t){for(var e=oT.nameTable[t];e;){var r=e.name_next;n.includes(e.mount)&&oT.destroyNode(e),e=r}})),r.mounted=null;var o=r.mount.mounts.indexOf(i);r.mount.mounts.splice(o,1)},lookup:function(t,e){return t.node_ops.lookup(t,e)},mknod:function(t,e,r){var i=oT.lookupPath(t,{parent:!0}).node,n=eT.basename(t);if(!n||"."===n||".."===n)throw new oT.ErrnoError(28);var o=oT.mayCreate(i,n);if(o)throw new oT.ErrnoError(o);if(!i.node_ops.mknod)throw new oT.ErrnoError(63);return i.node_ops.mknod(i,n,e,r)},create:function(t,e){return e=void 0!==e?e:438,e&=4095,e|=32768,oT.mknod(t,e,0)},mkdir:function(t,e){return e=void 0!==e?e:511,e&=1023,e|=16384,oT.mknod(t,e,0)},mkdirTree:function(t,e){for(var r=t.split("/"),i="",n=0;n<r.length;++n)if(r[n]){i+="/"+r[n];try{oT.mkdir(i,e)}catch(t){if(20!=t.errno)throw t}}},mkdev:function(t,e,r){return void 0===r&&(r=e,e=438),e|=8192,oT.mknod(t,e,r)},symlink:function(t,e){if(!rT.resolve(t))throw new oT.ErrnoError(44);var r=oT.lookupPath(e,{parent:!0}).node;if(!r)throw new oT.ErrnoError(44);var i=eT.basename(e),n=oT.mayCreate(r,i);if(n)throw new oT.ErrnoError(n);if(!r.node_ops.symlink)throw new oT.ErrnoError(63);return r.node_ops.symlink(r,i,t)},rename:function(t,e){var r,i,n=eT.dirname(t),o=eT.dirname(e),s=eT.basename(t),a=eT.basename(e);if(r=oT.lookupPath(t,{parent:!0}).node,i=oT.lookupPath(e,{parent:!0}).node,!r||!i)throw new oT.ErrnoError(44);if(r.mount!==i.mount)throw new oT.ErrnoError(75);var h,u=oT.lookupNode(r,s),f=rT.relative(t,o);if("."!==f.charAt(0))throw new oT.ErrnoError(28);if("."!==(f=rT.relative(e,n)).charAt(0))throw new oT.ErrnoError(55);try{h=oT.lookupNode(i,a)}catch(t){}if(u!==h){var l=oT.isDir(u.mode),d=oT.mayDelete(r,s,l);if(d)throw new oT.ErrnoError(d);if(d=h?oT.mayDelete(i,a,l):oT.mayCreate(i,a))throw new oT.ErrnoError(d);if(!r.node_ops.rename)throw new oT.ErrnoError(63);if(oT.isMountpoint(u)||h&&oT.isMountpoint(h))throw new oT.ErrnoError(10);if(i!==r&&(d=oT.nodePermissions(r,"w")))throw new oT.ErrnoError(d);try{oT.trackingDelegate.willMovePath&&oT.trackingDelegate.willMovePath(t,e)}catch(r){BR("FS.trackingDelegate['willMovePath']('"+t+"', '"+e+"') threw an exception: "+r.message)}oT.hashRemoveNode(u);try{r.node_ops.rename(u,i,a)}catch(t){throw t}finally{oT.hashAddNode(u)}try{oT.trackingDelegate.onMovePath&&oT.trackingDelegate.onMovePath(t,e)}catch(r){BR("FS.trackingDelegate['onMovePath']('"+t+"', '"+e+"') threw an exception: "+r.message)}}},rmdir:function(t){var e=oT.lookupPath(t,{parent:!0}).node,r=eT.basename(t),i=oT.lookupNode(e,r),n=oT.mayDelete(e,r,!0);if(n)throw new oT.ErrnoError(n);if(!e.node_ops.rmdir)throw new oT.ErrnoError(63);if(oT.isMountpoint(i))throw new oT.ErrnoError(10);try{oT.trackingDelegate.willDeletePath&&oT.trackingDelegate.willDeletePath(t)}catch(e){BR("FS.trackingDelegate['willDeletePath']('"+t+"') threw an exception: "+e.message)}e.node_ops.rmdir(e,r),oT.destroyNode(i);try{oT.trackingDelegate.onDeletePath&&oT.trackingDelegate.onDeletePath(t)}catch(e){BR("FS.trackingDelegate['onDeletePath']('"+t+"') threw an exception: "+e.message)}},readdir:function(t){var e=oT.lookupPath(t,{follow:!0}).node;if(!e.node_ops.readdir)throw new oT.ErrnoError(54);return e.node_ops.readdir(e)},unlink:function(t){var e=oT.lookupPath(t,{parent:!0}).node,r=eT.basename(t),i=oT.lookupNode(e,r),n=oT.mayDelete(e,r,!1);if(n)throw new oT.ErrnoError(n);if(!e.node_ops.unlink)throw new oT.ErrnoError(63);if(oT.isMountpoint(i))throw new oT.ErrnoError(10);try{oT.trackingDelegate.willDeletePath&&oT.trackingDelegate.willDeletePath(t)}catch(e){BR("FS.trackingDelegate['willDeletePath']('"+t+"') threw an exception: "+e.message)}e.node_ops.unlink(e,r),oT.destroyNode(i);try{oT.trackingDelegate.onDeletePath&&oT.trackingDelegate.onDeletePath(t)}catch(e){BR("FS.trackingDelegate['onDeletePath']('"+t+"') threw an exception: "+e.message)}},readlink:function(t){var e=oT.lookupPath(t).node;if(!e)throw new oT.ErrnoError(44);if(!e.node_ops.readlink)throw new oT.ErrnoError(28);return rT.resolve(oT.getPath(e.parent),e.node_ops.readlink(e))},stat:function(t,e){var r=oT.lookupPath(t,{follow:!e}).node;if(!r)throw new oT.ErrnoError(44);if(!r.node_ops.getattr)throw new oT.ErrnoError(63);return r.node_ops.getattr(r)},lstat:function(t){return oT.stat(t,!0)},chmod:function(t,e,r){var i;"string"==typeof t?i=oT.lookupPath(t,{follow:!r}).node:i=t;if(!i.node_ops.setattr)throw new oT.ErrnoError(63);i.node_ops.setattr(i,{mode:4095&e|-4096&i.mode,timestamp:Date.now()})},lchmod:function(t,e){oT.chmod(t,e,!0)},fchmod:function(t,e){var r=oT.getStream(t);if(!r)throw new oT.ErrnoError(8);oT.chmod(r.node,e)},chown:function(t,e,r,i){var n;"string"==typeof t?n=oT.lookupPath(t,{follow:!i}).node:n=t;if(!n.node_ops.setattr)throw new oT.ErrnoError(63);n.node_ops.setattr(n,{timestamp:Date.now()})},lchown:function(t,e,r){oT.chown(t,e,r,!0)},fchown:function(t,e,r){var i=oT.getStream(t);if(!i)throw new oT.ErrnoError(8);oT.chown(i.node,e,r)},truncate:function(t,e){if(e<0)throw new oT.ErrnoError(28);var r;"string"==typeof t?r=oT.lookupPath(t,{follow:!0}).node:r=t;if(!r.node_ops.setattr)throw new oT.ErrnoError(63);if(oT.isDir(r.mode))throw new oT.ErrnoError(31);if(!oT.isFile(r.mode))throw new oT.ErrnoError(28);var i=oT.nodePermissions(r,"w");if(i)throw new oT.ErrnoError(i);r.node_ops.setattr(r,{size:e,timestamp:Date.now()})},ftruncate:function(t,e){var r=oT.getStream(t);if(!r)throw new oT.ErrnoError(8);if(0==(2097155&r.flags))throw new oT.ErrnoError(28);oT.truncate(r.node,e)},utime:function(t,e,r){var i=oT.lookupPath(t,{follow:!0}).node;i.node_ops.setattr(i,{timestamp:Math.max(e,r)})},open:function(t,e,r,i,n){if(""===t)throw new oT.ErrnoError(44);var o;if(r=void 0===r?438:r,r=64&(e="string"==typeof e?oT.modeStringToFlags(e):e)?4095&r|32768:0,"object"==typeof t)o=t;else{t=eT.normalize(t);try{o=oT.lookupPath(t,{follow:!(131072&e)}).node}catch(t){}}var s=!1;if(64&e)if(o){if(128&e)throw new oT.ErrnoError(20)}else o=oT.mknod(t,r,0),s=!0;if(!o)throw new oT.ErrnoError(44);if(oT.isChrdev(o.mode)&&(e&=-513),65536&e&&!oT.isDir(o.mode))throw new oT.ErrnoError(54);if(!s){var a=oT.mayOpen(o,e);if(a)throw new oT.ErrnoError(a)}512&e&&oT.truncate(o,0),e&=-131713;var h=oT.createStream({node:o,path:oT.getPath(o),flags:e,seekable:!0,position:0,stream_ops:o.stream_ops,ungotten:[],error:!1},i,n);h.stream_ops.open&&h.stream_ops.open(h),!lR.logReadFiles||1&e||(oT.readFiles||(oT.readFiles={}),t in oT.readFiles||(oT.readFiles[t]=1,BR("FS.trackingDelegate error on read file: "+t)));try{if(oT.trackingDelegate.onOpenFile){var u=0;1!=(2097155&e)&&(u|=oT.tracking.openFlags.READ),0!=(2097155&e)&&(u|=oT.tracking.openFlags.WRITE),oT.trackingDelegate.onOpenFile(t,u)}}catch(e){BR("FS.trackingDelegate['onOpenFile']('"+t+"', flags) threw an exception: "+e.message)}return h},close:function(t){if(oT.isClosed(t))throw new oT.ErrnoError(8);t.getdents&&(t.getdents=null);try{t.stream_ops.close&&t.stream_ops.close(t)}catch(t){throw t}finally{oT.closeStream(t.fd)}t.fd=null},isClosed:function(t){return null===t.fd},llseek:function(t,e,r){if(oT.isClosed(t))throw new oT.ErrnoError(8);if(!t.seekable||!t.stream_ops.llseek)throw new oT.ErrnoError(70);if(0!=r&&1!=r&&2!=r)throw new oT.ErrnoError(28);return t.position=t.stream_ops.llseek(t,e,r),t.ungotten=[],t.position},read:function(t,e,r,i,n){if(i<0||n<0)throw new oT.ErrnoError(28);if(oT.isClosed(t))throw new oT.ErrnoError(8);if(1==(2097155&t.flags))throw new oT.ErrnoError(8);if(oT.isDir(t.node.mode))throw new oT.ErrnoError(31);if(!t.stream_ops.read)throw new oT.ErrnoError(28);var o=void 0!==n;if(o){if(!t.seekable)throw new oT.ErrnoError(70)}else n=t.position;var s=t.stream_ops.read(t,e,r,i,n);return o||(t.position+=s),s},write:function(t,e,r,i,n,o){if(i<0||n<0)throw new oT.ErrnoError(28);if(oT.isClosed(t))throw new oT.ErrnoError(8);if(0==(2097155&t.flags))throw new oT.ErrnoError(8);if(oT.isDir(t.node.mode))throw new oT.ErrnoError(31);if(!t.stream_ops.write)throw new oT.ErrnoError(28);t.seekable&&1024&t.flags&&oT.llseek(t,0,2);var s=void 0!==n;if(s){if(!t.seekable)throw new oT.ErrnoError(70)}else n=t.position;var a=t.stream_ops.write(t,e,r,i,n,o);s||(t.position+=a);try{t.path&&oT.trackingDelegate.onWriteToFile&&oT.trackingDelegate.onWriteToFile(t.path)}catch(e){BR("FS.trackingDelegate['onWriteToFile']('"+t.path+"') threw an exception: "+e.message)}return a},allocate:function(t,e,r){if(oT.isClosed(t))throw new oT.ErrnoError(8);if(e<0||r<=0)throw new oT.ErrnoError(28);if(0==(2097155&t.flags))throw new oT.ErrnoError(8);if(!oT.isFile(t.node.mode)&&!oT.isDir(t.node.mode))throw new oT.ErrnoError(43);if(!t.stream_ops.allocate)throw new oT.ErrnoError(138);t.stream_ops.allocate(t,e,r)},mmap:function(t,e,r,i,n,o){if(0!=(2&n)&&0==(2&o)&&2!=(2097155&t.flags))throw new oT.ErrnoError(2);if(1==(2097155&t.flags))throw new oT.ErrnoError(2);if(!t.stream_ops.mmap)throw new oT.ErrnoError(43);return t.stream_ops.mmap(t,e,r,i,n,o)},msync:function(t,e,r,i,n){return t&&t.stream_ops.msync?t.stream_ops.msync(t,e,r,i,n):0},munmap:function(t){return 0},ioctl:function(t,e,r){if(!t.stream_ops.ioctl)throw new oT.ErrnoError(59);return t.stream_ops.ioctl(t,e,r)},readFile:function(t,e){if((e=e||{}).flags=e.flags||0,e.encoding=e.encoding||"binary","utf8"!==e.encoding&&"binary"!==e.encoding)throw new Error('Invalid encoding type "'+e.encoding+'"');var r,i=oT.open(t,e.flags),n=oT.stat(t).size,o=new Uint8Array(n);return oT.read(i,o,0,n,0),"utf8"===e.encoding?r=qT(o,0):"binary"===e.encoding&&(r=o),oT.close(i),r},writeFile:function(t,e,r){(r=r||{}).flags=r.flags||577;var i=oT.open(t,r.flags,r.mode);if("string"==typeof e){var n=new Uint8Array(KT(e)+1),o=ZT(e,n,0,n.length);oT.write(i,n,0,o,void 0,r.canOwn)}else{if(!ArrayBuffer.isView(e))throw new Error("Unsupported data type");oT.write(i,e,0,e.byteLength,void 0,r.canOwn)}oT.close(i)},cwd:function(){return oT.currentPath},chdir:function(t){var e=oT.lookupPath(t,{follow:!0});if(null===e.node)throw new oT.ErrnoError(44);if(!oT.isDir(e.node.mode))throw new oT.ErrnoError(54);var r=oT.nodePermissions(e.node,"x");if(r)throw new oT.ErrnoError(r);oT.currentPath=e.path},createDefaultDirectories:function(){oT.mkdir("/tmp"),oT.mkdir("/home"),oT.mkdir("/home/web_user")},createDefaultDevices:function(){oT.mkdir("/dev"),oT.registerDevice(oT.makedev(1,3),{read:function(){return 0},write:function(t,e,r,i,n){return i}}),oT.mkdev("/dev/null",oT.makedev(1,3)),iT.register(oT.makedev(5,0),iT.default_tty_ops),iT.register(oT.makedev(6,0),iT.default_tty1_ops),oT.mkdev("/dev/tty",oT.makedev(5,0)),oT.mkdev("/dev/tty1",oT.makedev(6,0));var t=ax();oT.createDevice("/dev","random",t),oT.createDevice("/dev","urandom",t),oT.mkdir("/dev/shm"),oT.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){oT.mkdir("/proc");var t=oT.mkdir("/proc/self");oT.mkdir("/proc/self/fd"),oT.mount({mount:function(){var e=oT.createNode(t,"fd",16895,73);return e.node_ops={lookup:function(t,e){var r=+e,i=oT.getStream(r);if(!i)throw new oT.ErrnoError(8);var n={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return i.path}}};return n.parent=n,n}},e}},{},"/proc/self/fd")},createStandardStreams:function(){lR.stdin?oT.createDevice("/dev","stdin",lR.stdin):oT.symlink("/dev/tty","/dev/stdin"),lR.stdout?oT.createDevice("/dev","stdout",null,lR.stdout):oT.symlink("/dev/tty","/dev/stdout"),lR.stderr?oT.createDevice("/dev","stderr",null,lR.stderr):oT.symlink("/dev/tty1","/dev/stderr");oT.open("/dev/stdin",0),oT.open("/dev/stdout",1),oT.open("/dev/stderr",1)},ensureErrnoError:function(){oT.ErrnoError||(oT.ErrnoError=function(t,e){this.node=e,this.setErrno=function(t){this.errno=t},this.setErrno(t),this.message="FS error"},oT.ErrnoError.prototype=new Error,oT.ErrnoError.prototype.constructor=oT.ErrnoError,[44].forEach((function(t){oT.genericErrors[t]=new oT.ErrnoError(t),oT.genericErrors[t].stack="<generic error, no stack>"})))},staticInit:function(){oT.ensureErrnoError(),oT.nameTable=new Array(4096),oT.mount(nT,{},"/"),oT.createDefaultDirectories(),oT.createDefaultDevices(),oT.createSpecialDirectories(),oT.filesystems={MEMFS:nT}},init:function(t,e,r){oT.init.initialized=!0,oT.ensureErrnoError(),lR.stdin=t||lR.stdin,lR.stdout=e||lR.stdout,lR.stderr=r||lR.stderr,oT.createStandardStreams()},quit:function(){oT.init.initialized=!1;var t=lR._fflush;t&&t(0);for(var e=0;e<oT.streams.length;e++){var r=oT.streams[e];r&&oT.close(r)}},getMode:function(t,e){var r=0;return t&&(r|=365),e&&(r|=146),r},findObject:function(t,e){var r=oT.analyzePath(t,e);return r.exists?r.object:null},analyzePath:function(t,e){try{t=(i=oT.lookupPath(t,{follow:!e})).path}catch(t){}var r={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var i=oT.lookupPath(t,{parent:!0});r.parentExists=!0,r.parentPath=i.path,r.parentObject=i.node,r.name=eT.basename(t),i=oT.lookupPath(t,{follow:!e}),r.exists=!0,r.path=i.path,r.object=i.node,r.name=i.node.name,r.isRoot="/"===i.path}catch(t){r.error=t.errno}return r},createPath:function(t,e,r,i){t="string"==typeof t?t:oT.getPath(t);for(var n=e.split("/").reverse();n.length;){var o=n.pop();if(o){var s=eT.join2(t,o);try{oT.mkdir(s)}catch(t){}t=s}}return s},createFile:function(t,e,r,i,n){var o=eT.join2("string"==typeof t?t:oT.getPath(t),e),s=oT.getMode(i,n);return oT.create(o,s)},createDataFile:function(t,e,r,i,n,o){var s=e?eT.join2("string"==typeof t?t:oT.getPath(t),e):t,a=oT.getMode(i,n),h=oT.create(s,a);if(r){if("string"==typeof r){for(var u=new Array(r.length),f=0,l=r.length;f<l;++f)u[f]=r.charCodeAt(f);r=u}oT.chmod(h,146|a);var d=oT.open(h,577);oT.write(d,r,0,r.length,0,o),oT.close(d),oT.chmod(h,a)}return h},createDevice:function(t,e,r,i){var n=eT.join2("string"==typeof t?t:oT.getPath(t),e),o=oT.getMode(!!r,!!i);oT.createDevice.major||(oT.createDevice.major=64);var s=oT.makedev(oT.createDevice.major++,0);return oT.registerDevice(s,{open:function(t){t.seekable=!1},close:function(t){i&&i.buffer&&i.buffer.length&&i(10)},read:function(t,e,i,n,o){for(var s=0,a=0;a<n;a++){var h;try{h=r()}catch(t){throw new oT.ErrnoError(29)}if(void 0===h&&0===s)throw new oT.ErrnoError(6);if(null==h)break;s++,e[i+a]=h}return s&&(t.node.timestamp=Date.now()),s},write:function(t,e,r,n,o){for(var s=0;s<n;s++)try{i(e[r+s])}catch(t){throw new oT.ErrnoError(29)}return n&&(t.node.timestamp=Date.now()),s}}),oT.mkdev(n,o,s)},forceLoadFile:function(t){if(t.isDevice||t.isFolder||t.link||t.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!MR)throw new Error("Cannot load without read() or XMLHttpRequest.");try{t.contents=eC(MR(t.url),!0),t.usedBytes=t.contents.length}catch(t){throw new oT.ErrnoError(29)}},createLazyFile:function(t,e,r,i,n){function o(){this.lengthKnown=!1,this.chunks=[]}if(o.prototype.get=function(t){if(!(t>this.length-1||t<0)){var e=t%this.chunkSize,r=t/this.chunkSize|0;return this.getter(r)[e]}},o.prototype.setDataGetter=function(t){this.getter=t},o.prototype.cacheLength=function(){var t=new XMLHttpRequest;if(t.open("HEAD",r,!1),t.send(null),!(t.status>=200&&t.status<300||304===t.status))throw new Error("Couldn't load "+r+". Status: "+t.status);var e,i=Number(t.getResponseHeader("Content-length")),n=(e=t.getResponseHeader("Accept-Ranges"))&&"bytes"===e,o=(e=t.getResponseHeader("Content-Encoding"))&&"gzip"===e,s=1048576;n||(s=i);var a=this;a.setDataGetter((function(t){var e=t*s,n=(t+1)*s-1;if(n=Math.min(n,i-1),void 0===a.chunks[t]&&(a.chunks[t]=function(t,e){if(t>e)throw new Error("invalid range ("+t+", "+e+") or no bytes requested!");if(e>i-1)throw new Error("only "+i+" bytes available! programmer error!");var n=new XMLHttpRequest;if(n.open("GET",r,!1),i!==s&&n.setRequestHeader("Range","bytes="+t+"-"+e),"undefined"!=typeof Uint8Array&&(n.responseType="arraybuffer"),n.overrideMimeType&&n.overrideMimeType("text/plain; charset=x-user-defined"),n.send(null),!(n.status>=200&&n.status<300||304===n.status))throw new Error("Couldn't load "+r+". Status: "+n.status);return void 0!==n.response?new Uint8Array(n.response||[]):eC(n.responseText||"",!0)}(e,n)),void 0===a.chunks[t])throw new Error("doXHR failed!");return a.chunks[t]})),!o&&i||(s=i=1,i=this.getter(0).length,s=i,kR("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=i,this._chunkSize=s,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!vR)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var s=new o;Object.defineProperties(s,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var a={isDevice:!1,contents:s}}else a={isDevice:!1,url:r};var h=oT.createFile(t,e,a,i,n);a.contents?h.contents=a.contents:a.url&&(h.contents=null,h.url=a.url),Object.defineProperties(h,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(h.stream_ops).forEach((function(t){var e=h.stream_ops[t];u[t]=function(){return oT.forceLoadFile(h),e.apply(null,arguments)}})),u.read=function(t,e,r,i,n){oT.forceLoadFile(h);var o=t.node.contents;if(n>=o.length)return 0;var s=Math.min(o.length-n,i);if(o.slice)for(var a=0;a<s;a++)e[r+a]=o[n+a];else for(a=0;a<s;a++)e[r+a]=o.get(n+a);return s},h.stream_ops=u,h},createPreloadedFile:function(t,e,r,i,n,o,s,a,h,u){Browser.init();var f=e?rT.resolve(eT.join2(t,e)):t;function l(r){function l(r){u&&u(),a||oT.createDataFile(t,e,r,i,n,h),o&&o(),QT()}var d=!1;lR.preloadPlugins.forEach((function(t){d||t.canHandle(f)&&(t.handle(r,f,l,(function(){s&&s(),QT()})),d=!0)})),d||l(r)}JT(),"string"==typeof r?Browser.asyncLoad(r,(function(t){l(t)}),s):l(r)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(t,e,r){e=e||function(){},r=r||function(){};var i=oT.indexedDB();try{var n=i.open(oT.DB_NAME(),oT.DB_VERSION)}catch(t){return r(t)}n.onupgradeneeded=function(){kR("creating db"),n.result.createObjectStore(oT.DB_STORE_NAME)},n.onsuccess=function(){var i=n.result.transaction([oT.DB_STORE_NAME],"readwrite"),o=i.objectStore(oT.DB_STORE_NAME),s=0,a=0,h=t.length;function u(){0==a?e():r()}t.forEach((function(t){var e=o.put(oT.analyzePath(t).object.contents,t);e.onsuccess=function(){++s+a==h&&u()},e.onerror=function(){a++,s+a==h&&u()}})),i.onerror=r},n.onerror=r},loadFilesFromDB:function(t,e,r){e=e||function(){},r=r||function(){};var i=oT.indexedDB();try{var n=i.open(oT.DB_NAME(),oT.DB_VERSION)}catch(t){return r(t)}n.onupgradeneeded=r,n.onsuccess=function(){var i=n.result;try{var o=i.transaction([oT.DB_STORE_NAME],"readonly")}catch(t){return void r(t)}var s=o.objectStore(oT.DB_STORE_NAME),a=0,h=0,u=t.length;function f(){0==h?e():r()}t.forEach((function(t){var e=s.get(t);e.onsuccess=function(){oT.analyzePath(t).exists&&oT.unlink(t),oT.createDataFile(eT.dirname(t),eT.basename(t),e.result,!0,!0,!0),++a+h==u&&f()},e.onerror=function(){h++,a+h==u&&f()}})),o.onerror=r},n.onerror=r}},sT={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(t,e,r){if("/"===e[0])return e;var i;if(-100===t)i=oT.cwd();else{var n=oT.getStream(t);if(!n)throw new oT.ErrnoError(8);i=n.path}if(0==e.length){if(!r)throw new oT.ErrnoError(44);return i}return eT.join2(i,e)},doStat:function(t,e,r){try{var i=t(e)}catch(t){if(t&&t.node&&eT.normalize(e)!==eT.normalize(oT.getPath(t.node)))return-54;throw t}return zR[r>>2]=i.dev,zR[r+4>>2]=0,zR[r+8>>2]=i.ino,zR[r+12>>2]=i.mode,zR[r+16>>2]=i.nlink,zR[r+20>>2]=i.uid,zR[r+24>>2]=i.gid,zR[r+28>>2]=i.rdev,zR[r+32>>2]=0,tT=[i.size>>>0,(QR=i.size,+Math.abs(QR)>=1?QR>0?(0|Math.min(+Math.floor(QR/4294967296),4294967295))>>>0:~~+Math.ceil((QR-+(~~QR>>>0))/4294967296)>>>0:0)],zR[r+40>>2]=tT[0],zR[r+44>>2]=tT[1],zR[r+48>>2]=4096,zR[r+52>>2]=i.blocks,zR[r+56>>2]=i.atime.getTime()/1e3|0,zR[r+60>>2]=0,zR[r+64>>2]=i.mtime.getTime()/1e3|0,zR[r+68>>2]=0,zR[r+72>>2]=i.ctime.getTime()/1e3|0,zR[r+76>>2]=0,tT=[i.ino>>>0,(QR=i.ino,+Math.abs(QR)>=1?QR>0?(0|Math.min(+Math.floor(QR/4294967296),4294967295))>>>0:~~+Math.ceil((QR-+(~~QR>>>0))/4294967296)>>>0:0)],zR[r+80>>2]=tT[0],zR[r+84>>2]=tT[1],0},doMsync:function(t,e,r,i,n){var o=jR.slice(t,t+r);oT.msync(e,o,n,r,i)},doMkdir:function(t,e){return"/"===(t=eT.normalize(t))[t.length-1]&&(t=t.substr(0,t.length-1)),oT.mkdir(t,e,0),0},doMknod:function(t,e,r){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return oT.mknod(t,e,r),0},doReadlink:function(t,e,r){if(r<=0)return-28;var i=oT.readlink(t),n=Math.min(r,KT(i)),o=OR[e+n];return HT(i,e,r+1),OR[e+n]=o,n},doAccess:function(t,e){if(-8&e)return-28;var r;if(!(r=oT.lookupPath(t,{follow:!0}).node))return-44;var i="";return 4&e&&(i+="r"),2&e&&(i+="w"),1&e&&(i+="x"),i&&oT.nodePermissions(r,i)?-2:0},doDup:function(t,e,r){var i=oT.getStream(r);return i&&oT.close(i),oT.open(t,e,0,r,r).fd},doReadv:function(t,e,r,i){for(var n=0,o=0;o<r;o++){var s=zR[e+8*o>>2],a=zR[e+(8*o+4)>>2],h=oT.read(t,OR,s,a,i);if(h<0)return-1;if(n+=h,h<a)break}return n},doWritev:function(t,e,r,i){for(var n=0,o=0;o<r;o++){var s=zR[e+8*o>>2],a=zR[e+(8*o+4)>>2],h=oT.write(t,OR,s,a,i);if(h<0)return-1;n+=h}return n},varargs:void 0,get:function(){return sT.varargs+=4,zR[sT.varargs-4>>2]},getStr:function(t){return FT(t)},getStreamFromFD:function(t){var e=oT.getStream(t);if(!e)throw new oT.ErrnoError(8);return e},get64:function(t,e){return t}},aT=void 0,hT={},uT={},fT={},lT=48,dT=57,cT=void 0,pT=void 0,mT=!1,gT=void 0,vT=[],bT={},yT={},wT=void 0,MT=[],_T=[{},{value:void 0},{value:null},{value:!0},{value:!1}],AT={},ET=[],ST={},kT=function(t,e,r,i){t||(t=this),this.parent=t,this.mount=t.mount,this.mounted=null,this.id=oT.nextInode++,this.name=e,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=i},BT=365,RT=146,Object.defineProperties(kT.prototype,{read:{get:function(){return(this.mode&BT)===BT},set:function(t){t?this.mode|=BT:this.mode&=~BT}},write:{get:function(){return(this.mode&RT)===RT},set:function(t){t?this.mode|=RT:this.mode&=~RT}},isFolder:{get:function(){return oT.isDir(this.mode)}},isDevice:{get:function(){return oT.isChrdev(this.mode)}}}),oT.FSNode=kT,oT.staticInit(),cx(),cT=lR.BindingError=vx(Error,"BindingError"),pT=lR.InternalError=vx(Error,"InternalError"),Px(),Qx(),Vx(),wT=lR.UnboundTypeError=vx(Error,"UnboundTypeError"),gI(),TT={z:ux,y:fx,t:lx,D:_x,o:oI,j:hI,g:fI,I:dI,C:bI,m:MI,c:AI,b:EI,n:SI,i:kI,E:BI,r:xI,e:II,p:cI,d:CI,H:PI,q:DI,w:LI,a:OI,G:jI,f:ZI,u:HI,v:WI,x:GI,l:YI,A:VI,B:$I,s:XI,k:JI,F:QI,h:tC},nx(),lR.___wasm_call_ctors=function(){return(lR.___wasm_call_ctors=lR.asm.K).apply(null,arguments)},xT=lR._free=function(){return(xT=lR._free=lR.asm.L).apply(null,arguments)},IT=lR._malloc=function(){return(IT=lR._malloc=lR.asm.M).apply(null,arguments)},CT=lR._strlen=function(){return(CT=lR._strlen=lR.asm.O).apply(null,arguments)},PT=lR.___errno_location=function(){return(PT=lR.___errno_location=lR.asm.P).apply(null,arguments)},DT=lR.___getTypeName=function(){return(DT=lR.___getTypeName=lR.asm.Q).apply(null,arguments)},lR.___embind_register_native_and_builtin_types=function(){return(lR.___embind_register_native_and_builtin_types=lR.asm.R).apply(null,arguments)},lR.dynCall_ijiii=function(){return(lR.dynCall_ijiii=lR.asm.S).apply(null,arguments)},lR.dynCall_viiijj=function(){return(lR.dynCall_viiijj=lR.asm.T).apply(null,arguments)},lR.dynCall_jij=function(){return(lR.dynCall_jij=lR.asm.U).apply(null,arguments)},lR.dynCall_jii=function(){return(lR.dynCall_jii=lR.asm.V).apply(null,arguments)},lR.dynCall_jiji=function(){return(lR.dynCall_jiji=lR.asm.W).apply(null,arguments)},lR._ff_h264_cabac_tables=77157,$R=function t(){LT||iC(),LT||($R=t)},lR.run=iC,lR.preInit)for("function"==typeof lR.preInit&&(lR.preInit=[lR.preInit]);lR.preInit.length>0;)lR.preInit.pop()();iC(),OT=e(lR)}var oC=!1;function sC(t){let e=t.next(),r=null;return i=>{var n=new Uint8Array(i);if(r){var o=new Uint8Array(r.length+n.length);o.set(r),o.set(n,r.length),n=o,r=null}for(;n.length>=e.value;){var s=n.slice(e.value);e=t.next(n.slice(0,e.value)),n=s}n.length>0&&(r=n)}}function aC(){({}),jT||(jT=!0,nC()),s(),(()=>{try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const t=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(t instanceof WebAssembly.Module)return new WebAssembly.Instance(t)instanceof WebAssembly.Instance}}catch(t){}return!1})(),Date.now||(Date.now=function(){return(new Date).getTime()}),OT.print=function(t){postMessage({cmd:"print",text:t})},OT.printErr=function(t){postMessage({cmd:"printErr",text:t})},OT.postRun=function(){var t=[],e={_firstCheckpoint:0,_lastCheckpoint:0,_intervalBytes:0,_lastSecondBytes:0,addBytes:function(t){0===e._firstCheckpoint?(e._firstCheckpoint=Date.now(),e._lastCheckpoint=e._firstCheckpoint,e._intervalBytes+=t):Date.now()-e._lastCheckpoint<1e3?e._intervalBytes+=t:(e._lastSecondBytes=e._intervalBytes,e._intervalBytes=t,e._lastCheckpoint=Date.now())},reset:function(){e._firstCheckpoint=e._lastCheckpoint=0,e._intervalBytes=0,e._lastSecondBytes=0},getCurrentKBps:function(){e.addBytes(0);var t=(Date.now()-e._lastCheckpoint)/1e3;return 0==t&&(t=1),e._intervalBytes/t/1024},getLastSecondKBps:function(){return e.addBytes(0),0!==e._lastSecondBytes?e._lastSecondBytes/1024:Date.now()-e._lastCheckpoint>=500?e.getCurrentKBps():0}},r={opt:{},initAudioPlanar:function(t,e){postMessage({cmd:"initAudioPlanar",samplerate:e,channels:t});var r=[],i=[],n=0;this.playAudioPlanar=function(e,o){for(var s=o,a=[],h=0,u=0;u<2;u++){var f=OT.HEAPU32[(e>>2)+u]>>2;a[u]=OT.HEAPF32.subarray(f,f+s)}if(n){if(!(s>=(o=1024-n)))return n+=s,r[0]=Float32Array.of(...r[0],...a[0]),void(2==t&&(r[1]=Float32Array.of(...r[1],...a[1])));i[0]=Float32Array.of(...r[0],...a[0].subarray(0,o)),2==t&&(i[1]=Float32Array.of(...r[1],...a[1].subarray(0,o))),postMessage({cmd:"playAudio",buffer:i},i.map((t=>t.buffer))),h=o,s-=o}for(n=s;n>=1024;n-=1024)i[0]=a[0].slice(h,h+=1024),2==t&&(i[1]=a[1].slice(h-1024,h)),postMessage({cmd:"playAudio",buffer:i},i.map((t=>t.buffer)));n&&(r[0]=a[0].slice(h),2==t&&(r[1]=a[1].slice(h)))}},inputFlv:function*(){yield 9;for(var e=new ArrayBuffer(4),r=new Uint8Array(e),o=new Uint32Array(e);;){r[3]=0;var s=yield 15,a=s[4];r[0]=s[7],r[1]=s[6],r[2]=s[5];var h=o[0];r[0]=s[10],r[1]=s[9],r[2]=s[8];var u=o[0];16777215===u&&(r[3]=s[11],u=o[0]);var f=yield h;switch(a){case 8:this.opt.hasAudio&&t.push({ts:u,payload:f,decoder:i,type:0});break;case 9:t.push({ts:u,payload:f,decoder:n,type:f[0]>>4})}}},play:function(r){this.opt.debug&&console.log("Jessibuca play",r),this.getDelay=function(t){return t?(this.firstTimestamp=t,this.startTimestamp=Date.now(),this.getDelay=function(t){return this.delay=Date.now()-this.startTimestamp-(t-this.firstTimestamp),this.delay},-1):-1};if(this.stopId=setInterval((()=>{if(t.length)if(this.dropping){for(e=t.shift();1!==e.type&&t.length;)e=t.shift();1===e.type&&(this.dropping=!1,e.decoder.decode(e.payload))}else{var e=t[0];if(-1===this.getDelay(e.ts))t.shift(),this.ts=e.ts,e.decoder.decode(e.payload);else if(this.delay>this.videoBuffer+1e3)this.dropping=!0;else for(;t.length&&(e=t[0],this.getDelay(e.ts)>this.videoBuffer);)t.shift(),this.ts=e.ts,e.decoder.decode(e.payload)}}),10),this.speedSamplerId=setInterval((()=>{postMessage({cmd:"kBps",kBps:e.getLastSecondKBps()})}),1e3),0==r.indexOf("http")){this.flvMode=!0;var o=this,a=new AbortController;fetch(r,{signal:a.signal}).then((function(t){var r=t.body.getReader(),i=o.inputFlv(),n=sC(i),s=function(){r.read().then((({done:t,value:r})=>{t?i.return(null):(e.addBytes(r.byteLength),n(r),s())})).catch((function(t){i.return(null),o.opt.debug&&console.error(t),-1===t.toString().indexOf("The user aborted a request")&&postMessage({cmd:"printErr",text:t.toString()})}))};s()})).catch((t=>{postMessage({cmd:"printErr",text:t.message})})),this._close=function(){a.abort()}}else{if(this.flvMode=-1!=r.indexOf(".flv")||this.opt.isFlv,this.ws=new WebSocket(r),this.ws.binaryType="arraybuffer",this.flvMode){let t=this.inputFlv();var h=sC(t);this.ws.onmessage=t=>{e.addBytes(t.data.byteLength),h(t.data)},this.ws.onerror=e=>{t.return(null),postMessage({cmd:"printErr",text:e.toString()})}}else this.ws.onmessage=r=>{e.addBytes(r.data.byteLength);var o=new DataView(r.data);switch(o.getUint8(0)){case 1:this.opt.hasAudio&&t.push({ts:o.getUint32(1,!1),payload:new Uint8Array(r.data,5),decoder:i,type:0});break;case 2:t.push({ts:o.getUint32(1,!1),payload:new Uint8Array(r.data,5),decoder:n,type:o.getUint8(5)>>4})}},this.ws.onerror=t=>{postMessage({cmd:"printErr",text:t.toString()})};this._close=function(){this.ws&&(this.ws.close&&this.ws.close(),this.ws=null)}}this.setVideoSize=function(t,e){postMessage({cmd:"initSize",w:t,h:e});var r=t*e,i=r>>2;if(this.opt.forceNoOffscreen||"undefined"==typeof OffscreenCanvas)this.draw=function(t,e,n,o){var s=[OT.HEAPU8.subarray(e,e+r),OT.HEAPU8.subarray(n,n+i),OT.HEAPU8.subarray(o,o+i)].map((t=>Uint8Array.from(t)));postMessage({cmd:"render",compositionTime:t,delay:this.delay,ts:this.ts,output:s},s.map((t=>t.buffer)))};else{this.offscreenCanvas=new OffscreenCanvas(t,e),this.offscreenCanvasGL=this.offscreenCanvas.getContext("webgl");var n=s().default(this.offscreenCanvasGL);this.draw=function(o,s,a,h){n(t,e,OT.HEAPU8.subarray(s,s+r),OT.HEAPU8.subarray(a,a+i),OT.HEAPU8.subarray(h,h+i));let u=this.offscreenCanvas.transferToImageBitmap();postMessage({cmd:"render",compositionTime:o,delay:this.delay,ts:this.ts,buffer:u},[u])}}}},close:function(){this._close&&(this.opt.debug&&console.log("worker close"),this._close(),clearInterval(this.stopId),this.stopId=null,clearInterval(this.speedSamplerId),this.speedSamplerId=null,e.reset(),this.ws=null,i.clear(),n.clear(),this.firstTimestamp=0,this.startTimestamp=0,this.delay=0,this.ts=0,this.flvMode=!1,this.offscreenCanvas&&(this.offscreenCanvas=null),this.offscreenCanvasGL&&(this.offscreenCanvasGL=null),t=[],delete this.playAudioPlanar,delete this.draw,delete this.getDelay)}},i=new OT.AudioDecoder(r),n=new OT.VideoDecoder(r);postMessage({cmd:"init"}),self.onmessage=function(t){var e=t.data;switch(e.cmd){case"init":r.opt=JSON.parse(e.opt),i.sample_rate=e.sampleRate;break;case"getProp":postMessage({cmd:"getProp",value:r[e.prop]});break;case"setProp":r[e.prop]=e.value;break;case"play":r.play(e.url);break;case"setVideoBuffer":r.videoBuffer=1e3*e.time|0;break;case"close":r.close()}}}}"undefined"==typeof importScripts?wt||(wt=!0,{},l(),z(),Y(),J(),bt(),w(),O(),yt=class{constructor(t){if(this._opt=Object.assign(w().DEFAULT_OPTIONS,t),this.$container=t.container,"string"==typeof t.container&&(this.$container=document.querySelector(t.container)),!this.$container)throw new Error("Jessibuca need container option");delete this._opt.container,this._opt.debug&&console.log("options",this._opt),bt().default(this),l().default(this),z().default(this),J().default(this),Y().default(this)}set fullscreen(t){t?(O().checkFull()||this.$container.requestFullscreen(),O().$domToggle(this.$doms.minScreenDom,!0),O().$domToggle(this.$doms.fullscreenDom,!1)):(O().checkFull()&&document.exitFullscreen(),O().$domToggle(this.$doms.minScreenDom,!1),O().$domToggle(this.$doms.fullscreenDom,!0)),this._fullscreen!==t&&(this.onFullscreen(t),this._trigger(w().EVEMTS.fullscreen,t)),this._fullscreen=t}get fullscreen(){return this._fullscreen}set playing(t){t?(O().$domToggle(this.$doms.playBigDom,!1),O().$domToggle(this.$doms.playDom,!1),O().$domToggle(this.$doms.pauseDom,!0),O().$domToggle(this.$doms.screenshotsDom,!0),O().$domToggle(this.$doms.recordDom,!0),this._quieting?(O().$domToggle(this.$doms.quietAudioDom,!0),O().$domToggle(this.$doms.playAudioDom,!1)):(O().$domToggle(this.$doms.quietAudioDom,!1),O().$domToggle(this.$doms.playAudioDom,!0))):(this.$doms.speedDom&&(this.$doms.speedDom.innerText=""),this._playUrl&&(O().$domToggle(this.$doms.playDom,!0),O().$domToggle(this.$doms.playBigDom,!0),O().$domToggle(this.$doms.pauseDom,!1)),O().$domToggle(this.$doms.recordDom,!1),O().$domToggle(this.$doms.recordingDom,!1),O().$domToggle(this.$doms.screenshotsDom,!1),O().$domToggle(this.$doms.quietAudioDom,!1),O().$domToggle(this.$doms.playAudioDom,!1)),this._playing!==t&&(t?(this.onPlay(),this._trigger(w().EVEMTS.play)):(this.onPause(),this._trigger(w().EVEMTS.pause))),this._playing=t}get playing(){return this._playing}set quieting(t){t?(O().$domToggle(this.$doms.quietAudioDom,!0),O().$domToggle(this.$doms.playAudioDom,!1)):(O().$domToggle(this.$doms.quietAudioDom,!1),O().$domToggle(this.$doms.playAudioDom,!0)),this._quieting!==t&&(this.onMute(t),this._trigger(w().EVEMTS.mute,t)),this._quieting=t}get quieting(){return this._quieting}set loading(t){t?(O().$hideBtns(this.$doms),O().$domToggle(this.$doms.fullscreenDom,!0),O().$domToggle(this.$doms.pauseDom,!0),O().$domToggle(this.$doms.loadingDom,!0)):O().$initBtns(this.$doms),this._loading=t}get loading(){return this._loading}set recording(t){t?(O().$domToggle(this.$doms.recordDom,!1),O().$domToggle(this.$doms.recordingDom,!0)):(O().$domToggle(this.$doms.recordDom,!0),O().$domToggle(this.$doms.recordingDom,!1)),this._recording!==t&&(this.onRecord(t),this._trigger(w().EVEMTS.record,t),this._recording=t)}get recording(){return this._recording}isPlaying(){return this.playing}isMute(){return this.quieting}setDebug(t){this._opt.isDebug=!!t}setTimeout(t){this._opt.timeout=Number(t)}setVod(t){this._opt.vod=!!t}setNoOffscreen(t){this._opt.forceNoOffscreen=!!t}setScaleMode(t){0===(t=Number(t))?(this._opt.isFullResize=!1,this._opt.isResize=!1):1===t?(this._opt.isFullResize=!1,this._opt.isResize=!0):2===t&&(this._opt.isFullResize=!0),this._resize()}mute(){this._mute()}cancelMute(){this._cancelMute()}audioResume(){this._cancelMute()}pause(){this._pause()}play(t){this._play(t)}close(){this._close()}destroy(){this._close(),this._destroyAudioContext(),this._destroyContextGL(),this._decoderWorker.terminate(),this._removeEventListener(),this._initCheckVariable(),this._off(),this._removeContainerChild()}clearView(){this._clearView()}resize(){this._resize()}setBufferTime(t){t=Number(t),this._decoderWorker.postMessage({cmd:w().POST_MESSAGE.setVideoBuffer,time:t})}setRotate(t){t=parseInt(t,10),this._opt.rotate!==t&&-1!==[0,90,270].indexOf(t)&&(this._opt.rotate=t,this.resize())}setVolume(t){if(this._gainNode){if(t=parseFloat(t),isNaN(t))return;this._gainNode.gain.setValueAtTime(t,this._audioContext.currentTime)}}setKeepScreenOn(){this._opt.keepScreenOn=!0}setFullscreen(t){const e=!!t;this.fullscreen!==e&&(this.fullscreen=e)}hasLoaded(){return this._hasLoaded}screenshot(t,e,r,i){return this._screenshot(t,e,r,i)}on(t,e){this._on(t,e)}},window.Jessibuca=yt):oC||(oC=!0,aC())}();
\ No newline at end of file
diff --git a/web_src/static/js/jessibuca/logo.png b/web_src/static/js/jessibuca/logo.png
deleted file mode 100644
index 751de2a..0000000
--- a/web_src/static/js/jessibuca/logo.png
+++ /dev/null
Binary files differ
diff --git a/web_src/static/libDecoder.wasm b/web_src/static/libDecoder.wasm
deleted file mode 100644
index a45028d..0000000
--- a/web_src/static/libDecoder.wasm
+++ /dev/null
Binary files differ
diff --git a/web_src/static/logo.png b/web_src/static/logo.png
deleted file mode 100644
index c5da2d4..0000000
--- a/web_src/static/logo.png
+++ /dev/null
Binary files differ
diff --git a/wvp-pro.iml b/wvp-pro.iml
deleted file mode 100644
index 767aee1..0000000
--- a/wvp-pro.iml
+++ /dev/null
@@ -1,575 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.11.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
-    <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.32.3.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-boot-starter:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-oas:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.83" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webflux:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:3.0.0" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-data-rest:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.javassist:javassist:3.25.0-GA" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-core:1.5.22" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
-    <orderEntry type="library" name="Maven: javax.sip:jain-sip-ri:1.3.0-91" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.35" level="project" />
-    <orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.73" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:logging-interceptor:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: com.burgstaller:okhttp-digest:2.1" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.kxml:kxml2:2.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.mitre.dsmiley.httpproxy:smiley-http-proxy-servlet:1.12" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:3.0.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
-    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-csv:1.8" level="project" />
-    <orderEntry type="library" name="Maven: cglib:cglib:3.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:7.1" level="project" />
-    <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.11" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.oshi:oshi-core:6.1.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna-platform:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:31.0.1-jre" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.12.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.7.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
-    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-commons:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.3" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-engine:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: junit:junit:4.13.1" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-test:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.11.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
-    <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.32.3.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-boot-starter:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-oas:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.83" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webflux:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:3.0.0" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-data-rest:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.javassist:javassist:3.25.0-GA" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-core:1.5.22" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
-    <orderEntry type="library" name="Maven: javax.sip:jain-sip-ri:1.3.0-91" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.35" level="project" />
-    <orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.73" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:logging-interceptor:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: com.burgstaller:okhttp-digest:2.1" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.kxml:kxml2:2.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.mitre.dsmiley.httpproxy:smiley-http-proxy-servlet:1.12" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:3.0.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
-    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-csv:1.8" level="project" />
-    <orderEntry type="library" name="Maven: cglib:cglib:3.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:7.1" level="project" />
-    <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.11" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.oshi:oshi-core:6.1.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna-platform:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:31.0.1-jre" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.12.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.7.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
-    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-commons:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.3" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-engine:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: junit:junit:4.13.1" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-test:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.53.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.11.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
-    <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.32.3.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-boot-starter:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-oas:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.1.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.83" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webflux:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:3.0.0" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-data-rest:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:3.0.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.javassist:javassist:3.25.0-GA" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-core:1.5.22" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
-    <orderEntry type="library" name="Maven: javax.sip:jain-sip-ri:1.3.0-91" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.35" level="project" />
-    <orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.73" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:logging-interceptor:4.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72" level="project" />
-    <orderEntry type="library" name="Maven: com.burgstaller:okhttp-digest:2.1" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.kxml:kxml2:2.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.mitre.dsmiley.httpproxy:smiley-http-proxy-servlet:1.12" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:3.0.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
-    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-csv:1.8" level="project" />
-    <orderEntry type="library" name="Maven: cglib:cglib:3.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:7.1" level="project" />
-    <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.11" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.oshi:oshi-core:6.1.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: net.java.dev.jna:jna-platform:5.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:31.0.1-jre" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.12.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.7.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.5.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
-    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-commons:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.3" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.junit.platform:junit-platform-engine:1.6.3" level="project" />
-    <orderEntry type="library" name="Maven: junit:junit:4.13.1" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.17" level="project" />
-    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
-    <orderEntry type="library" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-test:5.2.10.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
-  </component>
-</module>
\ No newline at end of file

--
Gitblit v1.9.3