From c08c02342afff8fa8431fcf948f1c0a32046481f Mon Sep 17 00:00:00 2001 From: liaoxinyu Date: Mon, 22 Sep 2025 20:08:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 20 + .hbuilderx/launch.json | 33 + .vite/_cert.pem | 51 + .vite/deps/package.json | 1 + App.vue | 668 +++ LICENSE | 201 + README.md | 62 + androidPrivacy.json | 38 + api/compass.js | 54 + api/emoji.js | 45 + api/friend.js | 48 + api/index.js | 15 + api/login.js | 65 + api/message.js | 328 ++ common/appUpdate.js | 865 ++++ common/config.js | 65 + common/scan.js | 72 + common/socket.js | 193 + components/.DS_Store | Bin 0 -> 6148 bytes components/Empty.vue | 53 + components/Tags.vue | 75 + components/breadcrum.vue | 63 + components/cu-custom.vue | 79 + components/get-qrcode.vue | 433 ++ components/im-touch.vue | 130 + components/im-user.vue | 76 + components/message/im-image.vue | 43 + components/message/im-input.vue | 1122 +++++ components/message/im-item.vue | 35 + components/message/im-tab.vue | 50 + components/message/user-select.vue | 301 ++ .../mosowe-canvas-image.vue | 461 ++ components/mosowe-canvas-image/readme.md | 195 + components/mosowe-canvas-image/wxqrcode.js | 1623 +++++++ components/sendtoImg.vue | 404 ++ components/status.vue | 92 + components/yq-avatar/yq-avatar.vue | 1371 ++++++ favicon.ico | Bin 0 -> 9662 bytes hybrid/html/image/guaduan.png | Bin 0 -> 2087 bytes hybrid/html/image/jieting.png | Bin 0 -> 2299 bytes hybrid/html/image/speaker-off.png | Bin 0 -> 3624 bytes hybrid/html/image/speaker.png | Bin 0 -> 3686 bytes hybrid/html/image/video.png | Bin 0 -> 3333 bytes hybrid/html/image/voice-off.png | Bin 0 -> 4541 bytes hybrid/html/image/voice.png | Bin 0 -> 3654 bytes hybrid/html/image/wallpaper.png | Bin 0 -> 24430 bytes hybrid/html/index.html | 613 +++ hybrid/html/js/jsonly.js | 275 ++ hybrid/html/js/uni.webview.js | 1 + hybrid/html/js/utils.js | 11 + hybrid/html/js/vue.js | 1 + hybrid/html/rtc/adapter-latest.js | 3480 +++++++++++++++ hybrid/html/rtc/chrome/chrome_shim.js | 702 +++ hybrid/html/rtc/chrome/getdisplaymedia.js | 50 + hybrid/html/rtc/chrome/getusermedia.js | 188 + hybrid/html/rtc/common_shim.js | 433 ++ hybrid/html/rtc/firefox/firefox_shim.js | 296 ++ hybrid/html/rtc/firefox/getdisplaymedia.js | 36 + hybrid/html/rtc/firefox/getusermedia.js | 67 + hybrid/html/rtc/safari/safari_shim.js | 353 ++ hybrid/html/rtc/utils.js | 263 ++ hybrid/html/voice/calling.mp3 | Bin 0 -> 76213 bytes index.html | 20 + main.js | 54 + manifest.json | 210 + mixins/chat.js | 144 + .../android/uniplugin_fileSelect-release.aar | Bin 0 -> 40988 bytes .../DCTestUniPlugin.framework/DCTestUniPlugin | Bin 0 -> 47360 bytes .../ios/DCTestUniPlugin.framework/Info.plist | Bin 0 -> 766 bytes nativeplugins/lemonjk-FileSelect/package.json | 43 + package-lock.json | 361 ++ package.json | 24 + pages.json | 247 ++ pages/compass/Informationdetails.vue | 156 + pages/compass/friendscircledetails.vue | 410 ++ pages/compass/index.vue | 103 + pages/compass/moments.vue | 547 +++ pages/compass/personalcircleoffriends.vue | 313 ++ pages/compass/sendtoMoments.vue | 445 ++ pages/contacts/blacklist.vue | 101 + pages/contacts/detail.vue | 326 ++ pages/contacts/friend.vue | 150 + pages/contacts/group.vue | 89 + pages/contacts/index.vue | 448 ++ pages/contacts/search.vue | 88 + pages/index/index.vue | 427 ++ pages/index/qrcode.vue | 225 + pages/index/scan.vue | 34 + pages/index/search.vue | 112 + pages/index/userSelection.vue | 354 ++ pages/login/404.vue | 57 + pages/login/index.vue | 214 + pages/login/register.vue | 183 + pages/mapselect/mapselect.vue | 41 + pages/message/call.vue | 262 ++ pages/message/chat.vue | 1643 +++++++ pages/message/detail.vue | 841 ++++ pages/message/emoji.vue | 225 + pages/message/group/groupUser.vue | 349 ++ pages/message/group/info.vue | 88 + pages/message/index.vue | 384 ++ pages/message/record.vue | 618 +++ pages/message/video.vue | 87 + pages/mine/about.vue | 110 + pages/mine/doc.vue | 114 + pages/mine/index.vue | 289 ++ pages/mine/profile.vue | 191 + pages/mine/secure.vue | 245 ++ pages/mine/setting.vue | 92 + pages/mine/webview.vue | 28 + service/getMessageList.js | 194 + service/getSystemInfo.js | 79 + service/getUserInfo.js | 193 + service/groupInfo.js | 173 + service/groupUserList.js | 149 + service/homeData.js | 158 + static/css/animation.css | 184 + static/css/icon.css | 1226 ++++++ static/css/iconfont.css | 147 + static/css/main.css | 3917 +++++++++++++++++ static/css/reset.css | 342 ++ static/customicons.css | 20 + static/customicons.ttf | Bin 0 -> 2416 bytes static/fonts/iconfont.ttf | Bin 0 -> 10516 bytes static/fonts/iconfont.woff | Bin 0 -> 7228 bytes static/fonts/iconfont.woff2 | Bin 0 -> 6228 bytes static/image/123.gif | Bin 0 -> 551416 bytes static/image/blacklist-red.png | Bin 0 -> 9692 bytes static/image/empty.png | Bin 0 -> 8661 bytes static/image/group.png | Bin 0 -> 9347 bytes static/image/invite.png | Bin 0 -> 11656 bytes static/image/jiahao.png | Bin 0 -> 446 bytes static/image/logo.png | Bin 0 -> 12683 bytes static/image/moments.png | Bin 0 -> 1459 bytes static/image/rocket.png | Bin 0 -> 31432 bytes static/image/tabbar/compass-active.svg | 2 + static/image/tabbar/compass.svg | 2 + static/image/tabbar/contacts-active.svg | 2 + static/image/tabbar/contacts.svg | 2 + static/image/tabbar/demo.png | Bin 0 -> 7671 bytes static/image/tabbar/message-active.svg | 2 + static/image/tabbar/message.svg | 2 + static/image/tabbar/mine-active.svg | 2 + static/image/tabbar/mine.svg | 2 + static/image/user-card-bg.jpg | Bin 0 -> 29335 bytes store/index.js | 5 + store/login.js | 47 + store/message.js | 163 + uni.scss | 1 + uni_modules/map-Point/changelog.md | 42 + .../map-Point/components/map-Point/amap-wx.js | 616 +++ .../map-Point/components/map-Point/jweixin.js | 1 + .../components/map-Point/map-Point.vue | 1149 +++++ uni_modules/map-Point/package.json | 87 + uni_modules/map-Point/readme.md | 167 + uni_modules/map-Point/static/close.png | Bin 0 -> 360 bytes uni_modules/map-Point/static/item-inx.png | Bin 0 -> 1155 bytes uni_modules/map-Point/static/map-inx.png | Bin 0 -> 549 bytes uni_modules/map-Point/static/position.png | Bin 0 -> 736 bytes uni_modules/mp-html/README.md | 193 + uni_modules/mp-html/changelog.md | 129 + .../mp-html/components/mp-html/mp-html.vue | 504 +++ .../mp-html/components/mp-html/node/node.vue | 576 +++ .../mp-html/components/mp-html/parser.js | 1335 ++++++ uni_modules/mp-html/package.json | 76 + .../static/app-plus/mp-html/js/handler.js | 1 + .../app-plus/mp-html/js/uni.webview.min.js | 1 + .../static/app-plus/mp-html/local.html | 1 + uni_modules/mumu-recorder/changelog.md | 4 + .../mumu-recorder/mumu-recorder.vue | 114 + uni_modules/mumu-recorder/package.json | 87 + uni_modules/mumu-recorder/readme.md | 117 + uni_modules/u-ajax/README.md | 81 + uni_modules/u-ajax/changelog.md | 26 + uni_modules/u-ajax/js_sdk/index.d.ts | 105 + uni_modules/u-ajax/js_sdk/index.js | 9 + .../u-ajax/js_sdk/lib/adapters/Request.js | 58 + .../u-ajax/js_sdk/lib/adapters/http.js | 30 + uni_modules/u-ajax/js_sdk/lib/core/Ajax.js | 89 + .../js_sdk/lib/core/InterceptorManager.js | 34 + .../u-ajax/js_sdk/lib/core/dispatchRequest.js | 35 + .../u-ajax/js_sdk/lib/core/handleCancel.js | 35 + uni_modules/u-ajax/js_sdk/lib/defaults.js | 22 + .../u-ajax/js_sdk/lib/helpers/buildURL.js | 83 + .../u-ajax/js_sdk/lib/helpers/detachConfig.js | 36 + .../u-ajax/js_sdk/lib/helpers/isCallback.js | 8 + .../u-ajax/js_sdk/lib/helpers/mergeConfig.js | 41 + uni_modules/u-ajax/js_sdk/lib/utils.js | 92 + uni_modules/u-ajax/package.json | 71 + uni_modules/uni-badge/changelog.md | 29 + .../components/uni-badge/uni-badge.vue | 268 ++ uni_modules/uni-badge/package.json | 88 + uni_modules/uni-badge/readme.md | 10 + uni_modules/uni-breadcrumb/changelog.md | 6 + .../uni-breadcrumb-item.vue | 121 + .../uni-breadcrumb/uni-breadcrumb.vue | 41 + uni_modules/uni-breadcrumb/package.json | 88 + uni_modules/uni-breadcrumb/readme.md | 66 + uni_modules/uni-calendar/changelog.md | 16 + .../components/uni-calendar/calendar.js | 546 +++ .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 188 + .../components/uni-calendar/uni-calendar.vue | 562 +++ .../components/uni-calendar/util.js | 350 ++ uni_modules/uni-calendar/package.json | 88 + uni_modules/uni-calendar/readme.md | 103 + uni_modules/uni-card/changelog.md | 26 + .../uni-card/components/uni-card/uni-card.vue | 270 ++ uni_modules/uni-card/package.json | 90 + uni_modules/uni-card/readme.md | 12 + uni_modules/uni-collapse/changelog.md | 36 + .../uni-collapse-item/uni-collapse-item.vue | 402 ++ .../components/uni-collapse/uni-collapse.vue | 147 + uni_modules/uni-collapse/package.json | 89 + uni_modules/uni-collapse/readme.md | 12 + uni_modules/uni-combox/changelog.md | 15 + .../components/uni-combox/uni-combox.vue | 275 ++ uni_modules/uni-combox/package.json | 90 + uni_modules/uni-combox/readme.md | 11 + uni_modules/uni-countdown/changelog.md | 24 + .../components/uni-countdown/i18n/en.json | 6 + .../components/uni-countdown/i18n/index.js | 8 + .../uni-countdown/i18n/zh-Hans.json | 6 + .../uni-countdown/i18n/zh-Hant.json | 6 + .../uni-countdown/uni-countdown.vue | 271 ++ uni_modules/uni-countdown/package.json | 86 + uni_modules/uni-countdown/readme.md | 10 + uni_modules/uni-data-checkbox/changelog.md | 43 + .../uni-data-checkbox/uni-data-checkbox.vue | 817 ++++ uni_modules/uni-data-checkbox/package.json | 87 + uni_modules/uni-data-checkbox/readme.md | 18 + uni_modules/uni-data-picker/changelog.md | 64 + .../components/uni-data-picker/keypress.js | 45 + .../uni-data-picker/uni-data-picker.vue | 554 +++ .../uni-data-pickerview/uni-data-picker.js | 563 +++ .../uni-data-pickerview.vue | 333 ++ uni_modules/uni-data-picker/package.json | 93 + uni_modules/uni-data-picker/readme.md | 22 + uni_modules/uni-data-select/changelog.md | 16 + .../uni-data-select/uni-data-select.vue | 426 ++ uni_modules/uni-data-select/package.json | 88 + uni_modules/uni-data-select/readme.md | 8 + uni_modules/uni-dateformat/changelog.md | 10 + .../components/uni-dateformat/date-format.js | 200 + .../uni-dateformat/uni-dateformat.vue | 88 + uni_modules/uni-dateformat/package.json | 88 + uni_modules/uni-dateformat/readme.md | 11 + uni_modules/uni-datetime-picker/changelog.md | 169 + .../uni-datetime-picker/calendar-item.vue | 177 + .../uni-datetime-picker/calendar.vue | 947 ++++ .../uni-datetime-picker/i18n/en.json | 22 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 22 + .../uni-datetime-picker/i18n/zh-Hant.json | 22 + .../uni-datetime-picker/keypress.js | 45 + .../uni-datetime-picker/time-picker.vue | 940 ++++ .../uni-datetime-picker.vue | 1073 +++++ .../components/uni-datetime-picker/util.js | 421 ++ uni_modules/uni-datetime-picker/package.json | 90 + uni_modules/uni-datetime-picker/readme.md | 21 + uni_modules/uni-drawer/changelog.md | 13 + .../components/uni-drawer/keypress.js | 45 + .../components/uni-drawer/uni-drawer.vue | 183 + uni_modules/uni-drawer/package.json | 87 + uni_modules/uni-drawer/readme.md | 10 + uni_modules/uni-easyinput/changelog.md | 47 + .../components/uni-easyinput/common.js | 56 + .../uni-easyinput/uni-easyinput.vue | 593 +++ uni_modules/uni-easyinput/package.json | 90 + uni_modules/uni-easyinput/readme.md | 11 + uni_modules/uni-fab/changelog.md | 17 + .../uni-fab/components/uni-fab/uni-fab.vue | 475 ++ uni_modules/uni-fab/package.json | 87 + uni_modules/uni-fab/readme.md | 9 + uni_modules/uni-fav/changelog.md | 19 + .../uni-fav/components/uni-fav/i18n/en.json | 4 + .../uni-fav/components/uni-fav/i18n/index.js | 8 + .../components/uni-fav/i18n/zh-Hans.json | 4 + .../components/uni-fav/i18n/zh-Hant.json | 4 + .../uni-fav/components/uni-fav/uni-fav.vue | 161 + uni_modules/uni-fav/package.json | 89 + uni_modules/uni-fav/readme.md | 10 + uni_modules/uni-file-picker/changelog.md | 63 + .../uni-file-picker/choose-and-upload-file.js | 224 + .../uni-file-picker/uni-file-picker.vue | 656 +++ .../uni-file-picker/upload-file.vue | 325 ++ .../uni-file-picker/upload-image.vue | 292 ++ .../components/uni-file-picker/utils.js | 109 + uni_modules/uni-file-picker/package.json | 86 + uni_modules/uni-file-picker/readme.md | 11 + uni_modules/uni-forms/changelog.md | 86 + .../uni-forms-item/uni-forms-item.vue | 627 +++ .../components/uni-forms/uni-forms.vue | 397 ++ .../uni-forms/components/uni-forms/utils.js | 293 ++ .../components/uni-forms/validate.js | 486 ++ uni_modules/uni-forms/package.json | 91 + uni_modules/uni-forms/readme.md | 23 + uni_modules/uni-goods-nav/changelog.md | 18 + .../components/uni-goods-nav/i18n/en.json | 6 + .../components/uni-goods-nav/i18n/index.js | 8 + .../uni-goods-nav/i18n/zh-Hans.json | 6 + .../uni-goods-nav/i18n/zh-Hant.json | 6 + .../uni-goods-nav/uni-goods-nav.vue | 229 + uni_modules/uni-goods-nav/package.json | 88 + uni_modules/uni-goods-nav/readme.md | 10 + uni_modules/uni-grid/changelog.md | 13 + .../uni-grid-item/uni-grid-item.vue | 127 + .../uni-grid/components/uni-grid/uni-grid.vue | 142 + uni_modules/uni-grid/package.json | 86 + uni_modules/uni-grid/readme.md | 11 + uni_modules/uni-group/changelog.md | 16 + .../components/uni-group/uni-group.vue | 134 + uni_modules/uni-group/package.json | 87 + uni_modules/uni-group/readme.md | 9 + uni_modules/uni-icons/changelog.md | 42 + .../uni-icons/components/uni-icons/icons.js | 1169 +++++ .../components/uni-icons/uni-icons.uvue | 91 + .../components/uni-icons/uni-icons.vue | 110 + .../components/uni-icons/uniicons.css | 664 +++ .../components/uni-icons/uniicons.ttf | Bin 0 -> 35824 bytes .../components/uni-icons/uniicons_file.ts | 664 +++ .../components/uni-icons/uniicons_file_vue.js | 649 +++ uni_modules/uni-icons/package.json | 89 + uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-indexed-list/changelog.md | 17 + .../uni-indexed-list-item.vue | 144 + .../uni-indexed-list/uni-indexed-list.vue | 367 ++ uni_modules/uni-indexed-list/package.json | 89 + uni_modules/uni-indexed-list/readme.md | 11 + uni_modules/uni-link/changelog.md | 17 + .../uni-link/components/uni-link/uni-link.vue | 128 + uni_modules/uni-link/package.json | 87 + uni_modules/uni-link/readme.md | 11 + uni_modules/uni-list/changelog.md | 20 + .../components/uni-list-ad/uni-list-ad.vue | 107 + .../uni-list-chat/uni-list-chat.scss | 58 + .../uni-list-chat/uni-list-chat.vue | 538 +++ .../uni-list-item/uni-list-item.vue | 454 ++ .../uni-list/components/uni-list/uni-list.vue | 108 + .../components/uni-list/uni-refresh.vue | 65 + .../components/uni-list/uni-refresh.wxs | 87 + uni_modules/uni-list/package.json | 91 + uni_modules/uni-list/readme.md | 346 ++ uni_modules/uni-load-more/changelog.md | 19 + .../components/uni-load-more/i18n/en.json | 5 + .../components/uni-load-more/i18n/index.js | 8 + .../uni-load-more/i18n/zh-Hans.json | 5 + .../uni-load-more/i18n/zh-Hant.json | 5 + .../uni-load-more/uni-load-more.vue | 399 ++ uni_modules/uni-load-more/package.json | 86 + uni_modules/uni-load-more/readme.md | 14 + uni_modules/uni-nav-bar/changelog.md | 41 + .../components/uni-nav-bar/uni-nav-bar.vue | 348 ++ .../components/uni-nav-bar/uni-status-bar.vue | 27 + uni_modules/uni-nav-bar/package.json | 89 + uni_modules/uni-nav-bar/readme.md | 15 + uni_modules/uni-notice-bar/changelog.md | 16 + .../uni-notice-bar/uni-notice-bar.vue | 394 ++ uni_modules/uni-notice-bar/package.json | 90 + uni_modules/uni-notice-bar/readme.md | 13 + uni_modules/uni-number-box/changelog.md | 25 + .../uni-number-box/uni-number-box.vue | 221 + uni_modules/uni-number-box/package.json | 85 + uni_modules/uni-number-box/readme.md | 13 + uni_modules/uni-pagination/changelog.md | 20 + .../components/uni-pagination/i18n/en.json | 4 + .../components/uni-pagination/i18n/es.json | 4 + .../components/uni-pagination/i18n/fr.json | 4 + .../components/uni-pagination/i18n/index.js | 12 + .../uni-pagination/i18n/zh-Hans.json | 4 + .../uni-pagination/i18n/zh-Hant.json | 4 + .../uni-pagination/uni-pagination.vue | 409 ++ uni_modules/uni-pagination/package.json | 86 + uni_modules/uni-pagination/readme.md | 13 + uni_modules/uni-popup/changelog.md | 60 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 271 ++ .../uni-popup-message/uni-popup-message.vue | 143 + .../uni-popup-share/uni-popup-share.vue | 187 + .../components/uni-popup/i18n/en.json | 7 + .../components/uni-popup/i18n/index.js | 8 + .../components/uni-popup/i18n/zh-Hans.json | 7 + .../components/uni-popup/i18n/zh-Hant.json | 7 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.vue | 474 ++ uni_modules/uni-popup/package.json | 90 + uni_modules/uni-popup/readme.md | 17 + uni_modules/uni-rate/changelog.md | 25 + .../uni-rate/components/uni-rate/uni-rate.vue | 361 ++ uni_modules/uni-rate/package.json | 88 + uni_modules/uni-rate/readme.md | 12 + uni_modules/uni-row/changelog.md | 10 + .../uni-row/components/uni-col/uni-col.vue | 317 ++ .../uni-row/components/uni-row/uni-row.vue | 190 + uni_modules/uni-row/package.json | 87 + uni_modules/uni-row/readme.md | 10 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 + uni_modules/uni-scss/readme.md | 4 + uni_modules/uni-scss/styles/index.scss | 7 + .../uni-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 + .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 + .../uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-search-bar/changelog.md | 33 + .../components/uni-search-bar/i18n/en.json | 4 + .../components/uni-search-bar/i18n/index.js | 8 + .../uni-search-bar/i18n/zh-Hans.json | 4 + .../uni-search-bar/i18n/zh-Hant.json | 4 + .../uni-search-bar/uni-search-bar.vue | 298 ++ uni_modules/uni-search-bar/package.json | 89 + uni_modules/uni-search-bar/readme.md | 14 + uni_modules/uni-section/changelog.md | 2 + .../components/uni-section/uni-section.vue | 167 + uni_modules/uni-section/package.json | 87 + uni_modules/uni-section/readme.md | 8 + .../uni-segmented-control/changelog.md | 9 + .../uni-segmented-control.vue | 145 + .../uni-segmented-control/package.json | 87 + uni_modules/uni-segmented-control/readme.md | 13 + uni_modules/uni-steps/changelog.md | 16 + .../components/uni-steps/uni-steps.vue | 269 ++ uni_modules/uni-steps/package.json | 89 + uni_modules/uni-steps/readme.md | 13 + uni_modules/uni-swipe-action/changelog.md | 41 + .../uni-swipe-action-item/bindingx.js | 302 ++ .../components/uni-swipe-action-item/isPC.js | 12 + .../uni-swipe-action-item/mpalipay.js | 193 + .../uni-swipe-action-item/mpother.js | 259 ++ .../components/uni-swipe-action-item/mpwxs.js | 83 + .../uni-swipe-action-item/render.js | 270 ++ .../uni-swipe-action-item.vue | 347 ++ .../components/uni-swipe-action-item/wx.wxs | 341 ++ .../uni-swipe-action/uni-swipe-action.vue | 60 + uni_modules/uni-swipe-action/package.json | 87 + uni_modules/uni-swipe-action/readme.md | 11 + uni_modules/uni-swiper-dot/changelog.md | 12 + .../uni-swiper-dot/uni-swiper-dot.vue | 218 + uni_modules/uni-swiper-dot/package.json | 87 + uni_modules/uni-swiper-dot/readme.md | 11 + uni_modules/uni-table/changelog.md | 23 + .../components/uni-table/uni-table.vue | 455 ++ .../components/uni-tbody/uni-tbody.vue | 29 + .../uni-table/components/uni-td/uni-td.vue | 90 + .../components/uni-th/filter-dropdown.vue | 503 +++ .../uni-table/components/uni-th/uni-th.vue | 278 ++ .../components/uni-thead/uni-thead.vue | 129 + .../components/uni-tr/table-checkbox.vue | 179 + .../uni-table/components/uni-tr/uni-tr.vue | 171 + uni_modules/uni-table/i18n/en.json | 9 + uni_modules/uni-table/i18n/es.json | 9 + uni_modules/uni-table/i18n/fr.json | 9 + uni_modules/uni-table/i18n/index.js | 12 + uni_modules/uni-table/i18n/zh-Hans.json | 9 + uni_modules/uni-table/i18n/zh-Hant.json | 9 + uni_modules/uni-table/package.json | 86 + uni_modules/uni-table/readme.md | 13 + uni_modules/uni-tag/changelog.md | 21 + .../uni-tag/components/uni-tag/uni-tag.vue | 252 ++ uni_modules/uni-tag/package.json | 87 + uni_modules/uni-tag/readme.md | 13 + uni_modules/uni-test/changelog.md | 39 + .../uni-test/components/uni-test/uni-test.vue | 26 + uni_modules/uni-test/package.json | 83 + uni_modules/uni-test/readme.md | 10 + uni_modules/uni-title/changelog.md | 10 + .../components/uni-title/uni-title.vue | 171 + uni_modules/uni-title/package.json | 88 + uni_modules/uni-title/readme.md | 14 + uni_modules/uni-tooltip/changelog.md | 10 + .../components/uni-tooltip/uni-tooltip.vue | 68 + uni_modules/uni-tooltip/package.json | 88 + uni_modules/uni-tooltip/readme.md | 8 + uni_modules/uni-transition/changelog.md | 20 + .../uni-transition/createAnimation.js | 128 + .../uni-transition/uni-transition.vue | 277 ++ uni_modules/uni-transition/package.json | 87 + uni_modules/uni-transition/readme.md | 11 + uni_modules/uni-ui/changelog.md | 447 ++ .../uni-ui/components/uni-ui/uni-ui.vue | 7 + uni_modules/uni-ui/package.json | 129 + uni_modules/uni-ui/readme.md | 247 ++ uni_modules/z-paging/changelog.md | 51 + .../z-paging-cell/z-paging-cell.vue | 47 + .../z-paging-empty-view.vue | 209 + .../z-paging-swiper-item.vue | 160 + .../z-paging-swiper/z-paging-swiper.vue | 176 + .../components/z-paging-load-more.vue | 182 + .../z-paging/components/z-paging-refresh.vue | 214 + .../components/z-paging/config/index.js | 3 + .../components/z-paging/css/z-paging-main.css | 241 + .../z-paging/css/z-paging-static.css | 50 + .../z-paging/components/z-paging/i18n/en.json | 23 + .../components/z-paging/i18n/index.js | 8 + .../components/z-paging/i18n/zh-Hans.json | 23 + .../components/z-paging/i18n/zh-Hant.json | 23 + .../z-paging/js/hooks/useZPaging.js | 25 + .../z-paging/js/hooks/useZPagingComp.js | 25 + .../z-paging/js/modules/back-to-top.js | 125 + .../z-paging/js/modules/chat-record-mode.js | 153 + .../z-paging/js/modules/common-layout.js | 152 + .../z-paging/js/modules/data-handle.js | 744 ++++ .../components/z-paging/js/modules/empty.js | 144 + .../components/z-paging/js/modules/i18n.js | 113 + .../z-paging/js/modules/load-more.js | 374 ++ .../components/z-paging/js/modules/loading.js | 95 + .../components/z-paging/js/modules/nvue.js | 299 ++ .../z-paging/js/modules/refresher.js | 835 ++++ .../z-paging/js/modules/scroller.js | 589 +++ .../z-paging/js/modules/virtual-list.js | 539 +++ .../z-paging/js/z-paging-constant.js | 19 + .../components/z-paging/js/z-paging-enum.js | 45 + .../z-paging/js/z-paging-interceptor.js | 97 + .../components/z-paging/js/z-paging-main.js | 537 +++ .../components/z-paging/js/z-paging-mixin.js | 22 + .../components/z-paging/js/z-paging-static.js | 13 + .../components/z-paging/js/z-paging-utils.js | 322 ++ .../z-paging/wxs/z-paging-renderjs.js | 67 + .../components/z-paging/wxs/z-paging-wxs.wxs | 382 ++ .../z-paging/components/z-paging/z-paging.vue | 656 +++ uni_modules/z-paging/package.json | 89 + uni_modules/z-paging/readme.md | 57 + uni_modules/z-paging/types/comps.d.ts | 11 + uni_modules/z-paging/types/comps/_common.d.ts | 9 + .../z-paging/types/comps/z-paging-cell.d.ts | 29 + .../types/comps/z-paging-empty-view.d.ts | 95 + .../types/comps/z-paging-swiper-item.d.ts | 95 + .../z-paging/types/comps/z-paging-swiper.d.ts | 89 + .../z-paging/types/comps/z-paging.d.ts | 2131 +++++++++ uni_modules/z-paging/types/index.d.ts | 24 + utils/LocalFileSystemURL.js | 117 + utils/appUpdate.js | 830 ++++ utils/array.js | 63 + utils/db.js | 52 + utils/edit.js | 449 ++ utils/emoji.js | 370 ++ utils/observer.js | 36 + utils/permission.js | 272 ++ utils/request.js | 138 + utils/utils.js | 931 ++++ 551 files changed, 93227 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 .vite/_cert.pem create mode 100644 .vite/deps/package.json create mode 100644 App.vue create mode 100644 LICENSE create mode 100644 README.md create mode 100644 androidPrivacy.json create mode 100644 api/compass.js create mode 100644 api/emoji.js create mode 100644 api/friend.js create mode 100644 api/index.js create mode 100644 api/login.js create mode 100644 api/message.js create mode 100644 common/appUpdate.js create mode 100644 common/config.js create mode 100644 common/scan.js create mode 100644 common/socket.js create mode 100644 components/.DS_Store create mode 100644 components/Empty.vue create mode 100644 components/Tags.vue create mode 100644 components/breadcrum.vue create mode 100644 components/cu-custom.vue create mode 100644 components/get-qrcode.vue create mode 100644 components/im-touch.vue create mode 100644 components/im-user.vue create mode 100644 components/message/im-image.vue create mode 100644 components/message/im-input.vue create mode 100644 components/message/im-item.vue create mode 100644 components/message/im-tab.vue create mode 100644 components/message/user-select.vue create mode 100644 components/mosowe-canvas-image/mosowe-canvas-image.vue create mode 100644 components/mosowe-canvas-image/readme.md create mode 100644 components/mosowe-canvas-image/wxqrcode.js create mode 100644 components/sendtoImg.vue create mode 100644 components/status.vue create mode 100644 components/yq-avatar/yq-avatar.vue create mode 100644 favicon.ico create mode 100644 hybrid/html/image/guaduan.png create mode 100644 hybrid/html/image/jieting.png create mode 100644 hybrid/html/image/speaker-off.png create mode 100644 hybrid/html/image/speaker.png create mode 100644 hybrid/html/image/video.png create mode 100644 hybrid/html/image/voice-off.png create mode 100644 hybrid/html/image/voice.png create mode 100644 hybrid/html/image/wallpaper.png create mode 100644 hybrid/html/index.html create mode 100644 hybrid/html/js/jsonly.js create mode 100644 hybrid/html/js/uni.webview.js create mode 100644 hybrid/html/js/utils.js create mode 100644 hybrid/html/js/vue.js create mode 100644 hybrid/html/rtc/adapter-latest.js create mode 100644 hybrid/html/rtc/chrome/chrome_shim.js create mode 100644 hybrid/html/rtc/chrome/getdisplaymedia.js create mode 100644 hybrid/html/rtc/chrome/getusermedia.js create mode 100644 hybrid/html/rtc/common_shim.js create mode 100644 hybrid/html/rtc/firefox/firefox_shim.js create mode 100644 hybrid/html/rtc/firefox/getdisplaymedia.js create mode 100644 hybrid/html/rtc/firefox/getusermedia.js create mode 100644 hybrid/html/rtc/safari/safari_shim.js create mode 100644 hybrid/html/rtc/utils.js create mode 100644 hybrid/html/voice/calling.mp3 create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 mixins/chat.js create mode 100644 nativeplugins/lemonjk-FileSelect/android/uniplugin_fileSelect-release.aar create mode 100644 nativeplugins/lemonjk-FileSelect/ios/DCTestUniPlugin.framework/DCTestUniPlugin create mode 100644 nativeplugins/lemonjk-FileSelect/ios/DCTestUniPlugin.framework/Info.plist create mode 100644 nativeplugins/lemonjk-FileSelect/package.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/compass/Informationdetails.vue create mode 100644 pages/compass/friendscircledetails.vue create mode 100644 pages/compass/index.vue create mode 100644 pages/compass/moments.vue create mode 100644 pages/compass/personalcircleoffriends.vue create mode 100644 pages/compass/sendtoMoments.vue create mode 100644 pages/contacts/blacklist.vue create mode 100644 pages/contacts/detail.vue create mode 100644 pages/contacts/friend.vue create mode 100644 pages/contacts/group.vue create mode 100644 pages/contacts/index.vue create mode 100644 pages/contacts/search.vue create mode 100644 pages/index/index.vue create mode 100644 pages/index/qrcode.vue create mode 100644 pages/index/scan.vue create mode 100644 pages/index/search.vue create mode 100644 pages/index/userSelection.vue create mode 100644 pages/login/404.vue create mode 100644 pages/login/index.vue create mode 100644 pages/login/register.vue create mode 100644 pages/mapselect/mapselect.vue create mode 100644 pages/message/call.vue create mode 100644 pages/message/chat.vue create mode 100644 pages/message/detail.vue create mode 100644 pages/message/emoji.vue create mode 100644 pages/message/group/groupUser.vue create mode 100644 pages/message/group/info.vue create mode 100644 pages/message/index.vue create mode 100644 pages/message/record.vue create mode 100644 pages/message/video.vue create mode 100644 pages/mine/about.vue create mode 100644 pages/mine/doc.vue create mode 100644 pages/mine/index.vue create mode 100644 pages/mine/profile.vue create mode 100644 pages/mine/secure.vue create mode 100644 pages/mine/setting.vue create mode 100644 pages/mine/webview.vue create mode 100644 service/getMessageList.js create mode 100644 service/getSystemInfo.js create mode 100644 service/getUserInfo.js create mode 100644 service/groupInfo.js create mode 100644 service/groupUserList.js create mode 100644 service/homeData.js create mode 100644 static/css/animation.css create mode 100644 static/css/icon.css create mode 100644 static/css/iconfont.css create mode 100644 static/css/main.css create mode 100644 static/css/reset.css create mode 100644 static/customicons.css create mode 100644 static/customicons.ttf create mode 100644 static/fonts/iconfont.ttf create mode 100644 static/fonts/iconfont.woff create mode 100644 static/fonts/iconfont.woff2 create mode 100644 static/image/123.gif create mode 100644 static/image/blacklist-red.png create mode 100644 static/image/empty.png create mode 100644 static/image/group.png create mode 100644 static/image/invite.png create mode 100644 static/image/jiahao.png create mode 100644 static/image/logo.png create mode 100644 static/image/moments.png create mode 100644 static/image/rocket.png create mode 100644 static/image/tabbar/compass-active.svg create mode 100644 static/image/tabbar/compass.svg create mode 100644 static/image/tabbar/contacts-active.svg create mode 100644 static/image/tabbar/contacts.svg create mode 100644 static/image/tabbar/demo.png create mode 100644 static/image/tabbar/message-active.svg create mode 100644 static/image/tabbar/message.svg create mode 100644 static/image/tabbar/mine-active.svg create mode 100644 static/image/tabbar/mine.svg create mode 100644 static/image/user-card-bg.jpg create mode 100644 store/index.js create mode 100644 store/login.js create mode 100644 store/message.js create mode 100644 uni.scss create mode 100644 uni_modules/map-Point/changelog.md create mode 100644 uni_modules/map-Point/components/map-Point/amap-wx.js create mode 100644 uni_modules/map-Point/components/map-Point/jweixin.js create mode 100644 uni_modules/map-Point/components/map-Point/map-Point.vue create mode 100644 uni_modules/map-Point/package.json create mode 100644 uni_modules/map-Point/readme.md create mode 100644 uni_modules/map-Point/static/close.png create mode 100644 uni_modules/map-Point/static/item-inx.png create mode 100644 uni_modules/map-Point/static/map-inx.png create mode 100644 uni_modules/map-Point/static/position.png create mode 100644 uni_modules/mp-html/README.md create mode 100644 uni_modules/mp-html/changelog.md create mode 100644 uni_modules/mp-html/components/mp-html/mp-html.vue create mode 100644 uni_modules/mp-html/components/mp-html/node/node.vue create mode 100644 uni_modules/mp-html/components/mp-html/parser.js create mode 100644 uni_modules/mp-html/package.json create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/js/handler.js create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/js/uni.webview.min.js create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/local.html create mode 100644 uni_modules/mumu-recorder/changelog.md create mode 100644 uni_modules/mumu-recorder/components/mumu-recorder/mumu-recorder.vue create mode 100644 uni_modules/mumu-recorder/package.json create mode 100644 uni_modules/mumu-recorder/readme.md create mode 100644 uni_modules/u-ajax/README.md create mode 100644 uni_modules/u-ajax/changelog.md create mode 100644 uni_modules/u-ajax/js_sdk/index.d.ts create mode 100644 uni_modules/u-ajax/js_sdk/index.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/adapters/Request.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/adapters/http.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/core/Ajax.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/core/InterceptorManager.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/core/dispatchRequest.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/core/handleCancel.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/defaults.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/helpers/buildURL.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/helpers/detachConfig.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/helpers/isCallback.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/helpers/mergeConfig.js create mode 100644 uni_modules/u-ajax/js_sdk/lib/utils.js create mode 100644 uni_modules/u-ajax/package.json create mode 100644 uni_modules/uni-badge/changelog.md create mode 100644 uni_modules/uni-badge/components/uni-badge/uni-badge.vue create mode 100644 uni_modules/uni-badge/package.json create mode 100644 uni_modules/uni-badge/readme.md create mode 100644 uni_modules/uni-breadcrumb/changelog.md create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue create mode 100644 uni_modules/uni-breadcrumb/package.json create mode 100644 uni_modules/uni-breadcrumb/readme.md create mode 100644 uni_modules/uni-calendar/changelog.md create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 uni_modules/uni-calendar/package.json create mode 100644 uni_modules/uni-calendar/readme.md create mode 100644 uni_modules/uni-card/changelog.md create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue create mode 100644 uni_modules/uni-card/package.json create mode 100644 uni_modules/uni-card/readme.md create mode 100644 uni_modules/uni-collapse/changelog.md create mode 100644 uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue create mode 100644 uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue create mode 100644 uni_modules/uni-collapse/package.json create mode 100644 uni_modules/uni-collapse/readme.md create mode 100644 uni_modules/uni-combox/changelog.md create mode 100644 uni_modules/uni-combox/components/uni-combox/uni-combox.vue create mode 100644 uni_modules/uni-combox/package.json create mode 100644 uni_modules/uni-combox/readme.md create mode 100644 uni_modules/uni-countdown/changelog.md create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/en.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/index.js create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue create mode 100644 uni_modules/uni-countdown/package.json create mode 100644 uni_modules/uni-countdown/readme.md create mode 100644 uni_modules/uni-data-checkbox/changelog.md create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue create mode 100644 uni_modules/uni-data-checkbox/package.json create mode 100644 uni_modules/uni-data-checkbox/readme.md create mode 100644 uni_modules/uni-data-picker/changelog.md create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 uni_modules/uni-data-picker/package.json create mode 100644 uni_modules/uni-data-picker/readme.md create mode 100644 uni_modules/uni-data-select/changelog.md create mode 100644 uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue create mode 100644 uni_modules/uni-data-select/package.json create mode 100644 uni_modules/uni-data-select/readme.md create mode 100644 uni_modules/uni-dateformat/changelog.md create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/date-format.js create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue create mode 100644 uni_modules/uni-dateformat/package.json create mode 100644 uni_modules/uni-dateformat/readme.md create mode 100644 uni_modules/uni-datetime-picker/changelog.md create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 uni_modules/uni-datetime-picker/package.json create mode 100644 uni_modules/uni-datetime-picker/readme.md create mode 100644 uni_modules/uni-drawer/changelog.md create mode 100644 uni_modules/uni-drawer/components/uni-drawer/keypress.js create mode 100644 uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue create mode 100644 uni_modules/uni-drawer/package.json create mode 100644 uni_modules/uni-drawer/readme.md create mode 100644 uni_modules/uni-easyinput/changelog.md create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/common.js create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue create mode 100644 uni_modules/uni-easyinput/package.json create mode 100644 uni_modules/uni-easyinput/readme.md create mode 100644 uni_modules/uni-fab/changelog.md create mode 100644 uni_modules/uni-fab/components/uni-fab/uni-fab.vue create mode 100644 uni_modules/uni-fab/package.json create mode 100644 uni_modules/uni-fab/readme.md create mode 100644 uni_modules/uni-fav/changelog.md create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/en.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/index.js create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-fav/components/uni-fav/uni-fav.vue create mode 100644 uni_modules/uni-fav/package.json create mode 100644 uni_modules/uni-fav/readme.md create mode 100644 uni_modules/uni-file-picker/changelog.md create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 uni_modules/uni-file-picker/package.json create mode 100644 uni_modules/uni-file-picker/readme.md create mode 100644 uni_modules/uni-forms/changelog.md create mode 100644 uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/uni-forms.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/utils.js create mode 100644 uni_modules/uni-forms/components/uni-forms/validate.js create mode 100644 uni_modules/uni-forms/package.json create mode 100644 uni_modules/uni-forms/readme.md create mode 100644 uni_modules/uni-goods-nav/changelog.md create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue create mode 100644 uni_modules/uni-goods-nav/package.json create mode 100644 uni_modules/uni-goods-nav/readme.md create mode 100644 uni_modules/uni-grid/changelog.md create mode 100644 uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue create mode 100644 uni_modules/uni-grid/components/uni-grid/uni-grid.vue create mode 100644 uni_modules/uni-grid/package.json create mode 100644 uni_modules/uni-grid/readme.md create mode 100644 uni_modules/uni-group/changelog.md create mode 100644 uni_modules/uni-group/components/uni-group/uni-group.vue create mode 100644 uni_modules/uni-group/package.json create mode 100644 uni_modules/uni-group/readme.md create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.uvue create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file.ts create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-indexed-list/changelog.md create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue create mode 100644 uni_modules/uni-indexed-list/package.json create mode 100644 uni_modules/uni-indexed-list/readme.md create mode 100644 uni_modules/uni-link/changelog.md create mode 100644 uni_modules/uni-link/components/uni-link/uni-link.vue create mode 100644 uni_modules/uni-link/package.json create mode 100644 uni_modules/uni-link/readme.md create mode 100644 uni_modules/uni-list/changelog.md create mode 100644 uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue create mode 100644 uni_modules/uni-list/components/uni-list-item/uni-list-item.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-list.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.wxs create mode 100644 uni_modules/uni-list/package.json create mode 100644 uni_modules/uni-list/readme.md create mode 100644 uni_modules/uni-load-more/changelog.md create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 uni_modules/uni-load-more/package.json create mode 100644 uni_modules/uni-load-more/readme.md create mode 100644 uni_modules/uni-nav-bar/changelog.md create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue create mode 100644 uni_modules/uni-nav-bar/package.json create mode 100644 uni_modules/uni-nav-bar/readme.md create mode 100644 uni_modules/uni-notice-bar/changelog.md create mode 100644 uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue create mode 100644 uni_modules/uni-notice-bar/package.json create mode 100644 uni_modules/uni-notice-bar/readme.md create mode 100644 uni_modules/uni-number-box/changelog.md create mode 100644 uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue create mode 100644 uni_modules/uni-number-box/package.json create mode 100644 uni_modules/uni-number-box/readme.md create mode 100644 uni_modules/uni-pagination/changelog.md create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/en.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/es.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/index.js create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue create mode 100644 uni_modules/uni-pagination/package.json create mode 100644 uni_modules/uni-pagination/readme.md create mode 100644 uni_modules/uni-popup/changelog.md create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 uni_modules/uni-popup/package.json create mode 100644 uni_modules/uni-popup/readme.md create mode 100644 uni_modules/uni-rate/changelog.md create mode 100644 uni_modules/uni-rate/components/uni-rate/uni-rate.vue create mode 100644 uni_modules/uni-rate/package.json create mode 100644 uni_modules/uni-rate/readme.md create mode 100644 uni_modules/uni-row/changelog.md create mode 100644 uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 uni_modules/uni-row/package.json create mode 100644 uni_modules/uni-row/readme.md create mode 100644 uni_modules/uni-scss/changelog.md create mode 100644 uni_modules/uni-scss/index.scss create mode 100644 uni_modules/uni-scss/package.json create mode 100644 uni_modules/uni-scss/readme.md create mode 100644 uni_modules/uni-scss/styles/index.scss create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 uni_modules/uni-scss/theme.scss create mode 100644 uni_modules/uni-scss/variables.scss create mode 100644 uni_modules/uni-search-bar/changelog.md create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue create mode 100644 uni_modules/uni-search-bar/package.json create mode 100644 uni_modules/uni-search-bar/readme.md create mode 100644 uni_modules/uni-section/changelog.md create mode 100644 uni_modules/uni-section/components/uni-section/uni-section.vue create mode 100644 uni_modules/uni-section/package.json create mode 100644 uni_modules/uni-section/readme.md create mode 100644 uni_modules/uni-segmented-control/changelog.md create mode 100644 uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue create mode 100644 uni_modules/uni-segmented-control/package.json create mode 100644 uni_modules/uni-segmented-control/readme.md create mode 100644 uni_modules/uni-steps/changelog.md create mode 100644 uni_modules/uni-steps/components/uni-steps/uni-steps.vue create mode 100644 uni_modules/uni-steps/package.json create mode 100644 uni_modules/uni-steps/readme.md create mode 100644 uni_modules/uni-swipe-action/changelog.md create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 uni_modules/uni-swipe-action/package.json create mode 100644 uni_modules/uni-swipe-action/readme.md create mode 100644 uni_modules/uni-swiper-dot/changelog.md create mode 100644 uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue create mode 100644 uni_modules/uni-swiper-dot/package.json create mode 100644 uni_modules/uni-swiper-dot/readme.md create mode 100644 uni_modules/uni-table/changelog.md create mode 100644 uni_modules/uni-table/components/uni-table/uni-table.vue create mode 100644 uni_modules/uni-table/components/uni-tbody/uni-tbody.vue create mode 100644 uni_modules/uni-table/components/uni-td/uni-td.vue create mode 100644 uni_modules/uni-table/components/uni-th/filter-dropdown.vue create mode 100644 uni_modules/uni-table/components/uni-th/uni-th.vue create mode 100644 uni_modules/uni-table/components/uni-thead/uni-thead.vue create mode 100644 uni_modules/uni-table/components/uni-tr/table-checkbox.vue create mode 100644 uni_modules/uni-table/components/uni-tr/uni-tr.vue create mode 100644 uni_modules/uni-table/i18n/en.json create mode 100644 uni_modules/uni-table/i18n/es.json create mode 100644 uni_modules/uni-table/i18n/fr.json create mode 100644 uni_modules/uni-table/i18n/index.js create mode 100644 uni_modules/uni-table/i18n/zh-Hans.json create mode 100644 uni_modules/uni-table/i18n/zh-Hant.json create mode 100644 uni_modules/uni-table/package.json create mode 100644 uni_modules/uni-table/readme.md create mode 100644 uni_modules/uni-tag/changelog.md create mode 100644 uni_modules/uni-tag/components/uni-tag/uni-tag.vue create mode 100644 uni_modules/uni-tag/package.json create mode 100644 uni_modules/uni-tag/readme.md create mode 100644 uni_modules/uni-test/changelog.md create mode 100644 uni_modules/uni-test/components/uni-test/uni-test.vue create mode 100644 uni_modules/uni-test/package.json create mode 100644 uni_modules/uni-test/readme.md create mode 100644 uni_modules/uni-title/changelog.md create mode 100644 uni_modules/uni-title/components/uni-title/uni-title.vue create mode 100644 uni_modules/uni-title/package.json create mode 100644 uni_modules/uni-title/readme.md create mode 100644 uni_modules/uni-tooltip/changelog.md create mode 100644 uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue create mode 100644 uni_modules/uni-tooltip/package.json create mode 100644 uni_modules/uni-tooltip/readme.md create mode 100644 uni_modules/uni-transition/changelog.md create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 uni_modules/uni-transition/package.json create mode 100644 uni_modules/uni-transition/readme.md create mode 100644 uni_modules/uni-ui/changelog.md create mode 100644 uni_modules/uni-ui/components/uni-ui/uni-ui.vue create mode 100644 uni_modules/uni-ui/package.json create mode 100644 uni_modules/uni-ui/readme.md create mode 100644 uni_modules/z-paging/changelog.md create mode 100644 uni_modules/z-paging/components/z-paging-cell/z-paging-cell.vue create mode 100644 uni_modules/z-paging/components/z-paging-empty-view/z-paging-empty-view.vue create mode 100644 uni_modules/z-paging/components/z-paging-swiper-item/z-paging-swiper-item.vue create mode 100644 uni_modules/z-paging/components/z-paging-swiper/z-paging-swiper.vue create mode 100644 uni_modules/z-paging/components/z-paging/components/z-paging-load-more.vue create mode 100644 uni_modules/z-paging/components/z-paging/components/z-paging-refresh.vue create mode 100644 uni_modules/z-paging/components/z-paging/config/index.js create mode 100644 uni_modules/z-paging/components/z-paging/css/z-paging-main.css create mode 100644 uni_modules/z-paging/components/z-paging/css/z-paging-static.css create mode 100644 uni_modules/z-paging/components/z-paging/i18n/en.json create mode 100644 uni_modules/z-paging/components/z-paging/i18n/index.js create mode 100644 uni_modules/z-paging/components/z-paging/i18n/zh-Hans.json create mode 100644 uni_modules/z-paging/components/z-paging/i18n/zh-Hant.json create mode 100644 uni_modules/z-paging/components/z-paging/js/hooks/useZPaging.js create mode 100644 uni_modules/z-paging/components/z-paging/js/hooks/useZPagingComp.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/back-to-top.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/chat-record-mode.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/common-layout.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/data-handle.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/empty.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/i18n.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/load-more.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/loading.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/nvue.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/refresher.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/scroller.js create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/virtual-list.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-constant.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-enum.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-interceptor.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-main.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-mixin.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-static.js create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-utils.js create mode 100644 uni_modules/z-paging/components/z-paging/wxs/z-paging-renderjs.js create mode 100644 uni_modules/z-paging/components/z-paging/wxs/z-paging-wxs.wxs create mode 100644 uni_modules/z-paging/components/z-paging/z-paging.vue create mode 100644 uni_modules/z-paging/package.json create mode 100644 uni_modules/z-paging/readme.md create mode 100644 uni_modules/z-paging/types/comps.d.ts create mode 100644 uni_modules/z-paging/types/comps/_common.d.ts create mode 100644 uni_modules/z-paging/types/comps/z-paging-cell.d.ts create mode 100644 uni_modules/z-paging/types/comps/z-paging-empty-view.d.ts create mode 100644 uni_modules/z-paging/types/comps/z-paging-swiper-item.d.ts create mode 100644 uni_modules/z-paging/types/comps/z-paging-swiper.d.ts create mode 100644 uni_modules/z-paging/types/comps/z-paging.d.ts create mode 100644 uni_modules/z-paging/types/index.d.ts create mode 100644 utils/LocalFileSystemURL.js create mode 100644 utils/appUpdate.js create mode 100644 utils/array.js create mode 100644 utils/db.js create mode 100644 utils/edit.js create mode 100644 utils/emoji.js create mode 100644 utils/observer.js create mode 100644 utils/permission.js create mode 100644 utils/request.js create mode 100644 utils/utils.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..db5c1f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ + +# Other files and folders +.settings/ +/unpackage/ +node_modules +# Executables +*.swf +*.air +*.ipa +*.apk +*.zip + +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..b8c91b5 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,33 @@ +{ + // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version" : "0.0", + "configurations" : [ + { + "app-plus" : { + "launchtype" : "remote" + }, + "default" : { + "launchtype" : "local" + }, + "mp-weixin" : { + "launchtype" : "local" + }, + "type" : "uniCloud" + }, + { + "openVueDevtools" : false, + "playground" : "custom", + "type" : "uni-app:app-ios" + }, + { + "openVueDevtools" : false, + "playground" : "standard", + "type" : "uni-app:app-android" + }, + { + "openVueDevtools" : false, + "type" : "uni-app:h5" + } + ] +} diff --git a/.vite/_cert.pem b/.vite/_cert.pem new file mode 100644 index 0000000..8f5025b --- /dev/null +++ b/.vite/_cert.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA17mXxivjza/+LCpiNPKPTiiit0dcFiBAkOGN297tSiJjavsv +Pji04nGeBbi+z/2qb1+8/5r92QDy/Krp3xdHIuEGIwDll6UEa3Wcj3StqBnycAWc +JDlZ9dur7bpoVLF6O1/IeexfSIkqVkNmaKDS2kXKpllrgyx19ql3vXekFuFCwLIh +Ku6yLlcfEaKnWmd3h4vNV0X+q3ckK56w5IyPkxe6gOKpPbQ5TEB8J+w9X7u3MCKl +PfZPmLyJ53UzacPnkfH6SO+eHO+WSsauYtfnxfduuG7BzYndH6JO3A9m9GwIsM/o +N3WuMAk3DoFXK5dqnFhocXlsPizQOt+MZLYvLQIDAQABAoIBABo6VlmhvHCllSGJ +hacqVoIKLr5Zzrhh83ep9LVmxTLeO3gmUfgerN9bMPtBGvHuxWoFGdV54qMfmmtd +3FFjYyK6eSSIV2G4jnECO6a1aOenP/Keu/0re+SIcL7WixjA+zt8ycMJGgyXoK4c +Q7c01m3zTlArTwcDwNPchtJiWXDueQw0tjO2zdD2DA/hSohVUcgynJ6kDez1lQ35 +8p2LI0M4LGjn2NL5XN4PyarTvnslvG5Ik6Oo6wSTySqcddWHJm9+ozuVVqDrVqOY +R0bdm8g9PWDoPDiCLbx58c3MtFRoejBFhm3cQp16DEB1fbL20nnTQspXG5hvsYpP +uZEXbAECgYEA+pYztQ0+13BYoTxSMQMOUscxLigJXUcm3JnA8w95qG5jwkwosh52 +dqDNGAUmpeliokR0rI3xozXDsldX+onDGyExHHi8u9f03B7NMseoTK6edGjJEprl +syoAoGwg/GY6yle3yqEkRhchWxNYDewe+W1b6AK8JG7XMQEfU08r3rkCgYEA3GKZ +E212OyKgADaOVBqxwBN9bECxbne8KqsWRMnWN+cps0mqfPFrhDr62oqxwioh1ZAE +RWciBF7l5PrbaJ5NAjPuh6MzU6zBbJVkDqddySsbHExh69Uia81J1UG21GpPnjII +/h74dan6DYHJuxjFYDLqGrn81TCkd1JiikdfOhUCgYB4fTBvpebJgGOdY3vBxU5l +zxF+uBGIoGW3PNbiCFbe/fVJv4Tx4GPltnvnSNLEg+vBSlkvfzDo4Tkvz3+mIAeI +S/VpU0SsrbI3BTh1ajsqY+wc3SWRpJk+BLw4ZsWVlzI9iN/+tmzSptyLBkoYp6hd +FpBShr4gZotiLL/7Nt5JQQKBgQCZlKCGeGbHSRblbx96nuu2Jh7mnKLJj+lydq3b +HCkL5i0aQ0DrNzas/IkqWTMNU10mveksEHYVQ6jEDMlwO7kAyv30ShgPvLlCmU0U +JTBna4HGE7i9p1cIdxR36AaoOrnnTYkUxrJxFRYr6YGSv+10X6bjHy+BxhcnDCOd +p6VGDQKBgH+BVVOQ2I5ddO6ZICapfm6O3n32RPuSsZavvEE7T73kY0jY+gAf2q1j +KIZ9kH851D0q2ofmgly2lo9ctuV+4uq55wT07Bgz5UwTCoOQ8VE7sBC1aB6TP0ot +whW3ZXHQomC9aM+c11IcTsQAJ6suZfT7uZcazWhD8PN+BiluxTlm +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIJA2BOZCd6yrSRMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV +BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx +EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl +c3QwHhcNMjIxMDIwMTI0MDUxWhcNMjIxMTE5MTI0MDUxWjBpMRQwEgYDVQQDEwtl +eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD +VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA17mXxivjza/+LCpiNPKPTiii +t0dcFiBAkOGN297tSiJjavsvPji04nGeBbi+z/2qb1+8/5r92QDy/Krp3xdHIuEG +IwDll6UEa3Wcj3StqBnycAWcJDlZ9dur7bpoVLF6O1/IeexfSIkqVkNmaKDS2kXK +pllrgyx19ql3vXekFuFCwLIhKu6yLlcfEaKnWmd3h4vNV0X+q3ckK56w5IyPkxe6 +gOKpPbQ5TEB8J+w9X7u3MCKlPfZPmLyJ53UzacPnkfH6SO+eHO+WSsauYtfnxfdu +uG7BzYndH6JO3A9m9GwIsM/oN3WuMAk3DoFXK5dqnFhocXlsPizQOt+MZLYvLQID +AQABo4GhMIGeMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB +BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBcBgNVHREEVTBTgglsb2NhbGhvc3SC +FWxvY2FsaG9zdC5sb2NhbGRvbWFpboIGbHZoLm1lgggqLmx2aC5tZYIFWzo6MV2H +BH8AAAGHEP6AAAAAAAAAAAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggEBAEEPfOUj +4+CbTnJwjZIqz+4Qo9X7RnMTkuuckTWC/f4h8IXSuqF3ximcnFWrDu5uEw3x1wLM +VHedWIhTUw908dHW4flTTJfI/hQg1samK7XefVfGx7/0uRJi2tiPf5ztI45/z6cC +0dQxGZEu4t7mfu0sbfjvKtngDCdF5ZWKy4jjEWdW7CsJ7BSWuyp4dP/FVW9ntPz8 +m+qYYTIUI3QHQe1RoMmOKK+1Nqs7YkfB/avebt+xdv2VOekefqmYudpwDMbaQ+Zk +boqW/+u1WBpsWeXob+Fhmp3nM+j3G6KyNkPRbGBZcgfkdGrPdM8AvOrdGEcrK3rT +QKRyGCwDZqQjLgg= +-----END CERTIFICATE----- diff --git a/.vite/deps/package.json b/.vite/deps/package.json new file mode 100644 index 0000000..7c34deb --- /dev/null +++ b/.vite/deps/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..092f372 --- /dev/null +++ b/App.vue @@ -0,0 +1,668 @@ + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..af06431 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Raingad-IM for uniapp + +技术栈:`vue3` + `pinia` + `color-UI` + +#### 目录结构 +``` +Raingad +├─api 接口目录 +│ ├─index.js 总的接口文件 +│ └─message.js 消息接口 +│ +├─common 公共目录 +│ ├─socket.js websocket配置 +│ └─config.js 服务器地址配置 +│ +│─components 符合vue组件规范的uni-app组件目录 +│ └─comp-a.vue 可复用的a组件 +│ +├─pages 业务页面文件存放的目录 +│ ├─index +│ │ └─index.vue index页面 +│ ├─message +│ │ └─index.vue 消息列表页面 +│ ├─ ... 更多目录 +│ └─contact +│ └─index.vue 联系人列表页面 +│ +├─static 存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此 +│ +├─uni_modules 存放[uni_module](/uni_modules)。 +│ +├─hybrid App端存放本地html文件的目录,详见 +│ +├─nativeplugins 远程插件目录 +│ +├─uniCloud 云函数目录,里面有unipush的推送功能,如果不需要可以删除(已删除) +│ +├─unpackage 非工程代码,一般存放运行或发行的编译结果 +│ +├─main.js Vue初始化入口文件 +├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 +├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见 +├─pages.json 配置页面路由、导航条、选项卡等页面类信息,详见 +└─uni.scss 这里是uni-app内置的常用样式变量 +``` + +#### 5.3+ 重要更新 +修改接口的时候,为了避免自己打包的H5被盗用,我们加入了域名加密认证。 +- 在 `/common/config.js` 中需要添加一个加密信息:hostToken,可以搜索定位到该字符串 +- hostToken信息需要将自己的域名md5加密 **两次**(域名md5加密一次后得到的值再md5加密一次)在拼接两个字符串,得到我们的Token。不会加密的去百度搜索md5在线加密,将域名输入后加密得到第一次加密后的Token,把加密后的值再重复加密一次即可。 + +加密格式如下: + +> "sha"+域名加密两次后的md5 + "bi" + +假如我们的域名是 `im.xxxxx.com` ,那么加密后就应该是:**sha** f9cb4d7d77719f068e7233e81690f39a **bi** + +加密好了把该token填写到hostToken中,这样就可以避免别人下载我们的h5页面,修改域名来使用我们的源码,如果不影响可以将相应的代码屏蔽掉或者使用其他更先进的算法。 + +#### 安装打包请直接参考文档 +文档全部迁移至以下地址: +所有文档地址: [接口文档地址](https://apifox.com/apidoc/shared-e563aed5-7578-4620-913f-f6746ece6067) 访问密码: raingad-im-doc \ No newline at end of file diff --git a/androidPrivacy.json b/androidPrivacy.json new file mode 100644 index 0000000..a7404db --- /dev/null +++ b/androidPrivacy.json @@ -0,0 +1,38 @@ +{ + "version" : "1", + "prompt" : "template", + "title" : "服务协议和隐私政策", + "message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。
  你可阅读《服务协议》《隐私政策》了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。", + "buttonAccept" : "同意并接受", + "buttonRefuse" : "暂不同意", + "hrefLoader" : "system", + "backToExit" : "false", + "second" : { + "title" : "确认提示", + "message" : "  进入应用前,你需先同意《服务协议》《隐私政策》,否则将退出应用。", + "buttonAccept" : "同意并继续", + "buttonRefuse" : "退出应用" + }, + "disagreeMode" : { + "support" : false, + "loadNativePlugins" : false, + "visitorEntry" : false, + "showAlways" : false + }, + "styles" : { + "backgroundColor" : "#ffffff", + "borderRadius" : "5px", + "title" : { + "color" : "#000000" + }, + "buttonAccept" : { + "color" : "#00ff00" + }, + "buttonRefuse" : { + "color" : "#999999" + }, + "buttonVisitor" : { + "color" : "#999999" + } + } +} diff --git a/api/compass.js b/api/compass.js new file mode 100644 index 0000000..1ff6474 --- /dev/null +++ b/api/compass.js @@ -0,0 +1,54 @@ +import {postRequest,postJsonRequest,apiUrl} from '@/utils/request.js'; +let compaApi = {} + +// 朋友圈帖子列表 +compaApi.wechatMomentsList = (params) =>{ + return postJsonRequest('enterprise/posts/index', params) +} + +// 发布朋友圈 +compaApi.wechatMomentsadd = (params) =>{ + return postJsonRequest('enterprise/posts/add', params) +} + +// 朋友圈点赞/取消点赞 +compaApi.onlikes = (params) =>{ + return postJsonRequest('enterprise/posts/like', params) +} + +// 评论/回复 +compaApi.oncomments = (params) =>{ + return postJsonRequest('enterprise/posts/comment', params) +} + +// 获取上次保存草稿数据 +compaApi.getLastPosts = (params) =>{ + return postJsonRequest('enterprise/posts/getLastPosts', params) +} + +// 删除帖子 +compaApi.Deleteapost = (params) =>{ + return postJsonRequest('enterprise/posts/del', params) +} + +// 我的朋友圈 +compaApi.myPosts = (params) =>{ + return postJsonRequest('enterprise/posts/myPosts', params) +} + +// 我的朋友圈 +compaApi.detailsList = (params) =>{ + return postJsonRequest('enterprise/posts/details', params) +} + +// 获取未读消息数量 +compaApi.getNoticeCount = (params) =>{ + return postJsonRequest('enterprise/posts/getNoticeCount', params) +} + +// 消息通知列表接口 +compaApi.getNoticeList = (params) =>{ + return postJsonRequest('enterprise/posts/getNoticeList', params) +} + +export default compaApi; \ No newline at end of file diff --git a/api/emoji.js b/api/emoji.js new file mode 100644 index 0000000..7524d77 --- /dev/null +++ b/api/emoji.js @@ -0,0 +1,45 @@ +// 统一请求路径前缀在libs/axios.js中修改 +import { + postRequest, + postJsonRequest, + apiUrl +} from '@/utils/request.js'; +let emojiApi = {} + +emojiApi.uploadEmoji=apiUrl+'/common/upload/uploadEmoji'; + +/** + * @desc 表情列表 + * @param {*} 参数 + */ +emojiApi.emojiList = (params) => { + return postJsonRequest('/enterprise/emoji/index', params) +} + +/** + * @desc 添加表情 + * @param {*} 参数 + */ +emojiApi.addEmoji = (params) => { + return postJsonRequest('/enterprise/emoji/add', params) +} + +/** + * @desc 删除表情 + * @param {*} 参数 + */ +emojiApi.delEmoji = (params) => { + return postJsonRequest('/enterprise/emoji/del', params) +} + + +/** + * @desc 移动表情 + * @param {*} 参数 + */ +emojiApi.moveEmoji = (params) => { + return postJsonRequest('/enterprise/emoji/move', params) +} + + +export default emojiApi; diff --git a/api/friend.js b/api/friend.js new file mode 100644 index 0000000..1eb24a5 --- /dev/null +++ b/api/friend.js @@ -0,0 +1,48 @@ +// 统一请求路径前缀在libs/axios.js中修改 +import { + postJsonRequest, + apiUrl +} from '@/utils/request.js'; +let friendApi = {} + +/** + * @desc 删除好友 + * @param {*} 参数 + */ +friendApi.delFriend = (params) => { + return postJsonRequest('/enterprise/friend/del', params) +} + +/** + * @desc 添加好友 + * @param {*} 参数 + */ +friendApi.addFriend = (params) => { + return postJsonRequest('/enterprise/friend/add', params) +} + +/** + * @desc 新朋友列表 + * @param {*} 参数 + */ +friendApi.applyList = (params) => { + return postJsonRequest('/enterprise/friend/index', params) +} + +/** + * @desc 同意或者拒绝请求 + * @param {*} 参数 + */ +friendApi.acceptApply = (params) => { + return postJsonRequest('/enterprise/friend/update', params) +} + +/** + * @desc 设置好有备注 + * @param {*} 参数 + */ +friendApi.setNickname = (params) => { + return postJsonRequest('/enterprise/friend/setNickname', params) +} + +export default friendApi; diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..230d678 --- /dev/null +++ b/api/index.js @@ -0,0 +1,15 @@ +// 引入其他模块的接口 + +import msgApi from '@/api/message.js'; // 消息 +import LoginApi from '@/api/login.js'; //登录相关 +import friendApi from '@/api/friend.js'; //登录相关 +import emojiApi from '@/api/emoji.js'; //登录相关 +import compaApi from '@/api/compass.js'; //朋友圈 +// 导出接口 +export default { + msgApi, + LoginApi, + friendApi, + emojiApi, + compaApi +} diff --git a/api/login.js b/api/login.js new file mode 100644 index 0000000..5e29cdb --- /dev/null +++ b/api/login.js @@ -0,0 +1,65 @@ +// 统一请求路径前缀在libs/axios.js中修改 +import { + postJsonRequest, + apiUrl +} from '@/utils/request.js'; +let LoginApi = {} + +/** + * @desc 登录接口 + * @param {*} 参数 + */ +LoginApi.login = (params) => { + return postJsonRequest('/common/Pub/login', params) +} + + +/** + * @desc 退出接口 + * @param {*} 参数 + */ +LoginApi.logout = (params) => { + return postJsonRequest('/common/Pub/logout', params) +} + +/** + * 注册用户 + * @param {*} data + */ +LoginApi.register = (params) => { + return postJsonRequest('/common/pub/register', params) +} + +/** + * @desc 绑定client_id + * @param {*} 参数 + */ +LoginApi.bindUid = (params) => { + return postJsonRequest('/common/Pub/bindUid', params) +} + +/** + * @desc 绑定群聊client_id + * @param {*} 参数 + */ +LoginApi.bindGroup = (params) => { + return postJsonRequest('common/pub/bindGroup', params) +} + +/** + * 获取全局配置 + * @param {*} data + */ +LoginApi.getSystemInfo = (params) => { + return postJsonRequest('/common/pub/getSystemInfo', params) +} + +/** + * 发送验证码 + * @param {*} data + */ +LoginApi.sendCode = (params) => { + return postJsonRequest('/common/pub/sendCode', params) +} + +export default LoginApi; diff --git a/api/message.js b/api/message.js new file mode 100644 index 0000000..952ee6f --- /dev/null +++ b/api/message.js @@ -0,0 +1,328 @@ +// 统一请求路径前缀在libs/axios.js中修改 +import { + postRequest, + postJsonRequest, + apiUrl +} from '@/utils/request.js'; +let msgApi = {} + +msgApi.uploadUrl=apiUrl+'/common/upload/uploadFile'; +// 上传头像 +msgApi.uploadAvatar=apiUrl+'/common/upload/uploadAvatar'; + +/** + * @desc 网络图片上传 + * @param {*} 参数 + */ +msgApi.uploadFileImage = (params) => { + return postJsonRequest('/common/upload/uploadFileImage', params) +} + +/** + * @desc 普通消息列表(小程序) + * @param {*} 参数 + */ +msgApi.initContacts = (params) => { + return postJsonRequest('/enterprise/im/getContacts', params) +} + + + +/** + * @desc 普通消息列表(小程序) + * @param {*} 参数 + */ +msgApi.getMessageList = (params) => { + return postJsonRequest('/enterprise/im/getMessageList', params) +} + +/** + * @desc 设置聊天置顶 + * @param {*} 参数 + */ +msgApi.setChatTopAPI = (params) => { + return postJsonRequest('/enterprise/im/setChatTop', params) +} + +/** + * @desc 获取好友信息 + * @param {*} 参数 + */ +msgApi.getFriendInfo = (params) => { + return postJsonRequest('enterprise/friend/getFriendInfo', params) +} + +/** + * @desc 删除聊天 + * @param {*} 参数 + */ +msgApi.delChatAPI = (params) => { + return postJsonRequest('/enterprise/im/delChat', params) +} + +/** + * @desc 发送文本聊天消息 + * @param {*} 参数 + */ +msgApi.sendMessage = (params) => { + return postJsonRequest('/enterprise/im/sendMessage', params) +} + +/** + * @desc 转发聊天消息 + * @param {*} 参数 + */ +msgApi.forwardMessage = (params) => { + return postJsonRequest('/enterprise/im/forwardMessage', params) +} + +/** + * @desc 设置消息已读 + * @param {*} 参数 + */ +msgApi.setMsgIsRead = (params) => { + return postJsonRequest('/enterprise/im/setMsgIsRead', params) +} + +/** + * @desc 设置艾特消息已读 + * @param {*} 参数 + */ +msgApi.readAtMsg = (params) => { + return postJsonRequest('/enterprise/im/readAtMsg', params) +} + +/** + * 撤回消息 + * @param {*} data + */ +msgApi.undoMessage = (params) => { + return postJsonRequest('/enterprise/im/undoMessage', params) +} + +/** + * 删除消息 + * @param {*} data + */ +msgApi.delMessage = (params) => { + return postJsonRequest('/enterprise/im/delMessage', params) +} + +/** + * 删除消息个人 + * @param {*} data + */ +msgApi.removeMessage = (params) => { + return postJsonRequest('/enterprise/im/removeMessage', params) +} + +/** + * 加入黑名单 + * @param {*} data + */ +msgApi.isBlacklist = (params) => { + return postJsonRequest('/enterprise/friend/isBlacklist', params) +} + +/** + * 发送ws消息 + * @param {*} data + */ +msgApi.sendToMsg = (params) => { + return postJsonRequest('/enterprise/im/sendToMsg', params) +} + +/** + * 消息免打扰 + * @param {*} data + */ +msgApi.isNoticeAPI = (params) => { + return postJsonRequest('/enterprise/im/isNotice', params) +} + +/** + * 更新业务卡片 + * @param {*} data + */ +msgApi.updateCard = (params) => { + return postJsonRequest('/enterprise/im/updateCard', params) +} + +/** + * 同意或者忽略团队 + * @param {*} data + */ +msgApi.joinGroup = (params) => { + return postJsonRequest('/enterprise/group/joinGroup', params) +} + +/** + * 获取群成员 + * @param {*} data + */ +msgApi.groupUserList = (params) => { + return postJsonRequest('/enterprise/group/groupUserList', params) +} + +/** + * 修改群公告 + * @param {*} data + */ +msgApi.setNotice = (params) => { + return postJsonRequest('/enterprise/group/setNotice', params) +} +/** + * 群管理信息 + * @param {*} data + */ +msgApi.groupInfo = (params) => { + return postJsonRequest('/enterprise/group/groupInfo', params) +} + +/** + * 加入群聊 + * @param {*} data + */ +msgApi.joinGroup = (params) => { + return postJsonRequest('/enterprise/group/joinGroup', params) +} + + +/** + * 修改群管理信息 + * @param {*} data + */ +msgApi.groupSetting = (params) => { + return postJsonRequest('/enterprise/group/groupSetting', params) +} + +/** + * 转让管理权限 + * @param {*} data + */ +msgApi.changeOwner = (params) => { + return postJsonRequest('/enterprise/group/changeOwner', params) +} + +/** + * 获取全部人员 + * @param {*} data + */ +msgApi.getAllUser = (params) => { + return postJsonRequest('/enterprise/group/getAllUser', params) +} + +/** + * 创建群聊 + * @param {*} data + */ +msgApi.addGroup = (params) => { + return postJsonRequest('/enterprise/group/add', params) +} +/** + * 绑定群聊 + * @param {*} data + */ +msgApi.bindGroup = (params) => { + return postJsonRequest('/common/index/bindGroup', params) +} + +/** + * 修改群聊名字 + * @param {*} data + */ +msgApi.editGroupName = (params) => { + return postJsonRequest('/enterprise/group/editGroupName', params) +} +/** + * 添加群成员 + * @param {*} data + */ +msgApi.addGroupUser = (params) => { + return postJsonRequest('/enterprise/group/addGroupUser', params) +} + +/** + * 删除群成员 + * @param {*} data + */ +msgApi.removeUser = (params) => { + return postJsonRequest('/enterprise/group/removeUser', params) +} + +/** + * 删除群聊 + * @param {*} data + */ +msgApi.removeGroup = (params) => { + return postJsonRequest('/enterprise/group/removeGroup', params) +} + +/** + * 删除群聊聊天记录 + * @param {*} data + */ +msgApi.clearMessage = (params) => { + return postJsonRequest('/enterprise/group/clearMessage', params) +} + + +/** + * 设置/取消管理员 + * @param {*} data + */ +msgApi.setManager = (params) => { + return postJsonRequest('/enterprise/group/setManager', params) +} + +/** + * 设置禁言 + * @param {*} data + */ +msgApi.setNoSpeak = (params) => { + return postJsonRequest('/enterprise/group/setNoSpeak', params) +} + +/** + * 获取成员信息 + * @param {*} data + */ +msgApi.getUserInfo = (params) => { + return postJsonRequest('/enterprise/im/getUserInfo', params) +} + +// 搜索用户 +msgApi.searchUser= (params) =>{ + return postJsonRequest('enterprise/im/searchUser', params) +} + +// 修改用户信息 +msgApi.updateUserInfo= (params) =>{ + return postJsonRequest('enterprise/im/updateUserInfo', params) +} + +// 修改账号 +msgApi.editAccount= (params) =>{ + return postJsonRequest('enterprise/im/editAccount', params) +} + +// 修改密码 +msgApi.editPassword= (params) =>{ + return postJsonRequest('enterprise/im/editPassword', params) +} + +// 获取联系人信息 +msgApi.contactInfo= (params) =>{ + return postJsonRequest('enterprise/im/getContactInfo', params) +} + +// 获取公告信息 +msgApi.getAdminNotice= (params) =>{ + return postJsonRequest('enterprise/im/getAdminNotice', params) +} + +// 获取聊天原图 +msgApi.viewOriginalImage= (params) =>{ + return postJsonRequest('enterprise/files/viewOriginalImage', params) +} +export default msgApi; diff --git a/common/appUpdate.js b/common/appUpdate.js new file mode 100644 index 0000000..3ccaf0e --- /dev/null +++ b/common/appUpdate.js @@ -0,0 +1,865 @@ + +import config from "@/common/config.js" +import { postJsonRequest } from '@/utils/request.js'; + +const updateConfig=config.updateConfig; +const platform = uni.getSystemInfoSync().platform; +// 主颜色 +const $mainColor = updateConfig.bgColor ? updateConfig.bgColor : "FF5B78"; +// 弹窗图标url +const $iconUrl = updateConfig.iconUrl ? updateConfig.iconUrl : "/static/image/rocket.png"; + +const $checkUpdateUrl=updateConfig.url ? updateConfig.url : ""; + + +// 获取当前应用的版本号 +export const getCurrentNo = (callback) => { + // 获取本地应用资源版本号 + plus.runtime.getProperty(plus.runtime.appid,(inf) => { + callback && callback({ + versionCode: inf.versionCode, + versionName: inf.version + }); + }); +} +// 从服务器下载应用资源包(wgt文件) +const getDownload = (data)=>{ + let dtask; + if(data.updateType == 'forcibly' || data.updateType == 'solicit'){ + let popupData = { + progress: true, + buttonNum: 2 + }; + if(data.updateType == 'forcibly'){ + popupData.buttonNum = 0; + } + let lastProgressValue = 0; + let popupObj = downloadPopup(popupData); + dtask = plus.downloader.createDownload(data.downloadUrl, { + filename: "_doc/update/" + }, function(download, status) { + if (status == 200) { + popupObj.change({ + progressValue: 100, + progressTip:"正在安装文件...", + progress: true, + buttonNum: 0 + }); + plus.runtime.install(download.filename, {}, function() { + popupObj.change({ + contentText: "应用资源更新完成!", + buttonNum: 1, + progress: false + }); + }, function(e) { + popupObj.cancel(); + plus.nativeUI.alert("安装文件失败[" + e.code + "]:" + e.message); + }); + } else { + popupObj.change({ + contentText: "文件下载失败...", + buttonNum: 1, + progress: false + }); + } + }); + dtask.start(); + dtask.addEventListener("statechanged", function(task, status) { + switch (task.state) { + case 1: // 开始 + popupObj.change({ + progressValue:0, + progressTip:"准备下载...", + progress: true + }); + break; + case 2: // 已连接到服务器 + popupObj.change({ + progressValue:0, + progressTip:"开始下载...", + progress: true + }); + break; + case 3: + const progress = parseInt(task.downloadedSize / task.totalSize * 100); + if(progress - lastProgressValue >= 2){ + lastProgressValue = progress; + popupObj.change({ + progressValue:progress, + progressTip: "已下载" + progress + "%", + progress: true + }); + } + break; + } + }); + // 取消下载 + popupObj.cancelDownload = function(){ + dtask && dtask.abort(); + uni.showToast({ + title: "已取消下载", + icon:"none" + }); + } + // 重启APP + popupObj.reboot = function(){ + plus.runtime.restart(); + } + } else if(data.updateType == "silent"){ + dtask = plus.downloader.createDownload(data.downloadUrl, { + filename: "_doc/update/" + }, function(download, status) { + if (status == 200) { + plus.runtime.install(download.filename, {}, function() { + console.log("应用资源更新完成"); + }, function(e) { + plus.nativeUI.alert("安装文件失败[" + e.code + "]:" + e.message); + }); + } else { + plus.nativeUI.alert("文件下载失败..."); + } + }); + dtask.start(); + } +} +// 文字换行 +const drawtext = (text, maxWidth)=>{ + let textArr = text.split(""); + let len = textArr.length; + // 上个节点 + let previousNode = 0; + // 记录节点宽度 + let nodeWidth = 0; + // 文本换行数组 + let rowText = []; + // 如果是字母,侧保存长度 + let letterWidth = 0; + // 汉字宽度 + let chineseWidth = 14; + // otherFont宽度 + let otherWidth = 7; + for (let i = 0; i < len; i++) { + if (/[\u4e00-\u9fa5]|[\uFE30-\uFFA0]/g.test(textArr[i])) { + if(letterWidth > 0){ + if(nodeWidth + chineseWidth + letterWidth * otherWidth > maxWidth){ + rowText.push({ + type: "text", + content: text.substring(previousNode, i) + }); + previousNode = i; + nodeWidth = chineseWidth; + letterWidth = 0; + } else { + nodeWidth += chineseWidth + letterWidth * otherWidth; + letterWidth = 0; + } + } else { + if(nodeWidth + chineseWidth > maxWidth){ + rowText.push({ + type: "text", + content: text.substring(previousNode, i) + }); + previousNode = i; + nodeWidth = chineseWidth; + }else{ + nodeWidth += chineseWidth; + } + } + } else { + if(/\n/g.test(textArr[i])){ + rowText.push({ + type: "break", + content: text.substring(previousNode, i) + }); + previousNode = i + 1; + nodeWidth = 0; + letterWidth = 0; + }else if(textArr[i] == "\\" && textArr[i + 1] == "n"){ + rowText.push({ + type: "break", + content: text.substring(previousNode, i) + }); + previousNode = i + 2; + nodeWidth = 0; + letterWidth = 0; + }else if(/[a-zA-Z0-9]/g.test(textArr[i])){ + letterWidth += 1; + if(nodeWidth + letterWidth * otherWidth > maxWidth){ + rowText.push({ + type: "text", + content: text.substring(previousNode, i + 1 - letterWidth) + }); + previousNode = i + 1 - letterWidth; + nodeWidth = letterWidth * otherWidth; + letterWidth = 0; + } + } else{ + if(nodeWidth + otherWidth > maxWidth){ + rowText.push({ + type: "text", + content: text.substring(previousNode, i) + }); + previousNode = i; + nodeWidth = otherWidth; + }else{ + nodeWidth += otherWidth; + } + } + } + } + if (previousNode < len) { + rowText.push({ + type: "text", + content: text.substring(previousNode, len) + }); + } + return rowText; +} +// 是否更新弹窗 +const updatePopup = (data, callback) => { + // 弹窗遮罩层 + let maskLayer = new plus.nativeObj.View("maskLayer", { //先创建遮罩层 + top: '0px', + left: '0px', + height: '100%', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.5)' + }); + + // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心 + const screenWidth = plus.screen.resolutionWidth; + const screenHeight = plus.screen.resolutionHeight; + //弹窗容器宽度 + const popupViewWidth = screenWidth * 0.7; + // 弹窗容器的Padding + const viewContentPadding = 20; + // 弹窗容器的宽度 + const viewContentWidth = parseInt(popupViewWidth - (viewContentPadding * 2)); + // 描述的列表 + const descriptionList = drawtext(data.versionInfo, viewContentWidth); + // 弹窗容器高度 + let popupViewHeight = 80 + 20 + 20 + 90 + 10; + + let popupViewContentList = [{ + src: $iconUrl, + id: "logo", + tag: "img", + position: { + top: "0px", + left: (popupViewWidth - 124) / 2 + "px", + width: "124px", + height: "80px", + } + }, + { + tag: 'font', + id: 'title', + text: "发现新版本:" + data.versionName, + textStyles: { + size: '18px', + color: "#333", + weight: "bold", + whiteSpace: "normal" + }, + position: { + top: '90px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "30px", + } + }]; + const textHeight = 18; + let contentTop = 130; + descriptionList.forEach((item,index) => { + if(index > 0){ + popupViewHeight += textHeight; + contentTop += textHeight; + } + popupViewContentList.push({ + tag: 'font', + id: 'content' + index + 1, + text: item.content, + textStyles: { + size: '14px', + color: "#666", + lineSpacing: "50%", + align: "left" + }, + position: { + top: contentTop + "px", + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: textHeight + "px", + } + }); + if(item.type == "break"){ + contentTop += 10; + popupViewHeight += 10; + } + }); + + if(data.updateType == "forcibly"){ + popupViewContentList.push({ + tag: 'rect', //绘制底边按钮 + rectStyles:{ + radius: "6px", + color: $mainColor + }, + position:{ + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "30px" + } + }); + popupViewContentList.push({ + tag: 'font', + id: 'confirmText', + text: "立即升级", + textStyles: { + size: '14px', + color: "#FFF", + lineSpacing: "0%", + }, + position: { + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "30px" + } + }); + } else { + // 绘制底边按钮 + popupViewContentList.push({ + tag: 'rect', + id: 'cancelBox', + rectStyles: { + radius: "3px", + borderColor: "#f1f1f1", + borderWidth: "1px", + }, + position: { + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + }); + popupViewContentList.push({ + tag: 'rect', + id: 'confirmBox', + rectStyles: { + radius: "3px", + color: $mainColor, + }, + position: { + bottom: viewContentPadding + 'px', + left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + }); + popupViewContentList.push({ + tag: 'font', + id: 'cancelText', + text: "暂不升级", + textStyles: { + size: '14px', + color: "#666", + lineSpacing: "0%", + whiteSpace: "normal" + }, + position: { + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + }); + popupViewContentList.push({ + tag: 'font', + id: 'confirmText', + text: "立即升级", + textStyles: { + size: '14px', + color: "#FFF", + lineSpacing: "0%", + whiteSpace: "normal" + }, + position: { + bottom: viewContentPadding + 'px', + left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + }); + } + // 弹窗内容 + let popupView = new plus.nativeObj.View("popupView", { //创建底部图标菜单 + tag: "rect", + top: (screenHeight - popupViewHeight) / 2 + "px", + left: '15%', + height: popupViewHeight + "px", + width: "70%" + }); + // 绘制白色背景 + popupView.drawRect({ + color: "#FFFFFF", + radius: "8px" + }, { + top: "40px", + height: popupViewHeight - 40 + "px", + }); + + popupView.draw(popupViewContentList); + popupView.addEventListener("click", function(e) { + let maxTop = popupViewHeight - viewContentPadding; + let maxLeft = popupViewWidth - viewContentPadding; + let buttonWidth = (viewContentWidth - viewContentPadding) / 2; + if (e.clientY > maxTop - 30 && e.clientY < maxTop) { + if(data.updateType == "forcibly"){ + if(e.clientX > viewContentPadding && e.clientX < maxLeft){ + // 立即升级 + maskLayer.hide(); + popupView.hide(); + callback && callback(); + } + } else { + // 暂不升级 + if (e.clientX > viewContentPadding && e.clientX < maxLeft - buttonWidth - viewContentPadding) { + maskLayer.hide(); + popupView.hide(); + } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) { + // 立即升级 + maskLayer.hide(); + popupView.hide(); + callback && callback(); + } + } + + } + }); + if(data.updateType == "solicit"){ + // 点击遮罩层 + maskLayer.addEventListener("click", function() { //处理遮罩层点击 + maskLayer.hide(); + popupView.hide(); + }); + } + // 显示弹窗 + maskLayer.show(); + popupView.show(); +} +// 文件下载的弹窗绘图 +const downloadPopupDrawing =(data) => { + // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心 + const screenWidth = plus.screen.resolutionWidth; + const screenHeight = plus.screen.resolutionHeight; + //弹窗容器宽度 + const popupViewWidth = screenWidth * 0.7; + // 弹窗容器的Padding + const viewContentPadding = 20; + // 弹窗容器的宽度 + const viewContentWidth = popupViewWidth - (viewContentPadding * 2); + // 弹窗容器高度 + let popupViewHeight = viewContentPadding * 3 + 60; + let progressTip = data.progressTip || "准备下载..."; + let contentText = data.contentText || "正在为您更新,请耐心等待"; + let elementList = [ + { + tag: 'rect', //背景色 + color: '#FFFFFF', + rectStyles:{ + radius: "8px" + } + }, + { + tag: 'font', + id: 'title', + text: "升级APP", + textStyles: { + size: '16px', + color: "#333", + weight: "bold", + verticalAlign: "middle", + whiteSpace: "normal" + }, + position: { + top: viewContentPadding + 'px', + height: "30px", + } + }, + { + tag: 'font', + id: 'content', + text: contentText, + textStyles: { + size: '14px', + color: "#333", + verticalAlign: "middle", + whiteSpace: "normal" + }, + position: { + top: viewContentPadding * 2 + 30 + 'px', + height: "20px", + } + } + ]; + // 是否有进度条 + if(data.progress){ + popupViewHeight += viewContentPadding + 40; + elementList = elementList.concat([ + { + tag: 'font', + id: 'progressValue', + text: progressTip, + textStyles: { + size: '14px', + color: $mainColor, + whiteSpace: "normal" + }, + position: { + top: viewContentPadding * 4 + 20 + 'px', + height: "30px" + } + }, + { + tag: 'rect', //绘制进度条背景 + id: 'progressBg', + rectStyles:{ + radius: "4px", + borderColor: "#f1f1f1", + borderWidth: "1px", + }, + position:{ + top: viewContentPadding * 4 + 60 + 'px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "8px" + } + }, + ]); + } + if (data.buttonNum == 2) { + popupViewHeight += viewContentPadding + 30; + elementList = elementList.concat([ + { + tag: 'rect', //绘制底边按钮 + rectStyles:{ + radius: "3px", + borderColor: "#f1f1f1", + borderWidth: "1px", + }, + position:{ + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px" + } + }, + { + tag: 'rect', //绘制底边按钮 + rectStyles:{ + radius: "3px", + color: $mainColor + }, + position:{ + bottom: viewContentPadding + 'px', + left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px" + } + }, + { + tag: 'font', + id: 'cancelText', + text: "取消下载", + textStyles: { + size: '14px', + color: "#666", + lineSpacing: "0%", + whiteSpace: "normal" + }, + position: { + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + }, + { + tag: 'font', + id: 'confirmText', + text: "后台下载", + textStyles: { + size: '14px', + color: "#FFF", + lineSpacing: "0%", + whiteSpace: "normal" + }, + position: { + bottom: viewContentPadding + 'px', + left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px", + width: (viewContentWidth - viewContentPadding) / 2 + "px", + height: "30px", + } + } + ]); + } + if (data.buttonNum == 1) { + popupViewHeight += viewContentPadding + 40; + elementList = elementList.concat([ + { + tag: 'rect', //绘制底边按钮 + rectStyles:{ + radius: "6px", + color: $mainColor + }, + position:{ + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "40px" + } + }, + { + tag: 'font', + id: 'confirmText', + text: "关闭", + textStyles: { + size: '14px', + color: "#FFF", + lineSpacing: "0%", + }, + position: { + bottom: viewContentPadding + 'px', + left: viewContentPadding + "px", + width: viewContentWidth + "px", + height: "40px" + } + } + ]); + } + return { + popupViewHeight:popupViewHeight, + popupViewWidth:popupViewWidth, + screenHeight:screenHeight, + viewContentWidth:viewContentWidth, + viewContentPadding:viewContentPadding, + elementList: elementList + }; +} +// 文件下载的弹窗 +const downloadPopup=(data)=>{ + // 弹窗遮罩层 + let maskLayer = new plus.nativeObj.View("maskLayer", { //先创建遮罩层 + top: '0px', + left: '0px', + height: '100%', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.5)' + }); + let popupViewData = downloadPopupDrawing(data); + // 弹窗内容 + let popupView = new plus.nativeObj.View("popupView", { //创建底部图标菜单 + tag: "rect", + top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + "px", + left: '15%', + height: popupViewData.popupViewHeight + "px", + width: "70%", + }); + let progressValue = 0; + let progressTip = 0; + let contentText = 0; + let buttonNum = 2; + if(data.buttonNum >= 0){ + buttonNum = data.buttonNum; + } + popupView.draw(popupViewData.elementList); + let callbackData = { + change: function(res) { + let progressElement = []; + if(res.progressValue){ + progressValue = res.progressValue; + // 绘制进度条 + progressElement.push({ + tag: 'rect', //绘制进度条背景 + id: 'progressValueBg', + rectStyles:{ + radius: "4px", + color: $mainColor + }, + position:{ + top: popupViewData.viewContentPadding * 4 + 60 + 'px', + left: popupViewData.viewContentPadding + "px", + width: popupViewData.viewContentWidth * (res.progressValue / 100) + "px", + height: "8px" + } + }); + } + if(res.progressTip){ + progressTip = res.progressTip; + progressElement.push({ + tag: 'font', + id: 'progressValue', + text: res.progressTip, + textStyles: { + size: '14px', + color: $mainColor, + whiteSpace: "normal" + }, + position: { + top: popupViewData.viewContentPadding * 4 + 20 + 'px', + height: "30px" + } + }); + } + if(res.contentText){ + contentText = res.contentText; + progressElement.push({ + tag: 'font', + id: 'content', + text: res.contentText, + textStyles: { + size: '16px', + color: "#333", + whiteSpace: "normal" + }, + position: { + top: popupViewData.viewContentPadding * 2 + 30 + 'px', + height: "30px", + } + }); + } + if(res.buttonNum >= 0 && buttonNum != res.buttonNum){ + buttonNum = res.buttonNum; + popupView.reset(); + popupViewData = downloadPopupDrawing(Object.assign({ + progressValue:progressValue, + progressTip:progressTip, + contentText:contentText, + },res)); + let newElement = []; + popupViewData.elementList.map((item,index) => { + let have = false; + progressElement.forEach((childItem,childIndex) => { + if(item.id == childItem.id){ + have = true; + } + }); + if(!have){ + newElement.push(item); + } + }); + progressElement = newElement.concat(progressElement); + popupView.setStyle({ + tag: "rect", + top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + "px", + left: '15%', + height: popupViewData.popupViewHeight + "px", + width: "70%", + }); + popupView.draw(progressElement); + }else{ + popupView.draw(progressElement); + } + }, + cancel: function() { + maskLayer.hide(); + popupView.hide(); + } + } + popupView.addEventListener("click", function(e) { + let maxTop = popupViewData.popupViewHeight - popupViewData.viewContentPadding; + let maxLeft = popupViewData.popupViewWidth - popupViewData.viewContentPadding; + if (e.clientY > maxTop - 40 && e.clientY < maxTop) { + if(buttonNum == 1){ + // 单按钮 + if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft) { + maskLayer.hide(); + popupView.hide(); + callbackData.reboot(); + } + }else if(buttonNum == 2){ + // 双按钮 + let buttonWidth = (popupViewData.viewContentWidth - popupViewData.viewContentPadding) / 2; + if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft - buttonWidth - popupViewData.viewContentPadding) { + maskLayer.hide(); + popupView.hide(); + callbackData.cancelDownload(); + } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) { + maskLayer.hide(); + popupView.hide(); + } + } + } + }); + // 显示弹窗 + maskLayer.show(); + popupView.show(); + // 改变进度条 + return callbackData; +} + +export default (isPrompt = false)=>{ + + getCurrentNo(versionInfo => { + let httpData = { + release: versionInfo.versionCode, + // 版本名称 + version: versionInfo.versionName, + // setupPage参数说明(判断用户是不是从设置页面点击的更新,如果是设置页面点击的更新,有不要用静默更新了,不然用户点击没反应很奇怪的) + setupPage: isPrompt + }; + if (platform == "android") { + httpData.type = 1101; + } else { + httpData.type = 1102; + } + /* 接口入参说明 + * version: 应用当前版本号(已自动获取) + * versionName: 应用当前版本名称(已自动获取) + * type:平台(1101是安卓,1102是IOS) + */ + /****************以下是示例*******************/ + // 可以用自己项目的请求方法(接口自己找后台要,插件不提供) + postJsonRequest($checkUpdateUrl,httpData).then((e)=>{ + let res=e.data; + if (res && res.downloadUrl) { + if (res.updateType == "forcibly" || res.updateType == "silent") { + if (/\.wgt$/i.test(res.downloadUrl)) { + getDownload(res); + } else if(/\.html$/i.test(res.downloadUrl)){ + plus.runtime.openURL(res.downloadUrl); + } else { + if (platform == "android") { + getDownload(res); + } else { + plus.runtime.openURL(res.downloadUrl); + } + } + } else if(res.updateType == "solicit"){ + updatePopup(res, function() { + if (/\.wgt$/i.test(res.downloadUrl)) { + getDownload(res); + } else if(/\.html$/i.test(res.downloadUrl)){ + plus.runtime.openURL(res.downloadUrl); + } else { + if (platform == "android") { + getDownload(res); + } else { + plus.runtime.openURL(res.downloadUrl); + } + } + }); + } + } else if (isPrompt) { + uni.showToast({ + title: "暂无新版本", + icon: "none" + }); + } + }) + }); +} + diff --git a/common/config.js b/common/config.js new file mode 100644 index 0000000..7d3ec24 --- /dev/null +++ b/common/config.js @@ -0,0 +1,65 @@ +import CryptoJS from "crypto-js"; + +// 如果为开启ssl证书,请修改为http协议 +// let scheme ="https"; //协议头 +let scheme ="http"; //协议头 +// 请将下面的域名替换成自己的服务器域名,如果有端口要把端口加上 +let host = '192.168.66.16:8007'; + +// 为了避免h5页面被其他人盗用,可以自由选择加密方式,详细教程查看readme.md文件 +let hostToken="sha5602584d3bc770dd47e9680a99d0efe6bi"; + +// 是否开启H5的调试模式 +let isVConsole = false + +// 以下内容请勿修改 +// 以下内容请勿修改 +// 以下内容请勿修改 +// 以下内容请勿修改 + +// #ifdef MP-WEIXIN +let env = wx.getAccountInfoSync() + +if (env.miniProgram.envVersion == 'develop') { + isVConsole = true +} +// #endif +// #ifdef APP-PLUS || H5 +if (process.env.NODE_ENV === 'development') { + isVConsole = true +} +// #endif + +let apiUrl = scheme + '://' + host; +let wssUrl = (scheme == 'https' ? 'wss' :'ws') + '://' + host + '/wss'; + +let hostMd5=CryptoJS.MD5(CryptoJS.MD5(host).toString()).toString(); +if('sha'+hostMd5+'bi'!=hostToken){ + apiUrl = 'false'; + wssUrl = 'false'; +} + +// app更新的配置 +const updateConfig = { + url:apiUrl+'/common/pub/checkVersion', //检查版本的接口 + bgColor:'', //升级主色,按钮背景颜色 + iconUrl:'' //升级小图标 +} + +/* 检查版本需要返回的数据说明 + * | 参数名称 | 一定返回 | 类型 | 描述 + * | -------------|--------- | --------- | ------------- | + * | versionCode | y | int | 版本号 :20240331 | + * | versionName | y | String | 版本名称 :4.0.1 | + * | versionInfo | y | String | 版本信息 : 修复了bug | + * | updateType | y | String | forcibly = 强制更新, solicit = 弹窗确认更新, silent = 静默更新 | + * | downloadUrl | y | String | 版本下载链接(IOS安装包更新请放跳转store应用商店链接,安卓apk和wgt文件放文件下载链接) | + */ + + +export default { + apiUrl, + wssUrl, + isVConsole, + updateConfig +} \ No newline at end of file diff --git a/common/scan.js b/common/scan.js new file mode 100644 index 0000000..d900e71 --- /dev/null +++ b/common/scan.js @@ -0,0 +1,72 @@ +import { + apiUrl, + postJsonRequest, +} from '@/utils/request.js'; + +const verifyQr=(url)=>{ + let pathinfo=url.replace(apiUrl,''); + let pathParts = pathinfo.split('/'); // 使用斜杠字符分割字符串 + let lastPart = pathParts[pathParts.length - 1]; // 获取最后一组数据 + postJsonRequest(pathinfo,{realToken:lastPart}).then((res)=>{ + if(res.code==0){ + switch(res.data.action){ + case 'groupInfo': + uni.navigateTo({ + url: '/pages/message/group/info?group_id='+ res.data.id + }) + break; + case 'userInfo': + uni.navigateTo({ + url:"/pages/contacts/detail?id="+res.data.id + }) + break; + } + } + }) +} + +const scanQr=()=>{ + // #ifndef H5 + uni.scanCode({ + success: function (res) { + checkQr(res.result); + } + }); + // #endif + // #ifdef H5 + uni.navigateTo({ + url:'/pages/index/scan' + }) + // #endif +} + +const checkQr=(data)=>{ + // 如果识别出二维码是跟服务器的地址一样,就请求该接口 + if(data.includes(apiUrl)){ + verifyQr(data); + }else{ + uni.showModal({ + title: '已识别内容', + content: data, + confirmText:'复制内容', + success: function (e) { + if (e.confirm) { + uni.setClipboardData({ + data: data, + success: function () { + uni.showToast({ + title:'复制成功', + icon:'none' + }) + } + }); + } + } + }); + } +} + +export default { + scanQr, + checkQr +} \ No newline at end of file diff --git a/common/socket.js b/common/socket.js new file mode 100644 index 0000000..55d7d8a --- /dev/null +++ b/common/socket.js @@ -0,0 +1,193 @@ +import api from '@/common/config.js' // 接口Api,图片地址等等配置,可根据自身情况引入,也可以直接在下面url填入你的 webSocket连接地址 +class socketIO { + constructor(data, time, url) { + this.socketTask = null + this.is_open_socket = false //避免重复连接 + this.url = url ? url : api.wssUrl //连接地址 + this.data = data ? data : null + this.connectNum = 1 // 重连次数 + this.traderDetailIndex = 100 // traderDetailIndex ==2 重连 + this.accountStateIndex = 100 // accountStateIndex ==1 重连 + this.followFlake = false // followFlake == true 重连 + this.init=false; + //心跳检测 + this.timeout = time ? time : 25000 //多少秒执行检测 + this.heartbeatInterval = null //检测服务器端是否还活着 + this.reconnectTimeOut = null //重连之后多久再次重连 + this.networkStatus=true + } + + CALLBACK = (res) => { + if(res.isConnected){ + this.traderDetailIndex=2; + this.connectSocketInit({type:'ping'}) + } + } + + // 进入这个页面的时候创建websocket连接【整个页面随时使用】 + connectSocketInit(data) { + this.data = data + this.socketTask = uni.connectSocket({ + url: this.url, + success: () => { + // console.info("正准备建立websocket中..."); + // 返回实例 + return this.socketTask + }, + }); + this.socketTask.onOpen((res) => { + uni.$emit('socketStatus',true); + if(!this.networkStatus){ + // 连接成功后取消网络监听 + uni.offNetworkStatusChange(this.CALLBACK); + } + this.networkStatus=true; + this.connectNum = 1 + // console.info("WebSocket连接正常!"); + this.send(data) + clearInterval(this.reconnectTimeOut) + clearInterval(this.heartbeatInterval) + this.is_open_socket = true; + this.start(); + // 注:只有连接正常打开中 ,才能正常收到消息 + this.socketTask.onMessage((e) => { + // 字符串转json + let res = JSON.parse(e.data); + if (res) { + uni.$emit('getPositonsOrder', res); + } + }); + }) + if(!this.init){ + // 监听连接失败,这里代码我注释掉的原因是因为如果服务器关闭后,和下面的onclose方法一起发起重连操作,这样会导致重复连接 + uni.onSocketError((res) => { + console.info(res,'WebSocket连接打开失败,请检查!'); + this.socketTask = null + this.is_open_socket = false; + clearInterval(this.heartbeatInterval) + clearInterval(this.reconnectTimeOut) + if (this.connectNum < 10) { + this.traderDetailIndex = 2 + this.reconnect(); + this.connectNum += 1 + } else { + uni.$emit('connectError'); + this.networkStatus=false + uni.onNetworkStatusChange(this.CALLBACK); + this.connectNum = 1 + } + }); + this.init=true; + } + // 这里仅是事件监听【如果socket关闭了会执行】 + this.socketTask.onClose(() => { + console.info("已经被关闭了-------") + clearInterval(this.heartbeatInterval) + clearInterval(this.reconnectTimeOut) + this.is_open_socket = false; + this.socketTask = null + if (this.connectNum < 5) { + this.reconnect(); + } else { + uni.$emit('connectError'); + this.networkStatus=false; + uni.onNetworkStatusChange(this.CALLBACK); + this.connectNum = 1 + } + + }) + } + // 主动关闭socket连接 + Close() { + if (!this.is_open_socket) { + return + } + this.socketTask.close({ + success() { + uni.showToast({ + title: 'SocketTask 关闭成功', + icon: "none" + }); + } + }); + } + //发送消息 + send(data) { + // 注:只有连接正常打开中 ,才能正常成功发送消息 + if (this.socketTask) { + this.socketTask.send({ + data: JSON.stringify(data), + async success() { + }, + }); + } + } + + // 检测状态 + checkStatus(){ + // console.info("检查状态") + clearInterval(this.reconnectTimeOut) + if(!this.socketTask || [2,3].includes(this.socketTask.readyState)){ + // console.info("未链接!") + return false; + } + return true; + } + + //开启心跳检测 + start() { + this.heartbeatInterval = setInterval(() => { + this.send({ + "type": "ping" + }); + }, this.timeout) + } + //重新连接 + reconnect() { + //停止发送心跳 + console.info('检查是否手动断开,并重新连接') + clearInterval(this.heartbeatInterval) + //如果不是人为关闭的话,进行重连 + if (!this.is_open_socket && (this.traderDetailIndex == 2 || this.accountStateIndex == 0 || this + .followFlake)) { + console.info("5秒后重新连接...") + this.reconnectTimeOut = setInterval(() => { + this.connectSocketInit(this.data); + }, 15000) + } + } + /** + * @description 将 scoket 数据进行过滤 + * @param {array} array + * @param {string} type 区分 弹窗 openposition 分为跟随和我的 + */ + arrayFilter(array, type = 'normal', signalId = 0) { + let arr1 = [] + let arr2 = [] + let obj = { + arr1: [], + arr2: [] + } + arr1 = array.filter(v => v.flwsig == true) + arr2 = array.filter(v => v.flwsig == false) + if (type == 'normal') { + if (signalId) { + arr1 = array.filter(v => v.flwsig == true && v.sigtraderid == signalId) + return arr1 + } else { + return arr1.concat(arr2) + } + } else { + if (signalId > 0) { + arr1 = array.filter(v => v.flwsig == true && v.sigtraderid == signalId) + obj.arr1 = arr1 + } else { + obj.arr1 = arr1 + } + obj.arr2 = arr2 + + return obj + } + } +} +export default socketIO \ No newline at end of file diff --git a/components/.DS_Store b/components/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..58ec18d948ad037950e9ff2d11d0e809927c9502 GIT binary patch literal 6148 zcmeHKyG{c^3>-s>2%40XThdTa)2yOUQ1b&2UQI+I5dBs8uKXE{A3{V24H69+OZMz~ zJ-4|j&M^R+zulh$GXPV%BeovK=I8DsJE)8i>3qf+Hn_zLUhy!h{yyQ{BRsPH8BbsN zSF82ialPJo%=4+n!!XYu}%m + + + + + + + {{noDatatext}} + + + + + + + + diff --git a/components/Tags.vue b/components/Tags.vue new file mode 100644 index 0000000..0d71a68 --- /dev/null +++ b/components/Tags.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/components/breadcrum.vue b/components/breadcrum.vue new file mode 100644 index 0000000..e0f2e03 --- /dev/null +++ b/components/breadcrum.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/components/cu-custom.vue b/components/cu-custom.vue new file mode 100644 index 0000000..5f8a3fd --- /dev/null +++ b/components/cu-custom.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/components/get-qrcode.vue b/components/get-qrcode.vue new file mode 100644 index 0000000..5aa8397 --- /dev/null +++ b/components/get-qrcode.vue @@ -0,0 +1,433 @@ + + + + + diff --git a/components/im-touch.vue b/components/im-touch.vue new file mode 100644 index 0000000..6077d5a --- /dev/null +++ b/components/im-touch.vue @@ -0,0 +1,130 @@ + + + \ No newline at end of file diff --git a/components/im-user.vue b/components/im-user.vue new file mode 100644 index 0000000..6907c31 --- /dev/null +++ b/components/im-user.vue @@ -0,0 +1,76 @@ + + + \ No newline at end of file diff --git a/components/message/im-image.vue b/components/message/im-image.vue new file mode 100644 index 0000000..49b53bc --- /dev/null +++ b/components/message/im-image.vue @@ -0,0 +1,43 @@ + + \ No newline at end of file diff --git a/components/message/im-input.vue b/components/message/im-input.vue new file mode 100644 index 0000000..0f75387 --- /dev/null +++ b/components/message/im-input.vue @@ -0,0 +1,1122 @@ + + + + \ No newline at end of file diff --git a/components/message/im-item.vue b/components/message/im-item.vue new file mode 100644 index 0000000..8f1fefb --- /dev/null +++ b/components/message/im-item.vue @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/components/message/im-tab.vue b/components/message/im-tab.vue new file mode 100644 index 0000000..d8e6b69 --- /dev/null +++ b/components/message/im-tab.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/components/message/user-select.vue b/components/message/user-select.vue new file mode 100644 index 0000000..ebc6f25 --- /dev/null +++ b/components/message/user-select.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/components/mosowe-canvas-image/mosowe-canvas-image.vue b/components/mosowe-canvas-image/mosowe-canvas-image.vue new file mode 100644 index 0000000..5c46210 --- /dev/null +++ b/components/mosowe-canvas-image/mosowe-canvas-image.vue @@ -0,0 +1,461 @@ + + + + + + \ No newline at end of file diff --git a/components/mosowe-canvas-image/readme.md b/components/mosowe-canvas-image/readme.md new file mode 100644 index 0000000..b2de74e --- /dev/null +++ b/components/mosowe-canvas-image/readme.md @@ -0,0 +1,195 @@ +## mosowe-canvas-image:一个可以制作多用途图片的插件(海报,二维码,分享图) + +### v1.2.0: +1. 添加透明度`globalAlpha`,值0-1; +2. 修改只能画一个圆形图片问题,画圆形图片时耗时较多,因为额外增加了一个canvas处理圆形图片,请注意`arcX`与`arcY`的说明; + +### v1.1.0: + +1. 添加本地图片渲染,已支持本地相册/相机 + https的网络图片,建议画布宽高:750*1330 +2. 添加导出图片的类型:`imgType`,可选值,jpg、png +3. 添加本地图片压缩功能:`compress`是否开启压缩,`compressSize`:压缩程度,默认2M,lists列表图片项需增加传参`file`, +4. 解决H5网络图片“canvasToTempFilePath:fail SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported”错误问题,图片服务器需支持“Access-Control-Allow-Origin: *” +5. 使用非solt插槽触发事件时,请确认`$ref`是否正确 +6. 示例增加参数编辑,使用前体验插件 + +#### 平台支持: + +| APP | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节跳动小程序 | QQ小程序 | +| :--: | :--: | :--------: | :----------: | :--------: | :------------: | :------: | +| √ | √ | √ | × | 未测 | 未测 | 未测 | + +#### 插件功能 + +1. 支持多图片绘制,多文本绘制,圆形图片绘制; +2. 支持矩形(线条)绘制; +3. 支持圆形绘制; +4. 支持二维码生成,项目用不上可以去插件内去除,毕竟这个插件携带的比较大,单纯用来生成二维码图片也是阔以的; +5. 支持绘图后预览。 + +多用于海报图,分享图; + +注意H5跨域问题及小程序白名单配置; + +图片是网络图片:https://....(require及import引入不了3Kb以上的绝对路径图片,若有大神知道处理方法,望不吝赐教,谢谢!) + +#### 属性 + +| 名称 | 类型 | 默认值 | 说明 | 版本 | +| ------------ | ---------------- | ------------ | -------------------------------------------------------- | ----- | +| width | Number \String | 200 | canvas画布宽度,也是导出图片宽度,单位px,值中不要带单位 | 1.0.0 | +| height | Number \String | 200 | canvas画布高度,也是导出图片高度,单位px,值中不要带单位 | 1.0.0 | +| showPreview | Boolean | false | 绘制完成后是否打开预览 | 1.0.0 | +| lists | Array | [] | 绘制的元素列表:图片,文字,矩形(线条),圆形,二维码 | 1.0.0 | +| imgType | String | jpg | 生成图片格式,可选:png | 1.1.0 | +| compress | Boolean | false | 是否开启图片压缩 | 1.1.0 | +| compressSize | Number\String | 2097152 (2M) | 超过多少M压缩 | 1.1.0 | + + + + +#### lists\属性 + +注意:图文先后顺序,底层的图片靠前,最上层的在最后,圆形图片放在最后,因为一旦绘制圆形,后续的元素都只在该圆形内显示,而超过圆形范围的将看不见。 + +| 名称 | 类型 | 必填 | 说明 |版本| +| :------- | :----- | :--- | :----------------------------------------------------------- |:----| +| type | String | 是 | 元素类型:`image`图片,`text`文本,`rect`矩形(线条),`arc`圆形,`qr`二维码 |1.0.0| +| content | String | 否 | image:图片路径(必填),text:文字(必填),qr:转二维码的数据(必填),rect及arc:非必填 |1.0.0| +| x | Number | 是 | X轴坐标,绘制圆形图片时:x = arcX - arcR |1.0.0| +| y | Number | 是 | Y轴坐标,绘制圆形图片时:y = arcY - arcR |1.0.0| +| width | Number | 否 | 图片、矩形(线条)、二维码宽度 |1.0.0| +| height | Number | 否 | 图片、矩形(线条)、二维码高度 |1.0.0| +| arc | Boolen | 否 | type=image时:是否绘制圆形图片 |1.0.0| +| arcX | Number | 否 | type=arc时:绘制圆形时中心点X轴坐标,type=image时,图片在圆形canvas的X坐标,多为负数,版本`1.2.0` |1.2.0| +| arcY | Number | 否 | type=arc时:绘制圆形时中心点Y轴坐标,type=image时,图片在圆形canvas的Y坐标,多为负数,版本`1.2.0` |1.2.0| +| arcR | Number | 否 | type=image、arc时:绘制圆形的半径 |1.0.0| +| color | String | 否 | 绘制文本、矩形(线条)的颜色,默认:#000000 |1.0.0| +| size | Number | 否 | 绘制文本的字号大小,默认:20 |1.0.0| +| align | String | 否 | 绘制文本的对齐方式,默认:left |1.0.0| +| maxWidth | Number | 否 | 绘制文本的最大宽度,文字长度超过该值会被压缩 |1.0.0| +| file | file | 否 | 选择本地图片的file文件,版本`1.1.0` |1.1.0| +| globalAlpha | Number | 否 | 透明度:0~1,默认1,版本`1.2.0` |1.2.0| + +#### slots + +| 名称 | 说明 | +| :------ | :--------------------------------- | +| default | 自定义插槽,点击此区会触发绘图事件 | + +#### 事件 + +| 名称 | 回调参数 | 说明 | +| ----------- | -------- | ------------------------------------ | +| canvasImage | url | 绘制成功后返回的本地地址,H5为base64 | + + + +#### 使用方式 + +若`page.json`中配置了`"easycom": true`,则无需`script`引入就可以使用,没有则需要引入。 + +1. 无slot:组件标签添加`ref`属性,采用父级调用子组件`createCanvas()`方法使用,见后文示例; +2. 有slot:slot区点击就会执行 + +#### 示例 + +```javascript +// js +data () { + return { + canvasUrl: '', + lists: [ + { + type: 'image', + content: 'https://www.zhonglixunqing.cn/images/uniapp/1.jpg', + width: 200, + height: 100, + x: 50, + y: 20, + }, + { + type: 'image', + content: 'https://www.zhonglixunqing.cn/images/uniapp/2.jpg', + width: 80, + height: 80, + x: 20, + y: 200, + arc: false, + arcX: 0, + arcY: 0, + arcR: 0 + }, + { + type: 'text', + content: '扫一扫,获取更多信息', + x: 120, + y: 250, + color: '#ff0000', + size: 10, + // maxWidth: 100, + // align: 'left', + }, + { + type: 'rect', + width: 1, + height: 100, + x: 0, + y: 10, + color: '#ff0000', + }, + { + type: 'image', + content: 'https://www.zhonglixunqing.cn/images/uniapp/3.jpg', + width: 100, + height: 100, + x: 200, + y: 200, + arc: true, + arcX: 250, + arcY: 250, + arcR: 50 + }, + ] + }; + }, + methods: { + beginCanvas () { + this.$refs.mosoweCanvasComponents.createCanvas(); + }, + _canvasImage (e) { + this.canvasUrl = e; + } + } +``` + +插件外独立按钮触发: + +```html + + + +``` + +slot插槽触发: + +```html + + + slot按钮的 + + +``` + +#### 预览地址 + diff --git a/components/mosowe-canvas-image/wxqrcode.js b/components/mosowe-canvas-image/wxqrcode.js new file mode 100644 index 0000000..739750c --- /dev/null +++ b/components/mosowe-canvas-image/wxqrcode.js @@ -0,0 +1,1623 @@ +//--------------------------------------------------------------------- +// +// QR Code Generator for JavaScript +// +// Copyright (c) 2009 Kazuhiko Arase +// +// URL: [url=http://www.d-project.com/]http://www.d-project.com/[/url] +// +// Licensed under the MIT license: +// [url=http://www.opensource.org/licenses/mit-license.php]http://www.opensource.org/licenses/mit-license.php[/url] +// +// The word 'QR Code' is registered trademark of +// DENSO WAVE INCORPORATED +// [url=http://www.denso-wave.com/qrcode/faqpatent-e.html]http://www.denso-wave.com/qrcode/faqpatent-e.html[/url] +// +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// qrcode +//代码第1588行为补充代码 +//修改人:chenxing +//2017-02-27 16:21:32 +//--------------------------------------------------------------------- + +/** + * qrcode + * @param typeNumber 1 to 40 + * @param errorCorrectLevel 'L','M','Q','H' + */ +var qrcode = function(typeNumber, errorCorrectLevel) { + + var PAD0 = 0xEC; + var PAD1 = 0x11; + + var _typeNumber = typeNumber; + var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel]; + var _modules = null; + var _moduleCount = 0; + var _dataCache = null; + var _dataList = new Array(); + + var _this = {}; + + var makeImpl = function(test, maskPattern) { + + _moduleCount = _typeNumber * 4 + 17; + _modules = function(moduleCount) { + var modules = new Array(moduleCount); + for (var row = 0; row < moduleCount; row += 1) { + modules[row] = new Array(moduleCount); + for (var col = 0; col < moduleCount; col += 1) { + modules[row][col] = null; + } + } + return modules; + }(_moduleCount); + + setupPositionProbePattern(0, 0); + setupPositionProbePattern(_moduleCount - 7, 0); + setupPositionProbePattern(0, _moduleCount - 7); + setupPositionAdjustPattern(); + setupTimingPattern(); + setupTypeInfo(test, maskPattern); + + if (_typeNumber >= 7) { + setupTypeNumber(test); + } + + if (_dataCache == null) { + _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList); + } + + mapData(_dataCache, maskPattern); + }; + + var setupPositionProbePattern = function(row, col) { + + for (var r = -1; r <= 7; r += 1) { + + if (row + r <= -1 || _moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c += 1) { + + if (col + c <= -1 || _moduleCount <= col + c) continue; + + if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) + || (0 <= c && c <= 6 && (r == 0 || r == 6) ) + || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; + } + } + } + }; + + var getBestMaskPattern = function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i += 1) { + + makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(_this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }; + + var setupTimingPattern = function() { + + for (var r = 8; r < _moduleCount - 8; r += 1) { + if (_modules[r][6] != null) { + continue; + } + _modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < _moduleCount - 8; c += 1) { + if (_modules[6][c] != null) { + continue; + } + _modules[6][c] = (c % 2 == 0); + } + }; + + var setupPositionAdjustPattern = function() { + + var pos = QRUtil.getPatternPosition(_typeNumber); + + for (var i = 0; i < pos.length; i += 1) { + + for (var j = 0; j < pos.length; j += 1) { + + var row = pos[i]; + var col = pos[j]; + + if (_modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r += 1) { + + for (var c = -2; c <= 2; c += 1) { + + if (r == -2 || r == 2 || c == -2 || c == 2 + || (r == 0 && c == 0) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; + } + } + } + } + } + }; + + var setupTypeNumber = function(test) { + + var bits = QRUtil.getBCHTypeNumber(_typeNumber); + + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }; + + var setupTypeInfo = function(test, maskPattern) { + + var data = (_errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i += 1) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 6) { + _modules[i][8] = mod; + } else if (i < 8) { + _modules[i + 1][8] = mod; + } else { + _modules[_moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i += 1) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 8) { + _modules[8][_moduleCount - i - 1] = mod; + } else if (i < 9) { + _modules[8][15 - i - 1 + 1] = mod; + } else { + _modules[8][15 - i - 1] = mod; + } + } + + // fixed module + _modules[_moduleCount - 8][8] = (!test); + }; + + var mapData = function(data, maskPattern) { + + var inc = -1; + var row = _moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + var maskFunc = QRUtil.getMaskFunction(maskPattern); + + for (var col = _moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col -= 1; + + while (true) { + + for (var c = 0; c < 2; c += 1) { + + if (_modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = maskFunc(row, col - c); + + if (mask) { + dark = !dark; + } + + _modules[row][col - c] = dark; + bitIndex -= 1; + + if (bitIndex == -1) { + byteIndex += 1; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || _moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + }; + + var createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r += 1) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i += 1) { + dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i += 1) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0; + } + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < dcdata[r].length) { + data[index] = dcdata[r][i]; + index += 1; + } + } + } + + for (var i = 0; i < maxEcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < ecdata[r].length) { + data[index] = ecdata[r][i]; + index += 1; + } + } + } + + return data; + }; + + var createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = qrBitBuffer(); + + for (var i = 0; i < dataList.length; i += 1) { + var data = dataList[i]; + buffer.put(data.getMode(), 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error('code length overflow. (' + + buffer.getLengthInBits() + + '>' + + totalDataCount * 8 + + ')'); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(PAD1, 8); + } + + return createBytes(buffer, rsBlocks); + }; + + _this.addData = function(data) { + var newData = qr8BitByte(data); + _dataList.push(newData); + _dataCache = null; + }; + + _this.isDark = function(row, col) { + if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) { + throw new Error(row + ',' + col); + } + return _modules[row][col]; + }; + + _this.getModuleCount = function() { + return _moduleCount; + }; + + _this.make = function() { + makeImpl(false, getBestMaskPattern() ); + }; + + _this.createTableTag = function(cellSize, margin) { + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + var qrHtml = ''; + + qrHtml += ''; + qrHtml += ''; + + for (var r = 0; r < _this.getModuleCount(); r += 1) { + + qrHtml += ''; + + for (var c = 0; c < _this.getModuleCount(); c += 1) { + qrHtml += ''; + } + + qrHtml += ''; + qrHtml += '
'; + } + + qrHtml += '
'; + + return qrHtml; + }; + + _this.createImgTag = function(cellSize, margin, size) { + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + var min = margin; + var max = _this.getModuleCount() * cellSize + margin; + + return createImgTag(size, size, function(x, y) { + if (min <= x && x < max && min <= y && y < max) { + var c = Math.floor( (x - min) / cellSize); + var r = Math.floor( (y - min) / cellSize); + return _this.isDark(r, c)? 0 : 1; + } else { + return 1; + } + } ); + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// qrcode.stringToBytes +//--------------------------------------------------------------------- + +qrcode.stringToBytes = function(s) { + var bytes = new Array(); + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + bytes.push(c & 0xff); + } + return bytes; +}; + +//--------------------------------------------------------------------- +// qrcode.createStringToBytes +//--------------------------------------------------------------------- + +/** + * @param unicodeData base64 string of byte array. + * [16bit Unicode],[16bit Bytes], ... + * @param numChars + */ +qrcode.createStringToBytes = function(unicodeData, numChars) { + + // create conversion map. + + var unicodeMap = function() { + + var bin = base64DecodeInputStream(unicodeData); + var read = function() { + var b = bin.read(); + if (b == -1) throw new Error(); + return b; + }; + + var count = 0; + var unicodeMap = {}; + while (true) { + var b0 = bin.read(); + if (b0 == -1) break; + var b1 = read(); + var b2 = read(); + var b3 = read(); + var k = String.fromCharCode( (b0 << 8) | b1); + var v = (b2 << 8) | b3; + unicodeMap[k] = v; + count += 1; + } + if (count != numChars) { + throw new Error(count + ' != ' + numChars); + } + + return unicodeMap; + }(); + + var unknownChar = '?'.charCodeAt(0); + + return function(s) { + var bytes = new Array(); + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + if (c < 128) { + bytes.push(c); + } else { + var b = unicodeMap[s.charAt(i)]; + if (typeof b == 'number') { + if ( (b & 0xff) == b) { + // 1byte + bytes.push(b); + } else { + // 2bytes + bytes.push(b >>> 8); + bytes.push(b & 0xff); + } + } else { + bytes.push(unknownChar); + } + } + } + return bytes; + }; +}; + +//--------------------------------------------------------------------- +// QRMode +//--------------------------------------------------------------------- + +var QRMode = { + MODE_NUMBER : 1 << 0, + MODE_ALPHA_NUM : 1 << 1, + MODE_8BIT_BYTE : 1 << 2, + MODE_KANJI : 1 << 3 +}; + +//--------------------------------------------------------------------- +// QRErrorCorrectLevel +//--------------------------------------------------------------------- + +var QRErrorCorrectLevel = { + L : 1, + M : 0, + Q : 3, + H : 2 +}; + +//--------------------------------------------------------------------- +// QRMaskPattern +//--------------------------------------------------------------------- + +var QRMaskPattern = { + PATTERN000 : 0, + PATTERN001 : 1, + PATTERN010 : 2, + PATTERN011 : 3, + PATTERN100 : 4, + PATTERN101 : 5, + PATTERN110 : 6, + PATTERN111 : 7 +}; + +//--------------------------------------------------------------------- +// QRUtil +//--------------------------------------------------------------------- + +var QRUtil = function() { + + var PATTERN_POSITION_TABLE = [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ]; + var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0); + var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0); + var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1); + + var _this = {}; + + var getBCHDigit = function(data) { + var digit = 0; + while (data != 0) { + digit += 1; + data >>>= 1; + } + return digit; + }; + + _this.getBCHTypeInfo = function(data) { + var d = data << 10; + while (getBCHDigit(d) - getBCHDigit(G15) >= 0) { + d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) ); + } + return ( (data << 10) | d) ^ G15_MASK; + }; + + _this.getBCHTypeNumber = function(data) { + var d = data << 12; + while (getBCHDigit(d) - getBCHDigit(G18) >= 0) { + d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) ); + } + return (data << 12) | d; + }; + + _this.getPatternPosition = function(typeNumber) { + return PATTERN_POSITION_TABLE[typeNumber - 1]; + }; + + _this.getMaskFunction = function(maskPattern) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000 : + return function(i, j) { return (i + j) % 2 == 0; }; + case QRMaskPattern.PATTERN001 : + return function(i, j) { return i % 2 == 0; }; + case QRMaskPattern.PATTERN010 : + return function(i, j) { return j % 3 == 0; }; + case QRMaskPattern.PATTERN011 : + return function(i, j) { return (i + j) % 3 == 0; }; + case QRMaskPattern.PATTERN100 : + return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; }; + case QRMaskPattern.PATTERN101 : + return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; }; + case QRMaskPattern.PATTERN110 : + return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; }; + case QRMaskPattern.PATTERN111 : + return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; }; + + default : + throw new Error('bad maskPattern:' + maskPattern); + } + }; + + _this.getErrorCorrectPolynomial = function(errorCorrectLength) { + var a = qrPolynomial([1], 0); + for (var i = 0; i < errorCorrectLength; i += 1) { + a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) ); + } + return a; + }; + + _this.getLengthInBits = function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch(mode) { + case QRMode.MODE_NUMBER : return 10; + case QRMode.MODE_ALPHA_NUM : return 9; + case QRMode.MODE_8BIT_BYTE : return 8; + case QRMode.MODE_KANJI : return 8; + default : + throw new Error('mode:' + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch(mode) { + case QRMode.MODE_NUMBER : return 12; + case QRMode.MODE_ALPHA_NUM : return 11; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 10; + default : + throw new Error('mode:' + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch(mode) { + case QRMode.MODE_NUMBER : return 14; + case QRMode.MODE_ALPHA_NUM : return 13; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 12; + default : + throw new Error('mode:' + mode); + } + + } else { + throw new Error('type:' + type); + } + }; + + _this.getLostPoint = function(qrcode) { + + var moduleCount = qrcode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount; col += 1) { + + var sameCount = 0; + var dark = qrcode.isDark(row, col); + + for (var r = -1; r <= 1; r += 1) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c += 1) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrcode.isDark(row + r, col + c) ) { + sameCount += 1; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + }; + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row += 1) { + for (var col = 0; col < moduleCount - 1; col += 1) { + var count = 0; + if (qrcode.isDark(row, col) ) count += 1; + if (qrcode.isDark(row + 1, col) ) count += 1; + if (qrcode.isDark(row, col + 1) ) count += 1; + if (qrcode.isDark(row + 1, col + 1) ) count += 1; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount - 6; col += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row, col + 1) + && qrcode.isDark(row, col + 2) + && qrcode.isDark(row, col + 3) + && qrcode.isDark(row, col + 4) + && !qrcode.isDark(row, col + 5) + && qrcode.isDark(row, col + 6) ) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount - 6; row += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row + 1, col) + && qrcode.isDark(row + 2, col) + && qrcode.isDark(row + 3, col) + && qrcode.isDark(row + 4, col) + && !qrcode.isDark(row + 5, col) + && qrcode.isDark(row + 6, col) ) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount; row += 1) { + if (qrcode.isDark(row, col) ) { + darkCount += 1; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// QRMath +//--------------------------------------------------------------------- + +var QRMath = function() { + + var EXP_TABLE = new Array(256); + var LOG_TABLE = new Array(256); + + // initialize tables + for (var i = 0; i < 8; i += 1) { + EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i += 1) { + EXP_TABLE[i] = EXP_TABLE[i - 4] + ^ EXP_TABLE[i - 5] + ^ EXP_TABLE[i - 6] + ^ EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i += 1) { + LOG_TABLE[EXP_TABLE[i] ] = i; + } + + var _this = {}; + + _this.glog = function(n) { + + if (n < 1) { + throw new Error('glog(' + n + ')'); + } + + return LOG_TABLE[n]; + }; + + _this.gexp = function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return EXP_TABLE[n]; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// qrPolynomial +//--------------------------------------------------------------------- + +function qrPolynomial(num, shift) { + + if (typeof num.length == 'undefined') { + throw new Error(num.length + '/' + shift); + } + + var _num = function() { + var offset = 0; + while (offset < num.length && num[offset] == 0) { + offset += 1; + } + var _num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i += 1) { + _num[i] = num[i + offset]; + } + return _num; + }(); + + var _this = {}; + + _this.getAt = function(index) { + return _num[index]; + }; + + _this.getLength = function() { + return _num.length; + }; + + _this.multiply = function(e) { + + var num = new Array(_this.getLength() + e.getLength() - 1); + + for (var i = 0; i < _this.getLength(); i += 1) { + for (var j = 0; j < e.getLength(); j += 1) { + num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) ); + } + } + + return qrPolynomial(num, 0); + }; + + _this.mod = function(e) { + + if (_this.getLength() - e.getLength() < 0) { + return _this; + } + + var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) ); + + var num = new Array(_this.getLength() ); + for (var i = 0; i < _this.getLength(); i += 1) { + num[i] = _this.getAt(i); + } + + for (var i = 0; i < e.getLength(); i += 1) { + num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio); + } + + // recursive call + return qrPolynomial(num, 0).mod(e); + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// QRRSBlock +//--------------------------------------------------------------------- + +var QRRSBlock = function() { + + + // [1: [L, M, Q, H], ..] + var RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]]; + + var qrRSBlock = function(totalCount, dataCount) { + var _this = {}; + _this.totalCount = totalCount; + _this.dataCount = dataCount; + return _this; + }; + + var _this = {}; + + var getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch(errorCorrectLevel) { + case QRErrorCorrectLevel.L : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default : + return undefined; + } + }; + + _this.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel); + + if (typeof rsBlock == 'undefined') { + throw new Error('bad rs block [url=home.php?mod=space&uid=5302]@[/url] typeNumber:' + typeNumber + + '/errorCorrectLevel:' + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i += 1) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j += 1) { + list.push(qrRSBlock(totalCount, dataCount) ); + } + } + + return list; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// qrBitBuffer +//--------------------------------------------------------------------- + +var qrBitBuffer = function() { + + var _buffer = new Array(); + var _length = 0; + + var _this = {}; + + _this.getBuffer = function() { + return _buffer; + }; + + _this.getAt = function(index) { + var bufIndex = Math.floor(index / 8); + return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; + }; + + _this.put = function(num, length) { + for (var i = 0; i < length; i += 1) { + _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); + } + }; + + _this.getLengthInBits = function() { + return _length; + }; + + _this.putBit = function(bit) { + + var bufIndex = Math.floor(_length / 8); + if (_buffer.length <= bufIndex) { + _buffer.push(0); + } + + if (bit) { + _buffer[bufIndex] |= (0x80 >>> (_length % 8) ); + } + + _length += 1; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// qr8BitByte +//--------------------------------------------------------------------- + +var qr8BitByte = function(data) { + + var _mode = QRMode.MODE_8BIT_BYTE; + var _data = data; + var _parsedData = []; + + var _this = {}; + + + // Added to support UTF-8 Characters + for (var i = 0, l = _data.length; i < l; i++) { + var byteArray = []; + var code = _data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + // Fix Unicode corruption bug + _parsedData.push(byteArray); + } + + _parsedData = Array.prototype.concat.apply([], _parsedData); + + if (_parsedData.length != _data.length) { + _parsedData.unshift(191); + _parsedData.unshift(187); + _parsedData.unshift(239); + } + + var _bytes = _parsedData; + + _this.getMode = function() { + return _mode; + }; + + _this.getLength = function(buffer) { + return _bytes.length; + }; + + _this.write = function(buffer) { + for (var i = 0; i < _bytes.length; i += 1) { + buffer.put(_bytes[i], 8); + } + }; + + return _this; +}; + +//===================================================================== +// GIF Support etc. +// + +//--------------------------------------------------------------------- +// byteArrayOutputStream +//--------------------------------------------------------------------- + +var byteArrayOutputStream = function() { + + var _bytes = new Array(); + + var _this = {}; + + _this.writeByte = function(b) { + _bytes.push(b & 0xff); + }; + + _this.writeShort = function(i) { + _this.writeByte(i); + _this.writeByte(i >>> 8); + }; + + _this.writeBytes = function(b, off, len) { + off = off || 0; + len = len || b.length; + for (var i = 0; i < len; i += 1) { + _this.writeByte(b[i + off]); + } + }; + + _this.writeString = function(s) { + for (var i = 0; i < s.length; i += 1) { + _this.writeByte(s.charCodeAt(i) ); + } + }; + + _this.toByteArray = function() { + return _bytes; + }; + + _this.toString = function() { + var s = ''; + s += '['; + for (var i = 0; i < _bytes.length; i += 1) { + if (i > 0) { + s += ','; + } + s += _bytes[i]; + } + s += ']'; + return s; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// base64EncodeOutputStream +//--------------------------------------------------------------------- + +var base64EncodeOutputStream = function() { + + var _buffer = 0; + var _buflen = 0; + var _length = 0; + var _base64 = ''; + + var _this = {}; + + var writeEncoded = function(b) { + _base64 += String.fromCharCode(encode(b & 0x3f) ); + }; + + var encode = function(n) { + if (n < 0) { + // error. + } else if (n < 26) { + return 0x41 + n; + } else if (n < 52) { + return 0x61 + (n - 26); + } else if (n < 62) { + return 0x30 + (n - 52); + } else if (n == 62) { + return 0x2b; + } else if (n == 63) { + return 0x2f; + } + throw new Error('n:' + n); + }; + + _this.writeByte = function(n) { + + _buffer = (_buffer << 8) | (n & 0xff); + _buflen += 8; + _length += 1; + + while (_buflen >= 6) { + writeEncoded(_buffer >>> (_buflen - 6) ); + _buflen -= 6; + } + }; + + _this.flush = function() { + + if (_buflen > 0) { + writeEncoded(_buffer << (6 - _buflen) ); + _buffer = 0; + _buflen = 0; + } + + if (_length % 3 != 0) { + // padding + var padlen = 3 - _length % 3; + for (var i = 0; i < padlen; i += 1) { + _base64 += '='; + } + } + }; + + _this.toString = function() { + return _base64; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// base64DecodeInputStream +//--------------------------------------------------------------------- + +var base64DecodeInputStream = function(str) { + + var _str = str; + var _pos = 0; + var _buffer = 0; + var _buflen = 0; + + var _this = {}; + + _this.read = function() { + + while (_buflen < 8) { + + if (_pos >= _str.length) { + if (_buflen == 0) { + return -1; + } + throw new Error('unexpected end of file./' + _buflen); + } + + var c = _str.charAt(_pos); + _pos += 1; + + if (c == '=') { + _buflen = 0; + return -1; + } else if (c.match(/^\s$/) ) { + // ignore if whitespace. + continue; + } + + _buffer = (_buffer << 6) | decode(c.charCodeAt(0) ); + _buflen += 6; + } + + var n = (_buffer >>> (_buflen - 8) ) & 0xff; + _buflen -= 8; + return n; + }; + + var decode = function(c) { + if (0x41 <= c && c <= 0x5a) { + return c - 0x41; + } else if (0x61 <= c && c <= 0x7a) { + return c - 0x61 + 26; + } else if (0x30 <= c && c <= 0x39) { + return c - 0x30 + 52; + } else if (c == 0x2b) { + return 62; + } else if (c == 0x2f) { + return 63; + } else { + throw new Error('c:' + c); + } + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// gifImage (B/W) +//--------------------------------------------------------------------- + +var gifImage = function(width, height) { + + var _width = width; + var _height = height; + var _data = new Array(width * height); + + var _this = {}; + + _this.setPixel = function(x, y, pixel) { + _data[y * _width + x] = pixel; + }; + + _this.write = function(out) { + + //--------------------------------- + // GIF Signature + + out.writeString('GIF87a'); + + //--------------------------------- + // Screen Descriptor + + out.writeShort(_width); + out.writeShort(_height); + + out.writeByte(0x80); // 2bit + out.writeByte(0); + out.writeByte(0); + + //--------------------------------- + // Global Color Map + + // black + out.writeByte(0x00); + out.writeByte(0x00); + out.writeByte(0x00); + + // white + out.writeByte(0xff); + out.writeByte(0xff); + out.writeByte(0xff); + + //--------------------------------- + // Image Descriptor + + out.writeString(','); + out.writeShort(0); + out.writeShort(0); + out.writeShort(_width); + out.writeShort(_height); + out.writeByte(0); + + //--------------------------------- + // Local Color Map + + //--------------------------------- + // Raster Data + + var lzwMinCodeSize = 2; + var raster = getLZWRaster(lzwMinCodeSize); + + out.writeByte(lzwMinCodeSize); + + var offset = 0; + + while (raster.length - offset > 255) { + out.writeByte(255); + out.writeBytes(raster, offset, 255); + offset += 255; + } + + out.writeByte(raster.length - offset); + out.writeBytes(raster, offset, raster.length - offset); + out.writeByte(0x00); + + //--------------------------------- + // GIF Terminator + out.writeString(';'); + }; + + var bitOutputStream = function(out) { + + var _out = out; + var _bitLength = 0; + var _bitBuffer = 0; + + var _this = {}; + + _this.write = function(data, length) { + + if ( (data >>> length) != 0) { + throw new Error('length over'); + } + + while (_bitLength + length >= 8) { + _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) ); + length -= (8 - _bitLength); + data >>>= (8 - _bitLength); + _bitBuffer = 0; + _bitLength = 0; + } + + _bitBuffer = (data << _bitLength) | _bitBuffer; + _bitLength = _bitLength + length; + }; + + _this.flush = function() { + if (_bitLength > 0) { + _out.writeByte(_bitBuffer); + } + }; + + return _this; + }; + + var getLZWRaster = function(lzwMinCodeSize) { + + var clearCode = 1 << lzwMinCodeSize; + var endCode = (1 << lzwMinCodeSize) + 1; + var bitLength = lzwMinCodeSize + 1; + + // Setup LZWTable + var table = lzwTable(); + + for (var i = 0; i < clearCode; i += 1) { + table.add(String.fromCharCode(i) ); + } + table.add(String.fromCharCode(clearCode) ); + table.add(String.fromCharCode(endCode) ); + + var byteOut = byteArrayOutputStream(); + var bitOut = bitOutputStream(byteOut); + + // clear code + bitOut.write(clearCode, bitLength); + + var dataIndex = 0; + + var s = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; + + while (dataIndex < _data.length) { + + var c = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; + + if (table.contains(s + c) ) { + + s = s + c; + + } else { + + bitOut.write(table.indexOf(s), bitLength); + + if (table.size() < 0xfff) { + + if (table.size() == (1 << bitLength) ) { + bitLength += 1; + } + + table.add(s + c); + } + + s = c; + } + } + + bitOut.write(table.indexOf(s), bitLength); + + // end code + bitOut.write(endCode, bitLength); + + bitOut.flush(); + + return byteOut.toByteArray(); + }; + + var lzwTable = function() { + + var _map = {}; + var _size = 0; + + var _this = {}; + + _this.add = function(key) { + if (_this.contains(key) ) { + throw new Error('dup key:' + key); + } + _map[key] = _size; + _size += 1; + }; + + _this.size = function() { + return _size; + }; + + _this.indexOf = function(key) { + return _map[key]; + }; + + _this.contains = function(key) { + return typeof _map[key] != 'undefined'; + }; + + return _this; + }; + + return _this; +}; + +var createImgTag = function(width, height, getPixel, alt) { + + var gif = gifImage(width, height); + for (var y = 0; y < height; y += 1) { + for (var x = 0; x < width; x += 1) { + gif.setPixel(x, y, getPixel(x, y) ); + } + } + + var b = byteArrayOutputStream(); + gif.write(b); + + var base64 = base64EncodeOutputStream(); + var bytes = b.toByteArray(); + for (var i = 0; i < bytes.length; i += 1) { + base64.writeByte(bytes[i]); + } + base64.flush(); + + var img = ''; + img += 'data:image/gif;base64,'; + img += base64; + + return img; +}; + +//--------------------------------------------------------------------- +// returns qrcode function. + +var createQrCodeImg = function(text, options) { + options = options || {}; + var typeNumber = options.typeNumber || 4; + var errorCorrectLevel = options.errorCorrectLevel || 'M'; + var size = options.size || 500; + + var qr; + + try { + qr = qrcode(typeNumber, errorCorrectLevel || 'M'); + qr.addData(text); + qr.make(); + } catch (e) { + if(typeNumber >= 40) { + throw new Error('Text too long to encode'); + } else { + return gen(text, { + size: size, + errorCorrectLevel: errorCorrectLevel, + typeNumber: typeNumber + 1 + }); + } + } + + // calc cellsize and margin + var cellsize = parseInt(size / qr.getModuleCount()); + var margin = parseInt((size - qr.getModuleCount() * cellsize) / 2); + + return qr.createImgTag(cellsize, margin, size); +}; +// var module = {}; 需要注释这一行,否则微信小程序无法使用 +export default { + createQrCodeImg : createQrCodeImg +}; \ No newline at end of file diff --git a/components/sendtoImg.vue b/components/sendtoImg.vue new file mode 100644 index 0000000..a98d099 --- /dev/null +++ b/components/sendtoImg.vue @@ -0,0 +1,404 @@ + + + + + \ No newline at end of file diff --git a/components/status.vue b/components/status.vue new file mode 100644 index 0000000..7b730ce --- /dev/null +++ b/components/status.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/components/yq-avatar/yq-avatar.vue b/components/yq-avatar/yq-avatar.vue new file mode 100644 index 0000000..c3f6790 --- /dev/null +++ b/components/yq-avatar/yq-avatar.vue @@ -0,0 +1,1371 @@ + + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..11ad3eb104b02ccc461b14e44f263f497804a597 GIT binary patch literal 9662 zcmeI2No-9~7{_l@&$G+nqpa27R4@W1Ev1RYnEl*8gI+)7`Vl5%c3Sy>#0hrm4eS|aahDOf%@a6 zJ}Qk`N|jOFl;7OZ-!G<8N{nKSywp0%Vf%rK9v8ItVic?4R+~+Qf!)|rtU3>3mrs>b z=CiQ07ajIowp}6Q7qi%}hLGL(h}fHlg+Gt}Hy90%zoyQfmj>(~2OP>AoHRybhi4u` zJ5K&cpmYWBvIwXvADlF%bS0o;_%a9Du6!Nv=??JqDfMKK;uwuBUrTqiV_Eh-k zbBde8Q^U)Dd#m>`EdNQ>{__2&h4lR?-r8P1nkv6?RZR(SJj;9bg!~VkSY}N0#kJ{k za+KKXuLGx-_`@EL|NC>GwGQa`1ayA0)$y5q?|{aa{c*0GU$(~kobS$UZvSa~Mdpt{ zPaE*Flj@2R`+D1f9}Peg_r0+R*fYYrT<_*K|3~=e*uEmR2(#D|=ojbJ{sE}m2<#o> zKmW;jHjlUxahr3})d+lh27JB;RBhoLM*BAh*}rIk?d!?dzPrVV0mU$5TXVSNL*3){ zpJe%aJAmdIa=Y@7a?rag{^rl5_y$fQ2Qa(*NWN9JIyn5wH7#$Fu)8yd2>+_!@VBwniD&Cr{aOdkEDMJJs|Hd|iNzVK zPy6b(*O6)d@~eJOz4^CX6Fmp*e|I};xpZ%1cR>DRecav5T*KNqnlIsd#_h*jz^TRF z+rE!~A<$OOn)o%@U9~|%Zj*b+uNuy;YgfwuC+6DR@z&RP^N`;^IRF$)^2hdOo!K`Q zxVf3NWOZ`BZ({rYPT*jszwBlX`J;dfIlzk(z?b{1?-`TgbW43Y7qulo#d==r%?Jj& znS*@k0GUdb1Jyf#SH;YWm+aiA`s~3jdyUogY3*yq1+5jEa^e2*{nyb8CfdJs_1V8; zAO3s1|CZN%4#gh!`$xH)LzwU1>Hg{Ez{XYlIM=;+v4{QswYd);%I6345QK9M^h`uH zRY3*y`3?EG82g^zu%F_vx9rzkLiPMitI#tnt4eKpf4fcZ)3o{jO2q=(G?;d*QtPs> GvHNfHAICZX literal 0 HcmV?d00001 diff --git a/hybrid/html/image/guaduan.png b/hybrid/html/image/guaduan.png new file mode 100644 index 0000000000000000000000000000000000000000..09f5a86b059e4fec8d4d40c795a252dbe7756903 GIT binary patch literal 2087 zcmV+?2-x?DP)u)g5XTsbP=S?;wUS>jk#TDfPH5mNfNga*>(i#Xn3?nx{ z;PXxzm`xVkWH(ckl||LnC$iC+d2SmJ;q#ShjID-8yaI)a8KpU((eW}qQH5B|YiiEg zk#89g;q?yI6lD#Rm*H~TF~UJ!$~D_mOfs zA&h2tg27*8bx8xF`FzhIZa)JU#j?t}m0pMzbnXQ;9R6BHuM{8=pO3=heSqPTQPN|y zLd2l^O;0%dky#r|1JdgESAqC#vx4)AP6#hR*<{8hQ-B~$R-m|g*Nnh?rQt%XMEI=F zW?xo700vc>dwTGbnyn9JpX&f+X11KtB_LwSk_R=H>j-j2Z?jtSoUTb_YyuC3{>Wr! zMnJ@}Wp_oQ(IX%jndhC9G7kgF-#yXj1k@?b=@`=jBC4v~k>=*zcsN~3TY(S*ls!nY zGt&(a(*lCe>jH$y)&l9DH8X`+2vD}AGIs)mLPd*4PlIrvHBAM=CB$E9G&(XhbUFco zdSgBQxV%8RWy?%d+-r(Lp{n*mIshUTFCL(&>YpIE!@$&3>a2#+3ZZ6T%a-D@v73-K`l z@+|;)My5mL4X)X<4Nx3uH*R1!>CAYN!pSNy@Q`|rG0Z7^U`Cnkm{MBGTniVPCGSKh zu3lyO@#Bo0JjwLaH0{!{k$gs9B=WqzeXZ$%$HZ!D)5^~x@EFG!<{F6lnAPkmD>J?x z(hXh^tE*%52F*4CM}a5uAw$fv+@u32T4kjyUz0Q-?nR3%B~N|VE*9IrU)De)Ke<<} zlIA0Z*w(GGUeY8TGFCk#x^A82gy#+fEP076AT-F6PO4O2xcz>qHzrVVMuR~qp7zA9 zDN~Hlk!lE0P1du7_>Mwm2Nb;|qs;iq%$;kR#cH@D6j%wH*p3}i`KnFVPV$f%e0IxC z_pXgl1{5Q?*(|qZ!p0&P#zYafGxX02iiIyrrWZqBHp*Ywnq@HJf_)S+ui?h@{)tqB zQbD17Vbm8GggHIdpwBR;aT5JZQ=`}f0}diy=1$C(QKF?Gy-ve)o1u}-1Cn`#bi!*A zHIZIlZ~Fxpvu30~wpul7bRp3t=2hc>+(xT)nO+jcF&nUow<11;==V>=kAsEuMsr~6 zlUT4ibaNTP=WDJDW3Z z%hZ~hXf~eC$=!NQh=XdMK2vyARW!A8nK$kR0wob4eg#3|#N;gj48|q=l&K#1ASteR83u`9>1;~@z{B3|!egig5NO8fY!s-@Tr6E*{?DGx~q()|8s zk(53!nByYI85qIO!AbCM%z!~OQh*SHC@&usak=WiXzbd{*Jd08;e1wCXJe$lGMPGS z91zen@|3Ch2ne0__PE{iQmariwn}?QLMYDEDB87auLG2|xb8NitQ%-(&w8cWyZ47E zx^yf0ECZ4RCVuj&5?Q<)z!X_A!Zr`i=)xcpMkSK8fDbBqt#}NL!ZD6e=)oe=JCah`SIQ^H1JG0SSeEu)^cH^p{iD8Q}(y}?` zA*s@F_NFN2a!o~*I|t8Z;j()|i}J&limunWVzGVjh*l?oNXW_=AgRWphItC%G!vBxI3v=-jIo}S&|ZYFUJS1kuiOm0KZf_m z2woXpCH|h0qe{}von=q#xzZM(8ew!41~`gPmJJXRjOYV6Hz215#%={* z-*-E_2pZ8<7!>M;IXa zRT%>bk(R<6@8kRyy;zC676vT6!86!mT-pVy4H|fRLZ#k>bz?jv}x;=Vz=>{adi3f7 zB;S)Yg(;*QiX3{B+$maoaRFqt>7`EZTCFx{2E<*NRSY2B(kj?ibc_|1=K7Xvu}Kpk z?n-$MrSu&w0_{qJ>UeHhu5XE&eX4-KGe%L$w%oZXRc#1bKS!`rGFC08!~`V2GNT_# zi`@X@Uae~FOb0Kyz@)(Na_7!^-IeOp>g;>s6t)|PrP_Ir25dW+kPsNYBD3ydB;JS~ zQoQ}ixRZ|S74VGF1{B(!1)j2{%;g&!X@M9Kko>C50<23`*?wfE3{(nBU9~0QB3c2$ zLnU5ehe6oYls=m?!%I#lCMv1nq0sF7uEuhDOG7* z;#tz)D8Sko(Ks~OMJDulog}wQX~ll*(jjvE@*%S6$Z~SUf60h=;XHiSk>Y47S_fxB z!dn1>0;~iDSiTX>a<^y6#2mnec3O3}-#-|C8>DB3v(m?z^ zqwADq@>bG5uA`=LEZaYW)Sv%J6Rp)me7z$jD1AeHlqNvTct@{}{m8tub((Fro0kyA zmSe3`)WSpDRq|0R=^xZQsxZP5XN@jaJ9!BVKUnJW4rl_z?Ue^mKmA?Th{A|x4gQd% zc1qJM!fsx|;@Bf)S-wAlAtPcnJF>^b;0&YZDez?LA-9w^v>I*%q)M(uxMY~o$fw%H z>7Q#B(Qxe)nYZgX&Gc3iqQh2)az2y3x;?$S-w}5LfT*?t)Qr*-HtXvb6W{4?)kL=0 z=Kut)*c&}4ykk7T_)3K4yR{Z+8ariUsK|vJuR|86e?gK|>JgjGFt_m_$`mTPS2{U$ zK9RePiRy56n_Ze4%GWkLWY!^MCW{CeE<-K3+AVjq0EDph9FQFVBv%w5Tu!Xy>N~xK ztgl}rQk_6qY%6j|)*q1AU!YWydf($@)}R#;Me>#Id`!1?S@DJ$xeqx+K93b{Cy{`t zdC8_DACMpZ*&te_X?eUIU>P8>7JPQ~k{}>fgiPqGiZ$cxZKxt82j-goRs{<UjqwR|I+ht90QD@o4| zeWQZH!T9mShM>2EfZ;&o^`6?Q&%!^i`1>Q_o`sNkgBDa}zKpY@n$J(@bdDx+wR{pH z_RrGL}13fWn_;R3?*E%fHdFEYyza9ChIZ9Pxcz!$`k<#&n*-B6vgbgMbfjc z!9!LZm}AHUzLm)wH;0tx?E0;Rhwwi{ch3x22qs>CaF2=Aifk^s;;%KqLe0n%b+elb zEAVALq}-5xH+mexh(WP6A)uX*N)ixK{3J~Oyu8N=4ThT?+3q&M(J}V8m-$kwlE(NPo zBc9PHmtDLmNj=x()chM0kYFykn~!m8L_ONc=2*uvcVJew&u+BFfodXS#FwHZxQa*Y z@Q2e!-OqJzAJ&;V68SNo;El=u%LC6i9^Wo7bY;fQhDc+IeYD#%dp}5T^i*}oEmuAo`A3lRH2i? zt57Yr>h_S3&|wgRb5>j>R=GA=4 z$V>!aqJ9(1a|G|`67nv*;$0(N(cA*lfP{n+nE(O*N(=ERgU+g9{Dd|f0EAz79I5^n7DN;ylSlA@B4Y$5Tc6pzCWCE9_MwQ=XIWEdAy$Im9o#tR$N3*1ONbWJIu;O z(02b<$Rt5s;Z~V1Xu#7hwiZC;3&xB9G+}3Dejv*83-8O#F+(w7@1QFISNyp8SCAcc zgLXMi+|c&5lbmg}eGOzP0Dg<{%8Vu~B%i3gFa28yN`Bly{v%nOiIYt;036;)jaAtQ zP>Y3`0Nf2)p>*&*T>H?c%v#V-JD{(mg$o9qG+d*Y^jn)?NLkII*ovTM`y#DE=HQ zq7yN{2xL5{D(O~|NkQ(=qp^kyo94r7#D`2D$r6Owfy9b0RRC%d?VK_MR7(^tntGI_bD`ej`Qjx$_I!Bej zs&umk%C@S`?z^p`p_5qb*UYj$?Q*W=2eRV)1apv&!aFh-e z<|rM{X5|Q$G_ZT^KPNz#BH~7YNqUgo*c6`xAt9JtSg#neg(eN7-xw6a)6eL@Wrrag z=(&J6GRgouJ#A;9i4?!Fh7BP%bHhrAMwwvW;TnR=1s?BP?b@;yP7EPKST*jQ~^pTjnbFlE(Y*F|l z3#N`xtsG5=QHh4SOGlF<7LB$rXs6*a*tuPY*bR!*t1fQm&uSbMUcF>70r{OlQjHQJ zV@K_Dh2Ft37t3CkCh&%Iif+a~XlT`NYKu%~>TP#@J4gt# zvDj9uxAHzP3KnJFfRaB*RUbd3A;j)tI}-e=c0^xHdxB)e1Q3?=QM!e$G_^EZFWA}z z3==Vw517pMGl89c1n7G274B4frOfFSNw^cEue=d`4)>29OZv^6A0IkcaqUG9U*6--3M?9yWU9FHgdFjc6TH9to+~>e zl1DnL%SuL49fgQkB_}W3pG^5N>ZN~J>&0K`&F<=bfqR4nudOujDCBZItqCDMS*;qe z4^|%H4Xo{#E#FHK3{JT#Q`PzZ>W$ncJ~2K8-V3k0BLpFu@NJG;J(Cyz<6dlehSkYP zg#j-4MP0qYOsKURx^!r7#_uy$!QP>NpFRJ*{WoYk*Ci@>LW)-AS{z*cLddrfdRDQX zJY}i05t1F?@r_37Oh5f82^foRn_urJb&?i-%;QOVe)4?kNUy*~HR6DT!)YI?xzeNhd@{=Ur^dW+#FHYN&X_b;S%TO7d(0 z?~|-n*bY(jjijf`DOK7QIGi^@{6N~Xke8W6kE|0okN^FxgRQEP`!Kg%oK+l37kJ(4 zdXY@?hbNl1@9?$+Ij?vLy2$^t1GuaUyadMFt=nf8aI ze9BYw$cl17xdG!oyij6o+o3YqolZ$um#nF+2CS!T!D%`%YhSpaeq!ou&t4H z_O#}QxK0y&(mPR*I&1H6e|-@X!>e7_`s0viXa2c&$Hw=o&t72T)`8yK5^LYDxF+74 zHzPlqMN9b>pDML$WJAl#E`ImJgxoupF2Tbd*4v`OJle}!ji=^Ir2aKb9QKk!NL32{ zW=Yo4IK5L{d}?KNpZ&6j{qoj#T{Br~Y?)r~8af4>)Xz+miu$6wxn%=?$+uluC%etJ zA{OXo|K4r(X$(FUfshE{BVu$sZ<^1B4%KOvF?D2Os*hCze%RVAg+-qJWGW{1MDeq% zCSd%0SV?H^#b8xpr}yu+XjVtbv`(5q=i|ZnT^`-;l$51^ZPhNB#b2T$3K@eJzlmU) zO@~UPmH>H_1{LnlmrpVO$zOc(T~+#JS87u646E=4M<%?=iV!Zi_LJ3f;d)FRzGuo4 zMS#obPUmUep1byIwe6E{m*v1vmr4GTqgG0rgIp(1)*oir5T)%6ymD()S zn5X2R`0>TKB9Z;YNsKQ9o~D4dpjXu#U1htkY*cn`MtY zx^1*m{PKDv2y)BRKk+?ln%(5;Pc&xQvBL=h3DBJ7d+rhT+bhNo@DH^+fCF|jIjywI z=9=?sIV(=%+`Ax)VHY{8BhY~C{+>77yAVs-ZvOpwJ{>WpMF;}D&-&7D=M4clta95; z+11Vdke?0`q?4zBwZ}HQPmMPp*R0NdWmbPKeT;^3l?3{VIuyx0^2ZU2BKNkvP5EBO z&KmQ4x{lQU$d0CKEM#{Ibr)+69fD*?FyuS777q@6r3@!k=S!m5Y>08 z0Rpub#}OhGUcM#+oI3W0p^Tjjj6(2+k3UIFijd%k7igYeE-7w7ljwei0h5!<2_R-6 z*fs^v17xe6X!Pz>3@8SZ^|&ulS4#-KERgI3;o7GY$JDyM?a5O5>w^R=20ICK`Snvj z&#D6X3?iD1GS~@16JO6QovYW8qTpm)Mwueq**HwTL_`x%F-`)cdv}-|Pee^{86^r> zJYs*Vv7jb#3eDSm;pdznpq6#7y{;%kq43fdL7o3`IcWP~UHZ`5B*58p{Yi3!^l1T= zBR|4hYh1XEkh96LE>*+%XF?QQf7JG{`K5%@VC^lHR@1q@1`ScxGX@2h89JvT_yQ$; zXG(EM@677GQ;BHwpVK`J^4L&pcwU-w_)uhUA`u;$<^PnplyXm`cqC}G_o@$()of@E z!R03JH_>5dLeYY(|C;m$o`pOGHyTorq~MFgDe5#}rYwEBLKX`kS@f)Q_)I&B3z(Ef z#kAQVbVlKpJo>u5xDW14 zk9-$mk6^}El@WKNr5_{*c>Ydky@g*w!sYl%Vf22G!TXEp`CYV3JtHL-8)iEQ=gB#^ zxymL#Gm4kA*@E~ofcAS83I5V}ONNfUTF?h(sLW1I_&)+U4cVgc4z#-Pl_zPU#0_Nt z1N(z14bs4}VQqaB-DN9HngMX(o^wt$Ah}+uDzhNiX?Q8G4x$+_0N;aG%$HVxZhw!3 z`GydE_ik2V;@4YWZz1NSC+{3R$pl}Dw=mlk?dq0A!I8t zW$Y~^YmGI;ShFPWZ{FYUfA~H3x%ZrV&U4Rs&hy-R?&p(iXKTU3Dar|h!FVhQruHmJ z|8Jt%S!KgL*4|j8)*L={wET zTu)KI;)k4AvPJTN`qze)#>=iZZR|X>cQ1R6NFKy@92sEwl1|oyJdH^arxA({-dCj-+*K;`iQrGLQP}_K!EY!KcB<+a?=4 zqYG=hd{~T=`jRZ@lb_JN+nZCh+|z^@oOFs36j7)((L5}VwjN5j7VRtq0Leeo9|&MS z90XQKfo^m5x(j{>PE0=w&zxU#gXaPGMQo!K?o+VZw&=WCqXN+Fv=r%C<#%AVgC<3+ zTHWI#^Vh#la{BQs+)Vw4kygQ@3@MO!Pn+qKYuau7;_QZ`d6y!gp|O?4jT zc+H`T7bkK)-p4$~VpD>Mm(lb@AAk~`7fNL-WkL=;SPhg=z=H#~(? zI#jAX{6@<5P-k1%{0jW^{YdrE<+o9xaWX&nv0X^M*t4J*?- zU=irXR)f>eM5Ko0&bMC$6p0z6o4)H2Y}ePN(Rh6c zdAiW$`DJ~eI|bcm&e8g|Iff4jevwfKI2qCV)f0AJrQykMfV;l$hVD5u9P65bR~>cb z_HU>SyF^g7&MJ=kd`Yss>wceaE(&Z~jX8<J<*BQtnD0>0@!p`kk~`ur)h}-NA(6g0E6Z!} zqB3D1$<+`v5bVKLwB-lKe}@yW>K9#Y#<%axN+C^yb5?p|;h)Cty9jgnT?hBE!@`llYNnPJoOcN=Y*NI z-808ei{89C7=$Rek!clD1hrwK#*wlk+%sMl_?(3#NIzKXr%)SAy6aJSgy+oC=x=HDhFwYd04H5%5}}t31F#im1a0?wUUM$=EK)mr3j|aqzOvOb9yJ6{yl}`J=R$wu zAT0V}B5&B>RjS{VpA%+$Zbi5TC+0f>wC17m$-DTU2`aq>zr46>L|wFAb-O`x{=T?*w-$XWHQp zeWwso;ElpL9+KS4+9YQZ)2qC*rO@?5;ucr382E*zZ&|KaDHV%Z=52N?Z|rdK zt8h}dLl`r6ag~R2yq`nQr1G`VI-Is2bGI~TU4pd6Ny!ty!Z%XjAk)_>m9N4%V{Wd_ z@;GWynEw?D2pK4ALj`VgX59KO%iXOB1a>8Up>(2i>~IQ0I5fhe>AJMqN{O;>xQWxi z*Wbrg)x9$jCY3j(lIM*o^M!ii@fp$4b$Hlqm+c=T*5lj%1uz;ex$Nn)3b?mPgDc!( z!?h?d>*4&93sw9$1*R|i@FgKGZJl&RpFIXg_N$azSd-pJrTog7KO*XtPl>E@zbUHn z@1YwYjOS$jC~1|cCvtx5e-S6QDB5T})2RHNo&GkBwBB=&bIbcvoo%jaCv2tVrzaGT zA)(H{x_rMx<+l^yjOX1{g6Ovl)q16U4qB+oPot#qEx+PVd9?y7O_&N(nl4%xXS=h$M!EjH@=)xQNn19%%JF6BmT+Ukw{&F`{> zAMCi!M#vgzajIGP=;iI}<$p6s2M3}sG#>g$-G~@i`X|*>XqUS8Xu=op{q%2SXs6-o z;n#u<_}abUcy$%|l5}nvE%0uUDSo0R%iQBjO<<+Phw_VnUo{ z`!}~E41%KRgAHSTt)B3X*4fGHSx5VvT&8jMmT69#sWV4g*zS;NFxnNwT43R7%UpHD zKU5%7KNiCD6JFFJijp|id{xsUj?sZUE>zN z_$-1y_PO8evz;%HiviCh8?G~s?D^;IH`Ocb=-qbWjb`K6)HVl`Bp2b>ZW1#?3n5Fa zAz=9VQyFLIinF3CP|Ftx^nz|@S8u1UyB``5QMyEr!dCZBtSlPm`XwY40e>YtyE`L@ zlkmyDWoW#W*+jNRvHs;L=T})`nHL8Y|0ZbnYcfBJUxb9H^N`@wU(M(;G~F^GRq`AM zK$m)xmTfwKPkTrH<5Bmg^~9*iDe=fZk)50Sztg3@ywiN4&DhGyb>2>b&$e2!t|PAn zSBOstKUua|Iw#5Ic5T56NTExh_9&oheKvrMC36z^$PaasX@h5eKEh(*_C^W!kLkHG zq(Py+M2T7RSzb_zg~V>dF*Zmq_GABRl{J~=tbXjjHQgzPG%a-V6@gO}UD}1z;1u2H zj9xS$A?_{f5ZkrqZRwDpk}#Sd{(o?iWLys_dmv3UqKnPYgtCi^`!F&VJ2&x2PzIC> z@(fjKi2L>oI=Z0tTnFeruQ>0;0RVlI4noLT%ly7Kr*G-ZmkayaO7^9f_V%LDVPi_w zVSL!{6O&G?)+gnRS4#3pHw$MoA%YpKV$0@bdl zsXxu9*P8N+)=D_g9-lTi1r#EvD>qB399fN`jk@d}o1&6n4?%h9erHUS@c5+c3%s1g zFu+K$J1)r)g1B|7aDr9<{I)%1o4X7Kh(x&QDx|}a$YR-L5qkixIr}ogPJzYNtSrBr zD1syX=vU_Q>{u)&ol+Sk*1$QwP`zbQw?0jY{;s~=evo)m}``rE?SFVui literal 0 HcmV?d00001 diff --git a/hybrid/html/image/video.png b/hybrid/html/image/video.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb7d0123967534b5091f0ec84fb181a7660d83a GIT binary patch literal 3333 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 iC>?QFxby!yJ^mwsoTejE02bD2B! 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 Nij}?PLv!DRe*!SJak&5h literal 0 HcmV?d00001 diff --git a/hybrid/html/image/wallpaper.png b/hybrid/html/image/wallpaper.png new file mode 100644 index 0000000000000000000000000000000000000000..0446a441bcc9c11db6f28bb5a3bab1578141a7ac GIT binary patch literal 24430 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 F008Pye9r&? literal 0 HcmV?d00001 diff --git a/hybrid/html/index.html b/hybrid/html/index.html new file mode 100644 index 0000000..589e1be --- /dev/null +++ b/hybrid/html/index.html @@ -0,0 +1,613 @@ + + + + + + + + + + + +
+
+ + + +
+
+ +
+ {{contact.displayName}} + + {{contact.displayName}} 正在请求与您{{is_video ? '视频' : '语音'}}通话 + 您正对 {{contact.displayName}} 发起{{is_video ? '视频' : '语音'}}通话 + + +
+
+
+ {{setCallTime()}} +
+
+
+ +
{{ voiceStatus ? '关闭' : '开启'}}麦克风
+
+
+ +
挂断
+
+
+ +
接听
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/hybrid/html/js/jsonly.js b/hybrid/html/js/jsonly.js new file mode 100644 index 0000000..4cb5434 --- /dev/null +++ b/hybrid/html/js/jsonly.js @@ -0,0 +1,275 @@ +var at, // The index of the current character + ch, // The current character + escapee = { + '"': '"', + '\\': '\\', + '/': '/', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' + }, + text, + + error = function(m) { + // Call error when something is wrong. + throw { + name: 'SyntaxError', + message: m, + at: at, + text: text + }; + }, + + next = function(c) { + // If a c parameter is provided, verify that it matches the current character. + if (c && c !== ch) { + error("Expected '" + c + "' instead of '" + ch + "'"); + } + + // Get the next character. When there are no more characters, + // return the empty string. + + ch = text.charAt(at); + at += 1; + return ch; + }, + + number = function() { + // Parse a number value. + var number, + string = ''; + + if (ch === '-') { + string = '-'; + next('-'); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + if (ch === '.') { + string += '.'; + while (next() && ch >= '0' && ch <= '9') { + string += ch; + } + } + if (ch === 'e' || ch === 'E') { + string += ch; + next(); + if (ch === '-' || ch === '+') { + string += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + } + number = +string; + if (!isFinite(number)) { + error("Bad number"); + } else { + return number; + } + }, + + string = function() { + // Parse a string value. + var hex, + i, + string = '', + uffff; + + // When parsing for string values, we must look for " and \ characters. + if (ch === '"') { + while (next()) { + if (ch === '"') { + next(); + return string; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } else if (typeof escapee[ch] === 'string') { + string += escapee[ch]; + } else { + break; + } + } else { + string += ch; + } + } + } + error("Bad string"); + }, + + white = function() { + + // Skip whitespace. + + while (ch && ch <= ' ') { + next(); + } + }, + + word = function() { + + // true, false, or null. + + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + } + error("Unexpected '" + ch + "'"); + }, + + value, // Place holder for the value function. + + array = function() { + + // Parse an array value. + + var array = []; + + if (ch === '[') { + next('['); + white(); + if (ch === ']') { + next(']'); + return array; // empty array + } + while (ch) { + array.push(value()); + white(); + if (ch === ']') { + next(']'); + return array; + } + next(','); + white(); + } + } + error("Bad array"); + }, + + object = function() { + + // Parse an object value. + + var key, + object = {}; + + if (ch === '{') { + next('{'); + white(); + if (ch === '}') { + next('}'); + return object; // empty object + } + while (ch) { + key = string(); + white(); + next(':'); + if (Object.hasOwnProperty.call(object, key)) { + error('Duplicate key "' + key + '"'); + } + object[key] = value(); + white(); + if (ch === '}') { + next('}'); + return object; + } + next(','); + white(); + } + } + error("Bad object"); + }; + +value = function() { + + // Parse a JSON value. It could be an object, an array, a string, a number, + // or a word. + + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + return string(); + case '-': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } +}; + +// Return the json_parse function. It will have access to all of the above +// functions and variables. + +const jsonly = function(source, reviver) { + var result; + + text = source; + at = 0; + ch = ' '; + result = value(); + white(); + if (ch) { + error("Syntax error"); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + }({ + '': result + }, '')) : result; +}; diff --git a/hybrid/html/js/uni.webview.js b/hybrid/html/js/uni.webview.js new file mode 100644 index 0000000..328b91e --- /dev/null +++ b/hybrid/html/js/uni.webview.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).uni=n()}(this,(function(){"use strict";try{var e={};Object.defineProperty(e,"passive",{get:function(){!0}}),window.addEventListener("test-passive",null,e)}catch(e){}var n=Object.prototype.hasOwnProperty;function i(e,i){return n.call(e,i)}var t=[];function r(){return window.__dcloud_weex_postMessage||window.__dcloud_weex_}var o=function(e,n){var i={options:{timestamp:+new Date},name:e,arg:n};if(r()){if("postMessage"===e){var o={data:[n]};return window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(o):window.__dcloud_weex_.postMessage(JSON.stringify(o))}var a={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessageToService(a):window.__dcloud_weex_.postMessageToService(JSON.stringify(a))}if(!window.plus)return window.parent.postMessage({type:"WEB_INVOKE_APPSERVICE",data:i,pageId:""},"*");if(0===t.length){var d=plus.webview.currentWebview();if(!d)throw new Error("plus.webview.currentWebview() is undefined");var s=d.parent(),w="";w=s?s.id:d.id,t.push(w)}if(plus.webview.getWebviewById("__uniapp__service"))plus.webview.postMessageToUniNView({type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}},"__uniapp__service");else{var u=JSON.stringify(i);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE",'",').concat(u,",").concat(JSON.stringify(t),");"))}},a={navigateTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;o("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;o("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;o("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;o("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;o("redirectTo",{url:encodeURI(n)})},getEnv:function(e){r()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o("postMessage",e.data||{})}},d=/uni-app/i.test(navigator.userAgent),s=/Html5Plus/i.test(navigator.userAgent),w=/complete|loaded|interactive/;var u=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var g=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var v=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var c=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var m=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var _=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var E=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var h,P=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},b=[function(e){if(d||s)return window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&w.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),a},function(e){if(m)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(v)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(u){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(c)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(p){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(_)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(E)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),a}],y=0;y!!n[e.toLowerCase()]:e=>!!n[e]}const n=t("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),o=t("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function r(e){if(T(e)){const t={};for(let n=0;n{if(e){const n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function c(e){let t="";if(A(e))t=e;else if(T(e))for(let n=0;nf(e,t)))}const h=(e,t)=>N(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:E(t)?{[`Set(${t.size})`]:[...t.values()]}:!O(t)||T(t)||R(t)?t:String(t),m={},g=[],v=()=>{},y=()=>!1,b=/^on[^a-z]/,_=e=>b.test(e),x=e=>e.startsWith("onUpdate:"),S=Object.assign,C=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},k=Object.prototype.hasOwnProperty,w=(e,t)=>k.call(e,t),T=Array.isArray,N=e=>"[object Map]"===B(e),E=e=>"[object Set]"===B(e),$=e=>e instanceof Date,F=e=>"function"==typeof e,A=e=>"string"==typeof e,M=e=>"symbol"==typeof e,O=e=>null!==e&&"object"==typeof e,I=e=>O(e)&&F(e.then)&&F(e.catch),P=Object.prototype.toString,B=e=>P.call(e),R=e=>"[object Object]"===B(e),V=e=>A(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,L=t(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),j=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},U=/-(\w)/g,H=j((e=>e.replace(U,((e,t)=>t?t.toUpperCase():"")))),D=/\B([A-Z])/g,W=j((e=>e.replace(D,"-$1").toLowerCase())),z=j((e=>e.charAt(0).toUpperCase()+e.slice(1))),K=j((e=>e?`on${z(e)}`:"")),G=(e,t)=>e!==t&&(e==e||t==t),q=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Z=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Q=new WeakMap,X=[];let Y;const ee=Symbol(""),te=Symbol("");function ne(e,t=m){(function(e){return e&&!0===e._isEffect})(e)&&(e=e.raw);const n=function(e,t){const n=function(){if(!n.active)return e();if(!X.includes(n)){se(n);try{return le.push(ie),ie=!0,X.push(n),Y=n,e()}finally{X.pop(),ae(),Y=X[X.length-1]}}};return n.id=re++,n.allowRecurse=!!t.allowRecurse,n._isEffect=!0,n.active=!0,n.raw=e,n.deps=[],n.options=t,n}(e,t);return t.lazy||n(),n}function oe(e){e.active&&(se(e),e.options.onStop&&e.options.onStop(),e.active=!1)}let re=0;function se(e){const{deps:t}=e;if(t.length){for(let n=0;n{e&&e.forEach((e=>{(e!==Y||e.allowRecurse)&&l.add(e)}))};if("clear"===t)i.forEach(c);else if("length"===n&&T(e))i.forEach(((e,t)=>{("length"===t||t>=o)&&c(e)}));else switch(void 0!==n&&c(i.get(n)),t){case"add":T(e)?V(n)&&c(i.get("length")):(c(i.get(ee)),N(e)&&c(i.get(te)));break;case"delete":T(e)||(c(i.get(ee)),N(e)&&c(i.get(te)));break;case"set":N(e)&&c(i.get(ee))}l.forEach((e=>{e.options.scheduler?e.options.scheduler(e):e()}))}const fe=t("__proto__,__v_isRef,__isVue"),de=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(M)),he=_e(),me=_e(!1,!0),ge=_e(!0),ve=_e(!0,!0),ye=be();function be(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=ct(this);for(let t=0,r=this.length;t{e[t]=function(...e){ce();const n=ct(this)[t].apply(this,e);return ae(),n}})),e}function _e(e=!1,t=!1){return function(n,o,r){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_raw"===o&&r===(e?t?Ye:Xe:t?Qe:Ze).get(n))return n;const s=T(n);if(!e&&s&&w(ye,o))return Reflect.get(ye,o,r);const i=Reflect.get(n,o,r);if(M(o)?de.has(o):fe(o))return i;if(e||ue(n,0,o),t)return i;if(pt(i)){return!s||!V(o)?i.value:i}return O(i)?e?ot(i):tt(i):i}}function xe(e=!1){return function(t,n,o,r){let s=t[n];if(!e&&(o=ct(o),s=ct(s),!T(t)&&pt(s)&&!pt(o)))return s.value=o,!0;const i=T(t)&&V(n)?Number(n)!0,deleteProperty:(e,t)=>!0},ke=S({},Se,{get:me,set:xe(!0)}),we=S({},Ce,{get:ve}),Te=e=>O(e)?tt(e):e,Ne=e=>O(e)?ot(e):e,Ee=e=>e,$e=e=>Reflect.getPrototypeOf(e);function Fe(e,t,n=!1,o=!1){const r=ct(e=e.__v_raw),s=ct(t);t!==s&&!n&&ue(r,0,t),!n&&ue(r,0,s);const{has:i}=$e(r),l=o?Ee:n?Ne:Te;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void(e!==r&&e.get(t))}function Ae(e,t=!1){const n=this.__v_raw,o=ct(n),r=ct(e);return e!==r&&!t&&ue(o,0,e),!t&&ue(o,0,r),e===r?n.has(e):n.has(e)||n.has(r)}function Me(e,t=!1){return e=e.__v_raw,!t&&ue(ct(e),0,ee),Reflect.get(e,"size",e)}function Oe(e){e=ct(e);const t=ct(this);return $e(t).has.call(t,e)||(t.add(e),pe(t,"add",e,e)),this}function Ie(e,t){t=ct(t);const n=ct(this),{has:o,get:r}=$e(n);let s=o.call(n,e);s||(e=ct(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?G(t,i)&&pe(n,"set",e,t):pe(n,"add",e,t),this}function Pe(e){const t=ct(this),{has:n,get:o}=$e(t);let r=n.call(t,e);r||(e=ct(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&pe(t,"delete",e,void 0),s}function Be(){const e=ct(this),t=0!==e.size,n=e.clear();return t&&pe(e,"clear",void 0,void 0),n}function Re(e,t){return function(n,o){const r=this,s=r.__v_raw,i=ct(s),l=t?Ee:e?Ne:Te;return!e&&ue(i,0,ee),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function Ve(e,t,n){return function(...o){const r=this.__v_raw,s=ct(r),i=N(s),l="entries"===e||e===Symbol.iterator&&i,c="keys"===e&&i,a=r[e](...o),u=n?Ee:t?Ne:Te;return!t&&ue(s,0,c?te:ee),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Le(e){return function(...t){return"delete"!==e&&this}}function je(){const e={get(e){return Fe(this,e)},get size(){return Me(this)},has:Ae,add:Oe,set:Ie,delete:Pe,clear:Be,forEach:Re(!1,!1)},t={get(e){return Fe(this,e,!1,!0)},get size(){return Me(this)},has:Ae,add:Oe,set:Ie,delete:Pe,clear:Be,forEach:Re(!1,!0)},n={get(e){return Fe(this,e,!0)},get size(){return Me(this,!0)},has(e){return Ae.call(this,e,!0)},add:Le("add"),set:Le("set"),delete:Le("delete"),clear:Le("clear"),forEach:Re(!0,!1)},o={get(e){return Fe(this,e,!0,!0)},get size(){return Me(this,!0)},has(e){return Ae.call(this,e,!0)},add:Le("add"),set:Le("set"),delete:Le("delete"),clear:Le("clear"),forEach:Re(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((r=>{e[r]=Ve(r,!1,!1),n[r]=Ve(r,!0,!1),t[r]=Ve(r,!1,!0),o[r]=Ve(r,!0,!0)})),[e,n,t,o]}const[Ue,He,De,We]=je();function ze(e,t){const n=t?e?We:De:e?He:Ue;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(w(n,o)&&o in t?n:t,o,r)}const Ke={get:ze(!1,!1)},Ge={get:ze(!1,!0)},qe={get:ze(!0,!1)},Je={get:ze(!0,!0)},Ze=new WeakMap,Qe=new WeakMap,Xe=new WeakMap,Ye=new WeakMap;function et(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>B(e).slice(8,-1))(e))}function tt(e){return e&&e.__v_isReadonly?e:rt(e,!1,Se,Ke,Ze)}function nt(e){return rt(e,!1,ke,Ge,Qe)}function ot(e){return rt(e,!0,Ce,qe,Xe)}function rt(e,t,n,o,r){if(!O(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=et(e);if(0===i)return e;const l=new Proxy(e,2===i?o:n);return r.set(e,l),l}function st(e){return it(e)?st(e.__v_raw):!(!e||!e.__v_isReactive)}function it(e){return!(!e||!e.__v_isReadonly)}function lt(e){return st(e)||it(e)}function ct(e){return e&&ct(e.__v_raw)||e}function at(e){return J(e,"__v_skip",!0),e}const ut=e=>O(e)?tt(e):e;function pt(e){return Boolean(e&&!0===e.__v_isRef)}function ft(e){return ht(e)}class dt{constructor(e,t=!1){this._shallow=t,this.__v_isRef=!0,this._rawValue=t?e:ct(e),this._value=t?e:ut(e)}get value(){return ue(ct(this),0,"value"),this._value}set value(e){e=this._shallow?e:ct(e),G(e,this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:ut(e),pe(ct(this),"set","value",e))}}function ht(e,t=!1){return pt(e)?e:new dt(e,t)}function mt(e){return pt(e)?e.value:e}const gt={get:(e,t,n)=>mt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return pt(r)&&!pt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function vt(e){return st(e)?e:new Proxy(e,gt)}class yt{constructor(e){this.__v_isRef=!0;const{get:t,set:n}=e((()=>ue(this,0,"value")),(()=>pe(this,"set","value")));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}class bt{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}function _t(e,t){return pt(e[t])?e[t]:new bt(e,t)}class xt{constructor(e,t,n){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=ne(e,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,pe(ct(this),"set","value"))}}),this.__v_isReadonly=n}get value(){const e=ct(this);return e._dirty&&(e._value=this.effect(),e._dirty=!1),ue(e,0,"value"),e._value}set value(e){this._setter(e)}}const St=[];function Ct(e,...t){ce();const n=St.length?St[St.length-1].component:null,o=n&&n.appContext.config.warnHandler,r=function(){let e=St[St.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}();if(o)Tt(o,n,11,[e+t.join(""),n&&n.proxy,r.map((({vnode:e})=>`at <${Wr(n,e.type)}>`)).join("\n"),r]);else{const n=[`[Vue warn]: ${e}`,...t];r.length&&n.push("\n",...function(e){const t=[];return e.forEach(((e,n)=>{t.push(...0===n?[]:["\n"],...function({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",o=` at <${Wr(e.component,e.type,!!e.component&&null==e.component.parent)}`,r=">"+n;return e.props?[o,...kt(e.props),r]:[o+r]}(e))})),t}(r)),console.warn(...n)}ae()}function kt(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach((n=>{t.push(...wt(n,e[n]))})),n.length>3&&t.push(" ..."),t}function wt(e,t,n){return A(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):"number"==typeof t||"boolean"==typeof t||null==t?n?t:[`${e}=${t}`]:pt(t)?(t=wt(e,ct(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):F(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=ct(t),n?t:[`${e}=`,t])}function Tt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(s){Et(s,t,n)}return r}function Nt(e,t,n,o){if(F(e)){const r=Tt(e,t,n,o);return r&&I(r)&&r.catch((e=>{Et(e,t,n)})),r}const r=[];for(let s=0;s>>1;Jt(At[e])-1?At.splice(t,0,e):At.push(e),Wt()}}function Wt(){$t||Ft||(Ft=!0,jt=Lt.then(Zt))}function zt(e,t,n,o){T(e)?n.push(...e):t&&t.includes(e,e.allowRecurse?o+1:o)||n.push(e),Wt()}function Kt(e){zt(e,Rt,Bt,Vt)}function Gt(e,t=null){if(Ot.length){for(Ut=t,It=[...new Set(Ot)],Ot.length=0,Pt=0;PtJt(e)-Jt(t))),Vt=0;Vtnull==e.id?1/0:e.id;function Zt(e){Ft=!1,$t=!0,Gt(e),At.sort(((e,t)=>Jt(e)-Jt(t)));try{for(Mt=0;Mte.trim())):t&&(r=n.map(Z))}let l,c=o[l=K(t)]||o[l=K(H(t))];!c&&s&&(c=o[l=K(W(t))]),c&&Nt(c,e,6,r);const a=o[l+"Once"];if(a){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,Nt(a,e,6,r)}}function Xt(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},l=!1;if(!F(e)){const o=e=>{const n=Xt(e,t,!0);n&&(l=!0,S(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||l?(T(s)?s.forEach((e=>i[e]=null)):S(i,s),o.set(e,i),i):(o.set(e,null),null)}function Yt(e,t){return!(!e||!_(t))&&(t=t.slice(2).replace(/Once$/,""),w(e,t[0].toLowerCase()+t.slice(1))||w(e,W(t))||w(e,t))}let en=null,tn=null;function nn(e){const t=en;return en=e,tn=e&&e.type.__scopeId||null,t}function on(e,t=en,n){if(!t)return e;if(e._n)return e;const o=(...n)=>{o._d&&ar(-1);const r=nn(t),s=e(...n);return nn(r),o._d&&ar(1),s};return o._n=!0,o._c=!0,o._d=!0,o}function rn(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:l,attrs:c,emit:a,render:u,renderCache:p,data:f,setupState:d,ctx:h,inheritAttrs:m}=e;let g;const v=nn(e);try{let e;if(4&n.shapeFlag){const t=r||o;g=br(u.call(t,t,p,s,d,f,h)),e=c}else{const n=t;0,g=br(n(s,n.length>1?{attrs:c,slots:l,emit:a}:null)),e=t.props?c:ln(c)}let v=g;if(e&&!1!==m){const t=Object.keys(e),{shapeFlag:n}=v;t.length&&(1&n||6&n)&&(i&&t.some(x)&&(e=cn(e,i)),v=vr(v,e))}0,n.dirs&&(v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&(v.transition=n.transition),g=v}catch(y){rr.length=0,Et(y,e,1),g=gr(nr)}return nn(v),g}function sn(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||_(n))&&((t||(t={}))[n]=e[n]);return t},cn=(e,t)=>{const n={};for(const o in e)x(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function an(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r0?(fn(e,"onPending"),fn(e,"onFallback"),a(null,e.ssFallback,t,n,o,null,s,i),gn(f,e.ssFallback)):f.resolve()}(t,n,o,r,s,i,l,c,a):function(e,t,n,o,r,s,i,l,{p:c,um:a,o:{createElement:u}}){const p=t.suspense=e.suspense;p.vnode=t,t.el=e.el;const f=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:m,isInFallback:g,isHydrating:v}=p;if(m)p.pendingBranch=f,fr(f,m)?(c(m,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():g&&(c(h,d,n,o,r,null,s,i,l),gn(p,d))):(p.pendingId++,v?(p.isHydrating=!1,p.activeBranch=m):a(m,r,p),p.deps=0,p.effects.length=0,p.hiddenContainer=u("div"),g?(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():(c(h,d,n,o,r,null,s,i,l),gn(p,d))):h&&fr(f,h)?(c(h,f,n,o,r,p,s,i,l),p.resolve(!0)):(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0&&p.resolve()));else if(h&&fr(f,h))c(h,f,n,o,r,p,s,i,l),gn(p,f);else if(fn(t,"onPending"),p.pendingBranch=f,p.pendingId++,c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0)p.resolve();else{const{timeout:e,pendingId:t}=p;e>0?setTimeout((()=>{p.pendingId===t&&p.fallback(d)}),e):0===e&&p.fallback(d)}}(e,t,n,o,r,i,l,c,a)},hydrate:function(e,t,n,o,r,s,i,l,c){const a=t.suspense=dn(t,o,n,e.parentNode,document.createElement("div"),null,r,s,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,s,i);0===a.deps&&a.resolve();return u},create:dn,normalize:function(e){const{shapeFlag:t,children:n}=e,o=32&t;e.ssContent=hn(o?n.default:n),e.ssFallback=o?hn(n.fallback):gr(Comment)}};function fn(e,t){const n=e.props&&e.props[t];F(n)&&n()}function dn(e,t,n,o,r,s,i,l,c,a,u=!1){const{p:p,m:f,um:d,n:h,o:{parentNode:m,remove:g}}=a,v=Z(e.props&&e.props.timeout),y={vnode:e,parent:t,parentComponent:n,isSVG:i,container:o,hiddenContainer:r,anchor:s,deps:0,pendingId:0,timeout:"number"==typeof v?v:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:o,pendingId:r,effects:s,parentComponent:i,container:l}=y;if(y.isHydrating)y.isHydrating=!1;else if(!e){const e=n&&o.transition&&"out-in"===o.transition.mode;e&&(n.transition.afterLeave=()=>{r===y.pendingId&&f(o,l,t,0)});let{anchor:t}=y;n&&(t=h(n),d(n,i,y,!0)),e||f(o,l,t,0)}gn(y,o),y.pendingBranch=null,y.isInFallback=!1;let c=y.parent,a=!1;for(;c;){if(c.pendingBranch){c.effects.push(...s),a=!0;break}c=c.parent}a||Kt(s),y.effects=[],fn(t,"onResolve")},fallback(e){if(!y.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:o,container:r,isSVG:s}=y;fn(t,"onFallback");const i=h(n),a=()=>{y.isInFallback&&(p(null,e,r,i,o,null,s,l,c),gn(y,e))},u=e.transition&&"out-in"===e.transition.mode;u&&(n.transition.afterLeave=a),y.isInFallback=!0,d(n,o,null,!0),u||a()},move(e,t,n){y.activeBranch&&f(y.activeBranch,e,t,n),y.container=e},next:()=>y.activeBranch&&h(y.activeBranch),registerDep(e,t){const n=!!y.pendingBranch;n&&y.deps++;const o=e.vnode.el;e.asyncDep.catch((t=>{Et(t,e,0)})).then((r=>{if(e.isUnmounted||y.isUnmounted||y.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;Br(e,r),o&&(s.el=o);const l=!o&&e.subTree.el;t(e,s,m(o||e.subTree.el),o?null:h(e.subTree),y,i,c),l&&g(l),un(e,s.el),n&&0==--y.deps&&y.resolve()}))},unmount(e,t){y.isUnmounted=!0,y.activeBranch&&d(y.activeBranch,n,e,t),y.pendingBranch&&d(y.pendingBranch,n,e,t)}};return y}function hn(e){let t;if(F(e)){const n=e._c;n&&(e._d=!1,ir()),e=e(),n&&(e._d=!0,t=sr,lr())}if(T(e)){const t=sn(e);e=t}return e=br(e),t&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function mn(e,t){t&&t.pendingBranch?T(e)?t.effects.push(...e):t.effects.push(e):Kt(e)}function gn(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,un(o,r))}function vn(e,t){if(Fr){let n=Fr.provides;const o=Fr.parent&&Fr.parent.provides;o===n&&(n=Fr.provides=Object.create(o)),n[e]=t}else;}function yn(e,t,n=!1){const o=Fr||en;if(o){const r=null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&F(t)?t.call(o.proxy):t}}function bn(e,t){return Sn(e,null,t)}const _n={};function xn(e,t,n){return Sn(e,t,n)}function Sn(e,t,{immediate:n,deep:o,flush:r,onTrack:s,onTrigger:i}=m,l=Fr){let c,a,u=!1,p=!1;if(pt(e)?(c=()=>e.value,u=!!e._shallow):st(e)?(c=()=>e,o=!0):T(e)?(p=!0,u=e.some(st),c=()=>e.map((e=>pt(e)?e.value:st(e)?wn(e):F(e)?Tt(e,l,2):void 0))):c=F(e)?t?()=>Tt(e,l,2):()=>{if(!l||!l.isUnmounted)return a&&a(),Nt(e,l,3,[f])}:v,t&&o){const e=c;c=()=>wn(e())}let f=e=>{a=y.options.onStop=()=>{Tt(e,l,4)}},d=p?[]:_n;const h=()=>{if(y.active)if(t){const e=y();(o||u||(p?e.some(((e,t)=>G(e,d[t]))):G(e,d)))&&(a&&a(),Nt(t,l,3,[e,d===_n?void 0:d,f]),d=e)}else y()};let g;h.allowRecurse=!!t,g="sync"===r?h:"post"===r?()=>Vo(h,l&&l.suspense):()=>{!l||l.isMounted?function(e){zt(e,It,Ot,Pt)}(h):h()};const y=ne(c,{lazy:!0,onTrack:s,onTrigger:i,scheduler:g});return Ur(y,l),t?n?h():d=y():"post"===r?Vo(y,l&&l.suspense):y(),()=>{oe(y),l&&C(l.effects,y)}}function Cn(e,t,n){const o=this.proxy,r=A(e)?e.includes(".")?kn(o,e):()=>o[e]:e.bind(o,o);let s;return F(t)?s=t:(s=t.handler,n=t),Sn(r,s.bind(o),n,this)}function kn(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{wn(e,t)}));else if(R(e))for(const n in e)wn(e[n],t);return e}function Tn(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Zn((()=>{e.isMounted=!0})),Yn((()=>{e.isUnmounting=!0})),e}const Nn=[Function,Array],En={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Nn,onEnter:Nn,onAfterEnter:Nn,onEnterCancelled:Nn,onBeforeLeave:Nn,onLeave:Nn,onAfterLeave:Nn,onLeaveCancelled:Nn,onBeforeAppear:Nn,onAppear:Nn,onAfterAppear:Nn,onAppearCancelled:Nn},setup(e,{slots:t}){const n=Ar(),o=Tn();let r;return()=>{const s=t.default&&In(t.default(),!0);if(!s||!s.length)return;const i=ct(e),{mode:l}=i,c=s[0];if(o.isLeaving)return An(c);const a=Mn(c);if(!a)return An(c);const u=Fn(a,i,o,n);On(a,u);const p=n.subTree,f=p&&Mn(p);let d=!1;const{getTransitionKey:h}=a.type;if(h){const e=h();void 0===r?r=e:e!==r&&(r=e,d=!0)}if(f&&f.type!==nr&&(!fr(a,f)||d)){const e=Fn(f,i,o,n);if(On(f,e),"out-in"===l)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,n.update()},An(c);"in-out"===l&&a.type!==nr&&(e.delayLeave=(e,t,n)=>{$n(o,f)[String(f.key)]=f,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return c}}};function $n(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Fn(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:p,onLeave:f,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:m,onAppear:g,onAfterAppear:v,onAppearCancelled:y}=t,b=String(e.key),_=$n(n,e),x=(e,t)=>{e&&Nt(e,o,9,t)},S={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=m||l}t._leaveCb&&t._leaveCb(!0);const s=_[b];s&&fr(e,s)&&s.el._leaveCb&&s.el._leaveCb(),x(o,[t])},enter(e){let t=c,o=a,s=u;if(!n.isMounted){if(!r)return;t=g||c,o=v||a,s=y||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,x(t?s:o,[e]),S.delayedLeave&&S.delayedLeave(),e._enterCb=void 0)};t?(t(e,l),t.length<=1&&l()):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();x(p,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),x(n?h:d,[t]),t._leaveCb=void 0,_[r]===e&&delete _[r])};_[r]=e,f?(f(t,i),f.length<=1&&i()):i()},clone:e=>Fn(e,t,n,o)};return S}function An(e){if(Vn(e))return(e=vr(e)).children=null,e}function Mn(e){return Vn(e)?e.children?e.children[0]:void 0:e}function On(e,t){6&e.shapeFlag&&e.component?On(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function In(e,t=!1){let n=[],o=0;for(let r=0;r1)for(let r=0;r!!e.type.__asyncLoader;function Rn(e,{vnode:{ref:t,props:n,children:o}}){const r=gr(e,n,o);return r.ref=t,r}const Vn=e=>e.type.__isKeepAlive,Ln={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Ar(),o=n.ctx;if(!o.renderer)return t.default;const r=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:p}}}=o,f=p("div");function d(e){zn(e),u(e,n,l)}function h(e){r.forEach(((t,n)=>{const o=Dr(t.type);!o||e&&e(o)||m(n)}))}function m(e){const t=r.get(e);i&&t.type===i.type?i&&zn(i):d(t),r.delete(e),s.delete(e)}o.activate=(e,t,n,o,r)=>{const s=e.component;a(e,t,n,0,l),c(s.vnode,e,t,n,s,l,o,e.slotScopeIds,r),Vo((()=>{s.isDeactivated=!1,s.a&&q(s.a);const t=e.props&&e.props.onVnodeMounted;t&&Do(t,s.parent,e)}),l)},o.deactivate=e=>{const t=e.component;a(e,f,null,1,l),Vo((()=>{t.da&&q(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&Do(n,t.parent,e),t.isDeactivated=!0}),l)},xn((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>jn(e,t))),t&&h((e=>!jn(t,e)))}),{flush:"post",deep:!0});let g=null;const v=()=>{null!=g&&r.set(g,Kn(n.subTree))};return Zn(v),Xn(v),Yn((()=>{r.forEach((e=>{const{subTree:t,suspense:o}=n,r=Kn(t);if(e.type!==r.type)d(e);else{zn(r);const e=r.component.da;e&&Vo(e,o)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),o=n[0];if(n.length>1)return i=null,n;if(!(pr(o)&&(4&o.shapeFlag||128&o.shapeFlag)))return i=null,o;let l=Kn(o);const c=l.type,a=Dr(Bn(l)?l.type.__asyncResolved||{}:c),{include:u,exclude:p,max:f}=e;if(u&&(!a||!jn(u,a))||p&&a&&jn(p,a))return i=l,o;const d=null==l.key?c:l.key,h=r.get(d);return l.el&&(l=vr(l),128&o.shapeFlag&&(o.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&On(l,l.transition),l.shapeFlag|=512,s.delete(d),s.add(d)):(s.add(d),f&&s.size>parseInt(f,10)&&m(s.values().next().value)),l.shapeFlag|=256,i=l,o}}};function jn(e,t){return T(e)?e.some((e=>jn(e,t))):A(e)?e.split(",").indexOf(t)>-1:!!e.test&&e.test(t)}function Un(e,t){Dn(e,"a",t)}function Hn(e,t){Dn(e,"da",t)}function Dn(e,t,n=Fr){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}e()});if(Gn(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Vn(e.parent.vnode)&&Wn(o,t,n,e),e=e.parent}}function Wn(e,t,n,o){const r=Gn(t,e,o,!0);eo((()=>{C(o[t],r)}),n)}function zn(e){let t=e.shapeFlag;256&t&&(t-=256),512&t&&(t-=512),e.shapeFlag=t}function Kn(e){return 128&e.shapeFlag?e.ssContent:e}function Gn(e,t,n=Fr,o=!1){if(n){const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ce(),Mr(n);const r=Nt(t,n,e,o);return Mr(null),ae(),r});return o?r.unshift(s):r.push(s),s}}const qn=e=>(t,n=Fr)=>(!Pr||"sp"===e)&&Gn(e,t,n),Jn=qn("bm"),Zn=qn("m"),Qn=qn("bu"),Xn=qn("u"),Yn=qn("bum"),eo=qn("um"),to=qn("sp"),no=qn("rtg"),oo=qn("rtc");function ro(e,t=Fr){Gn("ec",e,t)}let so=!0;function io(e){const t=ao(e),n=e.proxy,o=e.ctx;so=!1,t.beforeCreate&&lo(t.beforeCreate,e,"bc");const{data:r,computed:s,methods:i,watch:l,provide:c,inject:a,created:u,beforeMount:p,mounted:f,beforeUpdate:d,updated:h,activated:m,deactivated:g,beforeUnmount:y,unmounted:b,render:_,renderTracked:x,renderTriggered:S,errorCaptured:C,serverPrefetch:k,expose:w,inheritAttrs:N,components:E,directives:$}=t;if(a&&function(e,t,n=v){T(e)&&(e=ho(e));for(const o in e){const n=e[o];t[o]=O(n)?"default"in n?yn(n.from||o,n.default,!0):yn(n.from||o):yn(n)}}(a,o,null),i)for(const v in i){const e=i[v];F(e)&&(o[v]=e.bind(n))}if(r){const t=r.call(n,n);O(t)&&(e.data=tt(t))}if(so=!0,s)for(const T in s){const e=s[T],t=zr({get:F(e)?e.bind(n,n):F(e.get)?e.get.bind(n,n):v,set:!F(e)&&F(e.set)?e.set.bind(n):v});Object.defineProperty(o,T,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e})}if(l)for(const v in l)co(l[v],o,n,v);if(c){const e=F(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{vn(t,e[t])}))}function A(e,t){T(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&lo(u,e,"c"),A(Jn,p),A(Zn,f),A(Qn,d),A(Xn,h),A(Un,m),A(Hn,g),A(ro,C),A(oo,x),A(no,S),A(Yn,y),A(eo,b),A(to,k),T(w))if(w.length){const t=e.exposed||(e.exposed={});w.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});_&&e.render===v&&(e.render=_),null!=N&&(e.inheritAttrs=N),E&&(e.components=E),$&&(e.directives=$)}function lo(e,t,n){Nt(T(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function co(e,t,n,o){const r=o.includes(".")?kn(n,o):()=>n[o];if(A(e)){const n=t[e];F(n)&&xn(r,n)}else if(F(e))xn(r,e.bind(n));else if(O(e))if(T(e))e.forEach((e=>co(e,t,n,o)));else{const o=F(e.handler)?e.handler.bind(n):t[e.handler];F(o)&&xn(r,o,e)}}function ao(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:r.length||n||o?(c={},r.length&&r.forEach((e=>uo(c,e,i,!0))),uo(c,t,i)):c=t,s.set(t,c),c}function uo(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&uo(e,s,n,!0),r&&r.forEach((t=>uo(e,t,n,!0)));for(const i in t)if(o&&"expose"===i);else{const o=po[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const po={data:fo,props:go,emits:go,methods:go,computed:go,beforeCreate:mo,created:mo,beforeMount:mo,mounted:mo,beforeUpdate:mo,updated:mo,beforeDestroy:mo,destroyed:mo,activated:mo,deactivated:mo,errorCaptured:mo,serverPrefetch:mo,components:go,directives:go,watch:function(e,t){if(!e)return t;if(!t)return e;const n=S(Object.create(null),e);for(const o in t)n[o]=mo(e[o],t[o]);return n},provide:fo,inject:function(e,t){return go(ho(e),ho(t))}};function fo(e,t){return t?e?function(){return S(F(e)?e.call(this,this):e,F(t)?t.call(this,this):t)}:t:e}function ho(e){if(T(e)){const t={};for(let n=0;n{c=!0;const[n,o]=bo(e,t,!0);S(i,n),o&&l.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!s&&!c)return o.set(e,g),g;if(T(s))for(let u=0;u-1,n[1]=o<0||t-1||w(n,"default"))&&l.push(e)}}}const a=[i,l];return o.set(e,a),a}function _o(e){return"$"!==e[0]}function xo(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function So(e,t){return xo(e)===xo(t)}function Co(e,t){return T(t)?t.findIndex((t=>So(t,e))):F(t)&&So(t,e)?0:-1}const ko=e=>"_"===e[0]||"$stable"===e,wo=e=>T(e)?e.map(br):[br(e)],To=(e,t,n)=>{const o=on((e=>wo(t(e))),n);return o._c=!1,o},No=(e,t,n)=>{const o=e._ctx;for(const r in e){if(ko(r))continue;const n=e[r];if(F(n))t[r]=To(0,n,o);else if(null!=n){const e=wo(n);t[r]=()=>e}}},Eo=(e,t)=>{const n=wo(t);e.slots.default=()=>n};function $o(e,t,n,o){const r=e.dirs,s=t&&t.dirs;for(let i=0;i(s.has(e)||(e&&F(e.install)?(s.add(e),e.install(l,...t)):F(e)&&(s.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(s,c,a){if(!i){const u=gr(n,o);return u.appContext=r,c&&t?t(u,s):e(u,s,a),i=!0,l._container=s,s.__vue_app__=l,u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l)};return l}}let Oo=!1;const Io=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,Po=e=>8===e.nodeType;function Bo(e){const{mt:t,p:n,o:{patchProp:o,nextSibling:r,parentNode:s,remove:i,insert:l,createComment:c}}=e,a=(n,o,i,l,c,m=!1)=>{const g=Po(n)&&"["===n.data,v=()=>d(n,o,i,l,c,g),{type:y,ref:b,shapeFlag:_}=o,x=n.nodeType;o.el=n;let S=null;switch(y){case tr:3!==x?S=v():(n.data!==o.children&&(Oo=!0,n.data=o.children),S=r(n));break;case nr:S=8!==x||g?v():r(n);break;case or:if(1===x){S=n;const e=!o.children.length;for(let t=0;t{l=l||!!t.dynamicChildren;const{type:c,props:a,patchFlag:u,shapeFlag:f,dirs:d}=t,h="input"===c&&d||"option"===c;if(h||-1!==u){if(d&&$o(t,null,n,"created"),a)if(h||!l||16&u||32&u)for(const t in a)(h&&t.endsWith("value")||_(t)&&!L(t))&&o(e,t,null,a[t]);else a.onClick&&o(e,"onClick",null,a.onClick);let c;if((c=a&&a.onVnodeBeforeMount)&&Do(c,n,t),d&&$o(t,null,n,"beforeMount"),((c=a&&a.onVnodeMounted)||d)&&mn((()=>{c&&Do(c,n,t),d&&$o(t,null,n,"mounted")}),r),16&f&&(!a||!a.innerHTML&&!a.textContent)){let o=p(e.firstChild,t,e,n,r,s,l);for(;o;){Oo=!0;const e=o;o=o.nextSibling,i(e)}}else 8&f&&e.textContent!==t.children&&(Oo=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,u=c.length;for(let p=0;p{const{slotScopeIds:u}=t;u&&(i=i?i.concat(u):u);const f=s(e),d=p(r(e),t,f,n,o,i,a);return d&&Po(d)&&"]"===d.data?r(t.anchor=d):(Oo=!0,l(t.anchor=c("]"),f,d),d)},d=(e,t,o,l,c,a)=>{if(Oo=!0,t.el=null,a){const t=h(e);for(;;){const n=r(e);if(!n||n===t)break;i(n)}}const u=r(e),p=s(e);return i(e),n(null,t,p,u,o,l,Io(p),c),u},h=e=>{let t=0;for(;e;)if((e=r(e))&&Po(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return r(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),void qt();Oo=!1,a(t.firstChild,e,null,null,null),qt(),Oo&&console.error("Hydration completed but contains mismatches.")},a]}const Ro={scheduler:Dt,allowRecurse:!0},Vo=mn,Lo=(e,t,n,o,r=!1)=>{if(T(e))return void e.forEach(((e,s)=>Lo(e,t&&(T(t)?t[s]:t),n,o,r)));if(Bn(o)&&!r)return;const s=4&o.shapeFlag?jr(o.component)||o.component.proxy:o.el,i=r?null:s,{i:l,r:c}=e,a=t&&t.r,u=l.refs===m?l.refs={}:l.refs,p=l.setupState;if(null!=a&&a!==c&&(A(a)?(u[a]=null,w(p,a)&&(p[a]=null)):pt(a)&&(a.value=null)),A(c)){const e=()=>{u[c]=i,w(p,c)&&(p[c]=i)};i?(e.id=-1,Vo(e,n)):e()}else if(pt(c)){const e=()=>{c.value=i};i?(e.id=-1,Vo(e,n)):e()}else F(c)&&Tt(c,l,12,[i,u])};function jo(e){return Ho(e)}function Uo(e){return Ho(e,Bo)}function Ho(e,t){const{insert:n,remove:o,patchProp:r,forcePatchProp:s,createElement:i,createText:l,createComment:c,setText:a,setElementText:u,parentNode:p,nextSibling:f,setScopeId:d=v,cloneNode:h,insertStaticContent:y}=e,b=(e,t,n,o=null,r=null,s=null,i=!1,l=null,c=!!t.dynamicChildren)=>{e&&!fr(e,t)&&(o=Y(e),K(e,r,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:p}=t;switch(a){case tr:_(e,t,n,o);break;case nr:x(e,t,n,o);break;case or:null==e&&C(t,n,o,i);break;case er:M(e,t,n,o,r,s,i,l,c);break;default:1&p?k(e,t,n,o,r,s,i,l,c):6&p?O(e,t,n,o,r,s,i,l,c):(64&p||128&p)&&a.process(e,t,n,o,r,s,i,l,c,te)}null!=u&&r&&Lo(u,e&&e.ref,s,t||e,!t)},_=(e,t,o,r)=>{if(null==e)n(t.el=l(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&a(n,t.children)}},x=(e,t,o,r)=>{null==e?n(t.el=c(t.children||""),o,r):t.el=e.el},C=(e,t,n,o)=>{[e.el,e.anchor]=y(e.children,t,n,o)},k=(e,t,n,o,r,s,i,l,c)=>{i=i||"svg"===t.type,null==e?T(t,n,o,r,s,i,l,c):$(e,t,r,s,i,l,c)},T=(e,t,o,s,l,c,a,p)=>{let f,d;const{type:m,props:g,shapeFlag:v,transition:y,patchFlag:b,dirs:_}=e;if(e.el&&void 0!==h&&-1===b)f=e.el=h(e.el);else{if(f=e.el=i(e.type,c,g&&g.is,g),8&v?u(f,e.children):16&v&&E(e.children,f,null,s,l,c&&"foreignObject"!==m,a,p),_&&$o(e,null,s,"created"),g){for(const t in g)L(t)||r(f,t,null,g[t],c,e.children,s,l,X);(d=g.onVnodeBeforeMount)&&Do(d,s,e)}N(f,e,e.scopeId,a,s)}_&&$o(e,null,s,"beforeMount");const x=(!l||l&&!l.pendingBranch)&&y&&!y.persisted;x&&y.beforeEnter(f),n(f,t,o),((d=g&&g.onVnodeMounted)||x||_)&&Vo((()=>{d&&Do(d,s,e),x&&y.enter(f),_&&$o(e,null,s,"mounted")}),l)},N=(e,t,n,o,r)=>{if(n&&d(e,n),o)for(let s=0;s{for(let a=c;a{const a=t.el=e.el;let{patchFlag:p,dynamicChildren:f,dirs:d}=t;p|=16&e.patchFlag;const h=e.props||m,g=t.props||m;let v;if((v=g.onVnodeBeforeUpdate)&&Do(v,n,t,e),d&&$o(t,e,n,"beforeUpdate"),p>0){if(16&p)A(a,t,h,g,n,o,i);else if(2&p&&h.class!==g.class&&r(a,"class",null,g.class,i),4&p&&r(a,"style",h.style,g.style,i),8&p){const l=t.dynamicProps;for(let t=0;t{v&&Do(v,n,t,e),d&&$o(t,e,n,"updated")}),o)},F=(e,t,n,o,r,s,i)=>{for(let l=0;l{if(n!==o){for(const a in o){if(L(a))continue;const u=o[a],p=n[a];(u!==p||s&&s(e,a))&&r(e,a,p,u,c,t.children,i,l,X)}if(n!==m)for(const s in n)L(s)||s in o||r(e,s,n[s],null,c,t.children,i,l,X)}},M=(e,t,o,r,s,i,c,a,u)=>{const p=t.el=e?e.el:l(""),f=t.anchor=e?e.anchor:l("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;h&&(u=!0),m&&(a=a?a.concat(m):m),null==e?(n(p,o,r),n(f,o,r),E(t.children,o,f,s,i,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?(F(e.dynamicChildren,h,o,s,i,c,a),(null!=t.key||s&&t===s.subTree)&&Wo(e,t,!0)):j(e,t,o,f,s,i,c,a,u)},O=(e,t,n,o,r,s,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,c):P(t,n,o,r,s,i,c):B(e,t,c)},P=(e,t,n,o,r,s,i)=>{const l=e.component=function(e,t,n){const o=e.type,r=(t?t.appContext:e.appContext)||Er,s={uid:$r++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:bo(o,r),emitsOptions:Xt(o,r),emit:null,emitted:null,propsDefaults:m,inheritAttrs:o.inheritAttrs,ctx:m,data:m,props:m,attrs:m,slots:m,refs:m,setupState:m,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=Qt.bind(null,s),s}(e,o,r);if(Vn(e)&&(l.ctx.renderer=te),function(e,t=!1){Pr=t;const{props:n,children:o}=e.vnode,r=Or(e);(function(e,t,n,o=!1){const r={},s={};J(s,dr,1),e.propsDefaults=Object.create(null),vo(e,t,r,s);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);e.props=n?o?r:nt(r):e.type.props?r:s,e.attrs=s})(e,n,r,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=ct(t),J(t,"_",n)):No(t,e.slots={})}else e.slots={},t&&Eo(e,t);J(e.slots,dr,1)})(e,o);const s=r?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=at(new Proxy(e.ctx,Tr));const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?Lr(e):null;Fr=e,ce();const r=Tt(o,e,0,[e.props,n]);if(ae(),Fr=null,I(r)){const n=()=>{Fr=null};if(r.then(n,n),t)return r.then((t=>{Br(e,t)})).catch((t=>{Et(t,e,0)}));e.asyncDep=r}else Br(e,r)}else Vr(e)}(e,t):void 0;Pr=!1}(l),l.asyncDep){if(r&&r.registerDep(l,R),!e.el){const e=l.subTree=gr(nr);x(null,e,t,n)}}else R(l,e,t,n,r,s,i)},B=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:l,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||o!==i&&(o?!i||an(o,i,a):!!i);if(1024&c)return!0;if(16&c)return o?an(o,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;tMt&&At.splice(t,1)}(o.update),o.update()}else t.component=e.component,t.el=e.el,o.vnode=t},R=(e,t,n,o,r,s,i)=>{e.update=ne((function(){if(e.isMounted){let t,{next:n,bu:o,u:l,parent:c,vnode:a}=e,u=n;n?(n.el=a.el,V(e,n,i)):n=a,o&&q(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Do(t,c,n,a);const f=rn(e),d=e.subTree;e.subTree=f,b(d,f,p(d.el),Y(d),e,r,s),n.el=f.el,null===u&&un(e,f.el),l&&Vo(l,r),(t=n.props&&n.props.onVnodeUpdated)&&Vo((()=>Do(t,c,n,a)),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:p}=e;if(a&&q(a),(i=c&&c.onVnodeBeforeMount)&&Do(i,p,t),l&&se){const n=()=>{e.subTree=rn(e),se(l,e.subTree,e,r,null)};Bn(t)?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const i=e.subTree=rn(e);b(null,i,n,o,e,r,s),t.el=i.el}if(u&&Vo(u,r),i=c&&c.onVnodeMounted){const e=t;Vo((()=>Do(i,p,e)),r)}256&t.shapeFlag&&e.a&&Vo(e.a,r),e.isMounted=!0,t=n=o=null}}),Ro)},V=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,l=ct(r),[c]=e.propsOptions;let a=!1;if(!(o||i>0)||16&i){let o;vo(e,t,r,s)&&(a=!0);for(const s in l)t&&(w(t,s)||(o=W(s))!==s&&w(t,o))||(c?!n||void 0===n[s]&&void 0===n[o]||(r[s]=yo(c,l,s,void 0,e,!0)):delete r[s]);if(s!==l)for(const e in s)t&&w(t,e)||(delete s[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:r}=e;let s=!0,i=m;if(32&o.shapeFlag){const e=t._;e?n&&1===e?s=!1:(S(r,t),n||1!==e||delete r._):(s=!t.$stable,No(t,r)),i=t}else t&&(Eo(e,t),i={default:1});if(s)for(const l in r)ko(l)||l in i||delete r[l]})(e,t.children,n),ce(),Gt(void 0,e.update),ae()},j=(e,t,n,o,r,s,i,l,c=!1)=>{const a=e&&e.children,p=e?e.shapeFlag:0,f=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void D(a,f,n,o,r,s,i,l,c);if(256&d)return void U(a,f,n,o,r,s,i,l,c)}8&h?(16&p&&X(a,r,s),f!==a&&u(n,f)):16&p?16&h?D(a,f,n,o,r,s,i,l,c):X(a,r,s,!0):(8&p&&u(n,""),16&h&&E(f,n,o,r,s,i,l,c))},U=(e,t,n,o,r,s,i,l,c)=>{const a=(e=e||g).length,u=(t=t||g).length,p=Math.min(a,u);let f;for(f=0;fu?X(e,r,s,!0,!1,p):E(t,n,o,r,s,i,l,c,p)},D=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let p=e.length-1,f=u-1;for(;a<=p&&a<=f;){const o=e[a],u=t[a]=c?_r(t[a]):br(t[a]);if(!fr(o,u))break;b(o,u,n,null,r,s,i,l,c),a++}for(;a<=p&&a<=f;){const o=e[p],a=t[f]=c?_r(t[f]):br(t[f]);if(!fr(o,a))break;b(o,a,n,null,r,s,i,l,c),p--,f--}if(a>p){if(a<=f){const e=f+1,p=ef)for(;a<=p;)K(e[a],r,s,!0),a++;else{const d=a,h=a,m=new Map;for(a=h;a<=f;a++){const e=t[a]=c?_r(t[a]):br(t[a]);null!=e.key&&m.set(e.key,a)}let v,y=0;const _=f-h+1;let x=!1,S=0;const C=new Array(_);for(a=0;a<_;a++)C[a]=0;for(a=d;a<=p;a++){const o=e[a];if(y>=_){K(o,r,s,!0);continue}let u;if(null!=o.key)u=m.get(o.key);else for(v=h;v<=f;v++)if(0===C[v-h]&&fr(o,t[v])){u=v;break}void 0===u?K(o,r,s,!0):(C[u-h]=a+1,u>=S?S=u:x=!0,b(o,t[u],n,null,r,s,i,l,c),y++)}const k=x?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o0&&(t[o]=n[s-1]),n[s]=o)}}s=n.length,i=n[s-1];for(;s-- >0;)n[s]=i,i=t[i];return n}(C):g;for(v=k.length-1,a=_-1;a>=0;a--){const e=h+a,p=t[e],f=e+1{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void z(e.component.subTree,t,o,r);if(128&u)return void e.suspense.move(t,o,r);if(64&u)return void l.move(e,t,o,te);if(l===er){n(i,t,o);for(let e=0;e{let s;for(;e&&e!==t;)s=f(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);if(2!==r&&1&u&&c)if(0===r)c.beforeEnter(i),n(i,t,o),Vo((()=>c.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=c,l=()=>n(i,t,o),a=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,a):a()}else n(i,t,o)},K=(e,t,n,o=!1,r=!1)=>{const{type:s,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:p,dirs:f}=e;if(null!=l&&Lo(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const d=1&u&&f;let h;if((h=i&&i.onVnodeBeforeUnmount)&&Do(h,t,e),6&u)Q(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);d&&$o(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,r,te,o):a&&(s!==er||p>0&&64&p)?X(a,t,n,!1,!0):(s===er&&(128&p||256&p)||!r&&16&u)&&X(c,t,n),o&&G(e)}((h=i&&i.onVnodeUnmounted)||d)&&Vo((()=>{h&&Do(h,t,e),d&&$o(e,null,t,"unmounted")}),n)},G=e=>{const{type:t,el:n,anchor:r,transition:s}=e;if(t===er)return void Z(n,r);if(t===or)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),o(e),e=n;o(t)})(e);const i=()=>{o(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:o}=s,r=()=>t(n,i);o?o(e.el,i,r):r()}else i()},Z=(e,t)=>{let n;for(;e!==t;)n=f(e),o(e),e=n;o(t)},Q=(e,t,n)=>{const{bum:o,effects:r,update:s,subTree:i,um:l}=e;if(o&&q(o),r)for(let c=0;c{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},X=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i6&e.shapeFlag?Y(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),ee=(e,t,n)=>{null==e?t._vnode&&K(t._vnode,null,null,!0):b(t._vnode||null,e,t,null,null,null,n),qt(),t._vnode=e},te={p:b,um:K,m:z,r:G,mt:P,mc:E,pc:j,pbc:F,n:Y,o:e};let re,se;return t&&([re,se]=t(te)),{render:ee,hydrate:re,createApp:Mo(ee,re)}}function Do(e,t,n,o=null){Nt(e,t,7,[n,o])}function Wo(e,t,n=!1){const o=e.children,r=t.children;if(T(o)&&T(r))for(let s=0;se&&(e.disabled||""===e.disabled),Ko=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,Go=(e,t)=>{const n=e&&e.to;if(A(n)){if(t){return t(n)}return null}return n};function qo(e,t,n,{o:{insert:o},m:r},s=2){0===s&&o(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,p=2===s;if(p&&o(i,t,n),(!p||zo(u))&&16&c)for(let f=0;f{16&v&&u(y,e,t,r,s,i,l,c)};g?b(n,a):p&&b(p,f)}else{t.el=e.el;const o=t.anchor=e.anchor,u=t.target=e.target,d=t.targetAnchor=e.targetAnchor,m=zo(e.props),v=m?n:u,y=m?o:d;if(i=i||Ko(u),b?(f(e.dynamicChildren,b,v,r,s,i,l),Wo(e,t,!0)):c||p(e,t,v,y,r,s,i,l,!1),g)m||qo(t,n,o,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=Go(t.props,h);e&&qo(t,e,null,a,0)}else m&&qo(t,u,d,a,1)}},remove(e,t,n,o,{um:r,o:{remove:s}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:p,props:f}=e;if(p&&s(u),(i||!zo(f))&&(s(a),16&l))for(let d=0;d0?sr||g:null,lr(),cr>0&&sr&&sr.push(s),s}function pr(e){return!!e&&!0===e.__v_isVNode}function fr(e,t){return e.type===t.type&&e.key===t.key}const dr="__vInternal",hr=({key:e})=>null!=e?e:null,mr=({ref:e})=>null!=e?A(e)||pt(e)||F(e)?{i:en,r:e}:e:null,gr=function(e,t=null,n=null,o=0,s=null,i=!1){e&&e!==Qo||(e=nr);if(pr(e)){const o=vr(e,t,!0);return n&&xr(o,n),o}l=e,F(l)&&"__vccOpts"in l&&(e=e.__vccOpts);var l;if(t){(lt(t)||dr in t)&&(t=S({},t));let{class:e,style:n}=t;e&&!A(e)&&(t.class=c(e)),O(n)&&(lt(n)&&!T(n)&&(n=S({},n)),t.style=r(n))}const a=A(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:O(e)?4:F(e)?2:0,u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&hr(t),ref:t&&mr(t),scopeId:tn,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,shapeFlag:a,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null};xr(u,n),128&a&&e.normalize(u);cr>0&&!i&&sr&&(o>0||6&a)&&32!==o&&sr.push(u);return u};function vr(e,t,n=!1){const{props:o,ref:r,patchFlag:s,children:i}=e,l=t?Sr(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&hr(l),ref:t&&t.ref?n&&r?T(r)?r.concat(mr(t)):[r,mr(t)]:mr(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==er?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&vr(e.ssContent),ssFallback:e.ssFallback&&vr(e.ssFallback),el:e.el,anchor:e.anchor}}function yr(e=" ",t=0){return gr(tr,null,e,t)}function br(e){return null==e||"boolean"==typeof e?gr(nr):T(e)?gr(er,null,e.slice()):"object"==typeof e?_r(e):gr(tr,null,String(e))}function _r(e){return null===e.el?e:vr(e)}function xr(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(T(t))n=16;else if("object"==typeof t){if(1&o||64&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),xr(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||dr in t?3===o&&en&&(1===en.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=en}}else F(t)?(t={default:t,_ctx:en},n=32):(t=String(t),64&o?(n=16,t=[yr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Sr(...e){const t=S({},e[0]);for(let n=1;n!pr(e)||e.type!==nr&&!(e.type===er&&!Cr(e.children))))?e:null}const kr=e=>e?Or(e)?jr(e)||e.proxy:kr(e.parent):null,wr=S(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>kr(e.parent),$root:e=>kr(e.root),$emit:e=>e.emit,$options:e=>ao(e),$forceUpdate:e=>()=>Dt(e.update),$nextTick:e=>Ht.bind(e.proxy),$watch:e=>Cn.bind(e)}),Tr={get({_:e},t){const{ctx:n,setupState:o,data:r,props:s,accessCache:i,type:l,appContext:c}=e;let a;if("$"!==t[0]){const l=i[t];if(void 0!==l)switch(l){case 0:return o[t];case 1:return r[t];case 3:return n[t];case 2:return s[t]}else{if(o!==m&&w(o,t))return i[t]=0,o[t];if(r!==m&&w(r,t))return i[t]=1,r[t];if((a=e.propsOptions[0])&&w(a,t))return i[t]=2,s[t];if(n!==m&&w(n,t))return i[t]=3,n[t];so&&(i[t]=4)}}const u=wr[t];let p,f;return u?("$attrs"===t&&ue(e,0,t),u(e)):(p=l.__cssModules)&&(p=p[t])?p:n!==m&&w(n,t)?(i[t]=3,n[t]):(f=c.config.globalProperties,w(f,t)?f[t]:void 0)},set({_:e},t,n){const{data:o,setupState:r,ctx:s}=e;if(r!==m&&w(r,t))r[t]=n;else if(o!==m&&w(o,t))o[t]=n;else if(w(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:s}},i){let l;return void 0!==n[i]||e!==m&&w(e,i)||t!==m&&w(t,i)||(l=s[0])&&w(l,i)||w(o,i)||w(wr,i)||w(r.config.globalProperties,i)}},Nr=S({},Tr,{get(e,t){if(t!==Symbol.unscopables)return Tr.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!n(t)}),Er=Fo();let $r=0;let Fr=null;const Ar=()=>Fr||en,Mr=e=>{Fr=e};function Or(e){return 4&e.vnode.shapeFlag}let Ir,Pr=!1;function Br(e,t,n){F(t)?e.render=t:O(t)&&(e.setupState=vt(t)),Vr(e)}function Rr(e){Ir=e}function Vr(e,t,n){const o=e.type;if(!e.render){if(Ir&&!o.render){const t=o.template;if(t){const{isCustomElement:n,compilerOptions:r}=e.appContext.config,{delimiters:s,compilerOptions:i}=o,l=S(S({isCustomElement:n,delimiters:s},r),i);o.render=Ir(t,l)}}e.render=o.render||v,e.render._rc&&(e.withProxy=new Proxy(e.ctx,Nr))}Fr=e,ce(),io(e),ae(),Fr=null}function Lr(e){const t=t=>{e.exposed=t||{}};return{attrs:e.attrs,slots:e.slots,emit:e.emit,expose:t}}function jr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(vt(at(e.exposed)),{get:(t,n)=>n in t?t[n]:n in wr?wr[n](e):void 0}))}function Ur(e,t=Fr){t&&(t.effects||(t.effects=[])).push(e)}const Hr=/(?:^|[-_])(\w)/g;function Dr(e){return F(e)&&e.displayName||e.name}function Wr(e,t,n=!1){let o=Dr(t);if(!o&&t.__file){const e=t.__file.match(/([^/\\]+)\.\w+$/);e&&(o=e[1])}if(!o&&e&&e.parent){const n=e=>{for(const n in e)if(e[n]===t)return n};o=n(e.components||e.parent.type.components)||n(e.appContext.components)}return o?o.replace(Hr,(e=>e.toUpperCase())).replace(/[-_]/g,""):n?"App":"Anonymous"}function zr(e){const t=function(e){let t,n;return F(e)?(t=e,n=v):(t=e.get,n=e.set),new xt(t,n,F(e)||!e.set)}(e);return Ur(t.effect),t}function Kr(){return null}const Gr=Kr;function qr(){const e=Ar();return e.setupContext||(e.setupContext=Lr(e))}function Jr(e,t,n){const o=arguments.length;return 2===o?O(t)&&!T(t)?pr(t)?gr(e,null,[t]):gr(e,t):gr(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&pr(n)&&(n=[n]),gr(e,t,n))}const Zr=Symbol("");const Qr="3.1.5",Xr="undefined"!=typeof document?document:null,Yr=new Map,es={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?Xr.createElementNS("http://www.w3.org/2000/svg",e):Xr.createElement(e,n?{is:n}:void 0);return"select"===e&&o&&null!=o.multiple&&r.setAttribute("multiple",o.multiple),r},createText:e=>Xr.createTextNode(e),createComment:e=>Xr.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xr.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o){const r=n?n.previousSibling:t.lastChild;let s=Yr.get(e);if(!s){const t=Xr.createElement("template");if(t.innerHTML=o?`${e}`:e,s=t.content,o){const e=s.firstChild;for(;e.firstChild;)s.appendChild(e.firstChild);s.removeChild(e)}Yr.set(e,s)}return t.insertBefore(s.cloneNode(!0),n),[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const ts=/\s*!important$/;function ns(e,t,n){if(T(n))n.forEach((n=>ns(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const o=function(e,t){const n=rs[t];if(n)return n;let o=H(t);if("filter"!==o&&o in e)return rs[t]=o;o=z(o);for(let r=0;rdocument.createEvent("Event").timeStamp&&(is=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);ls=!!(e&&Number(e[1])<=53)}let cs=0;const as=Promise.resolve(),us=()=>{cs=0};function ps(e,t,n,o){e.addEventListener(t,n,o)}function fs(e,t,n,o,r=null){const s=e._vei||(e._vei={}),i=s[t];if(o&&i)i.value=o;else{const[n,l]=function(e){let t;if(ds.test(e)){let n;for(t={};n=e.match(ds);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[W(e.slice(2)),t]}(t);if(o){ps(e,n,s[t]=function(e,t){const n=e=>{const o=e.timeStamp||is();(ls||o>=n.attached-1)&&Nt(function(e,t){if(T(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>cs||(as.then(us),cs=is()))(),n}(o,r),l)}else i&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,i,l),s[t]=void 0)}}const ds=/(?:Once|Passive|Capture)$/;const hs=/^on[a-z]/;function ms(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{ms(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)gs(e.el,t);else if(e.type===er)e.children.forEach((e=>ms(e,t)));else if(e.type===or){let{el:n,anchor:o}=e;for(;n&&(gs(n,t),n!==o);)n=n.nextSibling}}function gs(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const vs="transition",ys="animation",bs=(e,{slots:t})=>Jr(En,ks(e),t);bs.displayName="Transition";const _s={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},xs=bs.props=S({},En.props,_s),Ss=(e,t=[])=>{T(e)?e.forEach((e=>e(...t))):e&&e(...t)},Cs=e=>!!e&&(T(e)?e.some((e=>e.length>1)):e.length>1);function ks(e){const t={};for(const S in e)S in _s||(t[S]=e[S]);if(!1===e.css)return t;const{name:n="v",type:o,duration:r,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(O(e))return[ws(e.enter),ws(e.leave)];{const t=ws(e);return[t,t]}}(r),m=h&&h[0],g=h&&h[1],{onBeforeEnter:v,onEnter:y,onEnterCancelled:b,onLeave:_,onLeaveCancelled:x,onBeforeAppear:C=v,onAppear:k=y,onAppearCancelled:w=b}=t,T=(e,t,n)=>{Ns(e,t?u:l),Ns(e,t?a:i),n&&n()},N=(e,t)=>{Ns(e,d),Ns(e,f),t&&t()},E=e=>(t,n)=>{const r=e?k:y,i=()=>T(t,e,n);Ss(r,[t,i]),Es((()=>{Ns(t,e?c:s),Ts(t,e?u:l),Cs(r)||Fs(t,o,m,i)}))};return S(t,{onBeforeEnter(e){Ss(v,[e]),Ts(e,s),Ts(e,i)},onBeforeAppear(e){Ss(C,[e]),Ts(e,c),Ts(e,a)},onEnter:E(!1),onAppear:E(!0),onLeave(e,t){const n=()=>N(e,t);Ts(e,p),Is(),Ts(e,f),Es((()=>{Ns(e,p),Ts(e,d),Cs(_)||Fs(e,o,g,n)})),Ss(_,[e,n])},onEnterCancelled(e){T(e,!1),Ss(b,[e])},onAppearCancelled(e){T(e,!0),Ss(w,[e])},onLeaveCancelled(e){N(e),Ss(x,[e])}})}function ws(e){return Z(e)}function Ts(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function Ns(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Es(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let $s=0;function Fs(e,t,n,o){const r=e._endId=++$s,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=As(e,t);if(!i)return o();const a=i+"end";let u=0;const p=()=>{e.removeEventListener(a,f),s()},f=t=>{t.target===e&&++u>=c&&p()};setTimeout((()=>{u(n[e]||"").split(", "),r=o("transitionDelay"),s=o("transitionDuration"),i=Ms(r,s),l=o("animationDelay"),c=o("animationDuration"),a=Ms(l,c);let u=null,p=0,f=0;t===vs?i>0&&(u=vs,p=i,f=s.length):t===ys?a>0&&(u=ys,p=a,f=c.length):(p=Math.max(i,a),u=p>0?i>a?vs:ys:null,f=u?u===vs?s.length:c.length:0);return{type:u,timeout:p,propCount:f,hasTransform:u===vs&&/\b(transform|all)(,|$)/.test(n.transitionProperty)}}function Ms(e,t){for(;e.lengthOs(t)+Os(e[n]))))}function Os(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function Is(){return document.body.offsetHeight}const Ps=new WeakMap,Bs=new WeakMap,Rs={name:"TransitionGroup",props:S({},xs,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ar(),o=Tn();let r,s;return Xn((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\s+/).forEach((e=>e&&o.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display="none";const r=1===t.nodeType?t:t.parentNode;r.appendChild(o);const{hasTransform:s}=As(o);return r.removeChild(o),s}(r[0].el,n.vnode.el,t))return;r.forEach(Vs),r.forEach(Ls);const o=r.filter(js);Is(),o.forEach((e=>{const n=e.el,o=n.style;Ts(n,t),o.transform=o.webkitTransform=o.transitionDuration="";const r=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",r),n._moveCb=null,Ns(n,t))};n.addEventListener("transitionend",r)}))})),()=>{const i=ct(e),l=ks(i);let c=i.tag||er;r=s,s=t.default?In(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"];return T(t)?e=>q(t,e):t};function Hs(e){e.target.composing=!0}function Ds(e){const t=e.target;t.composing&&(t.composing=!1,function(e,t){const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,"input"))}const Ws={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=Us(r);const s=o||"number"===e.type;ps(e,t?"change":"input",(t=>{if(t.target.composing)return;let o=e.value;n?o=o.trim():s&&(o=Z(o)),e._assign(o)})),n&&ps(e,"change",(()=>{e.value=e.value.trim()})),t||(ps(e,"compositionstart",Hs),ps(e,"compositionend",Ds),ps(e,"change",Ds))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{trim:n,number:o}},r){if(e._assign=Us(r),e.composing)return;if(document.activeElement===e){if(n&&e.value.trim()===t)return;if((o||"number"===e.type)&&Z(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},zs={deep:!0,created(e,t,n){e._assign=Us(n),ps(e,"change",(()=>{const t=e._modelValue,n=Zs(e),o=e.checked,r=e._assign;if(T(t)){const e=d(t,n),s=-1!==e;if(o&&!s)r(t.concat(n));else if(!o&&s){const n=[...t];n.splice(e,1),r(n)}}else if(E(t)){const e=new Set(t);o?e.add(n):e.delete(n),r(e)}else r(Qs(e,o))}))},mounted:Ks,beforeUpdate(e,t,n){e._assign=Us(n),Ks(e,t,n)}};function Ks(e,{value:t,oldValue:n},o){e._modelValue=t,T(t)?e.checked=d(t,o.props.value)>-1:E(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=f(t,Qs(e,!0)))}const Gs={created(e,{value:t},n){e.checked=f(t,n.props.value),e._assign=Us(n),ps(e,"change",(()=>{e._assign(Zs(e))}))},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=Us(o),t!==n&&(e.checked=f(t,o.props.value))}},qs={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=E(t);ps(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?Z(Zs(e)):Zs(e)));e._assign(e.multiple?r?new Set(t):t:t[0])})),e._assign=Us(o)},mounted(e,{value:t}){Js(e,t)},beforeUpdate(e,t,n){e._assign=Us(n)},updated(e,{value:t}){Js(e,t)}};function Js(e,t){const n=e.multiple;if(!n||T(t)||E(t)){for(let o=0,r=e.options.length;o-1:t.has(s);else if(f(Zs(r),t))return void(e.selectedIndex!==o&&(e.selectedIndex=o))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function Zs(e){return"_value"in e?e._value:e.value}function Qs(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Xs={created(e,t,n){Ys(e,t,n,null,"created")},mounted(e,t,n){Ys(e,t,n,null,"mounted")},beforeUpdate(e,t,n,o){Ys(e,t,n,o,"beforeUpdate")},updated(e,t,n,o){Ys(e,t,n,o,"updated")}};function Ys(e,t,n,o,r){let s;switch(e.tagName){case"SELECT":s=qs;break;case"TEXTAREA":s=Ws;break;default:switch(n.props&&n.props.type){case"checkbox":s=zs;break;case"radio":s=Gs;break;default:s=Ws}}const i=s[r];i&&i(e,t,n,o)}const ei=["ctrl","shift","alt","meta"],ti={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ei.some((n=>e[`${n}Key`]&&!t.includes(n)))},ni={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},oi={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):ri(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),ri(e,!0),o.enter(e)):o.leave(e,(()=>{ri(e,!1)})):ri(e,t))},beforeUnmount(e,{value:t}){ri(e,t)}};function ri(e,t){e.style.display=t?e._vod:"none"}const si=S({patchProp:(e,t,n,r,s=!1,i,l,c,a)=>{switch(t){case"class":!function(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,r,s);break;case"style":!function(e,t,n){const o=e.style;if(n)if(A(n)){if(t!==n){const t=o.display;o.cssText=n,"_vod"in e&&(o.display=t)}}else{for(const e in n)ns(o,e,n[e]);if(t&&!A(t))for(const e in t)null==n[e]&&ns(o,e,"")}else e.removeAttribute("style")}(e,n,r);break;default:_(t)?x(t)||fs(e,t,0,r,l):function(e,t,n,o){if(o)return"innerHTML"===t||!!(t in e&&hs.test(t)&&F(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(hs.test(t)&&A(n))return!1;return t in e}(e,t,r,s)?function(e,t,n,o,r,s,i){if("innerHTML"===t||"textContent"===t)return o&&i(o,r,s),void(e[t]=null==n?"":n);if("value"===t&&"PROGRESS"!==e.tagName){e._value=n;const o=null==n?"":n;return e.value!==o&&(e.value=o),void(null==n&&e.removeAttribute(t))}if(""===n||null==n){const o=typeof e[t];if(""===n&&"boolean"===o)return void(e[t]=!0);if(null==n&&"string"===o)return e[t]="",void e.removeAttribute(t);if("number"===o){try{e[t]=0}catch(l){}return void e.removeAttribute(t)}}try{e[t]=n}catch(c){}}(e,t,r,i,l,c,a):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,n,r,s){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(ss,t.slice(6,t.length)):e.setAttributeNS(ss,t,n);else{const r=o(t);null==n||r&&!1===n?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,r,s))}},forcePatchProp:(e,t)=>"value"===t},es);let ii,li=!1;function ci(){return ii||(ii=jo(si))}function ai(){return ii=li?ii:Uo(si),li=!0,ii}function ui(e){if(A(e)){return document.querySelector(e)}return e}function pi(e){throw e}function fi(e){}function di(e,t,n,o){const r=new SyntaxError(String(e));return r.code=e,r.loc=t,r}const hi=Symbol(""),mi=Symbol(""),gi=Symbol(""),vi=Symbol(""),yi=Symbol(""),bi=Symbol(""),_i=Symbol(""),xi=Symbol(""),Si=Symbol(""),Ci=Symbol(""),ki=Symbol(""),wi=Symbol(""),Ti=Symbol(""),Ni=Symbol(""),Ei=Symbol(""),$i=Symbol(""),Fi=Symbol(""),Ai=Symbol(""),Mi=Symbol(""),Oi=Symbol(""),Ii=Symbol(""),Pi=Symbol(""),Bi=Symbol(""),Ri=Symbol(""),Vi=Symbol(""),Li=Symbol(""),ji=Symbol(""),Ui=Symbol(""),Hi=Symbol(""),Di=Symbol(""),Wi=Symbol(""),zi=Symbol(""),Ki={[hi]:"Fragment",[mi]:"Teleport",[gi]:"Suspense",[vi]:"KeepAlive",[yi]:"BaseTransition",[bi]:"openBlock",[_i]:"createBlock",[xi]:"createVNode",[Si]:"createCommentVNode",[Ci]:"createTextVNode",[ki]:"createStaticVNode",[wi]:"resolveComponent",[Ti]:"resolveDynamicComponent",[Ni]:"resolveDirective",[Ei]:"resolveFilter",[$i]:"withDirectives",[Fi]:"renderList",[Ai]:"renderSlot",[Mi]:"createSlots",[Oi]:"toDisplayString",[Ii]:"mergeProps",[Pi]:"toHandlers",[Bi]:"camelize",[Ri]:"capitalize",[Vi]:"toHandlerKey",[Li]:"setBlockTracking",[ji]:"pushScopeId",[Ui]:"popScopeId",[Hi]:"withScopeId",[Di]:"withCtx",[Wi]:"unref",[zi]:"isRef"};const Gi={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function qi(e,t,n,o,r,s,i,l=!1,c=!1,a=Gi){return e&&(l?(e.helper(bi),e.helper(_i)):e.helper(xi),i&&e.helper($i)),{type:13,tag:t,props:n,children:o,patchFlag:r,dynamicProps:s,directives:i,isBlock:l,disableTracking:c,loc:a}}function Ji(e,t=Gi){return{type:17,loc:t,elements:e}}function Zi(e,t=Gi){return{type:15,loc:t,properties:e}}function Qi(e,t){return{type:16,loc:Gi,key:A(e)?Xi(e,!0):e,value:t}}function Xi(e,t,n=Gi,o=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:o}}function Yi(e,t=Gi){return{type:8,loc:t,children:e}}function el(e,t=[],n=Gi){return{type:14,loc:n,callee:e,arguments:t}}function tl(e,t,n=!1,o=!1,r=Gi){return{type:18,params:e,returns:t,newline:n,isSlot:o,loc:r}}function nl(e,t,n,o=!0){return{type:19,test:e,consequent:t,alternate:n,newline:o,loc:Gi}}const ol=e=>4===e.type&&e.isStatic,rl=(e,t)=>e===t||e===W(t);function sl(e){return rl(e,"Teleport")?mi:rl(e,"Suspense")?gi:rl(e,"KeepAlive")?vi:rl(e,"BaseTransition")?yi:void 0}const il=/^\d|[^\$\w]/,ll=e=>!il.test(e),cl=/[A-Za-z_$\xA0-\uFFFF]/,al=/[\.\?\w$\xA0-\uFFFF]/,ul=/\s+[.[]\s*|\s*[.[]\s+/g,pl=e=>{e=e.trim().replace(ul,(e=>e.trim()));let t=0,n=[],o=0,r=0,s=null;for(let i=0;i4===e.key.type&&e.key.content===n))}e||r.properties.unshift(t),o=r}else o=el(n.helper(Ii),[Zi([t]),r]);13===e.type?e.props=o:e.arguments[2]=o}function Cl(e,t){return`_${t}_${e.replace(/[^\w]/g,"_")}`}const kl=/&(gt|lt|amp|apos|quot);/g,wl={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},Tl={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:y,isPreTag:y,isCustomElement:y,decodeEntities:e=>e.replace(kl,((e,t)=>wl[t])),onError:pi,onWarn:fi,comments:!1};function Nl(e,t={}){const n=function(e,t){const n=S({},Tl);for(const o in t)n[o]=t[o]||Tl[o];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),o=Ul(n);return function(e,t=Gi){return{type:0,children:e,helpers:[],components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(El(n,0,[]),Hl(n,o))}function El(e,t,n){const o=Dl(n),r=o?o.ns:0,s=[];for(;!ql(e,t,n);){const i=e.source;let l;if(0===t||1===t)if(!e.inVPre&&Wl(i,e.options.delimiters[0]))l=Vl(e,t);else if(0===t&&"<"===i[0])if(1===i.length);else if("!"===i[1])l=Wl(i,"\x3c!--")?Al(e):Wl(i,""===i[2]){zl(e,3);continue}if(/[a-z]/i.test(i[2])){Pl(e,1,o);continue}l=Ml(e)}else/[a-z]/i.test(i[1])?l=Ol(e,n):"?"===i[1]&&(l=Ml(e));if(l||(l=Ll(e,t)),T(l))for(let e=0;e/.exec(e.source);if(o){n=e.source.slice(4,o.index);const t=e.source.slice(0,o.index);let r=1,s=0;for(;-1!==(s=t.indexOf("\x3c!--",r));)zl(e,s-r+1),r=s+1;zl(e,o.index+o[0].length-r+1)}else n=e.source.slice(4),zl(e,e.source.length);return{type:3,content:n,loc:Hl(e,t)}}function Ml(e){const t=Ul(e),n="?"===e.source[1]?1:2;let o;const r=e.source.indexOf(">");return-1===r?(o=e.source.slice(n),zl(e,e.source.length)):(o=e.source.slice(n,r),zl(e,r+1)),{type:3,content:o,loc:Hl(e,t)}}function Ol(e,t){const n=e.inPre,o=e.inVPre,r=Dl(t),s=Pl(e,0,r),i=e.inPre&&!n,l=e.inVPre&&!o;if(s.isSelfClosing||e.options.isVoidTag(s.tag))return e.options.isPreTag(s.tag)&&(e.inPre=!1),s;t.push(s);const c=e.options.getTextMode(s,r),a=El(e,c,t);if(t.pop(),s.children=a,Jl(e.source,s.tag))Pl(e,1,r);else if(0===e.source.length&&"script"===s.tag.toLowerCase()){const e=a[0];e&&Wl(e.loc.source,"\x3c!--")}return s.loc=Hl(e,s.loc.start),i&&(e.inPre=!1),l&&(e.inVPre=!1),s}const Il=t("if,else,else-if,for,slot");function Pl(e,t,n){const o=Ul(e),r=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),s=r[1],i=e.options.getNamespace(s,n);zl(e,r[0].length),Kl(e);const l=Ul(e),c=e.source;e.options.isPreTag(s)&&(e.inPre=!0);let a=Bl(e,t);0===t&&!e.inVPre&&a.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,S(e,l),e.source=c,a=Bl(e,t).filter((e=>"v-pre"!==e.name)));let u=!1;if(0===e.source.length||(u=Wl(e.source,"/>"),zl(e,u?2:1)),1===t)return;let p=0;return e.inVPre||("slot"===s?p=2:"template"===s?a.some((e=>7===e.type&&Il(e.name)))&&(p=3):function(e,t,n){const o=n.options;if(o.isCustomElement(e))return!1;if("component"===e||/^[A-Z]/.test(e)||sl(e)||o.isBuiltInComponent&&o.isBuiltInComponent(e)||o.isNativeTag&&!o.isNativeTag(e))return!0;for(let r=0;r0&&!Wl(e.source,">")&&!Wl(e.source,"/>");){if(Wl(e.source,"/")){zl(e,1),Kl(e);continue}const r=Rl(e,o);0===t&&n.push(r),/^[^\t\r\n\f />]/.test(e.source),Kl(e)}return n}function Rl(e,t){const n=Ul(e),o=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(o),t.add(o);{const e=/["'<]/g;let t;for(;t=e.exec(o););}let r;zl(e,o.length),/^[\t\r\n\f ]*=/.test(e.source)&&(Kl(e),zl(e,1),Kl(e),r=function(e){const t=Ul(e);let n;const o=e.source[0],r='"'===o||"'"===o;if(r){zl(e,1);const t=e.source.indexOf(o);-1===t?n=jl(e,e.source.length,4):(n=jl(e,t,4),zl(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const o=/["'<=`]/g;let r;for(;r=o.exec(t[0]););n=jl(e,t[0].length,4)}return{content:n,isQuoted:r,loc:Hl(e,t)}}(e));const s=Hl(e,n);if(!e.inVPre&&/^(v-|:|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(o);let i,l=t[1]||(Wl(o,":")?"bind":Wl(o,"@")?"on":"slot");if(t[2]){const r="slot"===l,s=o.lastIndexOf(t[2]),c=Hl(e,Gl(e,n,s),Gl(e,n,s+t[2].length+(r&&t[3]||"").length));let a=t[2],u=!0;a.startsWith("[")?(u=!1,a.endsWith("]"),a=a.substr(1,a.length-2)):r&&(a+=t[3]||""),i={type:4,content:a,isStatic:u,constType:u?3:0,loc:c}}if(r&&r.isQuoted){const e=r.loc;e.start.offset++,e.start.column++,e.end=dl(e.start,r.content),e.source=e.source.slice(1,-1)}const c=t[3]?t[3].substr(1).split("."):[];return{type:7,name:l,exp:r&&{type:4,content:r.content,isStatic:!1,constType:0,loc:r.loc},arg:i,modifiers:c,loc:s}}return{type:6,name:o,value:r&&{type:2,content:r.content,loc:r.loc},loc:s}}function Vl(e,t){const[n,o]=e.options.delimiters,r=e.source.indexOf(o,n.length);if(-1===r)return;const s=Ul(e);zl(e,n.length);const i=Ul(e),l=Ul(e),c=r-n.length,a=e.source.slice(0,c),u=jl(e,c,t),p=u.trim(),f=u.indexOf(p);f>0&&hl(i,a,f);return hl(l,a,c-(u.length-p.length-f)),zl(e,o.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:p,loc:Hl(e,i,l)},loc:Hl(e,s)}}function Ll(e,t){const n=["<",e.options.delimiters[0]];3===t&&n.push("]]>");let o=e.source.length;for(let s=0;st&&(o=t)}const r=Ul(e);return{type:2,content:jl(e,o,t),loc:Hl(e,r)}}function jl(e,t,n){const o=e.source.slice(0,t);return zl(e,t),2===n||3===n||-1===o.indexOf("&")?o:e.options.decodeEntities(o,4===n)}function Ul(e){const{column:t,line:n,offset:o}=e;return{column:t,line:n,offset:o}}function Hl(e,t,n){return{start:t,end:n=n||Ul(e),source:e.originalSource.slice(t.offset,n.offset)}}function Dl(e){return e[e.length-1]}function Wl(e,t){return e.startsWith(t)}function zl(e,t){const{source:n}=e;hl(e,n,t),e.source=n.slice(t)}function Kl(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&zl(e,t[0].length)}function Gl(e,t,n){return dl(t,e.originalSource.slice(t.offset,n),n)}function ql(e,t,n){const o=e.source;switch(t){case 0:if(Wl(o,"=0;--e)if(Jl(o,n[e].tag))return!0;break;case 1:case 2:{const e=Dl(n);if(e&&Jl(o,e.tag))return!0;break}case 3:if(Wl(o,"]]>"))return!0}return!o}function Jl(e,t){return Wl(e,"]/.test(e[2+t.length]||">")}function Zl(e,t){Xl(e,t,Ql(e,e.children[0]))}function Ql(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!xl(t)}function Xl(e,t,n=!1){let o=!1,r=!0;const{children:s}=e;for(let i=0;i0){if(s<3&&(r=!1),s>=2){e.codegenNode.patchFlag="-1",e.codegenNode=t.hoist(e.codegenNode),o=!0;continue}}else{const n=e.codegenNode;if(13===n.type){const o=nc(n);if((!o||512===o||1===o)&&ec(e,t)>=2){const o=tc(e);o&&(n.props=t.hoist(o))}}}}else if(12===e.type){const n=Yl(e.content,t);n>0&&(n<3&&(r=!1),n>=2&&(e.codegenNode=t.hoist(e.codegenNode),o=!0))}if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,Xl(e,t),n&&t.scopes.vSlot--}else if(11===e.type)Xl(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n1)for(let r=0;r`_${Ki[k.helper(e)]}`,replaceNode(e){k.parent.children[k.childIndex]=k.currentNode=e},removeNode(e){const t=e?k.parent.children.indexOf(e):k.currentNode?k.childIndex:-1;e&&e!==k.currentNode?k.childIndex>t&&(k.childIndex--,k.onNodeRemoved()):(k.currentNode=null,k.onNodeRemoved()),k.parent.children.splice(t,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){k.hoists.push(e);const t=Xi(`_hoisted_${k.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:Gi}}(++k.cached,e,t)};return k}function rc(e,t){const n=oc(e,t);sc(e,n),t.hoistStatic&&Zl(e,n),t.ssr||function(e,t){const{helper:n,removeHelper:o}=t,{children:r}=e;if(1===r.length){const t=r[0];if(Ql(e,t)&&t.codegenNode){const r=t.codegenNode;13===r.type&&(r.isBlock||(o(xi),r.isBlock=!0,n(bi),n(_i))),e.codegenNode=r}else e.codegenNode=t}else if(r.length>1){let o=64;e.codegenNode=qi(t,n(hi),void 0,e.children,o+"",void 0,void 0,!0)}}(e,n),e.helpers=[...n.helpers.keys()],e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached}function sc(e,t){t.currentNode=e;const{nodeTransforms:n}=t,o=[];for(let s=0;s{n--};for(;nt===e:t=>e.test(t);return(e,o)=>{if(1===e.type){const{props:r}=e;if(3===e.tagType&&r.some(bl))return;const s=[];for(let i=0;i`_${Ki[e]}`,push(e,t){p.code+=e},indent(){f(++p.indentLevel)},deindent(e=!1){e?--p.indentLevel:f(--p.indentLevel)},newline(){f(p.indentLevel)}};function f(e){p.push("\n"+" ".repeat(e))}return p}(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:o,push:r,prefixIdentifiers:s,indent:i,deindent:l,newline:c,ssr:a}=n,u=e.helpers.length>0,p=!s&&"module"!==o;!function(e,t){const{push:n,newline:o,runtimeGlobalName:r}=t,s=r,i=e=>`${Ki[e]}: _${Ki[e]}`;if(e.helpers.length>0&&(n(`const _Vue = ${s}\n`),e.hoists.length)){n(`const { ${[xi,Si,Ci,ki].filter((t=>e.helpers.includes(t))).map(i).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:o}=t;o(),e.forEach(((e,r)=>{e&&(n(`const _hoisted_${r+1} = `),fc(e,t),o())})),t.pure=!1})(e.hoists,t),o(),n("return ")}(e,n);if(r(`function ${a?"ssrRender":"render"}(${(a?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ")}) {`),i(),p&&(r("with (_ctx) {"),i(),u&&(r(`const { ${e.helpers.map((e=>`${Ki[e]}: _${Ki[e]}`)).join(", ")} } = _Vue`),r("\n"),c())),e.components.length&&(ac(e.components,"component",n),(e.directives.length||e.temps>0)&&c()),e.directives.length&&(ac(e.directives,"directive",n),e.temps>0&&c()),e.temps>0){r("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(r("\n"),c()),a||r("return "),e.codegenNode?fc(e.codegenNode,n):r("null"),p&&(l(),r("}")),l(),r("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function ac(e,t,{helper:n,push:o,newline:r,isTS:s}){const i=n("component"===t?wi:Ni);for(let l=0;l3||!1;t.push("["),n&&t.indent(),pc(e,t,n),n&&t.deindent(),t.push("]")}function pc(e,t,n=!1,o=!0){const{push:r,newline:s}=t;for(let i=0;ie||"null"))}([s,i,l,c,a]),t),n(")"),p&&n(")");u&&(n(", "),fc(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:o,pure:r}=t,s=A(e.callee)?e.callee:o(e.callee);r&&n(lc);n(s+"(",e),pc(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:o,deindent:r,newline:s}=t,{properties:i}=e;if(!i.length)return void n("{}",e);const l=i.length>1||!1;n(l?"{":"{ "),l&&o();for(let c=0;c "),(c||l)&&(n("{"),o());i?(c&&n("return "),T(i)?uc(i,t):fc(i,t)):l&&fc(l,t);(c||l)&&(r(),n("}"));a&&n(")")}(e,t);break;case 19:!function(e,t){const{test:n,consequent:o,alternate:r,newline:s}=e,{push:i,indent:l,deindent:c,newline:a}=t;if(4===n.type){const e=!ll(n.content);e&&i("("),dc(n,t),e&&i(")")}else i("("),fc(n,t),i(")");s&&l(),t.indentLevel++,s||i(" "),i("? "),fc(o,t),t.indentLevel--,s&&a(),s||i(" "),i(": ");const u=19===r.type;u||t.indentLevel++;fc(r,t),u||t.indentLevel--;s&&c(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:o,indent:r,deindent:s,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${o(Li)}(-1),`),i());n(`_cache[${e.index}] = `),fc(e.value,t),e.isVNode&&(n(","),i(),n(`${o(Li)}(1),`),i(),n(`_cache[${e.index}]`),s());n(")")}(e,t)}}function dc(e,t){const{content:n,isStatic:o}=e;t.push(o?JSON.stringify(n):n,e)}function hc(e,t){for(let n=0;nfunction(e,t,n,o){if(!("else"===t.name||t.exp&&t.exp.content.trim())){t.exp=Xi("true",!1,t.exp?t.exp.loc:e.loc)}if("if"===t.name){const r=vc(e,t),s={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(s),o)return o(s,r,!0)}else{const r=n.parent.children;let s=r.indexOf(e);for(;s-- >=-1;){const i=r[s];if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){n.removeNode();const r=vc(e,t);i.branches.push(r);const s=o&&o(i,r,!1);sc(r,n),s&&s(),n.currentNode=null}break}n.removeNode(i)}}}(e,t,n,((e,t,o)=>{const r=n.parent.children;let s=r.indexOf(e),i=0;for(;s-- >=0;){const e=r[s];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(o)e.codegenNode=yc(t,i,n);else{(function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode)).alternate=yc(t,i+e.branches.length-1,n)}}}))));function vc(e,t){return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:3!==e.tagType||ml(e,"for")?[e]:e.children,userKey:gl(e,"key")}}function yc(e,t,n){return e.condition?nl(e.condition,bc(e,t,n),el(n.helper(Si),['""',"true"])):bc(e,t,n)}function bc(e,t,n){const{helper:o,removeHelper:r}=n,s=Qi("key",Xi(`${t}`,!1,Gi,2)),{children:i}=e,l=i[0];if(1!==i.length||1!==l.type){if(1===i.length&&11===l.type){const e=l.codegenNode;return Sl(e,s,n),e}{let t=64;return qi(n,o(hi),Zi([s]),i,t+"",void 0,void 0,!0,!1,e.loc)}}{const e=l.codegenNode;return 13!==e.type||e.isBlock||(r(xi),e.isBlock=!0,o(bi),o(_i)),Sl(e,s,n),e}}const _c=ic("for",((e,t,n)=>{const{helper:o,removeHelper:r}=n;return function(e,t,n,o){if(!t.exp)return;const r=kc(t.exp);if(!r)return;const{scopes:s}=n,{source:i,value:l,key:c,index:a}=r,u={type:11,loc:t.loc,source:i,valueAlias:l,keyAlias:c,objectIndexAlias:a,parseResult:r,children:_l(e)?e.children:[e]};n.replaceNode(u),s.vFor++;const p=o&&o(u);return()=>{s.vFor--,p&&p()}}(e,t,n,(t=>{const s=el(o(Fi),[t.source]),i=gl(e,"key"),l=i?Qi("key",6===i.type?Xi(i.value.content,!0):i.exp):null,c=4===t.source.type&&t.source.constType>0,a=c?64:i?128:256;return t.codegenNode=qi(n,o(hi),void 0,s,a+"",void 0,void 0,!0,!c,e.loc),()=>{let i;const a=_l(e),{children:u}=t,p=1!==u.length||1!==u[0].type,f=xl(e)?e:a&&1===e.children.length&&xl(e.children[0])?e.children[0]:null;f?(i=f.codegenNode,a&&l&&Sl(i,l,n)):p?i=qi(n,o(hi),l?Zi([l]):void 0,e.children,"64",void 0,void 0,!0):(i=u[0].codegenNode,a&&l&&Sl(i,l,n),i.isBlock!==!c&&(i.isBlock?(r(bi),r(_i)):r(xi)),i.isBlock=!c,i.isBlock?(o(bi),o(_i)):o(xi)),s.arguments.push(tl(Tc(t.parseResult),i,!0))}}))}));const xc=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Sc=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Cc=/^\(|\)$/g;function kc(e,t){const n=e.loc,o=e.content,r=o.match(xc);if(!r)return;const[,s,i]=r,l={source:wc(n,i.trim(),o.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0};let c=s.trim().replace(Cc,"").trim();const a=s.indexOf(c),u=c.match(Sc);if(u){c=c.replace(Sc,"").trim();const e=u[1].trim();let t;if(e&&(t=o.indexOf(e,a+c.length),l.key=wc(n,e,t)),u[2]){const r=u[2].trim();r&&(l.index=wc(n,r,o.indexOf(r,l.key?t+e.length:a+c.length)))}}return c&&(l.value=wc(n,c,a)),l}function wc(e,t,n){return Xi(t,!1,fl(e,n,t.length))}function Tc({value:e,key:t,index:n}){const o=[];return e&&o.push(e),t&&(e||o.push(Xi("_",!1)),o.push(t)),n&&(t||(e||o.push(Xi("_",!1)),o.push(Xi("__",!1))),o.push(n)),o}const Nc=Xi("undefined",!1),Ec=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=ml(e,"slot");if(n)return t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},$c=(e,t,n)=>tl(e,t,!1,!0,t.length?t[0].loc:n);function Fc(e,t,n=$c){t.helper(Di);const{children:o,loc:r}=e,s=[],i=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const c=ml(e,"slot",!0);if(c){const{arg:e,exp:t}=c;e&&!ol(e)&&(l=!0),s.push(Qi(e||Xi("default",!0),n(t,o,r)))}let a=!1,u=!1;const p=[],f=new Set;for(let m=0;mQi("default",n(e,t,r));a?p.length&&p.some((e=>Oc(e)))&&(u||s.push(e(void 0,p))):s.push(e(void 0,o))}const d=l?2:Mc(e.children)?3:1;let h=Zi(s.concat(Qi("_",Xi(d+"",!1))),r);return i.length&&(h=el(t.helper(Mi),[h,Ji(i)])),{slots:h,hasDynamicSlots:l}}function Ac(e,t){return Zi([Qi("name",e),Qi("fn",t)])}function Mc(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:o}=e,r=1===e.tagType;let s=r?function(e,t,n=!1){let{tag:o}=e;const r=Lc(o),s=gl(e,"is");if(s)if(r){const e=6===s.type?s.value&&Xi(s.value.content,!0):s.exp;if(e)return el(t.helper(Ti),[e])}else 6===s.type&&s.value.content.startsWith("vue:")&&(o=s.value.content.slice(4));const i=!r&&ml(e,"is");if(i&&i.exp)return el(t.helper(Ti),[i.exp]);const l=sl(o)||t.isBuiltInComponent(o);if(l)return n||t.helper(l),l;return t.helper(wi),t.components.add(o),Cl(o,"component")}(e,t):`"${n}"`;let i,l,c,a,u,p,f=0,d=O(s)&&s.callee===Ti||s===mi||s===gi||!r&&("svg"===n||"foreignObject"===n||gl(e,"key",!0));if(o.length>0){const n=Bc(e,t);i=n.props,f=n.patchFlag,u=n.dynamicPropNames;const o=n.directives;p=o&&o.length?Ji(o.map((e=>function(e,t){const n=[],o=Ic.get(e);o?n.push(t.helperString(o)):(t.helper(Ni),t.directives.add(e.name),n.push(Cl(e.name,"directive")));const{loc:r}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=Xi("true",!1,r);n.push(Zi(e.modifiers.map((e=>Qi(e,t))),r))}return Ji(n,e.loc)}(e,t)))):void 0}if(e.children.length>0){s===vi&&(d=!0,f|=1024);if(r&&s!==mi&&s!==vi){const{slots:n,hasDynamicSlots:o}=Fc(e,t);l=n,o&&(f|=1024)}else if(1===e.children.length&&s!==mi){const n=e.children[0],o=n.type,r=5===o||8===o;r&&0===Yl(n,t)&&(f|=1),l=r||2===o?n:e.children}else l=e.children}0!==f&&(c=String(f),u&&u.length&&(a=function(e){let t="[";for(let n=0,o=e.length;n{if(ol(e)){const o=e.content,r=_(o);if(i||!r||"onclick"===o.toLowerCase()||"onUpdate:modelValue"===o||L(o)||(h=!0),r&&L(o)&&(g=!0),20===n.type||(4===n.type||8===n.type)&&Yl(n,t)>0)return;"ref"===o?p=!0:"class"!==o||i?"style"!==o||i?"key"===o||v.includes(o)||v.push(o):d=!0:f=!0}else m=!0};for(let _=0;_1?el(t.helper(Ii),c,s):c[0]):l.length&&(b=Zi(Rc(l),s)),m?u|=16:(f&&(u|=2),d&&(u|=4),v.length&&(u|=8),h&&(u|=32)),0!==u&&32!==u||!(p||g||a.length>0)||(u|=512),{props:b,directives:a,patchFlag:u,dynamicPropNames:v}}function Rc(e){const t=new Map,n=[];for(let o=0;o{if(xl(e)){const{children:n,loc:o}=e,{slotName:r,slotProps:s}=function(e,t){let n,o='"default"';const r=[];for(let s=0;s0){const{props:o,directives:s}=Bc(e,t,r);n=o}return{slotName:o,slotProps:n}}(e,t),i=[t.prefixIdentifiers?"_ctx.$slots":"$slots",r];s&&i.push(s),n.length&&(s||i.push("{}"),i.push(tl([],n,!1,!1,o))),t.scopeId&&!t.slotted&&(s||i.push("{}"),n.length||i.push("undefined"),i.push("true")),e.codegenNode=el(t.helper(Ai),i,o)}};const Uc=/^\s*([\w$_]+|\([^)]*?\))\s*=>|^\s*function(?:\s+[\w$]+)?\s*\(/,Hc=(e,t,n,o)=>{const{loc:r,modifiers:s,arg:i}=e;let l;if(4===i.type)if(i.isStatic){l=Xi(K(H(i.content)),!0,i.loc)}else l=Yi([`${n.helperString(Vi)}(`,i,")"]);else l=i,l.children.unshift(`${n.helperString(Vi)}(`),l.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let a=n.cacheHandlers&&!c;if(c){const e=pl(c.content),t=!(e||Uc.test(c.content)),n=c.content.includes(";");(t||a&&e)&&(c=Yi([`${t?"$event":"(...args)"} => ${n?"{":"("}`,c,n?"}":")"]))}let u={props:[Qi(l,c||Xi("() => {}",!1,r))]};return o&&(u=o(u)),a&&(u.props[0].value=n.cache(u.props[0].value)),u},Dc=(e,t,n)=>{const{exp:o,modifiers:r,loc:s}=e,i=e.arg;return 4!==i.type?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=`${i.content} || ""`),r.includes("camel")&&(4===i.type?i.content=i.isStatic?H(i.content):`${n.helperString(Bi)}(${i.content})`:(i.children.unshift(`${n.helperString(Bi)}(`),i.children.push(")"))),!o||4===o.type&&!o.content.trim()?{props:[Qi(i,Xi("",!0,s))]}:{props:[Qi(i,o)]}},Wc=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let o,r=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name])))))for(let e=0;e{if(1===e.type&&ml(e,"once",!0)){if(zc.has(e))return;return zc.add(e),t.helper(Li),()=>{const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},Gc=(e,t,n)=>{const{exp:o,arg:r}=e;if(!o)return qc();const s=o.loc.source,i=4===o.type?o.content:s;if(!i.trim()||!pl(i))return qc();const l=r||Xi("modelValue",!0),c=r?ol(r)?`onUpdate:${r.content}`:Yi(['"onUpdate:" + ',r]):"onUpdate:modelValue";let a;a=Yi([`${n.isTS?"($event: any)":"$event"} => (`,o," = $event)"]);const u=[Qi(l,e.exp),Qi(c,a)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(ll(e)?e:JSON.stringify(e))+": true")).join(", "),n=r?ol(r)?`${r.content}Modifiers`:Yi([r,' + "Modifiers"']):"modelModifiers";u.push(Qi(n,Xi(`{ ${t} }`,!1,e.loc,2)))}return qc(u)};function qc(e=[]){return{props:e}}function Jc(e,t={}){const n=t.onError||pi,o="module"===t.mode;!0===t.prefixIdentifiers?n(di(45)):o&&n(di(46));t.cacheHandlers&&n(di(47)),t.scopeId&&!o&&n(di(48));const r=A(e)?Nl(e,t):e,[s,i]=[[Kc,gc,_c,jc,Pc,Ec,Wc],{on:Hc,bind:Dc,model:Gc}];return rc(r,S({},t,{prefixIdentifiers:false,nodeTransforms:[...s,...t.nodeTransforms||[]],directiveTransforms:S({},i,t.directiveTransforms||{})})),cc(r,S({},t,{prefixIdentifiers:false}))}const Zc=Symbol(""),Qc=Symbol(""),Xc=Symbol(""),Yc=Symbol(""),ea=Symbol(""),ta=Symbol(""),na=Symbol(""),oa=Symbol(""),ra=Symbol(""),sa=Symbol("");var ia;let la;ia={[Zc]:"vModelRadio",[Qc]:"vModelCheckbox",[Xc]:"vModelText",[Yc]:"vModelSelect",[ea]:"vModelDynamic",[ta]:"withModifiers",[na]:"withKeys",[oa]:"vShow",[ra]:"Transition",[sa]:"TransitionGroup"},Object.getOwnPropertySymbols(ia).forEach((e=>{Ki[e]=ia[e]}));const ca=t("style,iframe,script,noscript",!0),aa={isVoidTag:p,isNativeTag:e=>a(e)||u(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return la||(la=document.createElement("div")),t?(la.innerHTML=`
`,la.children[0].getAttribute("foo")):(la.innerHTML=e,la.textContent)},isBuiltInComponent:e=>rl(e,"Transition")?ra:rl(e,"TransitionGroup")?sa:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(ca(e))return 2}return 0}},ua=(e,t)=>{const n=l(e);return Xi(JSON.stringify(n),!1,t,3)};const pa=t("passive,once,capture"),fa=t("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),da=t("left,right"),ha=t("onkeyup,onkeydown,onkeypress",!0),ma=(e,t)=>ol(e)&&"onclick"===e.content.toLowerCase()?Xi(t,!0):4!==e.type?Yi(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,ga=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||t.removeNode()},va=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Xi("style",!0,t.loc),exp:ua(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],ya={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Qi(Xi("innerHTML",!0,r),o||Xi("",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Qi(Xi("textContent",!0),o?el(n.helperString(Oi),[o],r):Xi("",!0))]}},model:(e,t,n)=>{const o=Gc(e,t,n);if(!o.props.length||1===t.tagType)return o;const{tag:r}=t,s=n.isCustomElement(r);if("input"===r||"textarea"===r||"select"===r||s){let e=Xc,i=!1;if("input"===r||s){const n=gl(t,"type");if(n){if(7===n.type)e=ea;else if(n.value)switch(n.value.content){case"radio":e=Zc;break;case"checkbox":e=Qc;break;case"file":i=!0}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(e=ea)}else"select"===r&&(e=Yc);i||(o.needRuntime=n.helper(e))}return o.props=o.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),o},on:(e,t,n)=>Hc(e,0,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:l,eventOptionModifiers:c}=((e,t,n,o)=>{const r=[],s=[],i=[];for(let l=0;l({props:[],needRuntime:n.helper(oa)})};const ba=Object.create(null);function _a(e,t){if(!A(e)){if(!e.nodeType)return v;e=e.innerHTML}const n=e,o=ba[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);e=t?t.innerHTML:""}const{code:r}=function(e,t={}){return Jc(e,S({},aa,t,{nodeTransforms:[ga,...va,...t.nodeTransforms||[]],directiveTransforms:S({},ya,t.directiveTransforms||{}),transformHoist:null}))}(e,S({hoistStatic:!0,onError:void 0,onWarn:v},t)),s=new Function(r)();return s._rc=!0,ba[n]=s}return Rr(_a),e.BaseTransition=En,e.Comment=nr,e.Fragment=er,e.KeepAlive=Ln,e.Static=or,e.Suspense=pn,e.Teleport=Jo,e.Text=tr,e.Transition=bs,e.TransitionGroup=Rs,e.callWithAsyncErrorHandling=Nt,e.callWithErrorHandling=Tt,e.camelize=H,e.capitalize=z,e.cloneVNode=vr,e.compatUtils=null,e.compile=_a,e.computed=zr,e.createApp=(...e)=>{const t=ci().createApp(...e),{mount:n}=t;return t.mount=e=>{const o=ui(e);if(!o)return;const r=t._component;F(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML="";const s=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),s},t},e.createBlock=ur,e.createCommentVNode=function(e="",t=!1){return t?(ir(),ur(nr,null,e)):gr(nr,null,e)},e.createHydrationRenderer=Uo,e.createRenderer=jo,e.createSSRApp=(...e)=>{const t=ai().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=ui(e);if(t)return n(t,!0,t instanceof SVGElement)},t},e.createSlots=function(e,t){for(let n=0;n{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,p()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return Pn({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const e=Fr;if(c)return()=>Rn(c,e);const t=t=>{a=null,Et(t,e,13,!o)};if(i&&e.suspense)return p().then((t=>()=>Rn(t,e))).catch((e=>(t(e),()=>o?gr(o,{error:e}):null)));const l=ft(!1),u=ft(),f=ft(!!r);return r&&setTimeout((()=>{f.value=!1}),r),null!=s&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${s}ms.`);t(e),u.value=e}}),s),p().then((()=>{l.value=!0,e.parent&&Vn(e.parent.vnode)&&Dt(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?Rn(c,e):u.value&&o?gr(o,{error:u.value}):n&&!f.value?gr(n):void 0}})},e.defineComponent=Pn,e.defineEmit=Gr,e.defineEmits=Kr,e.defineExpose=function(e){},e.defineProps=function(){return null},e.getCurrentInstance=Ar,e.getTransitionRawChildren=In,e.h=Jr,e.handleError=Et,e.hydrate=(...e)=>{ai().hydrate(...e)},e.initCustomFormatter=function(){},e.inject=yn,e.isProxy=lt,e.isReactive=st,e.isReadonly=it,e.isRef=pt,e.isRuntimeOnly=()=>!Ir,e.isVNode=pr,e.markRaw=at,e.mergeDefaults=function(e,t){for(const n in t){const o=e[n];o?o.default=t[n]:null===o&&(e[n]={default:t[n]})}return e},e.mergeProps=Sr,e.nextTick=Ht,e.onActivated=Un,e.onBeforeMount=Jn,e.onBeforeUnmount=Yn,e.onBeforeUpdate=Qn,e.onDeactivated=Hn,e.onErrorCaptured=ro,e.onMounted=Zn,e.onRenderTracked=oo,e.onRenderTriggered=no,e.onServerPrefetch=to,e.onUnmounted=eo,e.onUpdated=Xn,e.openBlock=ir,e.popScopeId=function(){tn=null},e.provide=vn,e.proxyRefs=vt,e.pushScopeId=function(e){tn=e},e.queuePostFlushCb=Kt,e.reactive=tt,e.readonly=ot,e.ref=ft,e.registerRuntimeCompiler=Rr,e.render=(...e)=>{ci().render(...e)},e.renderList=function(e,t){let n;if(T(e)||A(e)){n=new Array(e.length);for(let o=0,r=e.length;onull==e?"":O(e)?JSON.stringify(e,h,2):String(e),e.toHandlerKey=K,e.toHandlers=function(e){const t={};for(const n in e)t[K(n)]=e[n];return t},e.toRaw=ct,e.toRef=_t,e.toRefs=function(e){const t=T(e)?new Array(e.length):{};for(const n in e)t[n]=_t(e,n);return t},e.transformVNodeArgs=function(e){},e.triggerRef=function(e){pe(ct(e),"set","value",void 0)},e.unref=mt,e.useAttrs=function(){return qr().attrs},e.useContext=function(){return qr()},e.useCssModule=function(e="$style"){return m},e.useCssVars=function(e){const t=Ar();if(!t)return;const n=()=>ms(t.subTree,e(t.proxy));Zn((()=>bn(n,{flush:"post"}))),Xn(n)},e.useSSRContext=()=>{},e.useSlots=function(){return qr().slots},e.useTransitionState=Tn,e.vModelCheckbox=zs,e.vModelDynamic=Xs,e.vModelRadio=Gs,e.vModelSelect=qs,e.vModelText=Ws,e.vShow=oi,e.version=Qr,e.warn=Ct,e.watch=xn,e.watchEffect=bn,e.withAsyncContext=function(e){const t=Ar();let n=e();return Mr(null),I(n)&&(n=n.catch((e=>{throw Mr(t),e}))),[n,()=>Mr(t)]},e.withCtx=on,e.withDefaults=function(e,t){return null},e.withDirectives=function(e,t){if(null===en)return e;const n=en.proxy,o=e.dirs||(e.dirs=[]);for(let r=0;rn=>{if(!("key"in n))return;const o=W(n.key);return t.some((e=>e===o||ni[e]===o))?e(n):void 0},e.withModifiers=(e,t)=>(n,...o)=>{for(let e=0;eon,Object.defineProperty(e,"__esModule",{value:!0}),e}({}); diff --git a/hybrid/html/rtc/adapter-latest.js b/hybrid/html/rtc/adapter-latest.js new file mode 100644 index 0000000..c9e2741 --- /dev/null +++ b/hybrid/html/rtc/adapter-latest.js @@ -0,0 +1,3480 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.adapter = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + window = _ref.window; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { + shimChrome: true, + shimFirefox: true, + shimSafari: true + }; + + // Utils. + var logging = utils.log; + var browserDetails = utils.detectBrowser(window); + + var adapter = { + browserDetails: browserDetails, + commonShim: commonShim, + extractVersion: utils.extractVersion, + disableLog: utils.disableLog, + disableWarnings: utils.disableWarnings, + // Expose sdp as a convenience. For production apps include directly. + sdp: sdp + }; + + // Shim browser if found. + switch (browserDetails.browser) { + case 'chrome': + if (!chromeShim || !chromeShim.shimPeerConnection || !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. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + + chromeShim.shimGetUserMedia(window, browserDetails); + chromeShim.shimMediaStream(window, browserDetails); + chromeShim.shimPeerConnection(window, browserDetails); + chromeShim.shimOnTrack(window, browserDetails); + chromeShim.shimAddTrackRemoveTrack(window, browserDetails); + chromeShim.shimGetSendersWithDtmf(window, browserDetails); + chromeShim.shimGetStats(window, browserDetails); + chromeShim.shimSenderReceiverGetStats(window, browserDetails); + chromeShim.fixNegotiationNeeded(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + case 'firefox': + if (!firefoxShim || !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. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + + firefoxShim.shimGetUserMedia(window, browserDetails); + firefoxShim.shimPeerConnection(window, browserDetails); + firefoxShim.shimOnTrack(window, browserDetails); + firefoxShim.shimRemoveStream(window, browserDetails); + firefoxShim.shimSenderGetStats(window, browserDetails); + firefoxShim.shimReceiverGetStats(window, browserDetails); + firefoxShim.shimRTCDataChannel(window, browserDetails); + firefoxShim.shimAddTransceiver(window, browserDetails); + firefoxShim.shimGetParameters(window, browserDetails); + firefoxShim.shimCreateOffer(window, browserDetails); + firefoxShim.shimCreateAnswer(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimConnectionState(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + 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. + commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails); + commonShim.shimParameterlessSetLocalDescription(window, browserDetails); + + safariShim.shimRTCIceServerUrls(window, browserDetails); + safariShim.shimCreateOfferLegacy(window, browserDetails); + safariShim.shimCallbacksAPI(window, browserDetails); + safariShim.shimLocalStreamsAPI(window, browserDetails); + safariShim.shimRemoteStreamsAPI(window, browserDetails); + safariShim.shimTrackEventTransceiver(window, browserDetails); + safariShim.shimGetUserMedia(window, browserDetails); + safariShim.shimAudioContext(window, browserDetails); + + commonShim.shimRTCIceCandidate(window, browserDetails); + commonShim.shimMaxMessageSize(window, browserDetails); + commonShim.shimSendThrowTypeError(window, browserDetails); + commonShim.removeExtmapAllowMixed(window, browserDetails); + break; + default: + logging('Unsupported browser!'); + break; + } + + return adapter; +} + +// Browser shims. + +},{"./chrome/chrome_shim":3,"./common_shim":6,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11,"sdp":12}],3:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimMediaStream = shimMediaStream; +exports.shimOnTrack = shimOnTrack; +exports.shimGetSendersWithDtmf = shimGetSendersWithDtmf; +exports.shimGetStats = shimGetStats; +exports.shimSenderReceiverGetStats = shimSenderReceiverGetStats; +exports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative; +exports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.fixNegotiationNeeded = fixNegotiationNeeded; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) { + Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { + get: function get() { + return this._ontrack; + }, + set: function set(f) { + if (this._ontrack) { + this.removeEventListener('track', this._ontrack); + } + this.addEventListener('track', this._ontrack = f); + }, + + enumerable: true, + configurable: true + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var _this = this; + + if (!this._ontrackpoly) { + this._ontrackpoly = function (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', function (te) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === te.track.id; + }); + } else { + receiver = { track: te.track }; + } + + var event = new Event('track'); + event.track = te.track; + event.receiver = receiver; + event.transceiver = { receiver: receiver }; + event.streams = [e.stream]; + _this.dispatchEvent(event); + }); + e.stream.getTracks().forEach(function (track) { + var receiver = void 0; + if (window.RTCPeerConnection.prototype.getReceivers) { + receiver = _this.getReceivers().find(function (r) { + return r.track && r.track.id === track.id; + }); + } else { + receiver = { track: track }; + } + var event = new Event('track'); + event.track = track; + event.receiver = receiver; + event.transceiver = { receiver: 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. + utils.wrapPeerConnectionEvent(window, 'track', function (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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) { + var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) { + return { + track: 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. + }; + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + var sender = origAddTrack.apply(this, arguments); + if (!sender) { + sender = shimSenderWithDtmf(this, track); + this._senders.push(sender); + } + return sender; + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + origRemoveTrack.apply(this, arguments); + var idx = this._senders.indexOf(sender); + if (idx !== -1) { + this._senders.splice(idx, 1); + } + }; + } + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this2 = this; + + this._senders = this._senders || []; + origAddStream.apply(this, [stream]); + stream.getTracks().forEach(function (track) { + _this2._senders.push(shimSenderWithDtmf(_this2, track)); + }); + }; + + var origRemoveStream = window.RTCPeerConnection.prototype.removeStream; + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + this._senders = this._senders || []; + origRemoveStream.apply(this, [stream]); + + stream.getTracks().forEach(function (track) { + var sender = _this3._senders.find(function (s) { + return s.track === track; + }); + if (sender) { + // remove sender + _this3._senders.splice(_this3._senders.indexOf(sender), 1); + } + }); + }; + } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this4 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this4; + }); + return senders; + }; + + Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', { + get: function 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; + } + + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _this5 = this; + + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + // 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, []); + } + + var fixChromeStats_ = function fixChromeStats_(response) { + var standardReport = {}; + var reports = response.result(); + reports.forEach(function (report) { + var standardStats = { + id: report.id, + timestamp: report.timestamp, + type: { + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }[report.type] || report.type + }; + report.names().forEach(function (name) { + standardStats[name] = report.stat(name); + }); + standardReport[standardStats.id] = standardStats; + }); + + return standardReport; + }; + + // shim getStats with maplike support + var makeMapStats = function makeMapStats(stats) { + return new Map(Object.keys(stats).map(function (key) { + return [key, stats[key]]; + })); + }; + + if (arguments.length >= 2) { + var successCallbackWrapper_ = function successCallbackWrapper_(response) { + onSucc(makeMapStats(fixChromeStats_(response))); + }; + + return origGetStats.apply(this, [successCallbackWrapper_, selector]); + } + + // promise-support + return new Promise(function (resolve, reject) { + origGetStats.apply(_this5, [function (response) { + resolve(makeMapStats(fixChromeStats_(response))); + }, reject]); + }).then(onSucc, onErr); + }; +} + +function shimSenderReceiverGetStats(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) { + return; + } + + // shim sender stats. + if (!('getStats' in window.RTCRtpSender.prototype)) { + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this6 = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this6; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var sender = origAddTrack.apply(this, arguments); + sender._pc = this; + return sender; + }; + } + window.RTCRtpSender.prototype.getStats = function getStats() { + var sender = this; + return this._pc.getStats().then(function (result) { + return ( + /* 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. + */ + utils.filterStats(result, sender.track, true) + ); + }); + }; + } + + // shim receiver stats. + if (!('getStats' in window.RTCRtpReceiver.prototype)) { + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this7 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this7; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (e) { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + var receiver = this; + return this._pc.getStats().then(function (result) { + return utils.filterStats(result, receiver.track, false); + }); + }; + } + + if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) { + return; + } + + // shim RTCPeerConnection.getStats(track). + var origGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) { + var track = arguments[0]; + var sender = void 0; + var receiver = void 0; + var err = void 0; + this.getSenders().forEach(function (s) { + if (s.track === track) { + if (sender) { + err = true; + } else { + sender = s; + } + } + }); + this.getReceivers().forEach(function (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() { + var _this8 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + return Object.keys(this._shimmedLocalStreams).map(function (streamId) { + return _this8._shimmedLocalStreams[streamId][0]; + }); + }; + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) { + if (!stream) { + return origAddTrack.apply(this, arguments); + } + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + var 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; + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this9 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this9.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + }); + var existingSenders = this.getSenders(); + origAddStream.apply(this, arguments); + var newSenders = this.getSenders().filter(function (newSender) { + return existingSenders.indexOf(newSender) === -1; + }); + this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders); + }; + + var 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); + }; + + var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack; + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this10 = this; + + this._shimmedLocalStreams = this._shimmedLocalStreams || {}; + if (sender) { + Object.keys(this._shimmedLocalStreams).forEach(function (streamId) { + var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender); + if (idx !== -1) { + _this10._shimmedLocalStreams[streamId].splice(idx, 1); + } + if (_this10._shimmedLocalStreams[streamId].length === 1) { + delete _this10._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. + var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams; + window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() { + var _this11 = this; + + var nativeStreams = origGetLocalStreams.apply(this); + this._reverseStreams = this._reverseStreams || {}; + return nativeStreams.map(function (stream) { + return _this11._reverseStreams[stream.id]; + }); + }; + + var origAddStream = window.RTCPeerConnection.prototype.addStream; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this12 = this; + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + + stream.getTracks().forEach(function (track) { + var alreadyExists = _this12.getSenders().find(function (s) { + return 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]) { + var newStream = new window.MediaStream(stream.getTracks()); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + stream = newStream; + } + origAddStream.apply(this, [stream]); + }; + + var 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) { + var _this13 = this; + + if (this.signalingState === 'closed') { + throw new DOMException('The RTCPeerConnection\'s signalingState is \'closed\'.', 'InvalidStateError'); + } + var streams = [].slice.call(arguments, 1); + if (streams.length !== 1 || !streams[0].getTracks().find(function (t) { + return 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'); + } + + var alreadyExists = this.getSenders().find(function (s) { + return s.track === track; + }); + if (alreadyExists) { + throw new DOMException('Track already exists.', 'InvalidAccessError'); + } + + this._streams = this._streams || {}; + this._reverseStreams = this._reverseStreams || {}; + var 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(function () { + _this13.dispatchEvent(new Event('negotiationneeded')); + }); + } else { + var newStream = new window.MediaStream([track]); + this._streams[stream.id] = newStream; + this._reverseStreams[newStream.id] = stream; + this.addStream(newStream); + } + return this.getSenders().find(function (s) { + return s.track === track; + }); + }; + + // replace the internal stream id with the external one and + // vice versa. + function replaceInternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + function replaceExternalStreamId(pc, description) { + var sdp = description.sdp; + Object.keys(pc._reverseStreams || []).forEach(function (internalId) { + var externalStream = pc._reverseStreams[internalId]; + var internalStream = pc._streams[externalStream.id]; + sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id); + }); + return new RTCSessionDescription({ + type: description.type, + sdp: sdp + }); + } + ['createOffer', 'createAnswer'].forEach(function (method) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + var _this14 = this; + + var args = arguments; + var isLegacyCall = arguments.length && typeof arguments[0] === 'function'; + if (isLegacyCall) { + return nativeMethod.apply(this, [function (description) { + var desc = replaceInternalStreamId(_this14, description); + args[0].apply(null, [desc]); + }, function (err) { + if (args[1]) { + args[1].apply(null, err); + } + }, arguments[2]]); + } + return nativeMethod.apply(this, arguments).then(function (description) { + return replaceInternalStreamId(_this14, description); + }); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + + var 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 + + var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription'); + Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', { + get: function get() { + var description = origLocalDescription.get.apply(this); + if (description.type === '') { + return description; + } + return replaceInternalStreamId(this, description); + } + }); + + window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) { + var _this15 = this; + + 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'); + } + var 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 || {}; + var stream = void 0; + Object.keys(this._streams).forEach(function (streamid) { + var hasTrack = _this15._streams[streamid].getTracks().find(function (track) { + return sender.track === track; + }); + if (hasTrack) { + stream = _this15._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(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) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + 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) { + utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) { + var pc = e.target; + if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') { + if (pc.signalingState !== 'stable') { + return; + } + } + return e; + }); +} + +},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +function shimGetDisplayMedia(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(function (sourceId) { + var widthSpecified = constraints.video && constraints.video.width; + var heightSpecified = constraints.video && constraints.video.height; + var 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); + }); + }; +} + +},{}],5:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils.js'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var logging = utils.log; + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + + if (!navigator.mediaDevices) { + return; + } + + var constraintsToChrome_ = function constraintsToChrome_(c) { + if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) { + return c; + } + var cc = {}; + Object.keys(c).forEach(function (key) { + if (key === 'require' || key === 'advanced' || key === 'mediaSource') { + return; + } + var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] }; + if (r.exact !== undefined && typeof r.exact === 'number') { + r.min = r.max = r.exact; + } + var oldname_ = function oldname_(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 || []; + var 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(function (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; + }; + + var shimConstraints_ = function shimConstraints_(constraints, func) { + if (browserDetails.version >= 61) { + return func(constraints); + } + constraints = JSON.parse(JSON.stringify(constraints)); + if (constraints && _typeof(constraints.audio) === 'object') { + var remap = function remap(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. + var face = constraints.video.facingMode; + face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face }); + var 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; + var matches = void 0; + 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(function (devices) { + devices = devices.filter(function (d) { + return d.kind === 'videoinput'; + }); + var dev = devices.find(function (d) { + return matches.some(function (match) { + return 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); + }; + + var shimError_ = function shimError_(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: function toString() { + return this.name + (this.message && ': ') + this.message; + } + }; + }; + + var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) { + shimConstraints_(constraints, function (c) { + navigator.webkitGetUserMedia(c, onSuccess, function (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) { + var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (cs) { + return shimConstraints_(cs, function (c) { + return origGetUserMedia(c).then(function (stream) { + if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) { + stream.getTracks().forEach(function (track) { + track.stop(); + }); + throw new DOMException('', 'NotFoundError'); + } + return stream; + }, function (e) { + return Promise.reject(shimError_(e)); + }); + }); + }; + } +} + +},{"../utils.js":11}],6:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimRTCIceCandidate = shimRTCIceCandidate; +exports.shimMaxMessageSize = shimMaxMessageSize; +exports.shimSendThrowTypeError = shimSendThrowTypeError; +exports.shimConnectionState = shimConnectionState; +exports.removeExtmapAllowMixed = removeExtmapAllowMixed; +exports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty; +exports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription; + +var _sdp = require('sdp'); + +var _sdp2 = _interopRequireDefault(_sdp); + +var _utils = require('./utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +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; + } + + var NativeRTCIceCandidate = window.RTCIceCandidate; + window.RTCIceCandidate = function RTCIceCandidate(args) { + // Remove the a= which shouldn't be part of the candidate string. + if ((typeof args === 'undefined' ? 'undefined' : _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. + var nativeCandidate = new NativeRTCIceCandidate(args); + var parsedCandidate = _sdp2.default.parseCandidate(args.candidate); + var 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', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', function (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: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + } + }); + } + + var sctpInDescription = function sctpInDescription(description) { + if (!description || !description.sdp) { + return false; + } + var sections = _sdp2.default.splitSections(description.sdp); + sections.shift(); + return sections.some(function (mediaSection) { + var mLine = _sdp2.default.parseMLine(mediaSection); + return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1; + }); + }; + + var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) { + // TODO: Is there a better solution for detecting Firefox? + var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/); + if (match === null || match.length < 2) { + return -1; + } + var version = parseInt(match[1], 10); + // Test for NaN (yes, this is ugly) + return version !== version ? -1 : version; + }; + + var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(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 + var 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; + }; + + var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) { + // Note: 65536 bytes is the default value from the SDP spec. Also, + // every implementation we know supports receiving 65536 bytes. + var 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; + } + + var match = _sdp2.default.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; + }; + + var 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) { + var _getConfiguration = this.getConfiguration(), + sdpSemantics = _getConfiguration.sdpSemantics; + + if (sdpSemantics === 'plan-b') { + Object.defineProperty(this, 'sctp', { + get: function get() { + return typeof this._sctp === 'undefined' ? null : this._sctp; + }, + + enumerable: true, + configurable: true + }); + } + } + + if (sctpInDescription(arguments[0])) { + // Check if the remote is FF. + var isFirefox = getRemoteFirefoxVersion(arguments[0]); + + // Get the maximum message size the local peer is capable of sending + var canSendMMS = getCanSendMaxMessageSize(isFirefox); + + // Get the maximum message size of the remote peer. + var remoteMMS = getMaxMessageSize(arguments[0], isFirefox); + + // Determine final maximum message size + var maxMessageSize = void 0; + 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. + var sctp = {}; + Object.defineProperty(sctp, 'maxMessageSize', { + get: function 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) { + var origDataChannelSend = dc.send; + dc.send = function send() { + var data = arguments[0]; + var 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); + }; + } + var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel; + window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() { + var dataChannel = origCreateDataChannel.apply(this, arguments); + wrapDcSend(dataChannel, this); + return dataChannel; + }; + utils.wrapPeerConnectionEvent(window, 'datachannel', function (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; + } + var proto = window.RTCPeerConnection.prototype; + Object.defineProperty(proto, 'connectionState', { + get: function get() { + return { + completed: 'connected', + checking: 'connecting' + }[this.iceConnectionState] || this.iceConnectionState; + }, + + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, 'onconnectionstatechange', { + get: function get() { + return this._onconnectionstatechange || null; + }, + set: function 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(function (method) { + var origMethod = proto[method]; + proto[method] = function () { + if (!this._connectionstatechangepoly) { + this._connectionstatechangepoly = function (e) { + var pc = e.target; + if (pc._lastConnectionState !== pc.connectionState) { + pc._lastConnectionState = pc.connectionState; + var 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; + } + var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) { + if (desc && desc.sdp && desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) { + var sdp = desc.sdp.split('\n').filter(function (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: 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; + } + var 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); + }; +} + +// Note: Make sure to call this ahead of APIs that modify +// setLocalDescription.length +function shimParameterlessSetLocalDescription(window, browserDetails) { + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription; + if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) { + return; + } + window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() { + var _this = this; + + var desc = arguments[0] || {}; + if ((typeof desc === 'undefined' ? 'undefined' : _typeof(desc)) !== 'object' || desc.type && desc.sdp) { + return nativeSetLocalDescription.apply(this, arguments); + } + // The remaining steps should technically happen when SLD comes off the + // RTCPeerConnection's operations chain (not ahead of going on it), but + // this is too difficult to shim. Instead, this shim only covers the + // common case where the operations chain is empty. This is imperfect, but + // should cover many cases. Rationale: Even if we can't reduce the glare + // window to zero on imperfect implementations, there's value in tapping + // into the perfect negotiation pattern that several browsers support. + desc = { type: desc.type, sdp: desc.sdp }; + if (!desc.type) { + switch (this.signalingState) { + case 'stable': + case 'have-local-offer': + case 'have-remote-pranswer': + desc.type = 'offer'; + break; + default: + desc.type = 'answer'; + break; + } + } + if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') { + return nativeSetLocalDescription.apply(this, [desc]); + } + var func = desc.type === 'offer' ? this.createOffer : this.createAnswer; + return func.apply(this).then(function (d) { + return nativeSetLocalDescription.apply(_this, [d]); + }); + }; +} + +},{"./utils":11,"sdp":12}],7:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _getusermedia = require('./getusermedia'); + +Object.defineProperty(exports, 'shimGetUserMedia', { + enumerable: true, + get: function get() { + return _getusermedia.shimGetUserMedia; + } +}); + +var _getdisplaymedia = require('./getdisplaymedia'); + +Object.defineProperty(exports, 'shimGetDisplayMedia', { + enumerable: true, + get: function get() { + return _getdisplaymedia.shimGetDisplayMedia; + } +}); +exports.shimOnTrack = shimOnTrack; +exports.shimPeerConnection = shimPeerConnection; +exports.shimSenderGetStats = shimSenderGetStats; +exports.shimReceiverGetStats = shimReceiverGetStats; +exports.shimRemoveStream = shimRemoveStream; +exports.shimRTCDataChannel = shimRTCDataChannel; +exports.shimAddTransceiver = shimAddTransceiver; +exports.shimGetParameters = shimGetParameters; +exports.shimCreateOffer = shimCreateOffer; +exports.shimCreateAnswer = shimCreateAnswer; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function shimOnTrack(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimPeerConnection(window, browserDetails) { + if ((typeof window === 'undefined' ? 'undefined' : _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) { + var nativeMethod = window.RTCPeerConnection.prototype[method]; + var methodObj = _defineProperty({}, method, function () { + arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]); + return nativeMethod.apply(this, arguments); + }); + window.RTCPeerConnection.prototype[method] = methodObj[method]; + }); + } + + var modernStatsTypes = { + inboundrtp: 'inbound-rtp', + outboundrtp: 'outbound-rtp', + candidatepair: 'candidate-pair', + localcandidate: 'local-candidate', + remotecandidate: 'remote-candidate' + }; + + var nativeGetStats = window.RTCPeerConnection.prototype.getStats; + window.RTCPeerConnection.prototype.getStats = function getStats() { + var _arguments = Array.prototype.slice.call(arguments), + selector = _arguments[0], + onSucc = _arguments[1], + onErr = _arguments[2]; + + return nativeGetStats.apply(this, [selector || null]).then(function (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(function (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(function (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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) { + return; + } + var origGetSenders = window.RTCPeerConnection.prototype.getSenders; + if (origGetSenders) { + window.RTCPeerConnection.prototype.getSenders = function getSenders() { + var _this = this; + + var senders = origGetSenders.apply(this, []); + senders.forEach(function (sender) { + return sender._pc = _this; + }); + return senders; + }; + } + + var origAddTrack = window.RTCPeerConnection.prototype.addTrack; + if (origAddTrack) { + window.RTCPeerConnection.prototype.addTrack = function addTrack() { + var 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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) { + return; + } + if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) { + return; + } + var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers; + if (origGetReceivers) { + window.RTCPeerConnection.prototype.getReceivers = function getReceivers() { + var _this2 = this; + + var receivers = origGetReceivers.apply(this, []); + receivers.forEach(function (receiver) { + return receiver._pc = _this2; + }); + return receivers; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', function (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) { + var _this3 = this; + + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(function (sender) { + if (sender.track && stream.getTracks().includes(sender.track)) { + _this3.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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; + if (origAddTransceiver) { + window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { + this.setParametersPromises = []; + var initParameters = arguments[1]; + var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; + if (shouldPerformCheck) { + // If sendEncodings params are provided, validate grammar + initParameters.sendEncodings.forEach(function (encodingParam) { + if ('rid' in encodingParam) { + var 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'); + } + } + }); + } + var 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. + var sender = transceiver.sender; + + var 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(function () { + delete sender.sendEncodings; + }).catch(function () { + delete sender.sendEncodings; + })); + } + } + return transceiver; + }; + } +} + +function shimGetParameters(window) { + if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) { + return; + } + var origGetParameters = window.RTCRtpSender.prototype.getParameters; + if (origGetParameters) { + window.RTCRtpSender.prototype.getParameters = function getParameters() { + var 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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; + window.RTCPeerConnection.prototype.createOffer = function createOffer() { + var _this4 = this, + _arguments2 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateOffer.apply(_this4, _arguments2); + }).finally(function () { + _this4.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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { + return; + } + var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; + window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { + var _this5 = this, + _arguments3 = arguments; + + if (this.setParametersPromises && this.setParametersPromises.length) { + return Promise.all(this.setParametersPromises).then(function () { + return origCreateAnswer.apply(_this5, _arguments3); + }).finally(function () { + _this5.setParametersPromises = []; + }); + } + return origCreateAnswer.apply(this, arguments); + }; +} + +},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shimGetDisplayMedia = shimGetDisplayMedia; +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)) { + var 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); + }; +} + +},{}],9:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimGetUserMedia = shimGetUserMedia; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimGetUserMedia(window, browserDetails) { + var navigator = window && window.navigator; + var MediaStreamTrack = window && window.MediaStreamTrack; + + navigator.getUserMedia = function (constraints, onSuccess, onError) { + // Replace Firefox 44+'s deprecation warning with unprefixed version. + utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia'); + navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); + }; + + if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) { + var remap = function remap(obj, a, b) { + if (a in obj && !(b in obj)) { + obj[b] = obj[a]; + delete obj[a]; + } + }; + + var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); + navigator.mediaDevices.getUserMedia = function (c) { + if ((typeof c === 'undefined' ? 'undefined' : _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) { + var nativeGetSettings = MediaStreamTrack.prototype.getSettings; + MediaStreamTrack.prototype.getSettings = function () { + var obj = nativeGetSettings.apply(this, arguments); + remap(obj, 'mozAutoGainControl', 'autoGainControl'); + remap(obj, 'mozNoiseSuppression', 'noiseSuppression'); + return obj; + }; + } + + if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) { + var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints; + MediaStreamTrack.prototype.applyConstraints = function (c) { + if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') { + c = JSON.parse(JSON.stringify(c)); + remap(c, 'autoGainControl', 'mozAutoGainControl'); + remap(c, 'noiseSuppression', 'mozNoiseSuppression'); + } + return nativeApplyConstraints.apply(this, [c]); + }; + } + } +} + +},{"../utils":11}],10:[function(require,module,exports){ +/* + * 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. + */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.shimLocalStreamsAPI = shimLocalStreamsAPI; +exports.shimRemoteStreamsAPI = shimRemoteStreamsAPI; +exports.shimCallbacksAPI = shimCallbacksAPI; +exports.shimGetUserMedia = shimGetUserMedia; +exports.shimConstraints = shimConstraints; +exports.shimRTCIceServerUrls = shimRTCIceServerUrls; +exports.shimTrackEventTransceiver = shimTrackEventTransceiver; +exports.shimCreateOfferLegacy = shimCreateOfferLegacy; +exports.shimAudioContext = shimAudioContext; + +var _utils = require('../utils'); + +var utils = _interopRequireWildcard(_utils); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function shimLocalStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _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)) { + var _addTrack = window.RTCPeerConnection.prototype.addTrack; + window.RTCPeerConnection.prototype.addStream = function addStream(stream) { + var _this = this; + + 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(function (track) { + return _addTrack.call(_this, track, stream); + }); + stream.getVideoTracks().forEach(function (track) { + return _addTrack.call(_this, track, stream); + }); + }; + + window.RTCPeerConnection.prototype.addTrack = function addTrack(track) { + var _this2 = this; + + for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + streams[_key - 1] = arguments[_key]; + } + + if (streams) { + streams.forEach(function (stream) { + if (!_this2._localStreams) { + _this2._localStreams = [stream]; + } else if (!_this2._localStreams.includes(stream)) { + _this2._localStreams.push(stream); + } + }); + } + return _addTrack.apply(this, arguments); + }; + } + if (!('removeStream' in window.RTCPeerConnection.prototype)) { + window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) { + var _this3 = this; + + if (!this._localStreams) { + this._localStreams = []; + } + var index = this._localStreams.indexOf(stream); + if (index === -1) { + return; + } + this._localStreams.splice(index, 1); + var tracks = stream.getTracks(); + this.getSenders().forEach(function (sender) { + if (tracks.includes(sender.track)) { + _this3.removeTrack(sender); + } + }); + }; + } +} + +function shimRemoteStreamsAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _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: function get() { + return this._onaddstream; + }, + set: function set(f) { + var _this4 = this; + + if (this._onaddstream) { + this.removeEventListener('addstream', this._onaddstream); + this.removeEventListener('track', this._onaddstreampoly); + } + this.addEventListener('addstream', this._onaddstream = f); + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!_this4._remoteStreams) { + _this4._remoteStreams = []; + } + if (_this4._remoteStreams.includes(stream)) { + return; + } + _this4._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + _this4.dispatchEvent(event); + }); + }); + } + }); + var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription; + window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() { + var pc = this; + if (!this._onaddstreampoly) { + this.addEventListener('track', this._onaddstreampoly = function (e) { + e.streams.forEach(function (stream) { + if (!pc._remoteStreams) { + pc._remoteStreams = []; + } + if (pc._remoteStreams.indexOf(stream) >= 0) { + return; + } + pc._remoteStreams.push(stream); + var event = new Event('addstream'); + event.stream = stream; + pc.dispatchEvent(event); + }); + }); + } + return origSetRemoteDescription.apply(pc, arguments); + }; + } +} + +function shimCallbacksAPI(window) { + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) { + return; + } + var prototype = window.RTCPeerConnection.prototype; + var origCreateOffer = prototype.createOffer; + var origCreateAnswer = prototype.createAnswer; + var setLocalDescription = prototype.setLocalDescription; + var setRemoteDescription = prototype.setRemoteDescription; + var addIceCandidate = prototype.addIceCandidate; + + prototype.createOffer = function createOffer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateOffer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + prototype.createAnswer = function createAnswer(successCallback, failureCallback) { + var options = arguments.length >= 2 ? arguments[2] : arguments[0]; + var promise = origCreateAnswer.apply(this, [options]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + + var withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setLocalDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setLocalDescription = withCallback; + + withCallback = function withCallback(description, successCallback, failureCallback) { + var promise = setRemoteDescription.apply(this, [description]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.setRemoteDescription = withCallback; + + withCallback = function withCallback(candidate, successCallback, failureCallback) { + var promise = addIceCandidate.apply(this, [candidate]); + if (!failureCallback) { + return promise; + } + promise.then(successCallback, failureCallback); + return Promise.resolve(); + }; + prototype.addIceCandidate = withCallback; +} + +function shimGetUserMedia(window) { + var navigator = window && window.navigator; + + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + // shim not needed in Safari 12.1 + var mediaDevices = navigator.mediaDevices; + var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices); + navigator.mediaDevices.getUserMedia = function (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: utils.compactObject(constraints.video) }); + } + + return constraints; +} + +function shimRTCIceServerUrls(window) { + if (!window.RTCPeerConnection) { + return; + } + // migrate from non-spec RTCIceServer.url to RTCIceServer.urls + var OrigPeerConnection = window.RTCPeerConnection; + window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) { + if (pcConfig && pcConfig.iceServers) { + var newIceServers = []; + for (var i = 0; i < pcConfig.iceServers.length; i++) { + var server = pcConfig.iceServers[i]; + if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) { + utils.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: function get() { + return OrigPeerConnection.generateCertificate; + } + }); + } +} + +function shimTrackEventTransceiver(window) { + // Add event.transceiver member over deprecated event.receiver + if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) { + Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', { + get: function get() { + return { receiver: this.receiver }; + } + }); + } +} + +function shimCreateOfferLegacy(window) { + var 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; + } + var audioTransceiver = this.getTransceivers().find(function (transceiver) { + return 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; + } + var videoTransceiver = this.getTransceivers().find(function (transceiver) { + return 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 === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + +},{"../utils":11}],11:[function(require,module,exports){ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extractVersion = extractVersion; +exports.wrapPeerConnectionEvent = wrapPeerConnectionEvent; +exports.disableLog = disableLog; +exports.disableWarnings = disableWarnings; +exports.log = log; +exports.deprecated = deprecated; +exports.detectBrowser = detectBrowser; +exports.compactObject = compactObject; +exports.walkStats = walkStats; +exports.filterStats = filterStats; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logDisabled_ = true; +var 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) { + var 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; + } + var proto = window.RTCPeerConnection.prototype; + var nativeAddEventListener = proto.addEventListener; + proto.addEventListener = function (nativeEventName, cb) { + if (nativeEventName !== eventNameToWrap) { + return nativeAddEventListener.apply(this, arguments); + } + var wrappedCallback = function wrappedCallback(e) { + var 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]); + }; + + var 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); + } + var 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: function get() { + return this['_on' + eventNameToWrap]; + }, + set: function 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 === 'undefined' ? 'undefined' : _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 === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.'); + } + deprecationWarnings_ = !bool; + return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled'); +} + +function log() { + if ((typeof window === 'undefined' ? 'undefined' : _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. + var 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; + } + + var navigator = window.navigator; + + + 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 (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(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(data)) { + return data; + } + + return Object.keys(data).reduce(function (accumulator, key) { + var isObj = isObject(data[key]); + var value = isObj ? compactObject(data[key]) : data[key]; + var isEmptyObject = isObj && !Object.keys(value).length; + if (value === undefined || isEmptyObject) { + return accumulator; + } + return Object.assign(accumulator, _defineProperty({}, 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(function (name) { + if (name.endsWith('Id')) { + walkStats(stats, stats.get(base[name]), resultSet); + } else if (name.endsWith('Ids')) { + base[name].forEach(function (id) { + walkStats(stats, stats.get(id), resultSet); + }); + } + }); +} + +/* filter getStats for a sender/receiver track. */ +function filterStats(result, track, outbound) { + var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp'; + var filteredResult = new Map(); + if (track === null) { + return filteredResult; + } + var trackStats = []; + result.forEach(function (value) { + if (value.type === 'track' && value.trackIdentifier === track.id) { + trackStats.push(value); + } + }); + trackStats.forEach(function (trackStat) { + result.forEach(function (stats) { + if (stats.type === streamStatsType && stats.trackId === trackStat.id) { + walkStats(result, stats, filteredResult); + } + }); + }); + return filteredResult; +} + +},{}],12:[function(require,module,exports){ +/* eslint-env node */ +'use strict'; + +// SDP helpers. + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +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" +// Input can be prefixed with a=. +SDPUtils.parseCandidate = function (line) { + var parts = void 0; + // 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: { 1: 'rtp', 2: 'rtcp' }[parts[1]] || parts[1], + 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 compatibility. + candidate.usernameFragment = parts[i + 1]; + break; + default: + // extension handling, in particular ufrag. Don't overwrite. + if (candidate[parts[i]] === undefined) { + candidate[parts[i]] = parts[i + 1]; + } + break; + } + } + return candidate; +}; + +// Translates a candidate object into SDP candidate attribute. +// This does not include the a= prefix! +SDPUtils.writeCandidate = function (candidate) { + var sdp = []; + sdp.push(candidate.foundation); + + var component = candidate.component; + if (component === 'rtp') { + sdp.push(1); + } else if (component === 'rtcp') { + sdp.push(2); + } else { + sdp.push(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. +// Sample input: +// a=ice-options:foo bar +SDPUtils.parseIceOptions = function (line) { + return line.substr(14).split(' '); +}; + +// Parses a 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; +}; + +// Generates 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 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 an 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 a fmtp 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 = void 0; + 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 a fmtp 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] !== undefined) { + params.push(param + '=' + codec.parameters[param]); + } else { + params.push(param); + } + }); + line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; + } + return line; +}; + +// Parses a 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 a 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; +}; + +// Parse a ssrc-group line (see RFC 5576). Sample input: +// a=ssrc-group:semantics 12 34 +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); + } +}; + +// Parses a fingerprint line for DTLS-SRTP. +SDPUtils.parseFingerprint = function (line) { + var parts = line.substr(14).split(' '); + return { + algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge. + value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572. + }; +}; + +// 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 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 parameters. +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) { + var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + 'a=ice-pwd:' + params.password + '\r\n'; + if (params.iceLite) { + sdp += 'a=ice-lite\r\n'; + } + return sdp; +}; + +// 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: 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; + default: + // only RED and ULPFEC are recognized as FEC mechanisms. + 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'; + } + + 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 = void 0; + + 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 that 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; +}; + +SDPUtils.writeRtcpParameters = function (rtcpParameters) { + var sdp = ''; + if (rtcpParameters.reducedSize) { + sdp += 'a=rtcp-rsize\r\n'; + } + if (rtcpParameters.mux) { + sdp += 'a=rtcp-mux\r\n'; + } + if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) { + sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\r\n'; + } + return sdp; +}; + +// parses either a=msid: or a=ssrc:... msid lines and returns +// the id of the MediaStream and MediaStreamTrack. +SDPUtils.parseMsid = function (mediaSection) { + var parts = void 0; + 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 = void 0; + 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 = sctpMapLines[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 boiler 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 = void 0; + 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'; +}; + +// 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); + default: + // 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. +if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') { + module.exports = SDPUtils; +} +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/hybrid/html/rtc/chrome/chrome_shim.js b/hybrid/html/rtc/chrome/chrome_shim.js new file mode 100644 index 0000000..55717ef --- /dev/null +++ b/hybrid/html/rtc/chrome/chrome_shim.js @@ -0,0 +1,702 @@ +/* + * 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. + */ + /* eslint-env node */ +'use strict'; +import * as utils from '../utils.js'; + +export {shimGetUserMedia} from './getusermedia'; +export {shimGetDisplayMedia} from './getdisplaymedia'; + +export function shimMediaStream(window) { + window.MediaStream = window.MediaStream || window.webkitMediaStream; +} + +export function shimOnTrack(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. + utils.wrapPeerConnectionEvent(window, 'track', e => { + if (!e.transceiver) { + Object.defineProperty(e, 'transceiver', + {value: {receiver: e.receiver}}); + } + return e; + }); + } +} + +export 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; + } + }); + } +} + +export 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); + }; +} + +export 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. + */ + utils.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; + }; + } + utils.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 => + utils.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); + }; +} + +export 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); + }; +} + +export 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')); + } + }; +} + +export function shimPeerConnection(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. +export function fixNegotiationNeeded(window, browserDetails) { + utils.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; + }); +} diff --git a/hybrid/html/rtc/chrome/getdisplaymedia.js b/hybrid/html/rtc/chrome/getdisplaymedia.js new file mode 100644 index 0000000..1e8f6ec --- /dev/null +++ b/hybrid/html/rtc/chrome/getdisplaymedia.js @@ -0,0 +1,50 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; +export function shimGetDisplayMedia(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); + }); + }; +} diff --git a/hybrid/html/rtc/chrome/getusermedia.js b/hybrid/html/rtc/chrome/getusermedia.js new file mode 100644 index 0000000..ad834ff --- /dev/null +++ b/hybrid/html/rtc/chrome/getusermedia.js @@ -0,0 +1,188 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; +import * as utils from '../utils.js'; +const logging = utils.log; + +export function shimGetUserMedia(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)))); + }; + } +} diff --git a/hybrid/html/rtc/common_shim.js b/hybrid/html/rtc/common_shim.js new file mode 100644 index 0000000..9211145 --- /dev/null +++ b/hybrid/html/rtc/common_shim.js @@ -0,0 +1,433 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +import SDPUtils from 'sdp'; +import * as utils from './utils'; + +export 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 = SDPUtils.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', ...) + utils.wrapPeerConnectionEvent(window, 'icecandidate', e => { + if (e.candidate) { + Object.defineProperty(e, 'candidate', { + value: new window.RTCIceCandidate(e.candidate), + writable: 'false' + }); + } + return e; + }); +} + +export 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 = SDPUtils.splitSections(description.sdp); + sections.shift(); + return sections.some(mediaSection => { + const mLine = SDPUtils.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 = SDPUtils.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); + }; +} + +export 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; + }; + utils.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. + */ +export 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); + }; + }); +} + +export 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); + }; +} + +export 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); + }; +} + +// Note: Make sure to call this ahead of APIs that modify +// setLocalDescription.length +export function shimParameterlessSetLocalDescription(window, browserDetails) { + if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) { + return; + } + const nativeSetLocalDescription = + window.RTCPeerConnection.prototype.setLocalDescription; + if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) { + return; + } + window.RTCPeerConnection.prototype.setLocalDescription = + function setLocalDescription() { + let desc = arguments[0] || {}; + if (typeof desc !== 'object' || (desc.type && desc.sdp)) { + return nativeSetLocalDescription.apply(this, arguments); + } + // The remaining steps should technically happen when SLD comes off the + // RTCPeerConnection's operations chain (not ahead of going on it), but + // this is too difficult to shim. Instead, this shim only covers the + // common case where the operations chain is empty. This is imperfect, but + // should cover many cases. Rationale: Even if we can't reduce the glare + // window to zero on imperfect implementations, there's value in tapping + // into the perfect negotiation pattern that several browsers support. + desc = {type: desc.type, sdp: desc.sdp}; + if (!desc.type) { + switch (this.signalingState) { + case 'stable': + case 'have-local-offer': + case 'have-remote-pranswer': + desc.type = 'offer'; + break; + default: + desc.type = 'answer'; + break; + } + } + if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) { + return nativeSetLocalDescription.apply(this, [desc]); + } + const func = desc.type === 'offer' ? this.createOffer : this.createAnswer; + return func.apply(this) + .then(d => nativeSetLocalDescription.apply(this, [d])); + }; +} diff --git a/hybrid/html/rtc/firefox/firefox_shim.js b/hybrid/html/rtc/firefox/firefox_shim.js new file mode 100644 index 0000000..8c8548f --- /dev/null +++ b/hybrid/html/rtc/firefox/firefox_shim.js @@ -0,0 +1,296 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +import * as utils from '../utils'; +export {shimGetUserMedia} from './getusermedia'; +export {shimGetDisplayMedia} from './getdisplaymedia'; + +export 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}; + } + }); + } +} + +export 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); + }; +} + +export 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()); + }; +} + +export 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; + }; + } + utils.wrapPeerConnectionEvent(window, 'track', e => { + e.receiver._pc = e.srcElement; + return e; + }); + window.RTCRtpReceiver.prototype.getStats = function getStats() { + return this._pc.getStats(this.track); + }; +} + +export function shimRemoveStream(window) { + if (!window.RTCPeerConnection || + 'removeStream' in window.RTCPeerConnection.prototype) { + return; + } + window.RTCPeerConnection.prototype.removeStream = + function removeStream(stream) { + utils.deprecated('removeStream', 'removeTrack'); + this.getSenders().forEach(sender => { + if (sender.track && stream.getTracks().includes(sender.track)) { + this.removeTrack(sender); + } + }); + }; +} + +export 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; + } +} + +export 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; + }; + } +} + +export 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; + }; + } +} + +export 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); + }; +} + +export 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); + }; +} diff --git a/hybrid/html/rtc/firefox/getdisplaymedia.js b/hybrid/html/rtc/firefox/getdisplaymedia.js new file mode 100644 index 0000000..0ecce44 --- /dev/null +++ b/hybrid/html/rtc/firefox/getdisplaymedia.js @@ -0,0 +1,36 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +export 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); + }; +} diff --git a/hybrid/html/rtc/firefox/getusermedia.js b/hybrid/html/rtc/firefox/getusermedia.js new file mode 100644 index 0000000..fe4de50 --- /dev/null +++ b/hybrid/html/rtc/firefox/getusermedia.js @@ -0,0 +1,67 @@ +/* + * 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. + */ +/* eslint-env node */ +'use strict'; + +import * as utils from '../utils'; + +export function shimGetUserMedia(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. + utils.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]); + }; + } + } +} diff --git a/hybrid/html/rtc/safari/safari_shim.js b/hybrid/html/rtc/safari/safari_shim.js new file mode 100644 index 0000000..a552ddf --- /dev/null +++ b/hybrid/html/rtc/safari/safari_shim.js @@ -0,0 +1,353 @@ +/* + * 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. + */ +'use strict'; +import * as utils from '../utils'; + +export 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); + } + }); + }; + } +} + +export 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); + }; + } +} + +export 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; +} + +export 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); + } +} + +export function shimConstraints(constraints) { + if (constraints && constraints.video !== undefined) { + return Object.assign({}, + constraints, + {video: utils.compactObject(constraints.video)} + ); + } + + return constraints; +} + +export 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')) { + utils.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; + } + }); + } +} + +export 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}; + } + }); + } +} + +export 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', {direction: 'recvonly'}); + } + + 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', {direction: 'recvonly'}); + } + } + return origCreateOffer.apply(this, arguments); + }; +} + +export function shimAudioContext(window) { + if (typeof window !== 'object' || window.AudioContext) { + return; + } + window.AudioContext = window.webkitAudioContext; +} + diff --git a/hybrid/html/rtc/utils.js b/hybrid/html/rtc/utils.js new file mode 100644 index 0000000..bcafbfb --- /dev/null +++ b/hybrid/html/rtc/utils.js @@ -0,0 +1,263 @@ +/* + * 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. + */ + /* eslint-env node */ +'use strict'; + +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. + */ +export 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). +export 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 + }); +} + +export 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. + */ +export 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'); +} + +export function log() { + 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. + */ +export 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. + */ +export 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 (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(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`. + */ +export function compactObject(data) { + if (!isObject(data)) { + return data; + } + + return Object.keys(data).reduce(function(accumulator, key) { + const isObj = isObject(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. */ +export 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. */ +export 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; +} + diff --git a/hybrid/html/voice/calling.mp3 b/hybrid/html/voice/calling.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3fadd006e35ba3f3e7fcb76557c13c2d4939c351 GIT binary patch literal 76213 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 EPvKs + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..2aec5ba --- /dev/null +++ b/main.js @@ -0,0 +1,54 @@ + +// #ifdef H5 +import quill from "quill"; +window.Quill = quill; +// #endif + +// #ifndef VUE3 +import Vue from 'vue' +import App from './App' + +Vue.config.productionTip = false + +import cuCustom from './components/cu-custom' +Vue.component('cu-custom',cuCustom) + + +App.mpType = 'app' + +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + + + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +import App from './App.vue' +import cuCustom from './components/cu-custom' +import util from '@/utils/utils.js' +import store from './store' +import '@/utils/request' +import api from '@/api/index.js'; +import socketIO from '@/common/socket.js'; +import Empty from "@/components/Empty.vue" //通用空状态 +import Tags from "@/components/Tags.vue" //通用标签 + +export function createApp() { + const app = createSSRApp(App) + app.config.globalProperties.appStatus=true; + app.config.globalProperties.$util = util; + app.config.globalProperties.$api = api; + app.config.globalProperties.$store = store; + app.config.globalProperties.socketIo = new socketIO() + app.component('cu-custom',cuCustom) + app.component('Empty',Empty) + app.component('Tags',Tags) + app.use(store) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ffbe34c --- /dev/null +++ b/manifest.json @@ -0,0 +1,210 @@ +{ + "name" : "Raingad-IM", + "appid" : "__UNI__A902A60", + "description" : "聊天小应用", + "versionName" : "5.5.2", + "versionCode" : 20250107, + "transformPx" : false, + "app-plus" : { + /* 5+App特有相关 */ + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, + "nvueStyleCompiler" : "uni-app", + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "modules" : { + "VideoPlayer" : {}, + "Record" : {}, + "UIWebview" : {}, + "Camera" : {}, + "Barcode" : {}, + "Push" : {}, + "SQLite" : {} + }, + /* 模块配置 */ + "distribute" : { + /* 应用发布信息 */ + "android" : { + /* android打包配置 */ + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ], + "minSdkVersion" : 21, + "targetSdkVersion" : "" + }, + "ios" : { + "dSYMs" : false, + "privacyDescription" : { + "NSPhotoLibraryUsageDescription" : "需要发送图片消息", + "NSPhotoLibraryAddUsageDescription" : "需要下载图片或者视频", + "NSCameraUsageDescription" : "需要拍照照片或者视频发送给好友", + "NSMicrophoneUsageDescription" : "需要和好友语音通话或者发送语音消息", + "NSLocationWhenInUseUsageDescription" : "APP将要获取你的位置信息,用于保持APP的活跃,并不会记录您的位置。是否允许?", + "NSLocationAlwaysUsageDescription" : "App将要在后台持续获取您的位置,用于保持APP的活跃,并不会记录您的位置。是否允许?", + "NSLocationAlwaysAndWhenInUseUsageDescription" : "APP将要获取你的位置信息,用于保持APP的活跃,并不会记录您的位置。是否允许?" + }, + "UIBackgroundModes" : "audio,location" + }, + "huawei" : { + "permissions" : [ + "ohos.permission.GET_NETWORK_INFO" // HarmonyOS 网络状态权限 + ] + }, + /* ios打包配置 */ + "sdkConfigs" : { + "ad" : {}, + "push" : {}, + "maps" : { + "amap" : { + "name" : "", + "appkey_ios" : "", + "appkey_android" : "" + } + }, + "geolocation" : { + "system" : { + "__platform__" : [ "ios", "android" ] + } + } + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + }, + "splashscreen" : { + "useOriginalMsgbox" : true + } + }, + "nativePlugins" : { + "lemonjk-FileSelect" : { + "__plugin_info__" : { + "name" : "FileSelect", + "description" : "文件选取插件", + "platforms" : "Android,iOS", + "url" : "", + "android_package_name" : "", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : {} + } + } + } + }, + // "Ba-KeepAlive" : { + // "__plugin_info__" : { + // "name" : "安卓保活(采用多种主流技术) Ba-KeepAlive", + // "description" : "原生保活插件,支持市面上大部分机型,Android4.4到13.0 。为定位、推送、websocket、定时任务、蓝牙、聊天等保驾护航(**注意:**不保证支持所有机型和场景,建议先试用再购买)", + // "platforms" : "Android", + // "url" : "https://ext.dcloud.net.cn/plugin?id=9423", + // "android_package_name" : "uni.UNID1E78EC", + // "ios_bundle_id" : "", + // "isCloud" : true, + // "bought" : 1, + // "pid" : "9423", + // "parameters" : {} + // } + // } + /* SDK配置 */ + "quickapp" : {}, + /* 快应用特有相关 */ + "mp-weixin" : { + /* 小程序特有相关 */ + "appid" : "wxd36ac7a23fbfcfea", + "setting" : { + "urlCheck" : false, + "minified" : true, + "ignoreDevUnusedFiles" : false, + "ignoreUploadUnusedFiles" : false + }, + "lazyCodeLoading" : "requiredComponents", + "usingComponents" : true, + "permission" : {}, + "unipush" : { + "enable" : false + }, + "libVersion" : "latest" + }, + "vueVersion" : "3", + "h5" : { + "router" : { + "mode" : "hash", + "base" : "./" + }, + "devServer" : { + "https" : false, + "port" : "" + }, + "title" : "raingad-IM", + "unipush" : { + "enable" : false + }, + "sdkConfigs" : { + "maps" : { + "amap" : { + "key" : "", + "securityJsCode" : "", + "serviceHost" : "" + } + } + } + }, + "fallbackLocale" : "zh-Hans" +} diff --git a/mixins/chat.js b/mixins/chat.js new file mode 100644 index 0000000..a252455 --- /dev/null +++ b/mixins/chat.js @@ -0,0 +1,144 @@ +import config from '@/common/config.js' +export const chat = { + data() { + return { + network_log:'', + apiUrl: config.apiUrl, + emojiMap:'' + } + }, + created: function() { + this.network_log = uni.getStorageSync('network_log') + }, + methods: { + // 播放视频,禁止多个同时播放 + handlePlay (item,iteme) { + // console.log(item); + if(this.network_log == 'none'){ + uni.navigateTo({ + url: '/pages/message/video?name='+item.fileName+'&src='+encodeURI(iteme.path), + animationType:"slide-in-bottom" + }); + }else if(item.src||item.url){ + const parts = item.src?item.src.split('/'):item.url.split('/'); + let lastPart = parts.pop() || parts.pop() || ''; + const url = item.src?this.apiUrl+item.src:item.url + uni.navigateTo({ + url: '/pages/message/video?name='+lastPart+'&src='+encodeURI(url), + animationType:"slide-in-bottom", + }); + }else{ + uni.navigateTo({ + url: '/pages/message/video?name='+item.fileName+'&src='+encodeURI(item.content), + animationType:"slide-in-bottom" + }); + } + }, + // 文件预览 + previewFile(item){ + if(this.islongPress){ + return; + } + this.curMsg=item; + this.modelName='preview'; + }, + preview(val){ + let item=this.curMsg; + let audioExt=['mp3','wav','acc']; + let extension = item.content.split('.').pop().toLowerCase(); + if(audioExt.includes(extension) || val==2){ + uni.navigateTo({ + url: '/pages/mine/webview?title=文件预览&src='+encodeURIComponent(item.preview), + animationType:"slide-in-bottom" + }); + return; + } + // #ifdef APP-PLUS || MP-WEIXIN + let exts=['doc', 'xls', 'ppt', 'pdf', 'docx', 'xlsx', 'pptx']; + if(exts.includes(extension)){ + uni.showLoading({title: '文件加载中'}); + uni.downloadFile({ + url: item.content, + success: function (res) { + uni.hideLoading(); + var filePath = res.tempFilePath; + uni.openDocument({ + filePath: filePath, + showMenu: true, + success: function (res) { + console.info('打开文档成功'); + } + }); + }, + fail() { + uni.hideLoading(); + } + }); + }else{ + uni.showToast({ + title:'该文件不支持预览!', + icon:'none' + }) + } + // #endif + + // #ifdef H5 + const tempLink = document.createElement("a"); + tempLink.style.display = "none"; + tempLink.href = item.download; + tempLink.setAttribute("download", item.fileName); + tempLink.setAttribute("target", "_blank"); + document.body.appendChild(tempLink); + tempLink.click(); + document.body.removeChild(tempLink); + // #endif + }, + // 图片预览 + showImgs : function(e){ + var imgs = []; + var imgs1 = []; + var imgsCurrent = e.is_view==0?e.img:e.currentTarget.dataset.img; + for (var i = 0; i < this.messageList.length; i++) { + if (this.messageList[i].type == 'image' || this.messageList[i].type == 'emoji') { + imgs.push(this.messageList[i].content); + } + } + + if(e.is_view==0){ + imgs1.push(imgsCurrent); + uni.previewImage({urls : imgs1}); + }else{ + uni.previewImage({urls : imgs, current : imgsCurrent}); + } + }, + openLocation(item){ + uni.openLocation({ + latitude: item.latitude, + longitude: item.longitude, + success: function () { + console.log('success'); + } + }); + }, + // 打开用户详情 + openContact(item){ + uni.navigateTo({ + url:"/pages/contacts/detail?id="+item.id + }) + }, + // 自动解析消息中的表情 + emojiToHtml(str){ + let emojiMap=this.emojiMap; + return str.replace(/\[!(\w+)\]/gi, function (str, match) { + var file = match; + return emojiMap[file] ? "") : "[!".concat(match, "]"); + }); + }, + fileSize(size){ + return this.$util.getFileSize(size); + }, + sendTime:function(mstime){ + return this.$util.timeFormat(mstime); + }, + } +} diff --git a/nativeplugins/lemonjk-FileSelect/android/uniplugin_fileSelect-release.aar b/nativeplugins/lemonjk-FileSelect/android/uniplugin_fileSelect-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..c556c2feacb3bda9e1e1d0473f0555c6fc042b6b GIT binary patch literal 40988 zcmV)5K*_&QO9KQ7000OG0000%0GJNx{Jcj10Bp(u00jU508%b=cy#T3+mhQj(&qg> zg&$xpN>wf&F70x=?FgTKS9Ntu`>~F z74apGi9}{10aVTSq-d(+lVY=7?}}2atLDkYkBk3Np@jA{;*@>gez$b%UEdzpn|2)A zBSv;@ck0%n8AZ<~{-}r|hC^R9_fs9>r3`hY>yiYFZO5fTDRFv0kQt0^TaOjn&M6tS zbTc;V?LlnsH|-Az)4xTzhCi#O5&ilo`n~)B=whteCZAr`_H6oU+cxXwRM)wLr{-s? zKIfqRyY7ndaCR11_3w+aYJslZ?bgS!uh(Te0&h#ETtp^0b#J=+Tsqa-EaK*@sy64< z6qCg&T5jw1R7%KRtmV%^P!oaxp=se_+Dx=zS4vCb`gQAyxKlX*Bkjp|?qU01g zLSi9F zBKc18T@(^&*SD(Ni;+j1q$bd?nZN1V?oIoh2Ye_VJ*J#fK8of96@S%rqUeieOVV4^ zO@(Mv|6K~M(fi48L$=I@GMxI`sK*hCmZ!Df61-y&%sM#A)-8m3L#%ZXo$ zVPFNxMkUAvHjVfs_ENcg;MXSyd6Eidod$kshbk{iHVqiA2)oNn)ZzgRx=wm84bC@} zRNAP-FGVBjTPZRrrC<}UsYc`$kIkUl6q+WE`VbE zQtXOTJ^t58^pEe*G%dw2_NVPEXc;k}t@@j`Z$$sKD67*zrOQQkC;DELq&`@3%1c=d zozxgUcf@d&lwoW>zH9sHFWHMBf0<;a5-RO?sZ3Q{L}>Kx*UEWJNj!^?92QFk#)_pY z)`|hJVl$-xU&TnVEOt|{D4tT=j>}f`uawS*Ij}U=^M`8Sq%}ZF1DO~E#PmCXCzvQJ zWe#w&!ln}}YLkd6NHg$(n1SNh{!!^R|I$DggoXX+il%&JOby@gqD?gL7ri<4L|MC{ zs!zQj6hk+KF+#vQce|Csq9*G(C(koN316;~1iY6Wo`Ty+la==bj^teRgBl%kG@M|2`24%HZWKG-iV;*0qQT#&PVa?~rqe6DJpifu zqI)gI??Qn39pt#LcDID34WIjM@U6u&G{Goek1qQnMC}c6$?grB2vOQ$aGtdQe`h^>8Rq z@jgyUE1BB~RbQdxI^W*Yr8T9r%KIZI8`5rW_tJD8sOmP-AS-Gs4{wN)h7T}$#1dZ( zpS$AEQ}|W#G`ULOi${d!cnz`6Fzn##A<$Of_8;q{%O2^X1xmb7-rr<7j3k%M6_WA5XC9 zT?;J@!qtZ$xRnDMgPYxsSF=kCV>m+&(zx&7>}0eMNRGRW>m2=r0ez76bzXLa0{|h- zlt3m92gGI!ha^lI4oa9ea-3THg*Dge7BosEB#y-oEfJ~yJ&IzG$`II1s!xHns=5q8 z%_;Z-9BP=5;hSc%l2R^!8HtytISnrcQeH`JH`)))h0W0Vf*s(; zsw``E`^W+6Ihh0OiY*ezPCBE0yNGJcDoHAQEJ`Zdbd1h7teBsA$xbFS{YPc7+W z@0hvOv0QIbWMx0Ks%2qvBUmF|C4y7}B`^$32SA{4g37MCz7Oi*LWS0DlkLCJ&*( z?m*)iMf+!lk;;gZPBi*YP~5rk|C9E*sLx;IPtk|`sUmh*jj>m5M7kn=8ne3lAYw7< z#rAPqvpZ_N7<+2W=I=}=_d<^MK&s)Y-(C$jRlh~WL6V-&XvR8ecmZ@0i8aqjB__Py zOldp1M47-8CsVkxWD-{pEOlls5K>h^M9Dke6hH|**w5i|m;fY$`w&754VyK$=LJcM zZ2g_4Q>;vx9Wv3l`nm5hD$sP3>2#IEZU^>MN&0CZUHMoH45fk@)_!M-Hi>c4cDIv? zJ(t=OgRD|jL>4)zWwHsFWU6ISw`zuEVVGL@AgX&+`~pZktUKv6?mHuJ1|jZgd8f@{ z7^+x!6o+~}?SBS%sc(#1Fbl`+;j8%bRP~5KE$l==0=>WERKvDR}iw?a<;674B6V62|_ zz^Qr=suKEee5ekr`YHx#Dc+LIz~hN28i1jqk-k!V<9Ivx9#cqN_HRAW_75$nSHX9z zr;mqfd*2}8HiF|Gc!T6Aor;vz=`*%?$4c+<(_e|Ks#r|GNZ@H49u8%3#>`WN&|wg4 z!t3D7NRW)AnUh9ncTOq_yl~ROAxg=km@tY-A~?FTDf)S{m^CsCl1Uk>?rqx(Eo7-W z7))OrSs#GG;01BSYmE9tu#){u@W;57){pq%e|?bp#jBx{%D`7>K2Ch!>}t6>QNfT8 zY9&UB%Xei6zp`=2(L|%-^B8DH1oXE0AxiBr`&j%Db~?sXO$4LXns_!E!sTMuD>jb_ zz~vD7QZ|w$)DbHk_9^X+el3n0X#_~+Z6II}@VFjyw4AjvHqIbSNI7h~YQLU?u|e{N z3!p-O7vjgd8q8^mv0c}$p{Lbm$Z@uX*4siV#Os4hH`_FAzXqpwFXjBYbVcKGazC2K zp&yMsrOs$sHFgcl!$h1QOJUV7SuYb(6oZy>Meo-zf!11kTklUrU*;p(cB*dKO|mB0 zuPmM`plZ64Y?~MlZMmL3yKDnG9rUDoudD`TCbmuen5Exjoo)Cb_U~e}_hR74914liz#r;~T zQ7l56UTm^b>ev42XfP`JFy1!-gzS%|?AxmRA!mLM$H}@*GUx(|pzlqG#dC1v;LZd{ zM%xj^Ckn{SH=dnd7aR#=W^y9?46?l9sz&)x7nX*o@(Np4NIY}BI!AL1AXGMG0sjv_ z>LZRe2EsC);zHli<>3d3DK_f(C5x<%i^n=iL$=E&T9AJLU$eZ&3LRncV}KPD;acTkYAmDu^i#OZxXIhcqKPE$ zdm&=!T@bKMAWnUU7CINuqovqQC6+li`TL<7W0^k+P}@mBS8e4Y2{wURlSxg3MAE88 zbrjT|g-)DU0!9Nm^>O{;;vx-tnFYFLL8TC#>_YkLlFw-dUGpGS(khXDl}P6+s*;~2 z$Rk~*(-ZmQ-fUoozW$Z`D*N~K*!V`Hldb~K;(&(yeup`_X~${@8!ccA7<*Ln@2;vx zq^5arbzjA1Pp&9dI|r#1m0>iHl3x~?lUr6swE7mwHDBMOjG*`ek)WUo2~}4j*BtFO zrOy)Co}&VXG&!A;q#+A376cd}nZ?8@l7(dFou8#%6Y_Ho@l*l!MjyurAhIP;erBaQ zF&Ox-%yA$c$ccR@88osr2k=b9X)LSh*y+rIERhLsS_?-DTShs6?>m!rI*E~qSK{=+ z93_}a%%g41fsHeoh)9>T(K;oM#gBCm&K|{&#YWNi+v+rl*}*c`TuCz6O31CBB_7*u z0j06fBsibXW*XI~b4aG4h|$8Z>f@12+?yt_ z+_tC`OO#X2wivdBof@2lHMM z`TMAd#GSR#>N~)A$971)#EtvaBl?wptO||Eej*>M`M=o{nf{UC)Z9#NFgv<=kyH?d-pnR2&>s73Z z0roNz>pR1v*lp3J)ae;)4%+9|*}^lcZQ)nT;7{}52T_zNs5c9plo&Hqvq>&i&gFv& zHd{cDg-l8z2YT8-9kRiCeVmpr6WEnri)*H;*teBEn_ z-USy94C=_;y!VHK9})EE2Lj^ss;Q1rDD*|M4;wN^#RSz;t|Dh6A^|5F&SI&St8kZ` zJTZ*T&g`Y+X3M~-?5VTvD1{yu4LG)Nhb_UnS|x5za?w7Bx>M8dhg6sgsY2+{gl{{D zM@&-6#lI74A&ultsB9iY-EQ3z-dU6k6}7LRW-u{bDC{J2V_2yWtnW&8YIU z{|0%=&UX%^BCNh9Kb@zKOLPOedq3I@7#-^dyUpcgez96eu)3rPwuO7%Q|jHay$!@T z?6dH+2Pj35m=jjR&Yla_IXMMr;9w9BKl`!b`BrK+Z;Ir+0iar&z;|cX6crt`zI)a{2D%pdQXy1ASsWO!Dx^25hllL)^y~dx$oT?~nWN(LpcW^iO zlDe3~pP6rx` z7A$#kDQ^P{Bnb~J5ErjJvHV^E4^8ld0`J=G2@E2rLHzjAVnqyB9cmo<Nml*-Vj^ag($C4ueC16}Dg(LzDR*;S%0^Hr&=^(KEwAfvzH z(5yj$_?g`K5nxj}t1|+pen{s#A8C@E(Ui4NJG!cb1-SC5yVKgX2|r3D-*0l4lfNf5q%N7zUdzx6PlxN;M3koq5OA68V04*uRP%J4#2ZLpopghK@?9UpI^Ty=bi9AEq`O9HlwZrqZeuZYeAr=psKwTj!@!=!Cxnz347nAA1TTB*&S>{r; zg!b&vbagQtGRDpTw>4NFYJVUHo-x=iGCADe#YV-S*=O7A@x5pX-;X9v+c8wqB^~uX z0kl^n@vsO%$3KffCjN}pcW~G;1{*4ADK+c5-LfFFeXH##8%LKytD~10X!T@_)Nnx^ z^aJMi_AZA03~Ki-2cEtZo6|lqC^llbE&Sa%8kUup0>y^K9v`V_u@by3Uw(J0Z%bKtTlXR*;DaS8Sv< z8m$ri^V!@-1Z-X=2@O5WBx||`G-`J;8-41^A~t*z+f4wQn z$iiYkWy|NYKxv#Jub8A=MNKuGr0&mW5~aYs?`aR9j!N9@Ss60{RAd3OC{G}AYMay% z8qib&5nMDQq;^a!jXGV|K>4qu5Vd(1jg+9m60`Bt$OV9PO-%;^#7;K~%bLO=I5$&s zvOF)}AS^I}9>uYPdnoNq5{ux_*fdGS%p!%dTbR_X7MP^n?bM-+t|BCelelJ@K4}Dw z;;5Aasx%(0-hN#|(7E?)&UjTa2rsI1o5&UBrF&-}FhmFhmOs(X=AS<9Qom zqS+M>@LpalTX;t;lH7KpiMP5JJBZDUAea>n(si;PPmF-g2dURSNY3T$tFbKx+B~f=_barmA5bvscQ1j{=C)%WXW|jHaQw$OW#lf%#eH z=XsfpyvjyC%|>2lBcEj>pJyXqWFueZBD1^mGJ7yDvj_7szx3?Eyv!cV%k06t%pT0k z?7_Uu9?Z+^!OZTYtL(wN${x(@e$Vdq>|W3A^z1$ly4;4%(_d#p!W?^HV31l=?scqw zdf&DjX?TxokQ%-_;3sowvHGZ%{1}-=hmU8^DZbZl{;pI8o=k_~!ZTmZNCR5EkVlfF zMS0qA=}L7nK4k*qolu!R58)?0$cI+uWiFhiMtq7S@a$id5;}K0fZ0Jq_3{B~rH`an z$9*Ifwpi%o#y!*Kr63-iQp~=M*$53U3?1=mW@J-FJFJSArpK+1W1Qh#LZ%26F;pML% z!53*l?5n2mGeE*Zf4S+~4u5^$fU@s>H@7Kz(_9}LLSjsR#v`u3>)LTtZYq~W*y7*; zGxe!&8)+zoP4;X?_<$vn`Gm(rfB)7OT^HmECn&rR{spf3i|@vTZ;BW3mk+qn>N~2D zze&3(ByTlrI%>MVIVag_6-~Y5Q$xw^ryhqrp9m5XmIfYygcHBl6^PL&(EYO)f1cc^ zIfs^TYlNx$YR9yI@NrOy1ebf5(HDnyQJfuyyI`5Y2)L+%LOh@i-Z`<`#1ir1=I@lr z)k)nuqt<VdRysfnehVOb0>N}rfpu7wRK3%!$BK@V(BmHC!+cO;L zZevCYVFzQ3F^qmwL=;`o7r~;cA`b3;_djjh`Jzop6Nq8EGd^jOSRE}zEqsycMMDq? zSeUep_qUoY>S0*#>#-aC4~;jS#E2Gq@uQRS*w(%h15qiBfjCq5y)v0#y@2ln!3rBF z{&R!oBL(~vsHO1jt_r`6)B~(KFoKEQdbP|pCN73AKk=V`r9 zeX&0Re@q&%<}x?jO2Q@)FEfB-7)39=+O4Z*=V@O1T8Vb851LH-J&a_Kci)~m${4f4 zIp8SIJuCmNHcFu-v`Cv0@}T|Rt0$Melwg>ZVWcV;e%;Cb^5+{;x8_YN{nRQ>lU05w z2K-%{r(vyCQvZOM83&fAkN#*>V3c z2x?DchgN!1JjiCE>DvTs9qdJ_FYYcR*?#U)l^hIh?6=PA9`L7^RTp#!{N4K>ddi~d z3gNPu9v&c$B>&do#NUJNF^7^ip^Tos_taOU1epZmavZ5NZRGU9 z1U8BLmZ6fJf_mE|sl9sQ`_ONZB4;n|RLAF0N$!=IAgMzhG6>J9flE*r{29)YSD*-b zf(-4x!Z*o3@Lsc){+Rbn`VDk4oBGyhoh;y;RBhPA&z)#K>k{7o9#7B7yYQ`Q!Y`rY zXb5#_d;Mw?2to67BRDb;%bhl`X!S z>S4a6aRKxwt+w^}*a_4aE$1bHx(ij=S)nSgVCunlxo&OystXqs066zWAaerJPmMm4 zTdv`D1!<)YD5Td9+wdOqxYoG1ZhtOP> zAEog%pbcgdNbG&;iw+N{{1d8a?i;hOMuQLVjrIw?IrTZ{TTqlJtUbnHE;Lq3nSTy{ zLh2k%%-Jg`rF;*XfjO(OAFwG|2QDyeoD0x_rtjKXc|_R5@s31v3Ea4|pUP*Ikq>w5 zetC`Za*EVxzLyUjbI+~~y4!DA7H}`|T801DYTcSp#*Y$Q8L36L=eMDOr;f1rG1Q4V z^_5!&nnr~&A`Ckiz1yC*dw+1Ywq z0g((+v-fG_bkv>ZK>zf$CpU5k zNQYh$=|{n*;m%3UG+3E^!PaY<$`52A@m8T<&^=SsmU>t-i!#b~%mH>EWH%1AiDaS+ zsAVX?>&=Q>G(43odLvv2!9l~R`4}S2erI;h2CqZ&^6`^ZkkeR06REx#lgRW|b6XuI zvGRZgf;gEg2oGT}P(P3)4hj!f`XJBPHORf7f-g|2B@@zw zmN{HN)0oZYS-u!$C=1=SXwCO<{-&yjFpn2gj7%Id&48>yut+Y$st$c%(y*lafLIhy zggiv?9r(|wXwWp3=e{#=Um1&9MSR{$=)=G~nX!T-N~xyDA0&-oiRYVDS3Pi~6m$i9+Syq1+Z7gg~v` zI1ehBBvuVC>Ty;&>S80v8tTUZ^kW=ZSj`i;XcaM-3*Ma?JqVe2DZh(c>~N@d+5MrP zSIY%I9y6d)3+_ZyW+09A4=;J~$%>O4j@Iu}EWrCAt!cdeyo5mQE-xTZ0Tm=3cJTG| zlxm~C_Fq2;0YPocDN<9s#@)UFrcE;C(~tt zQubWJlQ9=r&};W?nFR1M7kHHme3}cq&ILZp1wPLOzQ_cwa{Fm#~z4M^~;siTS#m3xM(@T@M zs@d!mxM|nN?h4eClhoUbvJ@%2G=qz+@n5(OFAfda=b=>usDGIT1p{-*H3oc)dZAQ1 z1HSLoE2?U{_B0Su);b1_=7g-z0M;IlV1Cx_rA0IZTp;R@A;@U9M;$a&vuXx-yeJpm z7F7lkZfTM5j0*Q+Sc9zwPP6QK+oKHpD&&H}L6HfSC~k%ZFm8Uju>O=)a$xh(7YDHoG8+=PReLF^6P*bD=>y!6u-gevE>2M8 zrHM(<2|2cLgmNM_dvH({zCVkG4-k+C;ep_SJ$8wP%T*^sj7n4^#_w%^pD}l#%Ln;a za{efwc2}i%vQ5k}5Uy#&dIKjhQ$47V-^C`5nua51lvO0yy4b5dj`XYw;faYAo?2i) zBQ^&E$Vm(793e3jI{{m^Mc?qsgvF{obZHl>cNkOR(m|)^xa2d%Mc(t&G?FxLL(FLT zJPkZ?y5Ed}C%%@+UjG_49^xO7p>b{2yhzXIQ*+;d=QxAUPvA1kS-TZb^6g3a$*MTm zI1)zLe~GI8Rdpt~PpYNeX-xF_sfT@Vv_I&hv;a?gHtxwI z5~?x$95TCU?V!Upw}tGocvV5g*O@9V>>miPizT3U%mWZSqpJ1}jG*D97Xor}3jsN8 zU?+<4)T`|dFxf6)A=*l@+ZWXK8cnM$z6hIRAXjgTR68Pn47+EV6Q3{e1rs5q(_Sy#l40|AEvJXv5TR7d=f;=zj+Op@$- zkSf6eSB5HUK$Y1hyIMc{ZWua26C7`jf$U&O(d;1Ua%==ayPl zBqUGW17yVRfaJKk1PEn9&WsW(OF`pW8o(T`i|VurYj?!r3wPCm9~?}Sm}XzKvm<5a z-Fm>|dck_TBuvhl<57i?4P$Z7DzjB<>kmG097oHdhlpr1es(86?fzi<6P)2vGt)k# zNL3XmPc@iQO=X-dkPsNpO+nyKs z5)21l`ME9uaD`F4ykk{1-h~ku(Z;+e5|E⪙6UbtAUrI&$4`Uq%?&b7&$BY9H_J) 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 kvgjFlj" + ], + "abis": [ + "armeabi-v7a", + "arm64-v8a" + ], + "minSdkVersion": 21 + }, + "ios": { + "plugins": [ + { + "type": "module", + "name": "lemonjk-FileSelect", + "class": "TestModule" + } + ], + "integrateType": "framework", + "deploymentTarget": "11.0" + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..86dc5a6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,361 @@ +{ + "name": "Raingad-IM", + "version": "5.5.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==" + }, + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==" + }, + "core-js": { + "version": "3.42.0", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==" + }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "requires": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, + "is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "jsqr": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/jsqr/-/jsqr-1.4.0.tgz", + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "mutation-observer": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz", + "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==" + }, + "object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "requires": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + } + }, + "quill": { + "version": "1.3.7", + "resolved": "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + } + }, + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "vconsole": { + "version": "3.15.1", + "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz", + "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==", + "requires": { + "@babel/runtime": "^7.17.2", + "copy-text-to-clipboard": "^3.0.1", + "core-js": "^3.11.0", + "mutation-observer": "^1.0.3" + } + }, + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d7e352a --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "Raingad-IM", + "version": "5.5.2", + "description": "一款基于vue3.0的uniapp即时聊天工具", + "logo": "/static/image/logo.png", + "author": "Raingad", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/raingad/instant-chat-uniapp.git" + }, + "keywords": [], + "license": "ISC", + "dependencies": { + "crypto-js": "^4.2.0", + "jsqr": "^1.4.0", + "pinia": "^2.0.23", + "quill": "^1.3.7", + "vconsole": "^3.15.1" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..c9f380d --- /dev/null +++ b/pages.json @@ -0,0 +1,247 @@ +{ + "pages": [ + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "首页" + } + }, + { + "path": "pages/message/chat", + "style": { + "navigationBarTitleText": "聊天" + // "enablePullDownRefresh": true + } + }, + { + "path": "pages/message/emoji", + "style": { + "navigationBarTitleText": "表情" + } + }, + { + "path": "pages/contacts/index", + "style": { + "navigationBarTitleText": "联系人" + } + }, + { + "path": "pages/message/detail", + "style": { + "navigationBarTitleText": "聊天信息" + } + }, + { + "path": "pages/message/record", + "style": { + "navigationBarTitleText": "聊天记录" + } + }, + { + "path": "pages/contacts/detail", + "style": { + "navigationBarTitleText": "用户信息" + } + }, + { + "path": "pages/contacts/friend", + "style": { + "navigationBarTitleText": "新朋友" + } + }, + { + "path": "pages/contacts/search", + "style": { + "navigationBarTitleText": "搜索朋友" + } + }, + { + "path": "pages/login/index", + "style": { + "navigationBarTitleText": "登录" + } + }, + { + "path": "pages/login/register", + "style": { + "navigationBarTitleText": "注册" + } + }, + { + "path": "pages/message/call", + "style": { + "navigationBarTitleText": "通话" + } + }, + { + "path": "pages/message/video", + "style": { + "navigationBarTitleText": "视频播放" + } + }, + { + "path": "pages/index/userSelection", + "style": { + "navigationBarTitleText": "用户选择" + } + }, + { + "path": "pages/message/group/groupUser", + "style": { + "navigationBarTitleText": "群聊成员管理" + } + }, + { + "path": "pages/index/qrcode", + "style": { + "navigationBarTitleText": "群二维码" + } + }, + { + "path": "pages/message/group/info", + "style": { + "navigationBarTitleText": "群信息" + } + }, + { + "path": "pages/contacts/group", + "style": { + "navigationBarTitleText": "群聊列表" + } + }, + { + "path": "pages/index/search", + "style": { + "navigationBarTitleText": "搜索" + } + }, + { + "path": "pages/index/scan", + "style": { + "navigationBarTitleText": "扫描" + } + }, + { + "path": "pages/mine/webview", + "style": { + "navigationBarTitleText": "浏览器", + "navigationStyle":"default" + } + }, + { + "path": "pages/compass/moments", + "style": { + "navigationBarTitleText": "朋友圈" + } + }, + { + "path": "pages/mine/profile", + "style": { + "navigationBarTitleText": "个人信息" + } + }, + { + "path": "pages/mine/secure", + "style": { + "navigationBarTitleText": "安全" + } + }, + { + "path": "pages/mine/about", + "style": { + "navigationBarTitleText": "关于" + } + }, + { + "path": "pages/mine/setting", + "style": { + "navigationBarTitleText": "设置" + } + }, + { + "path": "pages/mine/doc", + "style": { + "navigationBarTitleText": "帮助文档" + } + }, + { + "path" : "pages/compass/sendtoMoments", + "style" : { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/compass/personalcircleoffriends", + "style" : + { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/compass/friendscircledetails", + "style" : + { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/mapselect/mapselect", + "style" : + { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/login/404", + "style" : + { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/compass/Informationdetails", + "style" : + { + "navigationBarTitleText" : "" + } + }, + { + "path" : "pages/contacts/blacklist", + "style" : + { + "navigationBarTitleText" : "" + } + } + ], + "globalStyle": { + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8", + "app-plus": { + "background": "#efeff4" + } + }, + "tabBar": { + "custom": true, + "color": "#333", + "selectedColor": "#1AAD19", + "borderStyle": "black", + "backgroundColor": "#FFFFFF", + "list": [{ + "pagePath": "pages/index/index", + "iconPath": "static/image/tabbar/demo.png", + "selectedIconPath": "static/image/tabbar/demo.png", + "text": "首页" + }, + + { + "pagePath": "pages/contacts/index", + "iconPath": "static/image/tabbar/demo.png", + "selectedIconPath": "static/image/tabbar/demo.png", + "text": "通讯录" + } + ] + } +} diff --git a/pages/compass/Informationdetails.vue b/pages/compass/Informationdetails.vue new file mode 100644 index 0000000..c9c6600 --- /dev/null +++ b/pages/compass/Informationdetails.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/pages/compass/friendscircledetails.vue b/pages/compass/friendscircledetails.vue new file mode 100644 index 0000000..0b16a33 --- /dev/null +++ b/pages/compass/friendscircledetails.vue @@ -0,0 +1,410 @@ + + + + + diff --git a/pages/compass/index.vue b/pages/compass/index.vue new file mode 100644 index 0000000..ab32451 --- /dev/null +++ b/pages/compass/index.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/pages/compass/moments.vue b/pages/compass/moments.vue new file mode 100644 index 0000000..c75f118 --- /dev/null +++ b/pages/compass/moments.vue @@ -0,0 +1,547 @@ + + + + + \ No newline at end of file diff --git a/pages/compass/personalcircleoffriends.vue b/pages/compass/personalcircleoffriends.vue new file mode 100644 index 0000000..afc5571 --- /dev/null +++ b/pages/compass/personalcircleoffriends.vue @@ -0,0 +1,313 @@ + + + + + \ No newline at end of file diff --git a/pages/compass/sendtoMoments.vue b/pages/compass/sendtoMoments.vue new file mode 100644 index 0000000..a1f6cab --- /dev/null +++ b/pages/compass/sendtoMoments.vue @@ -0,0 +1,445 @@ + + + + + \ No newline at end of file diff --git a/pages/contacts/blacklist.vue b/pages/contacts/blacklist.vue new file mode 100644 index 0000000..2ce2c2d --- /dev/null +++ b/pages/contacts/blacklist.vue @@ -0,0 +1,101 @@ + + + + + \ No newline at end of file diff --git a/pages/contacts/detail.vue b/pages/contacts/detail.vue new file mode 100644 index 0000000..420c8f7 --- /dev/null +++ b/pages/contacts/detail.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/pages/contacts/friend.vue b/pages/contacts/friend.vue new file mode 100644 index 0000000..8fa5465 --- /dev/null +++ b/pages/contacts/friend.vue @@ -0,0 +1,150 @@ + + + + + \ No newline at end of file diff --git a/pages/contacts/group.vue b/pages/contacts/group.vue new file mode 100644 index 0000000..8834571 --- /dev/null +++ b/pages/contacts/group.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/pages/contacts/index.vue b/pages/contacts/index.vue new file mode 100644 index 0000000..f4ffc3d --- /dev/null +++ b/pages/contacts/index.vue @@ -0,0 +1,448 @@ + + + + + \ No newline at end of file diff --git a/pages/contacts/search.vue b/pages/contacts/search.vue new file mode 100644 index 0000000..bf060ee --- /dev/null +++ b/pages/contacts/search.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..93691cd --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,427 @@ + + + + + \ No newline at end of file diff --git a/pages/index/qrcode.vue b/pages/index/qrcode.vue new file mode 100644 index 0000000..964e209 --- /dev/null +++ b/pages/index/qrcode.vue @@ -0,0 +1,225 @@ + + + diff --git a/pages/index/scan.vue b/pages/index/scan.vue new file mode 100644 index 0000000..5467eba --- /dev/null +++ b/pages/index/scan.vue @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/pages/index/search.vue b/pages/index/search.vue new file mode 100644 index 0000000..b59a514 --- /dev/null +++ b/pages/index/search.vue @@ -0,0 +1,112 @@ + + + + + \ No newline at end of file diff --git a/pages/index/userSelection.vue b/pages/index/userSelection.vue new file mode 100644 index 0000000..6b1afd8 --- /dev/null +++ b/pages/index/userSelection.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/pages/login/404.vue b/pages/login/404.vue new file mode 100644 index 0000000..59084db --- /dev/null +++ b/pages/login/404.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/pages/login/index.vue b/pages/login/index.vue new file mode 100644 index 0000000..3340245 --- /dev/null +++ b/pages/login/index.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/pages/login/register.vue b/pages/login/register.vue new file mode 100644 index 0000000..636be40 --- /dev/null +++ b/pages/login/register.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/pages/mapselect/mapselect.vue b/pages/mapselect/mapselect.vue new file mode 100644 index 0000000..7c29e76 --- /dev/null +++ b/pages/mapselect/mapselect.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/pages/message/call.vue b/pages/message/call.vue new file mode 100644 index 0000000..4936585 --- /dev/null +++ b/pages/message/call.vue @@ -0,0 +1,262 @@ + + + + + diff --git a/pages/message/chat.vue b/pages/message/chat.vue new file mode 100644 index 0000000..84caf53 --- /dev/null +++ b/pages/message/chat.vue @@ -0,0 +1,1643 @@ + + + + + + + + diff --git a/pages/message/detail.vue b/pages/message/detail.vue new file mode 100644 index 0000000..fc4f4a8 --- /dev/null +++ b/pages/message/detail.vue @@ -0,0 +1,841 @@ + + + + + + diff --git a/pages/message/emoji.vue b/pages/message/emoji.vue new file mode 100644 index 0000000..9b4cb7d --- /dev/null +++ b/pages/message/emoji.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/pages/message/group/groupUser.vue b/pages/message/group/groupUser.vue new file mode 100644 index 0000000..5e419e4 --- /dev/null +++ b/pages/message/group/groupUser.vue @@ -0,0 +1,349 @@ + + + diff --git a/pages/message/group/info.vue b/pages/message/group/info.vue new file mode 100644 index 0000000..099847c --- /dev/null +++ b/pages/message/group/info.vue @@ -0,0 +1,88 @@ + + + diff --git a/pages/message/index.vue b/pages/message/index.vue new file mode 100644 index 0000000..abaaeaa --- /dev/null +++ b/pages/message/index.vue @@ -0,0 +1,384 @@ + + + + + diff --git a/pages/message/record.vue b/pages/message/record.vue new file mode 100644 index 0000000..6406465 --- /dev/null +++ b/pages/message/record.vue @@ -0,0 +1,618 @@ + + + + + + diff --git a/pages/message/video.vue b/pages/message/video.vue new file mode 100644 index 0000000..3caa8ef --- /dev/null +++ b/pages/message/video.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/pages/mine/about.vue b/pages/mine/about.vue new file mode 100644 index 0000000..81a04ca --- /dev/null +++ b/pages/mine/about.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/pages/mine/doc.vue b/pages/mine/doc.vue new file mode 100644 index 0000000..16404da --- /dev/null +++ b/pages/mine/doc.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/pages/mine/index.vue b/pages/mine/index.vue new file mode 100644 index 0000000..5ce5981 --- /dev/null +++ b/pages/mine/index.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/pages/mine/profile.vue b/pages/mine/profile.vue new file mode 100644 index 0000000..c18b003 --- /dev/null +++ b/pages/mine/profile.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/pages/mine/secure.vue b/pages/mine/secure.vue new file mode 100644 index 0000000..add11b6 --- /dev/null +++ b/pages/mine/secure.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/pages/mine/setting.vue b/pages/mine/setting.vue new file mode 100644 index 0000000..7e44822 --- /dev/null +++ b/pages/mine/setting.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/pages/mine/webview.vue b/pages/mine/webview.vue new file mode 100644 index 0000000..ee9bf1c --- /dev/null +++ b/pages/mine/webview.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/service/getMessageList.js b/service/getMessageList.js new file mode 100644 index 0000000..dec9103 --- /dev/null +++ b/service/getMessageList.js @@ -0,0 +1,194 @@ +import db from "../utils/db"; + +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS messageList ( + at TEXT, + content TEXT, + download TEXT, + extUrl TEXT, + extends TEXT, + fileName TEXT, + fileSize INTEGER, + file_cate INTEGER, + file_id INTEGER, + fromUser TEXT, + from_user INTEGER, + id TEXT, + is_group INTEGER, + is_read INTEGER, + msg_id INTEGER, + preview TEXT, + sendTime INTEGER, + status TEXT, + toContactId TEXT, + type TEXT + ) + `) + }, + + async getList({is_group,toContactId,limit,page,type,keywords}) { + try { + // 构建WHERE条件 + const conditions = []; + + if (is_group !== undefined) { + conditions.push(`is_group = ${is_group}`); + } + + const type1 = typeof toContactId !== 'string' + if (type1 && toContactId !== undefined && type==='' && keywords==='') {//筛选是否是单聊 + conditions.push(`(toContactId = ${toContactId} OR from_user = ${toContactId})`); + + }else if(toContactId !== undefined && type === 'all' && keywords===''){//筛选全部 + conditions.push(`toContactId = ${JSON.stringify(toContactId)}`); + + }else if(keywords !== undefined && keywords !== '' && type){//历史聊天记录中的搜索 + const escapedKeywords = keywords.replace(/'/g, "''"); // 转义单引号 + conditions.push(`REPLACE(REPLACE(REPLACE(content, '

', ''),'

', ''),'', '') LIKE '%${escapedKeywords}%'`); + + }else if(toContactId !== undefined && type !== 'all' && type){//筛选文本、图片、视频、文件 + conditions.push(`toContactId = ${JSON.stringify(toContactId)} AND type = ${JSON.stringify(type)}`); + + }else {//筛选是否是群聊 + conditions.push(`(toContactId = ${JSON.stringify(toContactId)} OR from_user = ${JSON.stringify(toContactId)} )`); + } + + const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''; + const offset = (page - 1) * limit; + + // 并行查询数据和总数 + const [dataRes, countRes] = await Promise.all([ + db.selectSql( + `SELECT * FROM messageList ${whereClause} ORDER BY sendTime ASC LIMIT ${limit} OFFSET ${offset}` + ), + db.selectSql( + `SELECT COUNT(*) AS count FROM messageList ${whereClause}` + ) + ]); + // console.info('聊天数据',dataRes); + const userInfo = uni.getStorageSync('userInfo') + dataRes.forEach((item)=>{ + if(toContactId==JSON.stringify(item.from_user)&&item.type=='event'){ + item.content = "对方撤回了一条消息" + }else if(is_group==item.is_group&&item.type=='event'&&userInfo.id!=item.from_user){ + const name = JSON.parse(item.fromUser) + item.content = `${name.realname}撤回了一条消息` + }else if(is_group==item.is_group&&item.type=='event'&&userInfo.id==item.from_user){ + item.content = "你撤回了一条消息" + } + }) + + console.info('聊天数据',{data: dataRes,count: countRes[0]?.count || 0,page: page}); + return { + data: dataRes, + count: countRes[0]?.count || 0, + page: page + }; + } catch (error) { + console.error('查询失败:', error); + return { + data: [], + count: 0 + }; + } + }, + + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + if (!Array.isArray(groupData)) { + throw new Error('数据必须为数组格式'); + } + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + // 2. 批量查询现有数据(基于 id) + const ids = groupData.map(item => item.id).filter(id => id != null); + if (ids.length === 0) return true; + // console.log('12345',groupData); + + if(ids.join(',')&&groupData[0].oldContent){ + const existingRecords = await db.selectSql(`SELECT * FROM messageList WHERE id = ${JSON.stringify(ids.join(','))}`); + // console.log('1234',existingRecords); + + await db.executeSql(`UPDATE messageList SET content = ${JSON.stringify(groupData[0].content)},type = ${JSON.stringify(groupData[0].type)} WHERE id = ${JSON.stringify(existingRecords[0].id)}`) + }else{ + // 构建批量插入语句 + const insertPromises = groupData.map(async (item) => { + // 字段值预处理 + const processedItem = { + at: item.at ? JSON.stringify(item.at) : '[]', + content: item.content || '', + download: item.download || '', + extUrl: item.extUrl || '', + extends: item.extends ? JSON.stringify(item.extends) : '{}', + fileName: item.fileName || '', + fileSize: Number(item.fileSize) || 0, + file_cate: Number(item.file_cate) || 0, + file_id: Number(item.file_id) || 0, + fromUser: item.fromUser ? JSON.stringify(item.fromUser) : '{}', + from_user: Number(item.from_user) || 0, + id: item.id || '', + is_group: Number(item.is_group) || 0, + is_read: Number(item.is_read) || 0, + msg_id: Number(item.msg_id) || 0, + preview: item.preview || '', + sendTime: Number(item.sendTime) || 0, + status: item.status || '', + toContactId: item.toContactId || '', + type: item.type || '', + }; + + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + const values = [ + processedItem.at, + processedItem.content, + processedItem.download, + processedItem.extUrl, + processedItem.extends, + processedItem.fileName, + processedItem.fileSize, + processedItem.file_cate, + processedItem.file_id, + processedItem.fromUser, + processedItem.from_user, + processedItem.id, + processedItem.is_group, + processedItem.is_read, + processedItem.msg_id, + processedItem.preview, + processedItem.sendTime, + processedItem.status, + processedItem.toContactId, + processedItem.type + ]; + + let value_str = "'" + values.join("','") + "'" + // console.log('12345',value_str); + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO messageList ( + at, content, download, extUrl, extends, fileName, fileSize, file_cate, + file_id, fromUser, from_user, id, is_group,is_read, msg_id, preview, + sendTime, status, toContactId, type + ) VALUES (` + value_str + `) + `; + return db.executeSql(sql); + }); + // console.info(insertPromises,'1111'); + await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + console.log('数据同步成功,插入/更新', groupData.length, '条记录'); + } + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + } +} \ No newline at end of file diff --git a/service/getSystemInfo.js b/service/getSystemInfo.js new file mode 100644 index 0000000..cd70280 --- /dev/null +++ b/service/getSystemInfo.js @@ -0,0 +1,79 @@ +import db from "../utils/db"; + +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS getSystemInfo ( + sysInfo TEXT, + chatInfo TEXT, + fileUpload TEXT, + compass TEXT, + demon_mode TEXT + ) + `) + }, + async getList() { + try { + const res = await db.selectSql('select * from getSystemInfo'); + console.log('原始查询结果:', res); // 查看原始数据结构 + return res; + } catch (error) { + console.error('查询失败:', error); + return []; + } + }, + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + + // 清空旧数据(根据需求决定是否需要) + await db.executeSql('DELETE FROM getSystemInfo'); + // 检查表中是否已有数据 + const [checkRes] = await db.selectSql('SELECT COUNT(*) AS count FROM getSystemInfo'); + if (checkRes.count !== 0) { + throw new Error('数据删除验证失败,表中仍存在记录'); + return true; // 明确返回成功状态 + } + + // 字段值预处理 + const processedItem = { + sysInfo: groupData.sysInfo ? JSON.stringify(groupData.sysInfo) : '{}', + chatInfo: groupData.chatInfo ? JSON.stringify(groupData.chatInfo) : '{}', + fileUpload: groupData.fileUpload ? JSON.stringify(groupData.fileUpload) : '{}', + compass: groupData.compass ? JSON.stringify(groupData.compass) : '{}', + demon_mode: groupData.demon_mode ? 1 : 0 + }; + + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + const values = [ + processedItem.sysInfo, + processedItem.chatInfo, + processedItem.fileUpload, + processedItem.compass, + Boolean(processedItem.demon_mode) + ]; + let value_str = "'" + values.join("','") + "'" + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO getSystemInfo ( + sysInfo, chatInfo, fileUpload, compass, demon_mode + ) VALUES (` + value_str + `) + `; + db.executeSql(sql); + // await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + console.log('数据同步成功,插入/更新'); + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + } +} \ No newline at end of file diff --git a/service/getUserInfo.js b/service/getUserInfo.js new file mode 100644 index 0000000..b4117f7 --- /dev/null +++ b/service/getUserInfo.js @@ -0,0 +1,193 @@ +import db from "../utils/db"; + +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS userInfo ( + account TEXT, + avatar TEXT, + create_time TEXT, + cs_uid INTEGER, + delete_time INTEGER, + email TEXT, + friend TEXT, + friend_limit INTEGER, + group_limit INTEGER, + is_auth INTEGER, + last_login_ip TEXT, + last_login_time INTEGER, + location TEXT, + login_count INTEGER, + motto TEXT, + name_py TEXT, + password TEXT, + realname TEXT, + register_ip TEXT, + remark TEXT, + role INTEGER, + salt TEXT, + setting TEXT, + sex INTEGER, + status INTEGER, + update_time TEXT, + user_id INTEGER + ) + `) + }, + + async getList({user_id}) { + try { + if (typeof user_id === 'undefined' || user_id === null) { + return []; + } + const res = await db.selectSql(`SELECT * FROM userInfo WHERE user_id = ${user_id}`); + return res; + }catch (error) { + console.error('查询失败:', error); + return []; // 返回空数组表示查询失败 + } + }, + + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + if (!Array.isArray(groupData)) { + throw new Error('数据必须为数组格式'); + } + if (groupData.length === 0) return true; + + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + // 2. 批量查询现有数据(基于 id) + const ids = groupData.map(item => item.user_id).filter(user_id => user_id != null); + if (ids.length === 0) return true; + const existingRecords = await db.selectSql(`SELECT * FROM userInfo WHERE user_id = ${ids[0]}`); + // console.log('1234',existingRecords.length,existingRecords); + // 构建批量插入语句 + const insertPromises = groupData.map(async (item,index) => { + // 字段值预处理 + const processedItem = { + account: item.account || '', + avatar: item.avatar || '', + create_time: item.create_time || '', + cs_uid: item.cs_uid || 0, + delete_time: item.delete_time || 0, + email: item.email || '', + friend: item.friend ? JSON.stringify(item.friend) : '{}', + friend_limit: item.friend_limit || 0, + group_limit: item.group_limit || 0, + is_auth: item.is_auth || 0, + last_login_ip: item.last_login_ip || '', + last_login_time: item.last_login_time || 0, + location: item.location || '', + login_count: item.login_count || 0, + motto: item.motto || '', + name_py: item.name_py || '', + password: item.password || '', + realname: item.realname || '', + register_ip: item.register_ip || '', + remark: item.remark || '', + role: item.role || 0, + salt: item.salt || '', + setting: item.setting ? JSON.stringify(item.setting) : '{}', + sex: item.sex || 0, + status: item.status || 0, + update_time: item.update_time || '', + user_id: item.user_id || 0, + }; + + // 数据完全一致时跳过 + const existingItem = existingRecords[index] + // console.info('123',existingItem); + // console.info('1234',processedItem); + // console.info(processedItem); + if (existingItem && this.isDataSame(existingItem, processedItem)) { + return Promise.reject(new Error('聊天信息数据已同步并且数据没有改变')); + }else{ + await db.executeSql(`DELETE FROM userInfo WHERE user_id = ${item.user_id}`); + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + + const values = [ + processedItem.account, + processedItem.avatar, + processedItem.create_time, + processedItem.cs_uid, + processedItem.delete_time, + processedItem.email, + processedItem.friend, + processedItem.friend_limit, + processedItem.group_limit, + processedItem.is_auth, + processedItem.last_login_ip, + processedItem.last_login_time, + processedItem.location, + processedItem.login_count, + processedItem.motto, + processedItem.name_py, + processedItem.password, + processedItem.realname, + processedItem.register_ip, + processedItem.remark, + processedItem.role, + processedItem.salt, + processedItem.setting, + processedItem.sex, + processedItem.status, + processedItem.update_time, + processedItem.user_id + ]; + + let value_str = "'" + values.join("','") + "'" + + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO userInfo ( + account, avatar, create_time, cs_uid, delete_time, email, friend, friend_limit, + group_limit, is_auth, last_login_ip, last_login_time, location, login_count, motto, name_py, + password, realname, register_ip, remark, role, salt, setting, sex, status, update_time, user_id + ) VALUES (` + value_str + `) + `; + return db.executeSql(sql); + } + }); + await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + // console.log('数据同步成功,插入/更新', groupData.length, '条记录'); + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + }, + + // 新增数据比较方法 + isDataSame(existing, current) { + // 排除自增字段等不需要比较的字段(根据实际表结构调整) + const ignoreFields = ['create_time']; // 如果id是自增主键需要排除 + + return Object.keys(current).every(key => { + if (ignoreFields.includes(key)) return true; + + // 处理JSON字段特殊比较 + if (key === 'userInfo' ) { + return JSON.stringify(existing[key]) === JSON.stringify(current[key]); + } + + // 处理null值情况 + if (existing[key] === null && current[key] === null) return true; + if (existing[key] === null || current[key] === null) return false; + + + // 处理数字类型(包括可能为空字符串的情况) + if (typeof current[key] === 'number') { + return Number(existing[key]) === current[key]; + } + // 默认字符串比较 + return String(existing[key]) === String(current[key]); + }); + } +} \ No newline at end of file diff --git a/service/groupInfo.js b/service/groupInfo.js new file mode 100644 index 0000000..edaf227 --- /dev/null +++ b/service/groupInfo.js @@ -0,0 +1,173 @@ +import db from "../utils/db"; + +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS groupInfo ( + avatar TEXT, + create_time TEXT, + create_user INTEGER, + delete_time INTEGER, + displayName TEXT, + groupUserCount INTEGER, + group_id INTEGER, + id TEXT, + isJoin INTEGER, + is_public INTEGER, + level INTEGER, + name TEXT, + name_py TEXT, + notice TEXT, + ownerName TEXT, + owner_id INTEGER, + qrExpire TEXT, + qrUrl TEXT, + setting TEXT, + status INTEGER, + userInfo TEXT + ) + `) + }, + + async getList({group_id}) { + try { + if (typeof group_id === 'undefined' || group_id === null) { + return []; + } + const res = await db.selectSql(`SELECT * FROM groupInfo WHERE id = ${JSON.stringify(group_id)}`); + return res; + }catch (error) { + console.error('查询失败:', error); + return []; // 返回空数组表示查询失败 + } + }, + + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + if (!Array.isArray(groupData)) { + throw new Error('数据必须为数组格式'); + } + if (groupData.length === 0) return true; + + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + // 2. 批量查询现有数据(基于 id) + const ids = groupData.map(item => item.id).filter(id => id != null); + if (ids.length === 0) return true; + const existingRecords = await db.selectSql(`SELECT * FROM groupInfo WHERE id = ${JSON.stringify(ids.join(','))}`); + // console.log('1234',existingRecords); + // 构建批量插入语句 + const insertPromises = groupData.map(async (item) => { + // 字段值预处理 + const processedItem = { + avatar: item.avatar || "", + create_time: item.create_time || "", + create_user: Number(item.create_user) || '', + delete_time: Number(item.delete_time) || '', + displayName: item.displayName || "", + groupUserCount: Number(item.groupUserCount) || '', + group_id: Number(item.group_id) || '', + id: item.id || "", + isJoin: Number(item.isJoin) || '', + is_public: Number(item.is_public) || '', + level: Number(item.level) || '', + name: item.name || "", + name_py: item.name_py || "", + notice: item.notice || "", + ownerName: item.ownerName || "", + owner_id: Number(item.owner_id) || '', + qrExpire: item.qrExpire || "", + qrUrl: item.qrUrl || "", + setting: item.setting ? JSON.stringify(item.setting) : '{}', + status: Number(item.status) || '', + userInfo: item.userInfo ? JSON.stringify(item.userInfo) : '{}' + }; + + // 查找现有记录 + const existingItem = existingRecords.find(r => r.id === item.id); + // 数据完全一致时跳过 + if (existingItem && this.isDataSame(existingItem, processedItem)) { + return Promise.reject(new Error('数据已同步过并且数据没有改变')); + }else{ + await db.executeSql(`DELETE FROM groupInfo WHERE id = ${JSON.stringify(item.id)}`); + + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + const values = [ + processedItem.avatar, + processedItem.create_time, + processedItem.create_user, + processedItem.delete_time, + processedItem.displayName, + processedItem.groupUserCount, + processedItem.group_id, + processedItem.id, + processedItem.isJoin, + processedItem.is_public, + processedItem.level, + processedItem.name, + processedItem.name_py, + processedItem.notice, + processedItem.ownerName, + processedItem.owner_id, + processedItem.qrExpire, + processedItem.qrUrl, + processedItem.setting, + processedItem.status, + processedItem.userInfo + ]; + + let value_str = "'" + values.join("','") + "'" + + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO groupInfo ( + avatar, create_time, create_user, delete_time, displayName, groupUserCount, group_id, id, + isJoin, is_public, level, name, name_py, notice, ownerName, owner_id, + qrExpire, qrUrl, setting, status, userInfo + ) VALUES (` + value_str + `) + `; + return db.executeSql(sql); + } + }); + await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + // console.log('数据同步成功,插入/更新', groupData.length, '条记录'); + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + }, + + // 新增数据比较方法 + isDataSame(existing, current) { + // 排除自增字段等不需要比较的字段(根据实际表结构调整) + const ignoreFields = ['id','qrUrl']; // 如果id是自增主键需要排除 + + return Object.keys(current).every(key => { + if (ignoreFields.includes(key)) return true; + + // 处理JSON字段特殊比较 + if (key === 'setting' || key === 'userInfo' ) { + return JSON.stringify(existing[key]) === JSON.stringify(current[key]); + } + + // 处理null值情况 + if (existing[key] === null && current[key] === null) return true; + if (existing[key] === null || current[key] === null) return false; + + // 处理数字类型(包括可能为空字符串的情况) + if (typeof current[key] === 'number') { + return Number(existing[key]) === current[key]; + } + + // 默认字符串比较 + return String(existing[key]) === String(current[key]); + }); + } +} \ No newline at end of file diff --git a/service/groupUserList.js b/service/groupUserList.js new file mode 100644 index 0000000..a1e4d92 --- /dev/null +++ b/service/groupUserList.js @@ -0,0 +1,149 @@ +import db from "../utils/db"; + +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS groupUserList ( + create_time TEXT, + delete_time TEXT, + group_id INTEGER, + id INTEGER, + invite_id INTEGER, + is_notice INTEGER, + is_top INTEGER, + no_speak_time INTEGER, + role INTEGER, + status INTEGER, + unread INTEGER, + userInfo TEXT, + user_id INTEGER + ) + `) + }, + + async getList({group_id}) { + try { + if (typeof group_id === 'undefined' || group_id === null) { + return []; + } + const res = await db.selectSql(`SELECT * FROM groupUserList WHERE group_id = ${group_id}`); + return res; + }catch (error) { + console.error('查询失败:', error); + return []; // 返回空数组表示查询失败 + } + }, + + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + if (!Array.isArray(groupData)) { + throw new Error('数据必须为数组格式'); + } + if (groupData.length === 0) return true; + + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + // 2. 批量查询现有数据(基于 id) + const ids = groupData.map(item => item.group_id).filter(group_id => group_id != null); + if (ids.length === 0) return true; + const existingRecords = await db.selectSql(`SELECT * FROM groupUserList WHERE group_id = ${ids[0]}`); + // console.log('1234',existingRecords.length,existingRecords); + // 构建批量插入语句 + const insertPromises = groupData.map(async (item,index) => { + // 字段值预处理 + const processedItem = { + create_time: item.create_time || '', + delete_time: JSON.stringify(item.delete_time) || '', + group_id: Number(item.group_id) || '', + id: Number(item.id) || '', + invite_id: Number(item.invite_id) || '', + is_notice: Number(item.is_notice) || '', + is_top: item.is_top || '', + no_speak_time: item.no_speak_time || '', + role: Number(item.role) || '', + status: Number(item.status) || '', + unread: Number(item.unread) || '', + userInfo: item.userInfo ? JSON.stringify(item.userInfo) : '{}', + user_id: Number(item.user_id) || '' + }; + + // 数据完全一致时跳过 + const existingItem = existingRecords[index] + // console.info('123',existingItem); + // console.info('1234',processedItem); + // console.info(processedItem); + if (existingItem && this.isDataSame(existingItem, processedItem)) { + return Promise.reject(new Error('聊天信息数据已同步并且数据没有改变')); + }else{ + await db.executeSql(`DELETE FROM groupUserList WHERE group_id = ${item.group_id}`); + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + + const values = [ + processedItem.create_time, + processedItem.delete_time, + processedItem.group_id, + processedItem.id, + processedItem.invite_id, + processedItem.is_notice, + processedItem.is_top, + processedItem.no_speak_time, + processedItem.role, + processedItem.status, + processedItem.unread, + processedItem.userInfo, + processedItem.user_id + ]; + let value_str = "'" + values.join("','") + "'" + + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO groupUserList ( + create_time, delete_time, group_id, id, invite_id, is_notice, is_top, no_speak_time, + role, status, unread, userInfo, user_id + ) VALUES (` + value_str + `) + `; + return db.executeSql(sql); + } + }); + await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + // console.log('数据同步成功,插入/更新', groupData.length, '条记录'); + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + }, + + // 新增数据比较方法 + isDataSame(existing, current) { + // 排除自增字段等不需要比较的字段(根据实际表结构调整) + const ignoreFields = ['id','create_time','unread']; // 如果id是自增主键需要排除 + + return Object.keys(current).every(key => { + if (ignoreFields.includes(key)) return true; + + // 处理JSON字段特殊比较 + if (key === 'userInfo' ) { + return JSON.stringify(existing[key]) === JSON.stringify(current[key]); + } + + // 处理null值情况 + if (existing[key] === null && current[key] === null) return true; + if (existing[key] === null || current[key] === null) return false; + + + // 处理数字类型(包括可能为空字符串的情况) + if (typeof current[key] === 'number') { + return Number(existing[key]) === current[key]; + } + // 默认字符串比较 + return String(existing[key]) === String(current[key]); + }); + } +} \ No newline at end of file diff --git a/service/homeData.js b/service/homeData.js new file mode 100644 index 0000000..825dc31 --- /dev/null +++ b/service/homeData.js @@ -0,0 +1,158 @@ +import db from "../utils/db"; +export default { + createTalbe() { + return db.executeSql(` + CREATE TABLE IF NOT EXISTS chat_groups ( + group_id INTEGER, + user_id INTEGER, + realname TEXT, + avatar TEXT, + displayName TEXT, + email TEXT, + unread INTEGER, + name_py TEXT, + owner_id INTEGER, + notice TEXT, + is_blacklist TEXT, + role INTEGER, + is_notice INTEGER, + is_top INTEGER, + setting TEXT, + id INTEGER, + account TEXT, + is_group TEXT, + group_index TEXT, + is_online INTEGER, + is_at INTEGER, + type TEXT, + lastContent TEXT, + lastSendTime INTEGER, + location TEXT, + last_login_ip TEXT + ) + `) + }, + async getList() { + try { + const res = await db.selectSql('select * from chat_groups'); + console.log('原始查询结果:', res); // 查看原始数据结构 + return res; + } catch (error) { + console.error('查询失败:', error); + return []; + } + }, + + // 批量插入/更新数据 + async batchInsertOrUpdate(groupData) { + if (!Array.isArray(groupData)) { + throw new Error('数据必须为数组格式'); + } + + const dbInstance = await db.createDatabase(); + try { + + // 开启事务 + await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); + + // 清空旧数据(根据需求决定是否需要) + await db.executeSql('DELETE FROM chat_groups'); + // console.log('DELETE 操作执行完成'); + const [checkRes] = await db.selectSql('SELECT COUNT(*) AS count FROM chat_groups'); + // console.info('删除表中记录',checkRes.count); + if (checkRes.count !== 0) { + throw new Error('数据删除验证失败,表中仍存在记录'); + return true; + } + + + // 构建批量插入语句 + const insertPromises = groupData.map(async (item) => { + // 字段值预处理 + const processedItem = { + group_id: item.group_id ?? null, + user_id: item.user_id ?? null, + realname: item.realname || '', + avatar: item.avatar || '', + displayName: item.displayName || '', + email: item.email || '', + unread: Number(item.unread) || 0, + name_py: item.name_py || '', + owner_id: Number(item.owner_id) || 0, + notice: item.notice || '', + is_blacklist: item.is_blacklist || null, + role: Number(item.role) || 0, + is_notice: item.is_notice || null, + is_top: JSON.stringify(item.is_top) || null, + setting: item.setting ? JSON.stringify(item.setting) : '{}', + id: item.id, + account: item.account || '', + is_group: JSON.stringify(item.is_group) || '', + group_index: String(item.index || ''), // ← 关键逗号 + is_online: item.is_online || null, + is_at: JSON.stringify(item.is_at) || null, + type: item.type || null, + lastContent: item.lastContent || '', + lastSendTime: Number(item.lastSendTime) || Date.now(), + location: item.location || '', + last_login_ip: item.last_login_ip || '' + }; + // 删除原接口中的index字段 + // delete processedItem.index; + + // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) + const values = [ + processedItem.group_id, + processedItem.user_id, + processedItem.realname, + processedItem.avatar, + processedItem.displayName, + processedItem.email, + processedItem.unread, + processedItem.name_py, + processedItem.owner_id, + processedItem.notice, + processedItem.is_blacklist, + processedItem.role, + processedItem.is_notice, + processedItem.is_top, + processedItem.setting, + processedItem.id, + processedItem.account, + processedItem.is_group, + processedItem.group_index, + processedItem.is_online, + processedItem.is_at, + processedItem.type, + processedItem.lastContent, + processedItem.lastSendTime, + processedItem.location, + processedItem.last_login_ip + ]; + + let value_str = "'" + values.join("','") + "'" + + // 构建INSERT语句 + const sql = ` + INSERT OR REPLACE INTO chat_groups ( + group_id,user_id, realname, avatar, displayName, email, unread, name_py, + owner_id, notice, is_blacklist, role, is_notice, is_top, + setting, id, account, is_group, group_index, + is_online, is_at, type, + lastContent, lastSendTime,location,last_login_ip + ) VALUES (` + value_str + `) + `; + return db.executeSql(sql); + }); + // console.info(insertPromises,'1111'); + await Promise.all(insertPromises); + await db.executeSql('COMMIT'); + // console.log('数据同步成功,插入/更新', groupData.length, '条记录'); + return true; + } catch (error) { + await db.executeSql('ROLLBACK'); + console.error('数据同步失败:', error); + throw new Error('数据同步失败: ' + error.message); + } + } +} \ No newline at end of file diff --git a/static/css/animation.css b/static/css/animation.css new file mode 100644 index 0000000..931bb51 --- /dev/null +++ b/static/css/animation.css @@ -0,0 +1,184 @@ +/* + Animation 微动画 + 基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28 + */ + +/* css 滤镜 控制黑白底色gif的 */ +.gif-black{ + mix-blend-mode: screen; +} +.gif-white{ + mix-blend-mode: multiply; +} + + +/* Animation css */ +[class*=animation-] { + animation-duration: .5s; + animation-timing-function: ease-out; + animation-fill-mode: both +} + +.animation-fade { + animation-name: fade; + animation-duration: .8s; + animation-timing-function: linear +} + +.animation-scale-up { + animation-name: scale-up +} + +.animation-scale-down { + animation-name: scale-down +} + +.animation-slide-top { + animation-name: slide-top +} + +.animation-slide-bottom { + animation-name: slide-bottom +} + +.animation-slide-left { + animation-name: slide-left +} + +.animation-slide-right { + animation-name: slide-right +} + +.animation-shake { + animation-name: shake +} + +.animation-reverse { + animation-direction: reverse +} + +@keyframes fade { + 0% { + opacity: 0 + } + + 100% { + opacity: 1 + } +} + +@keyframes scale-up { + 0% { + opacity: 0; + transform: scale(.2) + } + + 100% { + opacity: 1; + transform: scale(1) + } +} + +@keyframes scale-down { + 0% { + opacity: 0; + transform: scale(1.8) + } + + 100% { + opacity: 1; + transform: scale(1) + } +} + +@keyframes slide-top { + 0% { + opacity: 0; + transform: translateY(-100%) + } + + 100% { + opacity: 1; + transform: translateY(0) + } +} + +@keyframes slide-bottom { + 0% { + opacity: 0; + transform: translateY(100%) + } + + 100% { + opacity: 1; + transform: translateY(0) + } +} + +@keyframes shake { + + 0%, + 100% { + transform: translateX(0) + } + + 10% { + transform: translateX(-9px) + } + + 20% { + transform: translateX(8px) + } + + 30% { + transform: translateX(-7px) + } + + 40% { + transform: translateX(6px) + } + + 50% { + transform: translateX(-5px) + } + + 60% { + transform: translateX(4px) + } + + 70% { + transform: translateX(-3px) + } + + 80% { + transform: translateX(2px) + } + + 90% { + transform: translateX(-1px) + } +} + +@keyframes slide-left { + 0% { + opacity: 0; + transform: translateX(-100%) + } + + 100% { + opacity: 1; + transform: translateX(0) + } +} + +@keyframes slide-right { + 0% { + opacity: 0; + transform: translateX(100%) + } + + 100% { + opacity: 1; + transform: translateX(0) + } +} \ No newline at end of file diff --git a/static/css/icon.css b/static/css/icon.css new file mode 100644 index 0000000..16ed121 --- /dev/null +++ b/static/css/icon.css @@ -0,0 +1,1226 @@ +@keyframes cuIcon-spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.cuIconfont-spin { + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: inline-block; +} + +.cuIconfont-pulse { + -webkit-animation: cuIcon-spin 1s infinite steps(8); + animation: cuIcon-spin 1s infinite steps(8); + display: inline-block; +} + +[class*="cuIcon-"] { + font-family: "cuIcon"; + font-size: inherit; + font-style: normal; +} + +@font-face { + font-family: "cuIcon"; + src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831'); + /* IE9*/ + src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831#iefix') format('embedded-opentype'), + /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), + url('//at.alicdn.com/t/font_533566_yfq2d9wdij.ttf?t=1545239985831') format('truetype'), + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('//at.alicdn.com/t/font_533566_yfq2d9wdij.svg?t=1545239985831#cuIconfont') format('svg'); + /* iOS 4.1- */ +} + +.cuIcon-appreciate:before { + content: "\e644"; +} + +.cuIcon-check:before { + content: "\e645"; +} + +.cuIcon-close:before { + content: "\e646"; +} + +.cuIcon-edit:before { + content: "\e649"; +} + +.cuIcon-emoji:before { + content: "\e64a"; +} + +.cuIcon-favorfill:before { + content: "\e64b"; +} + +.cuIcon-favor:before { + content: "\e64c"; +} + +.cuIcon-loading:before { + content: "\e64f"; +} + +.cuIcon-locationfill:before { + content: "\e650"; +} + +.cuIcon-location:before { + content: "\e651"; +} + +.cuIcon-phone:before { + content: "\e652"; +} + +.cuIcon-roundcheckfill:before { + content: "\e656"; +} + +.cuIcon-roundcheck:before { + content: "\e657"; +} + +.cuIcon-roundclosefill:before { + content: "\e658"; +} + +.cuIcon-roundclose:before { + content: "\e659"; +} + +.cuIcon-roundrightfill:before { + content: "\e65a"; +} + +.cuIcon-roundright:before { + content: "\e65b"; +} + +.cuIcon-search:before { + content: "\e65c"; +} + +.cuIcon-taxi:before { + content: "\e65d"; +} + +.cuIcon-timefill:before { + content: "\e65e"; +} + +.cuIcon-time:before { + content: "\e65f"; +} + +.cuIcon-unfold:before { + content: "\e661"; +} + +.cuIcon-warnfill:before { + content: "\e662"; +} + +.cuIcon-warn:before { + content: "\e663"; +} + +.cuIcon-camerafill:before { + content: "\e664"; +} + +.cuIcon-camera:before { + content: "\e665"; +} + +.cuIcon-commentfill:before { + content: "\e666"; +} + +.cuIcon-comment:before { + content: "\e667"; +} + +.cuIcon-likefill:before { + content: "\e668"; +} + +.cuIcon-like:before { + content: "\e669"; +} + +.cuIcon-notificationfill:before { + content: "\e66a"; +} + +.cuIcon-notification:before { + content: "\e66b"; +} + +.cuIcon-order:before { + content: "\e66c"; +} + +.cuIcon-samefill:before { + content: "\e66d"; +} + +.cuIcon-same:before { + content: "\e66e"; +} + +.cuIcon-deliver:before { + content: "\e671"; +} + +.cuIcon-evaluate:before { + content: "\e672"; +} + +.cuIcon-pay:before { + content: "\e673"; +} + +.cuIcon-send:before { + content: "\e675"; +} + +.cuIcon-shop:before { + content: "\e676"; +} + +.cuIcon-ticket:before { + content: "\e677"; +} + +.cuIcon-back:before { + content: "\e679"; +} + +.cuIcon-cascades:before { + content: "\e67c"; +} + +.cuIcon-discover:before { + content: "\e67e"; +} + +.cuIcon-list:before { + content: "\e682"; +} + +.cuIcon-more:before { + content: "\e684"; +} + +.cuIcon-scan:before { + content: "\e689"; +} + +.cuIcon-settings:before { + content: "\e68a"; +} + +.cuIcon-questionfill:before { + content: "\e690"; +} + +.cuIcon-question:before { + content: "\e691"; +} + +.cuIcon-shopfill:before { + content: "\e697"; +} + +.cuIcon-form:before { + content: "\e699"; +} + +.cuIcon-pic:before { + content: "\e69b"; +} + +.cuIcon-filter:before { + content: "\e69c"; +} + +.cuIcon-footprint:before { + content: "\e69d"; +} + +.cuIcon-top:before { + content: "\e69e"; +} + +.cuIcon-pulldown:before { + content: "\e69f"; +} + +.cuIcon-pullup:before { + content: "\e6a0"; +} + +.cuIcon-right:before { + content: "\e6a3"; +} + +.cuIcon-refresh:before { + content: "\e6a4"; +} + +.cuIcon-moreandroid:before { + content: "\e6a5"; +} + +.cuIcon-deletefill:before { + content: "\e6a6"; +} + +.cuIcon-refund:before { + content: "\e6ac"; +} + +.cuIcon-cart:before { + content: "\e6af"; +} + +.cuIcon-qrcode:before { + content: "\e6b0"; +} + +.cuIcon-remind:before { + content: "\e6b2"; +} + +.cuIcon-delete:before { + content: "\e6b4"; +} + +.cuIcon-profile:before { + content: "\e6b7"; +} + +.cuIcon-home:before { + content: "\e6b8"; +} + +.cuIcon-cartfill:before { + content: "\e6b9"; +} + +.cuIcon-discoverfill:before { + content: "\e6ba"; +} + +.cuIcon-homefill:before { + content: "\e6bb"; +} + +.cuIcon-message:before { + content: "\e6bc"; +} + +.cuIcon-addressbook:before { + content: "\e6bd"; +} + +.cuIcon-link:before { + content: "\e6bf"; +} + +.cuIcon-lock:before { + content: "\e6c0"; +} + +.cuIcon-unlock:before { + content: "\e6c2"; +} + +.cuIcon-vip:before { + content: "\e6c3"; +} + +.cuIcon-weibo:before { + content: "\e6c4"; +} + +.cuIcon-activity:before { + content: "\e6c5"; +} + +.cuIcon-friendaddfill:before { + content: "\e6c9"; +} + +.cuIcon-friendadd:before { + content: "\e6ca"; +} + +.cuIcon-friendfamous:before { + content: "\e6cb"; +} + +.cuIcon-friend:before { + content: "\e6cc"; +} + +.cuIcon-goods:before { + content: "\e6cd"; +} + +.cuIcon-selection:before { + content: "\e6ce"; +} + +.cuIcon-explore:before { + content: "\e6d2"; +} + +.cuIcon-present:before { + content: "\e6d3"; +} + +.cuIcon-squarecheckfill:before { + content: "\e6d4"; +} + +.cuIcon-square:before { + content: "\e6d5"; +} + +.cuIcon-squarecheck:before { + content: "\e6d6"; +} + +.cuIcon-round:before { + content: "\e6d7"; +} + +.cuIcon-roundaddfill:before { + content: "\e6d8"; +} + +.cuIcon-roundadd:before { + content: "\e6d9"; +} + +.cuIcon-add:before { + content: "\e6da"; +} + +.cuIcon-notificationforbidfill:before { + content: "\e6db"; +} + +.cuIcon-explorefill:before { + content: "\e6dd"; +} + +.cuIcon-fold:before { + content: "\e6de"; +} + +.cuIcon-game:before { + content: "\e6df"; +} + +.cuIcon-redpacket:before { + content: "\e6e0"; +} + +.cuIcon-selectionfill:before { + content: "\e6e1"; +} + +.cuIcon-similar:before { + content: "\e6e2"; +} + +.cuIcon-appreciatefill:before { + content: "\e6e3"; +} + +.cuIcon-infofill:before { + content: "\e6e4"; +} + +.cuIcon-info:before { + content: "\e6e5"; +} + +.cuIcon-forwardfill:before { + content: "\e6ea"; +} + +.cuIcon-forward:before { + content: "\e6eb"; +} + +.cuIcon-rechargefill:before { + content: "\e6ec"; +} + +.cuIcon-recharge:before { + content: "\e6ed"; +} + +.cuIcon-vipcard:before { + content: "\e6ee"; +} + +.cuIcon-voice:before { + content: "\e6ef"; +} + +.cuIcon-voicefill:before { + content: "\e6f0"; +} + +.cuIcon-friendfavor:before { + content: "\e6f1"; +} + +.cuIcon-wifi:before { + content: "\e6f2"; +} + +.cuIcon-share:before { + content: "\e6f3"; +} + +.cuIcon-wefill:before { + content: "\e6f4"; +} + +.cuIcon-we:before { + content: "\e6f5"; +} + +.cuIcon-lightauto:before { + content: "\e6f6"; +} + +.cuIcon-lightforbid:before { + content: "\e6f7"; +} + +.cuIcon-lightfill:before { + content: "\e6f8"; +} + +.cuIcon-camerarotate:before { + content: "\e6f9"; +} + +.cuIcon-light:before { + content: "\e6fa"; +} + +.cuIcon-barcode:before { + content: "\e6fb"; +} + +.cuIcon-flashlightclose:before { + content: "\e6fc"; +} + +.cuIcon-flashlightopen:before { + content: "\e6fd"; +} + +.cuIcon-searchlist:before { + content: "\e6fe"; +} + +.cuIcon-service:before { + content: "\e6ff"; +} + +.cuIcon-sort:before { + content: "\e700"; +} + +.cuIcon-down:before { + content: "\e703"; +} + +.cuIcon-mobile:before { + content: "\e704"; +} + +.cuIcon-mobilefill:before { + content: "\e705"; +} + +.cuIcon-copy:before { + content: "\e706"; +} + +.cuIcon-countdownfill:before { + content: "\e707"; +} + +.cuIcon-countdown:before { + content: "\e708"; +} + +.cuIcon-noticefill:before { + content: "\e709"; +} + +.cuIcon-notice:before { + content: "\e70a"; +} + +.cuIcon-upstagefill:before { + content: "\e70e"; +} + +.cuIcon-upstage:before { + content: "\e70f"; +} + +.cuIcon-babyfill:before { + content: "\e710"; +} + +.cuIcon-baby:before { + content: "\e711"; +} + +.cuIcon-brandfill:before { + content: "\e712"; +} + +.cuIcon-brand:before { + content: "\e713"; +} + +.cuIcon-choicenessfill:before { + content: "\e714"; +} + +.cuIcon-choiceness:before { + content: "\e715"; +} + +.cuIcon-clothesfill:before { + content: "\e716"; +} + +.cuIcon-clothes:before { + content: "\e717"; +} + +.cuIcon-creativefill:before { + content: "\e718"; +} + +.cuIcon-creative:before { + content: "\e719"; +} + +.cuIcon-female:before { + content: "\e71a"; +} + +.cuIcon-keyboard:before { + content: "\e71b"; +} + +.cuIcon-male:before { + content: "\e71c"; +} + +.cuIcon-newfill:before { + content: "\e71d"; +} + +.cuIcon-new:before { + content: "\e71e"; +} + +.cuIcon-pullleft:before { + content: "\e71f"; +} + +.cuIcon-pullright:before { + content: "\e720"; +} + +.cuIcon-rankfill:before { + content: "\e721"; +} + +.cuIcon-rank:before { + content: "\e722"; +} + +.cuIcon-bad:before { + content: "\e723"; +} + +.cuIcon-cameraadd:before { + content: "\e724"; +} + +.cuIcon-focus:before { + content: "\e725"; +} + +.cuIcon-friendfill:before { + content: "\e726"; +} + +.cuIcon-cameraaddfill:before { + content: "\e727"; +} + +.cuIcon-apps:before { + content: "\e729"; +} + +.cuIcon-paintfill:before { + content: "\e72a"; +} + +.cuIcon-paint:before { + content: "\e72b"; +} + +.cuIcon-picfill:before { + content: "\e72c"; +} + +.cuIcon-refresharrow:before { + content: "\e72d"; +} + +.cuIcon-colorlens:before { + content: "\e6e6"; +} + +.cuIcon-markfill:before { + content: "\e730"; +} + +.cuIcon-mark:before { + content: "\e731"; +} + +.cuIcon-presentfill:before { + content: "\e732"; +} + +.cuIcon-repeal:before { + content: "\e733"; +} + +.cuIcon-album:before { + content: "\e734"; +} + +.cuIcon-peoplefill:before { + content: "\e735"; +} + +.cuIcon-people:before { + content: "\e736"; +} + +.cuIcon-servicefill:before { + content: "\e737"; +} + +.cuIcon-repair:before { + content: "\e738"; +} + +.cuIcon-file:before { + content: "\e739"; +} + +.cuIcon-repairfill:before { + content: "\e73a"; +} + +.cuIcon-taoxiaopu:before { + content: "\e73b"; +} + +.cuIcon-weixin:before { + content: "\e612"; +} + +.cuIcon-attentionfill:before { + content: "\e73c"; +} + +.cuIcon-attention:before { + content: "\e73d"; +} + +.cuIcon-commandfill:before { + content: "\e73e"; +} + +.cuIcon-command:before { + content: "\e73f"; +} + +.cuIcon-communityfill:before { + content: "\e740"; +} + +.cuIcon-community:before { + content: "\e741"; +} + +.cuIcon-read:before { + content: "\e742"; +} + +.cuIcon-calendar:before { + content: "\e74a"; +} + +.cuIcon-cut:before { + content: "\e74b"; +} + +.cuIcon-magic:before { + content: "\e74c"; +} + +.cuIcon-backwardfill:before { + content: "\e74d"; +} + +.cuIcon-playfill:before { + content: "\e74f"; +} + +.cuIcon-stop:before { + content: "\e750"; +} + +.cuIcon-tagfill:before { + content: "\e751"; +} + +.cuIcon-tag:before { + content: "\e752"; +} + +.cuIcon-group:before { + content: "\e753"; +} + +.cuIcon-all:before { + content: "\e755"; +} + +.cuIcon-backdelete:before { + content: "\e756"; +} + +.cuIcon-hotfill:before { + content: "\e757"; +} + +.cuIcon-hot:before { + content: "\e758"; +} + +.cuIcon-post:before { + content: "\e759"; +} + +.cuIcon-radiobox:before { + content: "\e75b"; +} + +.cuIcon-rounddown:before { + content: "\e75c"; +} + +.cuIcon-upload:before { + content: "\e75d"; +} + +.cuIcon-writefill:before { + content: "\e760"; +} + +.cuIcon-write:before { + content: "\e761"; +} + +.cuIcon-radioboxfill:before { + content: "\e763"; +} + +.cuIcon-punch:before { + content: "\e764"; +} + +.cuIcon-shake:before { + content: "\e765"; +} + +.cuIcon-move:before { + content: "\e768"; +} + +.cuIcon-safe:before { + content: "\e769"; +} + +.cuIcon-activityfill:before { + content: "\e775"; +} + +.cuIcon-crownfill:before { + content: "\e776"; +} + +.cuIcon-crown:before { + content: "\e777"; +} + +.cuIcon-goodsfill:before { + content: "\e778"; +} + +.cuIcon-messagefill:before { + content: "\e779"; +} + +.cuIcon-profilefill:before { + content: "\e77a"; +} + +.cuIcon-sound:before { + content: "\e77b"; +} + +.cuIcon-sponsorfill:before { + content: "\e77c"; +} + +.cuIcon-sponsor:before { + content: "\e77d"; +} + +.cuIcon-upblock:before { + content: "\e77e"; +} + +.cuIcon-weblock:before { + content: "\e77f"; +} + +.cuIcon-weunblock:before { + content: "\e780"; +} + +.cuIcon-my:before { + content: "\e78b"; +} + +.cuIcon-myfill:before { + content: "\e78c"; +} + +.cuIcon-emojifill:before { + content: "\e78d"; +} + +.cuIcon-emojiflashfill:before { + content: "\e78e"; +} + +.cuIcon-flashbuyfill:before { + content: "\e78f"; +} + +.cuIcon-text:before { + content: "\e791"; +} + +.cuIcon-goodsfavor:before { + content: "\e794"; +} + +.cuIcon-musicfill:before { + content: "\e795"; +} + +.cuIcon-musicforbidfill:before { + content: "\e796"; +} + +.cuIcon-card:before { + content: "\e624"; +} + +.cuIcon-triangledownfill:before { + content: "\e79b"; +} + +.cuIcon-triangleupfill:before { + content: "\e79c"; +} + +.cuIcon-roundleftfill-copy:before { + content: "\e79e"; +} + +.cuIcon-font:before { + content: "\e76a"; +} + +.cuIcon-title:before { + content: "\e82f"; +} + +.cuIcon-recordfill:before { + content: "\e7a4"; +} + +.cuIcon-record:before { + content: "\e7a6"; +} + +.cuIcon-cardboardfill:before { + content: "\e7a9"; +} + +.cuIcon-cardboard:before { + content: "\e7aa"; +} + +.cuIcon-formfill:before { + content: "\e7ab"; +} + +.cuIcon-coin:before { + content: "\e7ac"; +} + +.cuIcon-cardboardforbid:before { + content: "\e7af"; +} + +.cuIcon-circlefill:before { + content: "\e7b0"; +} + +.cuIcon-circle:before { + content: "\e7b1"; +} + +.cuIcon-attentionforbid:before { + content: "\e7b2"; +} + +.cuIcon-attentionforbidfill:before { + content: "\e7b3"; +} + +.cuIcon-attentionfavorfill:before { + content: "\e7b4"; +} + +.cuIcon-attentionfavor:before { + content: "\e7b5"; +} + +.cuIcon-titles:before { + content: "\e701"; +} + +.cuIcon-icloading:before { + content: "\e67a"; +} + +.cuIcon-full:before { + content: "\e7bc"; +} + +.cuIcon-mail:before { + content: "\e7bd"; +} + +.cuIcon-peoplelist:before { + content: "\e7be"; +} + +.cuIcon-goodsnewfill:before { + content: "\e7bf"; +} + +.cuIcon-goodsnew:before { + content: "\e7c0"; +} + +.cuIcon-medalfill:before { + content: "\e7c1"; +} + +.cuIcon-medal:before { + content: "\e7c2"; +} + +.cuIcon-newsfill:before { + content: "\e7c3"; +} + +.cuIcon-newshotfill:before { + content: "\e7c4"; +} + +.cuIcon-newshot:before { + content: "\e7c5"; +} + +.cuIcon-news:before { + content: "\e7c6"; +} + +.cuIcon-videofill:before { + content: "\e7c7"; +} + +.cuIcon-video:before { + content: "\e7c8"; +} + +.cuIcon-exit:before { + content: "\e7cb"; +} + +.cuIcon-skinfill:before { + content: "\e7cc"; +} + +.cuIcon-skin:before { + content: "\e7cd"; +} + +.cuIcon-moneybagfill:before { + content: "\e7ce"; +} + +.cuIcon-usefullfill:before { + content: "\e7cf"; +} + +.cuIcon-usefull:before { + content: "\e7d0"; +} + +.cuIcon-moneybag:before { + content: "\e7d1"; +} + +.cuIcon-redpacket_fill:before { + content: "\e7d3"; +} + +.cuIcon-subscription:before { + content: "\e7d4"; +} + +.cuIcon-loading1:before { + content: "\e633"; +} + +.cuIcon-github:before { + content: "\e692"; +} + +.cuIcon-global:before { + content: "\e7eb"; +} + +.cuIcon-settingsfill:before { + content: "\e6ab"; +} + +.cuIcon-back_android:before { + content: "\e7ed"; +} + +.cuIcon-expressman:before { + content: "\e7ef"; +} + +.cuIcon-evaluate_fill:before { + content: "\e7f0"; +} + +.cuIcon-group_fill:before { + content: "\e7f5"; +} + +.cuIcon-play_forward_fill:before { + content: "\e7f6"; +} + +.cuIcon-deliver_fill:before { + content: "\e7f7"; +} + +.cuIcon-notice_forbid_fill:before { + content: "\e7f8"; +} + +.cuIcon-fork:before { + content: "\e60c"; +} + +.cuIcon-pick:before { + content: "\e7fa"; +} + +.cuIcon-wenzi:before { + content: "\e6a7"; +} + +.cuIcon-ellipse:before { + content: "\e600"; +} + +.cuIcon-qr_code:before { + content: "\e61b"; +} + +.cuIcon-dianhua:before { + content: "\e64d"; +} + +.cuIcon-cuIcon:before { + content: "\e602"; +} + +.cuIcon-loading2:before { + content: "\e7f1"; +} + +.cuIcon-btn:before { + content: "\e601"; +} diff --git a/static/css/iconfont.css b/static/css/iconfont.css new file mode 100644 index 0000000..d8b5d04 --- /dev/null +++ b/static/css/iconfont.css @@ -0,0 +1,147 @@ +@font-face { + font-family: "iconfont"; /* Project id 3565944 */ + src: url('../fonts/iconfont.woff2?t=1693989529907') format('woff2'), + url('../fonts/iconfont.woff?t=1693989529907') format('woff'), + url('../fonts/iconfont.ttf?t=1693989529907') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-web:before { + content: "\e68b"; +} + +.icon-ico:before { + content: "\e646"; +} + +.icon-speaker:before { + content: "\e600"; +} + +.icon-ai16:before { + content: "\e684"; +} + +.icon-no-speaker:before { + content: "\e867"; +} + +.icon-iconqiehuanjingtou:before { + content: "\e60d"; +} + +.icon-maikefeng:before { + content: "\e62c"; +} + +.icon-maikefeng1:before { + content: "\e62f"; +} + +.icon-zhaoxiangjiqiehuan:before { + content: "\e866"; +} + +.icon-im-yuyin:before { + content: "\e667"; +} + +.icon-im-file:before { + content: "\e617"; +} + +.icon-im-picture:before { + content: "\e618"; +} + +.icon-im-qcard:before { + content: "\e619"; +} + +.icon-im-signout:before { + content: "\e61a"; +} + +.icon-im-add:before { + content: "\e61b"; +} + +.icon-im-news:before { + content: "\e61c"; +} + +.icon-im-emoji:before { + content: "\e61d"; +} + +.icon-im-grcard:before { + content: "\e61e"; +} + +.icon-im-call:before { + content: "\e61f"; +} + +.icon-im-video:before { + content: "\e620"; +} + +.icon-im-at:before { + content: "\e621"; +} + +.icon-im-search:before { + content: "\e622"; +} + +.icon-im-more:before { + content: "\e627"; +} + +.icon-im-group:before { + content: "\e628"; +} + +.icon-im-meeting:before { + content: "\e629"; +} + +.icon-im-addfriends:before { + content: "\e62a"; +} + +.icon-im-plusmeeeting:before { + content: "\e62b"; +} + +.icon-im_extend:before { + content: "\e62d"; +} + +.icon-im-shrink:before { + content: "\e62e"; +} + +.icon-im-password:before { + content: "\e633"; +} + +.icon-im-end:before { + content: "\e634"; +} + +.icon-im-deldte:before { + content: "\e636"; +} + +.icon-im-videocall:before { + content: "\e637"; +} + diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 0000000..e785683 --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,3917 @@ +/* + ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24 + 仅供学习交流,如作它用所承受的法律责任一概与作者无关 + + *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 + + (QQ交流群:240787041) +*/ + +/* ================== + 初始化 + ==================== */ +body { + background-color: #f1f1f1; + font-size: 28upx; + color: #333333; + font-family: Helvetica Neue, Helvetica, sans-serif; +} + +view, +scroll-view, +swiper, +button, +input, +textarea, +label, +navigator, +image { + box-sizing: border-box; +} + +.round { + border-radius: 5000upx; +} + +.radius { + border-radius: 6upx; +} + +/* ================== + 图片 + ==================== */ + +image { + max-width: 100%; + display: inline-block; + position: relative; + z-index: 0; +} + +image.loading::before { + content: ""; + background-color: #f5f5f5; + display: block; + position: absolute; + width: 100%; + height: 100%; + z-index: -2; +} + +image.loading::after { + content: "\e7f1"; + font-family: "cuIcon"; + position: absolute; + top: 0; + left: 0; + width: 32upx; + height: 32upx; + line-height: 32upx; + right: 0; + bottom: 0; + z-index: -1; + font-size: 32upx; + margin: auto; + color: #ccc; + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: block; +} + +.response { + width: 100%; +} + +/* ================== + 开关 + ==================== */ + +switch, +checkbox, +radio { + position: relative; +} + +switch::after, +switch::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 0%; + left: 0upx; + font-size: 26upx; + line-height: 26px; + width: 50%; + text-align: center; + pointer-events: none; + transform: scale(0, 0); + transition: all 0.3s ease-in-out 0s; + z-index: 9; + bottom: 0; + height: 26px; + margin: auto; +} + +switch::before { + content: "\e646"; + right: 0; + transform: scale(1, 1); + left: auto; +} + +switch[checked]::after, +switch.checked::after { + transform: scale(1, 1); +} + +switch[checked]::before, +switch.checked::before { + transform: scale(0, 0); +} + +/* #ifndef MP-ALIPAY */ +radio::before, +checkbox::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 50%; + margin-top: -8px; + right: 5px; + font-size: 32upx; + line-height: 16px; + pointer-events: none; + transform: scale(1, 1); + transition: all 0.3s ease-in-out 0s; + z-index: 9; +} + +radio .wx-radio-input, +checkbox .wx-checkbox-input, +radio .uni-radio-input, +checkbox .uni-checkbox-input { + margin: 0; + width: 24px; + height: 24px; +} + +checkbox.round .wx-checkbox-input, +checkbox.round .uni-checkbox-input { + border-radius: 100upx; +} + +/* #endif */ + +switch[checked]::before { + transform: scale(0, 0); +} + +switch .wx-switch-input, +switch .uni-switch-input { + border: none; + padding: 0 24px; + width: 48px; + height: 26px; + margin: 0; + border-radius: 100upx; +} + +switch .wx-switch-input:not([class*="bg-"]), +switch .uni-switch-input:not([class*="bg-"]) { + background: #8799a3 !important; +} + +switch .wx-switch-input::after, +switch .uni-switch-input::after { + margin: auto; + width: 26px; + height: 26px; + border-radius: 100upx; + left: 0upx; + top: 0upx; + bottom: 0upx; + position: absolute; + transform: scale(0.9, 0.9); + transition: all 0.1s ease-in-out 0s; +} + +switch .wx-switch-input.wx-switch-input-checked::after, +switch .uni-switch-input.uni-switch-input-checked::after { + margin: auto; + left: 22px; + box-shadow: none; + transform: scale(0.9, 0.9); +} + +radio-group { + display: inline-block; +} + + + +switch.radius .wx-switch-input::after, +switch.radius .wx-switch-input, +switch.radius .wx-switch-input::before, +switch.radius .uni-switch-input::after, +switch.radius .uni-switch-input, +switch.radius .uni-switch-input::before { + border-radius: 10upx; +} + +switch .wx-switch-input::before, +radio.radio::before, +checkbox .wx-checkbox-input::before, +radio .wx-radio-input::before, +switch .uni-switch-input::before, +radio.radio::before, +checkbox .uni-checkbox-input::before, +radio .uni-radio-input::before { + display: none; +} + +radio.radio[checked]::after, +radio.radio .uni-radio-input-checked::after { + content: ""; + background-color: transparent; + display: block; + position: absolute; + width: 8px; + height: 8px; + z-index: 999; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + border-radius: 200upx; + /* #ifndef MP */ + border: 7px solid #ffffff !important; + /* #endif */ + + /* #ifdef MP */ + border: 8px solid #ffffff !important; + /* #endif */ +} + +.switch-sex::after { + content: "\e71c"; +} + +.switch-sex::before { + content: "\e71a"; +} + +.switch-sex .wx-switch-input, +.switch-sex .uni-switch-input { + background: #e54d42 !important; + border-color: #e54d42 !important; +} + +.switch-sex[checked] .wx-switch-input, +.switch-sex.checked .uni-switch-input { + background: #0081ff !important; + border-color: #0081ff !important; +} + +switch.red[checked] .wx-switch-input.wx-switch-input-checked, +checkbox.red[checked] .wx-checkbox-input, +radio.red[checked] .wx-radio-input, +switch.red.checked .uni-switch-input.uni-switch-input-checked, +checkbox.red.checked .uni-checkbox-input, +radio.red.checked .uni-radio-input { + background-color: #e54d42 !important; + border-color: #e54d42 !important; + color: #ffffff !important; +} + +switch.orange[checked] .wx-switch-input, +checkbox.orange[checked] .wx-checkbox-input, +radio.orange[checked] .wx-radio-input, +switch.orange.checked .uni-switch-input, +checkbox.orange.checked .uni-checkbox-input, +radio.orange.checked .uni-radio-input { + background-color: #f37b1d !important; + border-color: #f37b1d !important; + color: #ffffff !important; +} + +switch.yellow[checked] .wx-switch-input, +checkbox.yellow[checked] .wx-checkbox-input, +radio.yellow[checked] .wx-radio-input, +switch.yellow.checked .uni-switch-input, +checkbox.yellow.checked .uni-checkbox-input, +radio.yellow.checked .uni-radio-input { + background-color: #fbbd08 !important; + border-color: #fbbd08 !important; + color: #333333 !important; +} + +switch.olive[checked] .wx-switch-input, +checkbox.olive[checked] .wx-checkbox-input, +radio.olive[checked] .wx-radio-input, +switch.olive.checked .uni-switch-input, +checkbox.olive.checked .uni-checkbox-input, +radio.olive.checked .uni-radio-input { + background-color: #8dc63f !important; + border-color: #8dc63f !important; + color: #ffffff !important; +} + +switch.green[checked] .wx-switch-input, +switch[checked] .wx-switch-input, +checkbox.green[checked] .wx-checkbox-input, +checkbox[checked] .wx-checkbox-input, +radio.green[checked] .wx-radio-input, +radio[checked] .wx-radio-input, +switch.green.checked .uni-switch-input, +switch.checked .uni-switch-input, +checkbox.green.checked .uni-checkbox-input, +checkbox.checked .uni-checkbox-input, +radio.green.checked .uni-radio-input, +radio.checked .uni-radio-input { + background-color: #39b54a !important; + border-color: #39b54a !important; + color: #ffffff !important; + border-color: #39B54A !important; +} + +switch.cyan[checked] .wx-switch-input, +checkbox.cyan[checked] .wx-checkbox-input, +radio.cyan[checked] .wx-radio-input, +switch.cyan.checked .uni-switch-input, +checkbox.cyan.checked .uni-checkbox-input, +radio.cyan.checked .uni-radio-input { + background-color: #1cbbb4 !important; + border-color: #1cbbb4 !important; + color: #ffffff !important; +} + +switch.blue[checked] .wx-switch-input, +checkbox.blue[checked] .wx-checkbox-input, +radio.blue[checked] .wx-radio-input, +switch.blue.checked .uni-switch-input, +checkbox.blue.checked .uni-checkbox-input, +radio.blue.checked .uni-radio-input { + background-color: #0081ff !important; + border-color: #0081ff !important; + color: #ffffff !important; +} + +switch.purple[checked] .wx-switch-input, +checkbox.purple[checked] .wx-checkbox-input, +radio.purple[checked] .wx-radio-input, +switch.purple.checked .uni-switch-input, +checkbox.purple.checked .uni-checkbox-input, +radio.purple.checked .uni-radio-input { + background-color: #6739b6 !important; + border-color: #6739b6 !important; + color: #ffffff !important; +} + +switch.mauve[checked] .wx-switch-input, +checkbox.mauve[checked] .wx-checkbox-input, +radio.mauve[checked] .wx-radio-input, +switch.mauve.checked .uni-switch-input, +checkbox.mauve.checked .uni-checkbox-input, +radio.mauve.checked .uni-radio-input { + background-color: #9c26b0 !important; + border-color: #9c26b0 !important; + color: #ffffff !important; +} + +switch.pink[checked] .wx-switch-input, +checkbox.pink[checked] .wx-checkbox-input, +radio.pink[checked] .wx-radio-input, +switch.pink.checked .uni-switch-input, +checkbox.pink.checked .uni-checkbox-input, +radio.pink.checked .uni-radio-input { + background-color: #e03997 !important; + border-color: #e03997 !important; + color: #ffffff !important; +} + +switch.brown[checked] .wx-switch-input, +checkbox.brown[checked] .wx-checkbox-input, +radio.brown[checked] .wx-radio-input, +switch.brown.checked .uni-switch-input, +checkbox.brown.checked .uni-checkbox-input, +radio.brown.checked .uni-radio-input { + background-color: #a5673f !important; + border-color: #a5673f !important; + color: #ffffff !important; +} + +switch.grey[checked] .wx-switch-input, +checkbox.grey[checked] .wx-checkbox-input, +radio.grey[checked] .wx-radio-input, +switch.grey.checked .uni-switch-input, +checkbox.grey.checked .uni-checkbox-input, +radio.grey.checked .uni-radio-input { + background-color: #8799a3 !important; + border-color: #8799a3 !important; + color: #ffffff !important; +} + +switch.gray[checked] .wx-switch-input, +checkbox.gray[checked] .wx-checkbox-input, +radio.gray[checked] .wx-radio-input, +switch.gray.checked .uni-switch-input, +checkbox.gray.checked .uni-checkbox-input, +radio.gray.checked .uni-radio-input { + background-color: #f0f0f0 !important; + border-color: #f0f0f0 !important; + color: #333333 !important; +} + +switch.black[checked] .wx-switch-input, +checkbox.black[checked] .wx-checkbox-input, +radio.black[checked] .wx-radio-input, +switch.black.checked .uni-switch-input, +checkbox.black.checked .uni-checkbox-input, +radio.black.checked .uni-radio-input { + background-color: #333333 !important; + border-color: #333333 !important; + color: #ffffff !important; +} + +switch.white[checked] .wx-switch-input, +checkbox.white[checked] .wx-checkbox-input, +radio.white[checked] .wx-radio-input, +switch.white.checked .uni-switch-input, +checkbox.white.checked .uni-checkbox-input, +radio.white.checked .uni-radio-input { + background-color: #ffffff !important; + border-color: #ffffff !important; + color: #333333 !important; +} + +/* ================== + 边框 + ==================== */ + +/* -- 实线 -- */ + +.solid, +.solid-top, +.solid-right, +.solid-bottom, +.solid-left, +.solids, +.solids-top, +.solids-right, +.solids-bottom, +.solids-left, +.dashed, +.dashed-top, +.dashed-right, +.dashed-bottom, +.dashed-left { + position: relative; +} + +.solid::after, +.solid-top::after, +.solid-right::after, +.solid-bottom::after, +.solid-left::after, +.solids::after, +.solids-top::after, +.solids-right::after, +.solids-bottom::after, +.solids-left::after, +.dashed::after, +.dashed-top::after, +.dashed-right::after, +.dashed-bottom::after, +.dashed-left::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; +} + +.solid::after { + border: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-top::after { + border-top: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-right::after { + border-right: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-bottom::after { + border-bottom: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-left::after { + border-left: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solids::after { + border: 8upx solid #eee; +} + +.solids-top::after { + border-top: 8upx solid #eee; +} + +.solids-right::after { + border-right: 8upx solid #eee; +} + +.solids-bottom::after { + border-bottom: 8upx solid #eee; +} + +.solids-left::after { + border-left: 8upx solid #eee; +} + +/* -- 虚线 -- */ + +.dashed::after { + border: 1upx dashed #ddd; +} + +.dashed-top::after { + border-top: 1upx dashed #ddd; +} + +.dashed-right::after { + border-right: 1upx dashed #ddd; +} + +.dashed-bottom::after { + border-bottom: 1upx dashed #ddd; +} + +.dashed-left::after { + border-left: 1upx dashed #ddd; +} + +/* -- 阴影 -- */ + +.shadow[class*='white'] { + --ShadowSize: 0 1upx 6upx; +} + +.shadow-lg { + --ShadowSize: 0upx 40upx 100upx 0upx; +} + +.shadow-warp { + position: relative; + box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1); +} + +.shadow-warp:before, +.shadow-warp:after { + position: absolute; + content: ""; + top: 20upx; + bottom: 30upx; + left: 20upx; + width: 50%; + box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2); + transform: rotate(-3deg); + z-index: -1; +} + +.shadow-warp:after { + right: 20upx; + left: auto; + transform: rotate(3deg); +} + +.shadow-blur { + position: relative; +} + +.shadow-blur::before { + content: ""; + display: block; + background: inherit; + filter: blur(10upx); + position: absolute; + width: 100%; + height: 100%; + top: 10upx; + left: 10upx; + z-index: -1; + opacity: 0.4; + transform-origin: 0 0; + border-radius: inherit; + transform: scale(1, 1); +} + +/* ================== + 按钮 + ==================== */ + +.cu-btn { + position: relative; + border: 0upx; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0 30upx; + font-size: 28upx; + height: 64upx; + line-height: 1; + text-align: center; + text-decoration: none; + overflow: visible; + margin-left: initial; + transform: translate(0upx, 0upx); + margin-right: initial; +} + +.cu-btn::after { + display: none; +} + +.cu-btn:not([class*="bg-"]) { + background-color: #f0f0f0; +} + +.cu-btn[class*="line"] { + background-color: transparent; +} + +.cu-btn[class*="line"]::after { + content: " "; + display: block; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 12upx; + z-index: 1; + pointer-events: none; +} + +.cu-btn.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-btn[class*="lines"]::after { + border: 6upx solid currentColor; +} + +.cu-btn[class*="bg-"]::after { + display: none; +} + +.cu-btn.sm { + padding: 0 20upx; + font-size: 20upx; + height: 48upx; +} + +.cu-btn.lg { + padding: 0 40upx; + font-size: 32upx; + height: 80upx; +} + +.cu-btn.cuIcon.sm { + width: 48upx; + height: 48upx; +} + +.cu-btn.cuIcon { + width: 64upx; + height: 64upx; + border-radius: 500upx; + padding: 0; +} + +button.cuIcon.lg { + width: 80upx; + height: 80upx; +} + +.cu-btn.shadow-blur::before { + top: 4upx; + left: 4upx; + filter: blur(6upx); + opacity: 0.6; +} + +.cu-btn.button-hover { + transform: translate(1upx, 1upx); +} + +.block { + display: block; +} + +.cu-btn.block { + display: flex; +} + +.cu-btn[disabled] { + opacity: 0.6; + color: #ffffff; +} + +/* ================== + 徽章 + ==================== */ + +.cu-tag { + font-size: 24upx; + vertical-align: middle; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0upx 16upx; + height: 48upx; + font-family: Helvetica Neue, Helvetica, sans-serif; + white-space: nowrap; +} + +.cu-tag:not([class*="bg"]):not([class*="line"]) { + background-color: #f1f1f1; +} + +.cu-tag[class*="line-"]::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: inherit; + z-index: 1; + pointer-events: none; +} + +.cu-tag.radius[class*="line"]::after { + border-radius: 12upx; +} + +.cu-tag.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-tag[class*="line-"]::after { + border-radius: 0; +} + +.cu-tag+.cu-tag { + margin-left: 10upx; +} + +.cu-tag.sm { + font-size: 20upx; + padding: 0upx 12upx; + height: 32upx; +} + +.cu-capsule { + display: inline-flex; + vertical-align: middle; +} + +.cu-capsule+.cu-capsule { + margin-left: 10upx; +} + +.cu-capsule .cu-tag { + margin: 0; +} + +.cu-capsule .cu-tag[class*="line-"]:last-child::after { + border-left: 0upx solid transparent; +} + +.cu-capsule .cu-tag[class*="line-"]:first-child::after { + border-right: 0upx solid transparent; +} + +.cu-capsule.radius .cu-tag:first-child { + border-top-left-radius: 6upx; + border-bottom-left-radius: 6upx; +} + +.cu-capsule.radius .cu-tag:last-child::after, +.cu-capsule.radius .cu-tag[class*="line-"] { + border-top-right-radius: 12upx; + border-bottom-right-radius: 12upx; +} + +.cu-capsule.round .cu-tag:first-child { + border-top-left-radius: 200upx; + border-bottom-left-radius: 200upx; + text-indent: 4upx; +} + +.cu-capsule.round .cu-tag:last-child::after, +.cu-capsule.round .cu-tag:last-child { + border-top-right-radius: 200upx; + border-bottom-right-radius: 200upx; + text-indent: -4upx; +} + +.cu-tag.badge { + border-radius: 200upx; + position: absolute; + top: 0upx; + right: -10upx; + font-size: 20upx; + padding: 0upx 10upx; + height: 32upx; + color: #ffffff; +} + +.cu-tag.badge:not([class*="bg-"]) { + background-color: #dd514c; +} + +.cu-tag:empty:not([class*="cuIcon-"]) { + padding: 0upx; + width: 16upx; + height: 16upx; + top: -4upx; + right: -4upx; +} + +.cu-tag[class*="cuIcon-"] { + width: 32upx; + height: 32upx; + top: -4upx; + right: -4upx; +} + +/* ================== + 头像 + ==================== */ + +.cu-avatar { + font-variant: small-caps; + margin: 0; + padding: 0; + display: inline-flex; + text-align: center; + justify-content: center; + align-items: center; +/* background-color: #ccc; */ + color: #ffffff; + white-space: nowrap; + position: relative; + width: 64upx; + height: 64upx; + background-size: cover; + background-position: center; + vertical-align: middle; + font-size: 1.5em; +} + +.cu-avatar.sm { + width: 48upx; + height: 48upx; + font-size: 1em; +} + +.cu-avatar.lg { + width: 96upx; + height: 96upx; + font-size: 2em; +} + +.cu-avatar.xl { + width: 128upx; + height: 128upx; + font-size: 2.5em; +} + +.cu-avatar .avatar-text { + font-size: 0.4em; +} + +.cu-avatar-group { + direction: rtl; + unicode-bidi: bidi-override; + padding: 0 10upx 0 40upx; + display: inline-block; +} + +.cu-avatar-group .cu-avatar { + margin-left: -30upx; + border: 4upx solid #f1f1f1; + vertical-align: middle; +} + +.cu-avatar-group .cu-avatar.sm { + margin-left: -20upx; + border: 1upx solid #f1f1f1; +} + +/* ================== + 进度条 + ==================== */ + +.cu-progress { + overflow: hidden; + height: 28upx; + background-color: #ebeef5; + display: inline-flex; + align-items: center; + width: 100%; +} + +.cu-progress+view, +.cu-progress+text { + line-height: 1; +} + +.cu-progress.xs { + height: 10upx; +} + +.cu-progress.sm { + height: 20upx; +} + +.cu-progress view { + width: 0; + height: 100%; + align-items: center; + display: flex; + justify-items: flex-end; + justify-content: space-around; + font-size: 20upx; + color: #ffffff; + transition: width 0.6s ease; +} + +.cu-progress text { + align-items: center; + display: flex; + font-size: 20upx; + color: #333333; + text-indent: 10upx; +} + +.cu-progress.text-progress { + padding-right: 60upx; +} + +.cu-progress.striped view { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 72upx 72upx; +} + +.cu-progress.active view { + animation: progress-stripes 2s linear infinite; +} + +@keyframes progress-stripes { + from { + background-position: 72upx 0; + } + + to { + background-position: 0 0; + } +} + +/* ================== + 加载 + ==================== */ + +.cu-load { + display: block; + line-height: 3em; + text-align: center; +} + +.cu-load::before { + font-family: "cuIcon"; + display: inline-block; + margin-right: 6upx; +} + +.cu-load.loading::before { + content: "\e67a"; + animation: cuIcon-spin 2s infinite linear; +} + +.cu-load.loading::after { + content: "加载中..."; +} + +.cu-load.over::before { + content: "\e64a"; +} + +.cu-load.over::after { + content: "没有更多了"; +} + +.cu-load.erro::before { + content: "\e658"; +} + +.cu-load.erro::after { + content: "加载失败"; +} + +.cu-load.load-cuIcon::before { + font-size: 32upx; +} + +.cu-load.load-cuIcon::after { + display: none; +} + +.cu-load.load-cuIcon.over { + display: none; +} + +.cu-load.load-modal { + position: fixed; + top: 0; + right: 0; + bottom: 140upx; + left: 0; + margin: auto; + width: 260upx; + height: 260upx; + background-color: #ffffff; + border-radius: 10upx; + box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + font-size: 28upx; + z-index: 9999; + line-height: 2.4em; +} + +.cu-load.load-modal [class*="cuIcon-"] { + font-size: 60upx; +} + +.cu-load.load-modal image { + width: 70upx; + height: 70upx; +} + +.cu-load.load-modal::after { + content: ""; + position: absolute; + background-color: #ffffff; + border-radius: 50%; + width: 200upx; + height: 200upx; + font-size: 10px; + border-top: 6upx solid rgba(0, 0, 0, 0.05); + border-right: 6upx solid rgba(0, 0, 0, 0.05); + border-bottom: 6upx solid rgba(0, 0, 0, 0.05); + border-left: 6upx solid #f37b1d; + animation: cuIcon-spin 1s infinite linear; + z-index: -1; +} + +.load-progress { + pointer-events: none; + top: 0; + position: fixed; + width: 100%; + left: 0; + z-index: 2000; +} + +.load-progress.hide { + display: none; +} + +.load-progress .load-progress-bar { + position: relative; + width: 100%; + height: 4upx; + overflow: hidden; + transition: all 200ms ease 0s; +} + +.load-progress .load-progress-spinner { + position: absolute; + top: 10upx; + right: 10upx; + z-index: 2000; + display: block; +} + +.load-progress .load-progress-spinner::after { + content: ""; + display: block; + width: 24upx; + height: 24upx; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 4upx transparent; + border-top-color: inherit; + border-left-color: inherit; + border-radius: 50%; + -webkit-animation: load-progress-spinner 0.4s linear infinite; + animation: load-progress-spinner 0.4s linear infinite; +} + +@-webkit-keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/* ================== + 列表 + ==================== */ +.grayscale { + filter: grayscale(1); +} + +.cu-list+.cu-list { + margin-top: 30upx +} + +.cu-list>.cu-item { + transition: all .6s ease-in-out 0s; + transform: translateX(0upx) +} + +.cu-list>.cu-item.move-cur { + transform: translateX(-260upx) +} + +.cu-list>.cu-item .move { + position: absolute; + right: 0; + display: flex; + width: 260upx; + height: 100%; + transform: translateX(100%) +} + +.cu-list>.cu-item .move view { + display: flex; + flex: 1; + justify-content: center; + align-items: center +} + +.cu-list.menu-avatar { + overflow: hidden; +} + +.cu-list.menu-avatar>.cu-item { + position: relative; + display: flex; + padding-right: 10upx; + height: 140upx; + background-color: #ffffff; + justify-content: flex-end; + align-items: center +} + +.cu-list.menu-avatar>.cu-item>.cu-avatar { + position: absolute; + left: 30upx +} + +.cu-list.menu-avatar>.cu-item .flex .text-cut { + max-width: 510upx +} + +.cu-list.menu-avatar>.cu-item .content { + position: absolute; + left: 146upx; + width: calc(100% - 96upx - 60upx - 120upx - 20upx); + line-height: 1.6em; +} + +.cu-list.menu-avatar>.cu-item .content.flex-sub { + width: calc(100% - 96upx - 60upx - 20upx); +} + +.cu-list.menu-avatar>.cu-item .content>view:first-child { + font-size: 30upx; + display: flex; + align-items: center +} + +.cu-list.menu-avatar>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu-avatar>.cu-item .action { + width: 120upx; + text-align: right +} + +.cu-list.menu-avatar>.cu-item .action view+view { + margin-top: 10upx +} + +.cu-list.menu-avatar.comment>.cu-item .content { + position: relative; + left: 0; + width: auto; + flex: 1; +} + +.cu-list.menu-avatar.comment>.cu-item { + padding: 30upx 30upx 30upx 120upx; + height: auto +} + +.cu-list.menu-avatar.comment .cu-avatar { + align-self: flex-start +} + +.cu-list.menu>.cu-item { + position: relative; + display: flex; + padding: 0 30upx; + min-height: 100upx; + background-color: #ffffff; + justify-content: space-between; + align-items: center +} + +.cu-list.menu>.cu-item:last-child:after { + border: none +} + +.cu-list.menu-avatar>.cu-item:after, +.cu-list.menu>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-bottom: 1upx solid #ddd; + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.menu>.cu-item.grayscale { + background-color: #f5f5f5 +} + +.cu-list.menu>.cu-item.cur { + background-color: #fcf7e9 +} + +.cu-list.menu>.cu-item.arrow { + padding-right: 90upx +} + +.cu-list.menu>.cu-item.arrow:before { + position: absolute; + top: 0; + right: 30upx; + bottom: 0; + display: block; + margin: auto; + width: 30upx; + height: 30upx; + color: #8799a3; + content: "\e6a3"; + text-align: center; + font-size: 34upx; + font-family: cuIcon; + line-height: 30upx +} + +.cu-list.menu>.cu-item button.content { + padding: 0; + background-color: transparent; + justify-content: flex-start +} + +.cu-list.menu>.cu-item button.content:after { + display: none +} + +.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar { + border-color: #ffffff +} + +.cu-list.menu>.cu-item .content>view:first-child { + display: flex; + align-items: center +} + +.cu-list.menu>.cu-item .content>text[class*=cuIcon] { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + text-align: center +} + +.cu-list.menu>.cu-item .content>image { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + height: 1.6em; + vertical-align: middle +} + +.cu-list.menu>.cu-item .content { + font-size: 30upx; + line-height: 1.6em; + flex: 1 +} + +.cu-list.menu>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu>.cu-item .action .cu-tag:empty { + right: 10upx +} + +.cu-list.menu { + display: block; + overflow: hidden +} + +.cu-list.menu.sm-border>.cu-item:after { + left: 30upx; + width: calc(200% - 120upx) +} + +.cu-list.grid>.cu-item { + position: relative; + display: flex; + padding: 20upx 0 30upx; + transition-duration: 0s; + flex-direction: column +} + +.cu-list.grid>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-right: 1px solid rgba(0, 0, 0, .1); + border-bottom: 1px solid rgba(0, 0, 0, .1); + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.grid>.cu-item text { + display: block; + margin-top: 10upx; + color: #888; + font-size: 26upx; + line-height: 40upx +} + +.cu-list.grid>.cu-item [class*=cuIcon] { + position: relative; + display: block; + margin-top: 20upx; + width: 100%; + font-size: 48upx +} + +.cu-list.grid>.cu-item .cu-tag { + right: auto; + left: 50%; + margin-left: 20upx +} + +.cu-list.grid { + background-color: #ffffff; + text-align: center +} + +.cu-list.grid.no-border>.cu-item { + padding-top: 10upx; + padding-bottom: 20upx +} + +.cu-list.grid.no-border>.cu-item:after { + border: none +} + +.cu-list.grid.no-border { + padding: 20upx 10upx +} + +.cu-list.grid.col-3>.cu-item:nth-child(3n):after, +.cu-list.grid.col-4>.cu-item:nth-child(4n):after, +.cu-list.grid.col-5>.cu-item:nth-child(5n):after { + border-right-width: 0 +} + +.cu-list.card-menu { + overflow: hidden; + margin-right: 30upx; + margin-left: 30upx; + border-radius: 20upx +} + + +/* ================== + 操作条 + ==================== */ + +.cu-bar { + display: flex; + position: relative; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-bar .action { + display: flex; + align-items: center; + height: 100%; + justify-content: center; + max-width: 100%; +} + +.cu-bar .action.border-title { + position: relative; + top: -10upx; +} + +.cu-bar .action.border-title text[class*="bg-"]:last-child { + position: absolute; + bottom: -0.5rem; + min-width: 2rem; + height: 6upx; + left: 0; +} + +.cu-bar .action.sub-title { + position: relative; + top: -0.2rem; +} + +.cu-bar .action.sub-title text { + position: relative; + z-index: 1; +} + +.cu-bar .action.sub-title text[class*="bg-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.2rem; + border-radius: 6upx; + width: 100%; + height: 0.6rem; + left: 0.6rem; + opacity: 0.3; + z-index: 0; +} + +.cu-bar .action.sub-title text[class*="text-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.7rem; + left: 0.5rem; + opacity: 0.2; + z-index: 0; + text-align: right; + font-weight: 900; + font-size: 36upx; +} + +.cu-bar.justify-center .action.border-title text:last-child, +.cu-bar.justify-center .action.sub-title text:last-child { + left: 0; + right: 0; + margin: auto; + text-align: center; +} + +.cu-bar .action:first-child { + margin-left: 30upx; + font-size: 30upx; +} + +.cu-bar .action text.text-cut { + text-align: left; + width: 100%; +} + +.cu-bar .cu-avatar:first-child { + margin-left: 20upx; +} + +.cu-bar .action:first-child>text[class*="cuIcon-"] { + margin-left: -0.3em; + margin-right: 0.3em; +} + +.cu-bar .action:last-child { + margin-right: 30upx; +} + +.cu-bar .action>text[class*="cuIcon-"], +.cu-bar .action>view[class*="cuIcon-"] { + font-size: 36upx; +} + +.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] { + margin-left: 0.5em; +} + +.cu-bar .content { + position: absolute; + text-align: center; + width: calc(100% - 340upx); + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: auto; + height: 60upx; + font-size: 32upx; + line-height: 60upx; + cursor: none; + pointer-events: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.cu-bar.ios .content { + bottom: 7px; + height: 30px; + font-size: 32upx; + line-height: 30px; +} + +.cu-bar.btn-group { + justify-content: space-around; +} + +.cu-bar.btn-group button { + padding: 20upx 32upx; +} + +.cu-bar.btn-group button { + flex: 1; + margin: 0 20upx; + max-width: 50%; +} + +.cu-bar .search-form { + background-color: #f5f5f5; + line-height: 64upx; + height: 64upx; + font-size: 24upx; + color: #333333; + flex: 1; + display: flex; + align-items: center; + margin: 0 30upx; +} + +.cu-bar .search-form+.action { + margin-right: 30upx; +} + +.cu-bar .search-form input { + flex: 1; + padding-right: 30upx; + height: 64upx; + line-height: 64upx; + font-size: 26upx; + background-color: transparent; +} + +.cu-bar .search-form [class*="cuIcon-"] { + margin: 0 0.5em 0 0.8em; +} + +.cu-bar .search-form [class*="cuIcon-"]::before { + top: 0upx; +} + +.cu-bar.fixed, +.nav.fixed { + position: fixed; + width: 100%; + top: 0; + z-index: 1024; + box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.foot { + position: fixed; + width: 100%; + bottom: 0; + z-index: 1024; + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar { + padding: 0; + height: calc(100upx + env(safe-area-inset-bottom) / 2); + padding-bottom: calc(env(safe-area-inset-bottom) / 2); +} + +.cu-tabbar-height { + min-height: 100upx; + height: calc(100upx + env(safe-area-inset-bottom) / 2); +} + +.cu-bar.tabbar.shadow { + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar .action { + font-size: 22upx; + position: relative; + flex: 1; + text-align: center; + padding: 0; + display: block; + height: auto; + line-height: 1; + margin: 0; + background-color: inherit; + overflow: initial; +} + +.cu-bar.tabbar.shop .action { + width: 140upx; + flex: initial; +} + +.cu-bar.tabbar .action.add-action { + position: relative; + z-index: 2; + padding-top: 50upx; +} + +.cu-bar.tabbar .action.add-action [class*="cuIcon-"] { + position: absolute; + width: 70upx; + z-index: 2; + height: 70upx; + border-radius: 50%; + line-height: 70upx; + font-size: 50upx; + top: -35upx; + left: 0; + right: 0; + margin: auto; + padding: 0; +} + +.cu-bar.tabbar .action.add-action::after { + content: ""; + position: absolute; + width: 100upx; + height: 100upx; + top: -50upx; + left: 0; + right: 0; + margin: auto; + box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08); + border-radius: 50upx; + background-color: inherit; + z-index: 0; +} + +.cu-bar.tabbar .action.add-action::before { + content: ""; + position: absolute; + width: 100upx; + height: 30upx; + bottom: 30upx; + left: 0; + right: 0; + margin: auto; + background-color: inherit; + z-index: 1; +} + +.cu-bar.tabbar .btn-group { + flex: 1; + display: flex; + justify-content: space-around; + align-items: center; + padding: 0 10upx; +} + +.cu-bar.tabbar button.action::after { + border: 0; +} + +.cu-bar.tabbar .action [class*="cuIcon-"] { + width: 100upx; + position: relative; + display: block; + height: auto; + margin: 0 auto 10upx; + text-align: center; + font-size: 40upx; +} + +.cu-bar.tabbar .action .cuIcon-cu-image { + margin: 0 auto; +} + +.cu-bar.tabbar .action .cuIcon-cu-image image { + width: 50upx; + height: 50upx; + display: inline-block; +} + +.cu-bar.tabbar .submit { + align-items: center; + display: flex; + justify-content: center; + text-align: center; + position: relative; + flex: 2; + align-self: stretch; +} + +.cu-bar.tabbar .submit:last-child { + flex: 2.6; +} + +.cu-bar.tabbar .submit+.submit { + flex: 2; +} + +.cu-bar.tabbar.border .action::before { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + transform: scale(0.5); + transform-origin: 0 0; + border-right: 1upx solid rgba(0, 0, 0, 0.1); + z-index: 3; +} + +.cu-bar.tabbar.border .action:last-child:before { + display: none; +} + +.cu-bar.input { + padding-right: 20upx; + background-color: #ffffff; +} + +.cu-bar.input input { + overflow: initial; + line-height: 64upx; + height: 64upx; + min-height: 64upx; + flex: 1; + font-size: 30upx; + margin: 0 20upx; +} + +.cu-bar.input .action { + margin-left: 20upx; +} + +.cu-bar.input .action [class*="cuIcon-"] { + font-size: 48upx; +} + +.cu-bar.input input+.action { + margin-right: 20upx; + margin-left: 0upx; +} + +.cu-bar.input .action:first-child [class*="cuIcon-"] { + margin-left: 0upx; +} + +.cu-custom { + display: block; + position: relative; +} + +.cu-custom .cu-bar .content { + width: calc(100% - 440upx); +} + +/* #ifdef MP-ALIPAY */ +.cu-custom .cu-bar .action .cuIcon-back { + opacity: 0; +} + +/* #endif */ + +.cu-custom .cu-bar .content image { + height: 60upx; + width: 240upx; +} + +.cu-custom .cu-bar { + min-height: 0px; + /* #ifdef MP-WEIXIN */ + padding-right: 220upx; + /* #endif */ + /* #ifdef MP-ALIPAY */ + padding-right: 150upx; + /* #endif */ + box-shadow: 0upx 0upx 0upx; + z-index: 101; +} + +.cu-custom .cu-bar .border-custom { + position: relative; + background: rgba(0, 0, 0, 0.15); + border-radius: 1000upx; + height: 30px; +} + +.cu-custom .cu-bar .border-custom::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + border: 1upx solid #ffffff; + opacity: 0.5; +} + +.cu-custom .cu-bar .border-custom::before { + content: " "; + width: 1upx; + height: 110%; + position: absolute; + top: 22.5%; + left: 0; + right: 0; + margin: auto; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + opacity: 0.6; + background-color: #ffffff; +} + +.cu-custom .cu-bar .border-custom text { + display: block; + flex: 1; + margin: auto !important; + text-align: center; + font-size: 34upx; +} + +/* ================== + 导航栏 + ==================== */ + +.nav { + white-space: nowrap; +} + +::-webkit-scrollbar { + display: none; +} + +.nav .cu-item { + height: 90upx; + display: inline-block; + line-height: 90upx; + margin: 0 10upx; + padding: 0 20upx; +} + +.nav .cu-item.cur { + border-bottom: 4upx solid; +} + +/* ================== + 时间轴 + ==================== */ + +.cu-timeline { + display: block; + background-color: #ffffff; +} + +.cu-timeline .cu-time { + width: 120upx; + text-align: center; + padding: 20upx 0; + font-size: 26upx; + color: #888; + display: block; +} + +.cu-timeline>.cu-item { + padding: 30upx 30upx 30upx 120upx; + position: relative; + display: block; + z-index: 0; +} + +.cu-timeline>.cu-item:not([class*="text-"]) { + color: #ccc; +} + +.cu-timeline>.cu-item::after { + content: ""; + display: block; + position: absolute; + width: 1upx; + background-color: #ddd; + left: 60upx; + height: 100%; + top: 0; + z-index: 8; +} + +.cu-timeline>.cu-item::before { + font-family: "cuIcon"; + display: block; + position: absolute; + top: 36upx; + z-index: 9; + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item:not([class*="cuIcon-"])::before { + content: "\e763"; +} + +.cu-timeline>.cu-item[class*="cuIcon-"]::before { + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item>.content { + padding: 30upx; + border-radius: 6upx; + display: block; + line-height: 1.6; +} + +.cu-timeline>.cu-item>.content:not([class*="bg-"]) { + background-color: #f1f1f1; + color: #333333; +} + +.cu-timeline>.cu-item>.content+.content { + margin-top: 20upx; +} + +/* ================== + 聊天 + ==================== */ + +.cu-chat { + display: flex; + flex-direction: column; +} + +.cu-chat .cu-item { + display: flex; + padding: 30upx 30upx 70upx; + position: relative; +} + +.cu-chat .cu-item>.cu-avatar { + width: 80upx; + height: 80upx; +} + +.cu-chat .cu-item>.main { + max-width: calc(100% - 260upx); + margin: 0 40upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>image { + height: 320upx; +} + +.cu-chat .cu-item>.main .content { + padding: 20upx; + border-radius: 6upx; + display: inline-flex; + max-width: 100%; + align-items: center; + font-size: 30upx; + position: relative; + min-height: 80upx; + line-height: 40upx; + text-align: left; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"]) { + background-color: #ffffff; + color: #333333; +} + +.cu-chat .cu-item .date { + position: absolute; + font-size: 24upx; + color: #8799a3; + width: calc(100% - 320upx); + bottom: 20upx; + left: 160upx; +} + +.cu-chat .cu-item .action { + padding: 0 30upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>.main .content::after { + content: ""; + top: 27upx; + transform: rotate(45deg); + position: absolute; + z-index: 100; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; +} + +.cu-chat .cu-item.self>.main .content::after { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item>.main .content::before { + content: ""; + top: 30upx; + transform: rotate(45deg); + position: absolute; + z-index: -1; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; + filter: blur(5upx); + opacity: 0.3; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"])::before { + background-color: #333333; + opacity: 0.1; +} + +.cu-chat .cu-item.self>.main .content::before { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item.self { + justify-content: flex-end; + text-align: right; +} + +.cu-chat .cu-info { + display: inline-block; + margin: 20upx auto; + font-size: 24upx; + padding: 8upx 12upx; + background-color: rgba(0, 0, 0, 0.2); + border-radius: 6upx; + color: #ffffff; + max-width: 400upx; + line-height: 1.4; +} + +/* ================== + 卡片 + ==================== */ + +.cu-card { + display: block; + overflow: hidden; +} + +.cu-card>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; + border-radius: 10upx; + margin: 30upx; +} + +.cu-card>.cu-item.shadow-blur { + overflow: initial; +} + +.cu-card.no-card>.cu-item { + margin: 0upx; + border-radius: 0upx; +} + +.cu-card .grid.grid-square { + margin-bottom: -20upx; +} + +.cu-card.case .image { + position: relative; +} + +.cu-card.case .image image { + width: 100%; +} + +.cu-card.case .image .cu-tag { + position: absolute; + right: 0; + top: 0; +} + +.cu-card.case .image .cu-bar { + position: absolute; + bottom: 0; + width: 100%; + background-color: transparent; + padding: 0upx 30upx; +} + +.cu-card.case.no-card .image { + margin: 30upx 30upx 0; + overflow: hidden; + border-radius: 10upx; +} + +.cu-card.dynamic { + display: block; +} + +.cu-card.dynamic>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; +} + +.cu-card.dynamic>.cu-item>.text-content { + padding: 0 30upx 0; + max-height: 6.4em; + overflow: hidden; + font-size: 30upx; + margin-bottom: 20upx; +} + +.cu-card.dynamic>.cu-item .square-img { + width: 100%; + height: 200upx; + border-radius: 6upx; +} + +.cu-card.dynamic>.cu-item .only-img { + width: 100%; + height: 320upx; + border-radius: 6upx; +} + +/* card.dynamic>.cu-item .comment { + padding: 20upx; + background-color: #f1f1f1; + margin: 0 30upx 30upx; + border-radius: 6upx; +} */ + +.cu-card.article { + display: block; +} + +.cu-card.article>.cu-item { + padding-bottom: 30upx; +} + +.cu-card.article>.cu-item .title { + font-size: 30upx; + font-weight: 900; + color: #333333; + line-height: 100upx; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content { + display: flex; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content>image { + width: 240upx; + height: 6.4em; + margin-right: 20upx; + border-radius: 6upx; +} + +.cu-card.article>.cu-item .content .desc { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.cu-card.article>.cu-item .content .text-content { + font-size: 28upx; + color: #888; + height: 4.8em; + overflow: hidden; +} + +/* ================== + 表单 + ==================== */ + +.cu-form-group { + background-color: #ffffff; + padding: 1upx 30upx; + display: flex; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-form-group+.cu-form-group { + border-top: 1upx solid #eee; +} + +.cu-form-group .title { + text-align: justify; + padding-right: 30upx; + font-size: 30upx; + position: relative; + height: 60upx; + line-height: 60upx; +} + +.cu-form-group input { + flex: 1; + font-size: 30upx; + color: #555; + padding-right: 20upx; +} + +.cu-form-group>text[class*="cuIcon-"] { + font-size: 36upx; + padding: 0; + box-sizing: border-box; +} + +.cu-form-group textarea { + margin: 32upx 0 30upx; + height: 4.6em; + width: 100%; + line-height: 1.2em; + flex: 1; + font-size: 28upx; + padding: 0; +} + +.cu-form-group.align-start .title { + height: 1em; + margin-top: 32upx; + line-height: 1em; +} + +.cu-form-group picker { + flex: 1; + padding-right: 40upx; + overflow: hidden; + position: relative; +} + +.cu-form-group picker .picker { + line-height: 100upx; + font-size: 28upx; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 100%; + text-align: right; +} + +.cu-form-group picker::after { + font-family: cuIcon; + display: block; + content: "\e6a3"; + position: absolute; + font-size: 34upx; + color: #8799a3; + line-height: 100upx; + width: 60upx; + text-align: center; + top: 0; + bottom: 0; + right: -20upx; + margin: auto; +} + +.cu-form-group textarea[disabled], +.cu-form-group textarea[disabled] .placeholder { + color: transparent; +} + +/* ================== + 模态窗口 + ==================== */ + +.cu-modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1110; + opacity: 0; + outline: 0; + text-align: center; + -ms-transform: scale(1.185); + transform: scale(1.185); + backface-visibility: hidden; + perspective: 2000upx; + background: rgba(0, 0, 0, 0.6); + transition: all 0.3s ease-in-out 0s; + pointer-events: none; +} + +.cu-modal::before { + content: "\200B"; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.cu-modal.show { + opacity: 1; + transition-duration: 0.3s; + -ms-transform: scale(1); + transform: scale(1); + overflow-x: hidden; + overflow-y: auto; + pointer-events: auto; +} + +.cu-dialog { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680upx; + max-width: 100%; + background-color: #f8f8f8; + border-radius: 10upx; + overflow: hidden; +} + +.cu-modal.bottom-modal::before { + vertical-align: bottom; +} + +.cu-modal.bottom-modal .cu-dialog { + width: 100%; + border-radius: 0; +} + +.cu-modal.bottom-modal { + margin-bottom: -1000upx; +} + +.cu-modal.bottom-modal.show { + margin-bottom: 0; +} + +.cu-modal.drawer-modal { + transform: scale(1); + display: flex; +} + +.cu-modal.drawer-modal .cu-dialog { + height: 100%; + min-width: 200upx; + border-radius: 0; + margin: initial; + transition-duration: 0.3s; +} + +.cu-modal.drawer-modal.justify-start .cu-dialog { + transform: translateX(-100%); +} + +.cu-modal.drawer-modal.justify-end .cu-dialog { + transform: translateX(100%); +} + +.cu-modal.drawer-modal.show .cu-dialog { + transform: translateX(0%); +} +.cu-modal .cu-dialog>.cu-bar:first-child .action{ + min-width: 100rpx; + margin-right: 0; + min-height: 100rpx; +} +/* ================== + 轮播 + ==================== */ +swiper .a-swiper-dot { + display: inline-block; + width: 16upx; + height: 16upx; + background: rgba(0, 0, 0, .3); + border-radius: 50%; + vertical-align: middle; +} + +swiper[class*="-dot"] .wx-swiper-dots, +swiper[class*="-dot"] .a-swiper-dots, +swiper[class*="-dot"] .uni-swiper-dots { + display: flex; + align-items: center; + width: 100%; + justify-content: center; +} + +swiper.square-dot .wx-swiper-dot, +swiper.square-dot .a-swiper-dot, +swiper.square-dot .uni-swiper-dot { + background-color: #ffffff; + opacity: 0.4; + width: 10upx; + height: 10upx; + border-radius: 20upx; + margin: 0 8upx !important; +} + +swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.square-dot .a-swiper-dot.a-swiper-dot-active, +swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active { + opacity: 1; + width: 30upx; +} + +swiper.round-dot .wx-swiper-dot, +swiper.round-dot .a-swiper-dot, +swiper.round-dot .uni-swiper-dot { + width: 10upx; + height: 10upx; + position: relative; + margin: 4upx 8upx !important; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after { + content: ""; + position: absolute; + width: 10upx; + height: 10upx; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + background-color: #ffffff; + border-radius: 20upx; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active { + width: 18upx; + height: 18upx; +} + +.screen-swiper { + min-height: 375upx; +} + +.screen-swiper image, +.screen-swiper video, +.swiper-item image, +.swiper-item video { + width: 100%; + display: block; + height: 100%; + margin: 0; + pointer-events: none; +} + +.card-swiper { + height: 420upx !important; +} + +.card-swiper swiper-item { + width: 610upx !important; + left: 70upx; + box-sizing: border-box; + padding: 40upx 0upx 70upx; + overflow: initial; +} + +.card-swiper swiper-item .swiper-item { + width: 100%; + display: block; + height: 100%; + border-radius: 10upx; + transform: scale(0.9); + transition: all 0.2s ease-in 0s; + overflow: hidden; +} + +.card-swiper swiper-item.cur .swiper-item { + transform: none; + transition: all 0.2s ease-in 0s; +} + + +.tower-swiper { + height: 420upx; + position: relative; + max-width: 750upx; + overflow: hidden; +} + +.tower-swiper .tower-item { + position: absolute; + width: 300upx; + height: 380upx; + top: 0; + bottom: 0; + left: 50%; + margin: auto; + transition: all 0.2s ease-in 0s; + opacity: 1; +} + +.tower-swiper .tower-item.none { + opacity: 0; +} + +.tower-swiper .tower-item .swiper-item { + width: 100%; + height: 100%; + border-radius: 6upx; + overflow: hidden; +} + +/* ================== + 步骤条 + ==================== */ + +.cu-steps { + display: flex; +} + +scroll-view.cu-steps { + display: block; + white-space: nowrap; +} + +scroll-view.cu-steps .cu-item { + display: inline-block; +} + +.cu-steps .cu-item { + flex: 1; + text-align: center; + position: relative; + min-width: 100upx; +} + +.cu-steps .cu-item:not([class*="text-"]) { + color: #8799a3; +} + +.cu-steps .cu-item [class*="cuIcon-"], +.cu-steps .cu-item .num { + display: block; + font-size: 40upx; + line-height: 80upx; +} + +.cu-steps .cu-item::before, +.cu-steps .cu-item::after, +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: ""; + display: block; + position: absolute; + height: 0px; + width: calc(100% - 80upx); + border-bottom: 1px solid #ccc; + left: calc(0px - (100% - 80upx) / 2); + top: 40upx; + z-index: 0; +} + +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: "\e6a3"; + font-family: 'cuIcon'; + height: 30upx; + border-bottom-width: 0px; + line-height: 30upx; + top: 0; + bottom: 0; + margin: auto; + color: #ccc; +} + +.cu-steps.steps-bottom .cu-item::before, +.cu-steps.steps-bottom .cu-item::after { + bottom: 40upx; + top: initial; +} + +.cu-steps .cu-item::after { + border-bottom: 1px solid currentColor; + width: 0px; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"]::after { + width: calc(100% - 80upx); + color: currentColor; +} + +.cu-steps .cu-item:first-child::before, +.cu-steps .cu-item:first-child::after { + display: none; +} + +.cu-steps .cu-item .num { + width: 40upx; + height: 40upx; + border-radius: 50%; + line-height: 40upx; + margin: 20upx auto; + font-size: 24upx; + border: 1px solid currentColor; + position: relative; + overflow: hidden; +} + +.cu-steps .cu-item[class*="text-"] .num { + background-color: currentColor; +} + +.cu-steps .cu-item .num::before, +.cu-steps .cu-item .num::after { + content: attr(data-index); + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + transition: all 0.3s ease-in-out 0s; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num::before { + transform: translateY(-40upx); + color: #ffffff; +} + +.cu-steps .cu-item .num::after { + transform: translateY(40upx); + color: #ffffff; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"] .num::after { + content: "\e645"; + font-family: 'cuIcon'; + color: #ffffff; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num.err::after { + content: "\e646"; +} + +/* ================== + 布局 + ==================== */ + +/* -- flex弹性布局 -- */ + +.flex { + display: flex; +} + +.basis-xs { + flex-basis: 20%; +} + +.basis-sm { + flex-basis: 40%; +} + +.basis-df { + flex-basis: 50%; +} + +.basis-lg { + flex-basis: 60%; +} + +.basis-xl { + flex-basis: 80%; +} + +.flex-sub { + flex: 1; +} + +.flex-twice { + flex: 2; +} + +.flex-treble { + flex: 3; +} + +.flex-direction { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.align-center { + align-items: center; +} + +.align-stretch { + align-items: stretch; +} + +.self-start { + align-self: flex-start; +} + +.self-center { + align-self: flex-center; +} + +.self-end { + align-self: flex-end; +} + +.self-stretch { + align-self: stretch; +} + +.align-stretch { + align-items: stretch; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +/* grid布局 */ + +.grid { + display: flex; + flex-wrap: wrap; +} + +.grid.grid-square { + overflow: hidden; +} + +.grid.grid-square .cu-tag { + position: absolute; + right: 0; + top: 0; + border-bottom-left-radius: 6upx; + padding: 6upx 12upx; + height: auto; + background-color: rgba(0, 0, 0, 0.5); +} + +.grid.grid-square>view>text[class*="cuIcon-"] { + font-size: 52upx; + position: absolute; + color: #8799a3; + margin: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.grid.grid-square>view { + margin-right: 20upx; + margin-bottom: 20upx; + border-radius: 6upx; + position: relative; + overflow: hidden; +} +.grid.grid-square>view.bg-img image { + width: 100%; + height: 100%; + position: absolute; +} +.grid.col-1.grid-square>view { + padding-bottom: 100%; + height: 0; + margin-right: 0; +} + +.grid.col-2.grid-square>view { + padding-bottom: calc((100% - 20upx)/2); + height: 0; + width: calc((100% - 20upx)/2); +} + +.grid.col-3.grid-square>view { + padding-bottom: calc((100% - 40upx)/3); + height: 0; + width: calc((100% - 40upx)/3); +} + +.grid.col-4.grid-square>view { + padding-bottom: calc((100% - 60upx)/4); + height: 0; + width: calc((100% - 60upx)/4); +} + +.grid.col-5.grid-square>view { + padding-bottom: calc((100% - 80upx)/5); + height: 0; + width: calc((100% - 80upx)/5); +} + +.grid.col-2.grid-square>view:nth-child(2n), +.grid.col-3.grid-square>view:nth-child(3n), +.grid.col-4.grid-square>view:nth-child(4n), +.grid.col-5.grid-square>view:nth-child(5n) { + margin-right: 0; +} + +.grid.col-1>view { + width: 100%; +} + +.grid.col-2>view { + width: 50%; +} + +.grid.col-3>view { + width: 33.33%; +} + +.grid.col-4>view { + width: 25%; +} + +.grid.col-5>view { + width: 20%; +} + +/* -- 内外边距 -- */ + +.margin-0 { + margin: 0; +} + +.margin-xs { + margin: 10upx; +} + +.margin-sm { + margin: 20upx; +} + +.margin { + margin: 30upx; +} + +.margin-lg { + margin: 40upx; +} + +.margin-xl { + margin: 50upx; +} + +.margin-top-xs { + margin-top: 10upx; +} + +.margin-top-sm { + margin-top: 20upx; +} + +.margin-top { + margin-top: 30upx; +} + +.margin-top-lg { + margin-top: 40upx; +} + +.margin-top-xl { + margin-top: 50upx; +} + +.margin-right-xs { + margin-right: 10upx; +} + +.margin-right-sm { + margin-right: 20upx; +} + +.margin-right { + margin-right: 30upx; +} + +.margin-right-lg { + margin-right: 40upx; +} + +.margin-right-xl { + margin-right: 50upx; +} + +.margin-bottom-xs { + margin-bottom: 10upx; +} + +.margin-bottom-sm { + margin-bottom: 20upx; +} + +.margin-bottom { + margin-bottom: 30upx; +} + +.margin-bottom-lg { + margin-bottom: 40upx; +} + +.margin-bottom-xl { + margin-bottom: 50upx; +} + +.margin-left-xs { + margin-left: 10upx; +} + +.margin-left-sm { + margin-left: 20upx; +} + +.margin-left { + margin-left: 30upx; +} + +.margin-left-lg { + margin-left: 40upx; +} + +.margin-left-xl { + margin-left: 50upx; +} + +.margin-lr-xs { + margin-left: 10upx; + margin-right: 10upx; +} + +.margin-lr-sm { + margin-left: 20upx; + margin-right: 20upx; +} + +.margin-lr { + margin-left: 30upx; + margin-right: 30upx; +} + +.margin-lr-lg { + margin-left: 40upx; + margin-right: 40upx; +} + +.margin-lr-xl { + margin-left: 50upx; + margin-right: 50upx; +} + +.margin-tb-xs { + margin-top: 10upx; + margin-bottom: 10upx; +} + +.margin-tb-sm { + margin-top: 20upx; + margin-bottom: 20upx; +} + +.margin-tb { + margin-top: 30upx; + margin-bottom: 30upx; +} + +.margin-tb-lg { + margin-top: 40upx; + margin-bottom: 40upx; +} + +.margin-tb-xl { + margin-top: 50upx; + margin-bottom: 50upx; +} + +.padding-0 { + padding: 0; +} + +.padding-xs { + padding: 10upx; +} + +.padding-sm { + padding: 20upx; +} + +.padding { + padding: 30upx; +} + +.padding-lg { + padding: 40upx; +} + +.padding-xl { + padding: 50upx; +} + +.padding-top-xs { + padding-top: 10upx; +} + +.padding-top-sm { + padding-top: 20upx; +} + +.padding-top { + padding-top: 30upx; +} + +.padding-top-lg { + padding-top: 40upx; +} + +.padding-top-xl { + padding-top: 50upx; +} + +.padding-right-xs { + padding-right: 10upx; +} + +.padding-right-sm { + padding-right: 20upx; +} + +.padding-right { + padding-right: 30upx; +} + +.padding-right-lg { + padding-right: 40upx; +} + +.padding-right-xl { + padding-right: 50upx; +} + +.padding-bottom-xs { + padding-bottom: 10upx; +} + +.padding-bottom-sm { + padding-bottom: 20upx; +} + +.padding-bottom { + padding-bottom: 30upx; +} + +.padding-bottom-lg { + padding-bottom: 40upx; +} + +.padding-bottom-xl { + padding-bottom: 50upx; +} + +.padding-left-xs { + padding-left: 10upx; +} + +.padding-left-sm { + padding-left: 20upx; +} + +.padding-left { + padding-left: 30upx; +} + +.padding-left-lg { + padding-left: 40upx; +} + +.padding-left-xl { + padding-left: 50upx; +} + +.padding-lr-xs { + padding-left: 10upx; + padding-right: 10upx; +} + +.padding-lr-sm { + padding-left: 20upx; + padding-right: 20upx; +} + +.padding-lr { + padding-left: 30upx; + padding-right: 30upx; +} + +.padding-lr-lg { + padding-left: 40upx; + padding-right: 40upx; +} + +.padding-lr-xl { + padding-left: 50upx; + padding-right: 50upx; +} + +.padding-tb-xs { + padding-top: 10upx; + padding-bottom: 10upx; +} + +.padding-tb-sm { + padding-top: 20upx; + padding-bottom: 20upx; +} + +.padding-tb { + padding-top: 30upx; + padding-bottom: 30upx; +} + +.padding-tb-lg { + padding-top: 40upx; + padding-bottom: 40upx; +} + +.padding-tb-xl { + padding-top: 50upx; + padding-bottom: 50upx; +} + +/* -- 浮动 -- */ + +.cf::after, +.cf::before { + content: " "; + display: table; +} + +.cf::after { + clear: both; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +/* ================== + 背景 + ==================== */ + +.line-red::after, +.lines-red::after { + border-color: #e54d42; +} + +.line-orange::after, +.lines-orange::after { + border-color: #f37b1d; +} + +.line-yellow::after, +.lines-yellow::after { + border-color: #fbbd08; +} + +.line-olive::after, +.lines-olive::after { + border-color: #8dc63f; +} + +.line-green::after, +.lines-green::after { + border-color: #39b54a; +} + +.line-cyan::after, +.lines-cyan::after { + border-color: #1cbbb4; +} + +.line-blue::after, +.lines-blue::after { + border-color: #0081ff; +} + +.line-purple::after, +.lines-purple::after { + border-color: #6739b6; +} + +.line-mauve::after, +.lines-mauve::after { + border-color: #9c26b0; +} + +.line-pink::after, +.lines-pink::after { + border-color: #e03997; +} + +.line-brown::after, +.lines-brown::after { + border-color: #a5673f; +} + +.line-grey::after, +.lines-grey::after { + border-color: #8799a3; +} + +.line-gray::after, +.lines-gray::after { + border-color: #aaaaaa; +} + +.line-black::after, +.lines-black::after { + border-color: #333333; +} + +.line-white::after, +.lines-white::after { + border-color: #ffffff; +} + +.bg-red { + background-color: #e54d42; + color: #ffffff; +} + +.bg-orange { + background-color: #f37b1d; + color: #ffffff; +} + +.bg-yellow { + background-color: #fbbd08; + color: #333333; +} + +.bg-olive { + background-color: #8dc63f; + color: #ffffff; +} + +.bg-green { + background-color: #39b54a; + color: #ffffff; +} + +.bg-cyan { + background-color: #1cbbb4; + color: #ffffff; +} + +.bg-blue { + background-color: #0081ff; + color: #ffffff; +} + +.bg-purple { + background-color: #6739b6; + color: #ffffff; +} + +.bg-mauve { + background-color: #9c26b0; + color: #ffffff; +} + +.bg-pink { + background-color: #e03997; + color: #ffffff; +} + +.bg-brown { + background-color: #a5673f; + color: #ffffff; +} + +.bg-grey { + background-color: #8799a3; + color: #ffffff; +} + +.bg-gray { + background-color: #f0f0f0; + color: #333333; +} + +.bg-black { + background-color: #333333; + color: #ffffff; +} + +.bg-white { + background-color: #ffffff; + color: #666666; +} + +.bg-mine{ + background-color: #0389fb; + color: #fff; +} + +.bg-shadeTop { + background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01)); + color: #ffffff; +} + +.bg-shadeBottom { + background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1)); + color: #ffffff; +} + +.bg-red.light { + color: #e54d42; + background-color: #fadbd9; +} + +.bg-orange.light { + color: #f37b1d; + background-color: #fde6d2; +} + +.bg-yellow.light { + color: #fbbd08; + background-color: #fef2ced2; +} + +.bg-olive.light { + color: #8dc63f; + background-color: #e8f4d9; +} + +.bg-green.light { + color: #39b54a; + background-color: #d7f0dbff; +} + +.bg-cyan.light { + color: #1cbbb4; + background-color: #d2f1f0; +} + +.bg-blue.light { + color: #0081ff; + background-color: #cce6ff; +} + +.bg-purple.light { + color: #6739b6; + background-color: #e1d7f0; +} + +.bg-mauve.light { + color: #9c26b0; + background-color: #ebd4ef; +} + +.bg-pink.light { + color: #e03997; + background-color: #f9d7ea; +} + +.bg-brown.light { + color: #a5673f; + background-color: #ede1d9; +} + +.bg-grey.light { + color: #8799a3; + background-color: #e7ebed; +} + +.bg-gradual-red { + background-image: linear-gradient(45deg, #f43f3b, #ec008c); + color: #ffffff; +} + +.bg-gradual-orange { + background-image: linear-gradient(45deg, #ff9700, #ed1c24); + color: #ffffff; +} + +.bg-gradual-green { + background-image: linear-gradient(45deg, #39b54a, #8dc63f); + color: #ffffff; +} + +.bg-gradual-purple { + background-image: linear-gradient(45deg, #9000ff, #5e00ff); + color: #ffffff; +} + +.bg-gradual-pink { + background-image: linear-gradient(45deg, #ec008c, #6739b6); + color: #ffffff; +} + +.bg-gradual-blue { + background-image: linear-gradient(45deg, #0081ff, #1cbbb4); + color: #ffffff; +} + +.shadow[class*="-red"] { + box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.shadow[class*="-orange"] { + box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.shadow[class*="-yellow"] { + box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.shadow[class*="-olive"] { + box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.shadow[class*="-green"] { + box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.shadow[class*="-cyan"] { + box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.shadow[class*="-blue"] { + box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.shadow[class*="-purple"] { + box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.shadow[class*="-mauve"] { + box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.shadow[class*="-pink"] { + box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.shadow[class*="-brown"] { + box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.shadow[class*="-grey"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-gray"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-black"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.shadow[class*="-white"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.text-shadow[class*="-red"] { + text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.text-shadow[class*="-orange"] { + text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.text-shadow[class*="-yellow"] { + text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.text-shadow[class*="-olive"] { + text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.text-shadow[class*="-green"] { + text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.text-shadow[class*="-cyan"] { + text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.text-shadow[class*="-blue"] { + text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.text-shadow[class*="-purple"] { + text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.text-shadow[class*="-mauve"] { + text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.text-shadow[class*="-pink"] { + text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.text-shadow[class*="-brown"] { + text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.text-shadow[class*="-grey"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-gray"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-black"] { + text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.bg-img { + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.bg-mask { + background-color: #333333; + position: relative; +} + +.bg-mask::after { + content: ""; + border-radius: inherit; + width: 100%; + height: 100%; + display: block; + background-color: rgba(0, 0, 0, 0.4); + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; +} + +.bg-mask view, +.bg-mask cover-view { + z-index: 5; + position: relative; +} + +.bg-video { + position: relative; +} + +.bg-video video { + display: block; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; + position: absolute; + top: 0; + z-index: 0; + pointer-events: none; +} + +/* ================== + 文本 + ==================== */ + +.text-xs { + font-size: 20upx; +} + +.text-sm { + font-size: 24upx; +} + +.text-df { + font-size: 28upx; +} + +.text-lg { + font-size: 32upx; +} + +.text-xl { + font-size: 36upx; +} + +.text-xxl { + font-size: 44upx; +} + +.text-sl { + font-size: 80upx; +} + +.text-xsl { + font-size: 120upx; +} + +.text-Abc { + text-transform: Capitalize; +} + +.text-ABC { + text-transform: Uppercase; +} + +.text-abc { + text-transform: Lowercase; +} + +.text-price::before { + content: "¥"; + font-size: 80%; + margin-right: 4upx; +} + +.text-cut { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.text-bold { + font-weight: bold; +} + +.text-center { + text-align: center; +} + +.text-content { + line-height: 1.6; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-red, +.line-red, +.lines-red { + color: #e54d42; +} + +.text-orange, +.line-orange, +.lines-orange { + color: #f37b1d; +} + +.text-yellow, +.line-yellow, +.lines-yellow { + color: #fbbd08; +} + +.text-olive, +.line-olive, +.lines-olive { + color: #8dc63f; +} + +.text-green, +.line-green, +.lines-green { + color: #39b54a; +} + +.text-cyan, +.line-cyan, +.lines-cyan { + color: #1cbbb4; +} + +.text-blue, +.line-blue, +.lines-blue { + color: #0081ff; +} + +.text-purple, +.line-purple, +.lines-purple { + color: #6739b6; +} + +.text-mauve, +.line-mauve, +.lines-mauve { + color: #9c26b0; +} + +.text-pink, +.line-pink, +.lines-pink { + color: #e03997; +} + +.text-brown, +.line-brown, +.lines-brown { + color: #a5673f; +} + +.text-grey, +.line-grey, +.lines-grey { + color: #8799a3; +} + +.text-gray, +.line-gray, +.lines-gray { + color: #aaaaaa; +} + +.text-black, +.line-black, +.lines-black { + color: #333333; +} + +.text-white, +.line-white, +.lines-white { + color: #ffffff; +} diff --git a/static/css/reset.css b/static/css/reset.css new file mode 100644 index 0000000..4e865ad --- /dev/null +++ b/static/css/reset.css @@ -0,0 +1,342 @@ +.fr { + float: right; +} + +.fl { + float: left; +} + +/*文字单行溢出省略号 + Name: style_text-overflow + Example: class="text-overflow" +*/ +.text-overflow{overflow:hidden !important;text-overflow:ellipsis;white-space:nowrap !important} +/*线条 + Name: style_line + Example: class="line" +*/ +/* .line{font-size: 0rpx; line-height: 0rpx; border-top: solid 2rpx #eee; float: none} */ +/*外边距 + Name: style_margin + Example: class="mt-5|mt-10..." + Explain: .mt表示上边距|.mb表示下边距|.ml表示左边距|.mr表示右边距 +*/ +.m-5{margin:10rpx}.m-10{margin:20rpx}.m-15{margin:30rpx}.m-20{margin:40rpx}.m-25{margin:50rpx}.m-30{margin:60rpx}.m-35{margin:70rpx}.m-40{margin:80rpx}.m-50{margin:100rpx} +.mt-5{margin-top:10rpx}.mt-10{margin-top:20rpx}.mt-15{margin-top:30rpx}.mt-20{margin-top:40rpx}.mt-25{margin-top:50rpx}.mt-30{margin-top:60rpx}.mt-35{margin-top:70rpx}.mt-40{margin-top:80rpx}.mt-50{margin-top:100rpx} +.mb-5{margin-bottom:10rpx}.mb-10{margin-bottom:20rpx}.mb-15{margin-bottom:30rpx}.mb-20{margin-bottom:40rpx}.mb-30{margin-bottom:60rpx}.mb-40{margin-bottom:80rpx}.mb-50{margin-bottom:100rpx} +.ml-5{margin-left:10rpx}.ml-10{margin-left:20rpx}.ml-15{margin-left:30rpx}.ml-20{margin-left:40rpx}.ml-30{margin-left:60rpx}.ml-40{margin-left:80rpx}.ml-50{margin-left:100rpx} +.mr-5{margin-right:10rpx}.mr-10{margin-right:20rpx}.mr-15{margin-right:30rpx}.mr-20{margin-right:40rpx}.mr-30{margin-right:60rpx}.mr-40{margin-right:80rpx}.mr-50{margin-right:100rpx} +/*内填充 + Name: style_padding + Example: class="pt-5|pt-10|……" + Explain: .pt表示上填充|.pb表示下填充|.pl表示左填充|.pr表示右填充 +*/ +.pt-5{padding-top:10rpx}.pt-10{padding-top:20rpx}.pt-15{padding-top:30rpx}.pt-20{padding-top:40rpx}.pt-30{padding-top:60rpx}.pt-40{padding-top:80rpx} +.pb-5{padding-bottom:10rpx}.pb-10{padding-bottom:20rpx}.pb-15{padding-bottom:30rpx}.pb-20{padding-bottom:40rpx}.pb-30{padding-bottom:60rpx}.pb-40{padding-bottom:80rpx} +.pl-5{padding-left:10rpx}.pl-10{padding-left:20rpx}.pl-15{padding-left:30rpx}.pl-20{padding-left:40rpx}.pl-30{padding-left:60rpx}.pl-40{padding-left:80rpx} +.pr-5{padding-right:10rpx}.pr-10{padding-right:20rpx}.pr-15{padding-right:30rpx}.pr-20{padding-right:40rpx}.pr-30{padding-right:60rpx}.pr-40{padding-right:80rpx} +.pd-5{padding:10rpx}.pd-10{padding:20rpx}.pd-15{padding:30rpx}.pd-20{padding:40rpx}.pd-30{padding:60rpx}.pd-40{padding:80rpx} + +/* 边框,css3圆角 + Name: style-border + Example: class="bk_gray radius" + Explain: .bk_gray 边框|radius 圆角|round 椭圆 | circle 圆形 +*/ +.radius-2{border-radius:4rpx}.radius-4{border-radius:8rpx}.radius-6{ border-radius:12rpx}.radius-8{ border-radius:16rpx}.radius-10{ border-radius:20rpx}.radius-12{ border-radius:24rpx}.radius-14{ border-radius:28rpx}.radius-16{ border-radius:32rpx}.radius-18{ border-radius:36rpx}.radius-20{ border-radius:40rpx}.radius-round{border-radius:50%; overflow:hidden} + +/*css3阴影 + Name: style_shadow + Example: class="box_shadow|text-shadow" + Explain: box_shadow 块级元素阴影,全局样式,可用在表格,文本框,文本域,div等块级元素上。 + text-shadow 文字阴影 +*/ +.box-shadow{-webkit-box-shadow:0 4rpx 8rpx rgba(0,0,0,0.1);box-shadow:0 4rpx 8rpx rgba(0,0,0,0.1)} +.text-shadow{-webkit-text-shadow:0 0 4rpx rgba(0,0,0,0.2);text-shadow:0 0 4rpx rgba(0,0,0,0.2)} +/*行内分割竖线 + Name: style_pipe + Example: | +*/ +.pipe{margin:0 10rpx;color:#CCC;font-size:20rpx!important} +/*文字尺寸 + Name: style_font-size + Example: class="f-12|f-14|f-16|f-18|f-20|f-24|f-26|f-28|f-30" + Explain: 12rpx字体|14rpx字体|16rpx字体|18rpx字体|20rpx字体|24rpx字体|26rpx字体|28rpx字体|30rpx字体 +*/ +.f-10{font-size:20rpx}.f-11{font-size:22rpx}.f-12{font-size:24rpx}.f-13{font-size:26rpx}.f-14{font-size:28rpx}.f-16{font-size:32rpx}.f-18{font-size:36rpx}.f-20{font-size:40rpx}.f-24{font-size:48rpx}.f-26{font-size:52rpx}.f-28{font-size:56rpx}.f-30{font-size:60rpx}.f-32{font-size:64rpx}.f-36{font-size:72rpx}.f-40{font-size:80rpx} + +/*3.1.14 文字行距 + Name: mod_line-height + Example: class="lh-16|lh-18|lh-20|lh-22|lh-24|lh-26|lh-28|lh-30" + Explain: 16rpx行高|18rpx行高|20rpx行高|22rpx行高|24rpx行高|26rpx行高|30rpx行高 +*/ +.lh-16{line-height:32rpx}.lh-18{line-height:36rpx}.lh-20{line-height:40rpx}.lh-22{line-height:44rpx}.lh-24{line-height:48rpx}.lh-26{line-height:52rpx}.lh-28{line-height:56rpx}.lh-30{line-height:60rpx}.lh-10x{line-height:1.0}.lh-12x{line-height:1.2}.lh-15x{line-height:1.5}.lh-18x{line-height:1.8}.lh-20x{line-height:2.0}.lh-30x{line-height:3.0} + +/*3.1.15 文字颜色 + Name: style_color + Example: class="c-primary|c-sub|c-success|c-danger|c-warning|c-333|c-666|c-999|c-red|c-green|c-blue|c-white|c-black|c-orange" + Explain: 主要颜色|次主色|强调色—成功|强调色—危险|强调色—警告色|强调色—错误色|次主色—浅黑|辅助色—灰色|标准色—红色|标准色—绿色|标准色—蓝色|标准色—白色|标准色—黑色|标准色—橙色 +*/ + +/*主要颜色*/ +.c-primary,.c-primary a,a.c-primary{color:#409EFF} +.c-primary a:hover,a.c-primary:hover{ color:#409EFF} + +/*次主色*/ +.c-secondary,.c-secondary a,a.c-secondary{color:#175CFF} +.c-secondary a:hover,a.c-secondary:hover{ color:#175CFF} + +/*强调色—成功*/ +.c-success,.c-success a,a.c-success{color:#67C23A} +.c-success a:hover,a.c-success:hover{ color:#67C23A} + +/*强调色—危险*/ +.c-danger,.c-danger a,a.c-danger{color:#F56C6C} +.c-danger a:hover,a.c-danger:hover{ color:#F56C6C} + +/*强调色—警告*/ +.c-warning,.c-warning a,a.c-warning{color:#FFAA00} +.c-warning a:hover,a.c-warning:hover{ color:#FFAA00} + + +/*辅助色—浅黑*/ +.c-333,.c-333 a,a.c-333{color:#252438} +.c-333 a:hover,a.c-333:hover{ color:#252438} + +/*辅助色—灰色*/ +.c-666,.c-666 a,a.c-666{color:#606066} +.c-666 a:hover,a.c-666:hover{ color:#606066} +.c-999,.c-999 a,a.c-999{color:#909199} +.c-999 a:hover,a.c-999:hover{color:#909199} + +.c-remark,.c-remark a,a.c-remark{color:#C0C2CC} +.c-remark a:hover,a.c-remark:hover{color:#C0C2CC} + +/*标准色—红色*/ +.c-red,.c-red a,a.c-red{color:red} +.c-red a:hover,a.c-red:hover{ color:red} +/*标准色—绿色*/ +.c-green,.c-green a,a.c-green{color:green} +.c-red a:hover,a.c-red:hover{color:green} +/*标准色—蓝色*/ +.c-blue,.c-blue a,a.c-blue{color:blue} +.c-blue a:hover,a.c-blue:hover{color:blue} +/*标准色—白色*/ +.c-white,.c-white a,a.c-white{color: white !important;} +.c-white a:hover,a.c-white:hover{color:white} +/*标准色—黑色*/ +.c-black,.c-black a{color:black} +.c-black a:hover,a.c-black:hover{color:black} +/*标准色—橙色*/ +.c-orange,.c-orange a,a.c-orange{color:orange} +.c-orange a:hover,a.c-orange:hover{color:orange} + +/* 渐变色 */ +/* 翠柳 */ +.linear-green {background: linear-gradient(45deg, #87DE0E 0%, #64BD38 100%) !important;} +/* 麦黄 */ +.linear-yellow {background: linear-gradient(45deg, #FBB437 0%, #FDD36D 100%) !important;} +/* 靛青 */ +.linear-blue {background: linear-gradient(45deg, #3485FF 0%, #1C68FF 100%) !important;} +/* 魅红 */ +.linear-red {background: linear-gradient(45deg, #F43F3B 0%, #EC008C 100%) !important;} +/* 鎏金 */ +.linear-orange {background: linear-gradient(45deg, #Ff9700 0%, #ed1c24 100%) !important;} +/* 惑紫 */ +.linear-purple {background: linear-gradient(45deg, #9000ff 0%, #5e00ff 100%) !important;} +/* 霞彩 */ +.linear-pink {background: linear-gradient(45deg, #EC008C 0%, #6739b6 100%) !important;} + + +/* flex布局 */ + +.im-flex { + display: flex; +} + +.im-border-box { + box-sizing: border-box; +} + +.im-rows { + flex-direction: row; +} + +.im-rows-reverse{ + flex-direction: row-reverse !important; +} + +.im-columns { + flex-direction: column; +} + +.im-wrap { + flex-direction: row; + flex-wrap: wrap; +} + +.im-nowrap { + flex-direction: row; + flex-wrap: nowrap; +} + +.im-columns-reverse{ + flex-direction:column-reverse !important; +} + + +.im-space-around { + justify-content: space-around; +} + +.im-space-between { + justify-content: space-between; +} + +.im-justify-content-start { + justify-content: flex-start; +} + +.im-justify-content-center { + justify-content: center; +} + +.im-justify-content-end { + justify-content: flex-end; +} + +.im-align-items-start { + align-items: flex-start; +} + +.im-align-items-center { + align-items: center; +} + +.im-align-items-end { + align-items: flex-end; +} + +.im-align-content-start { + align-content: flex-start; +} + +.im-align-content-center { + align-content: center; +} + +.im-align-content-end { + align-content: flex-end; +} + +.im-flex1 { + flex: 1; +} + +.rotate45{transform:rotate(45deg);} +.rotate90{transform:rotate(90deg);} +.rotate135{transform:rotate(135deg);} +.rotate180{transform:rotate(180deg);} +.rotate225{transform:rotate(225deg);} +.rotate270{transform:rotate(270deg);} +.rotate315{transform:rotate(315deg);} +.rotate360{transform:rotate(360deg);} + +.online-status{ + position:absolute; + bottom:-16rpx; + right:-20rpx; + border-radius: 50%; + border:solid 7rpx #fff; + height:40rpx; + width:40rpx; + background-color: limegreen; +} +.online-status-small{ + position:absolute; + bottom:-10rpx; + right:-15rpx; + border-radius: 50%; + border:solid 4rpx #fff; + height:30rpx; + width:30rpx; + background-color: limegreen; +} + +/* 分割线 */ + .parting-line-5{ + padding:5rpx; + background: #f5f5f5; + } + .parting-line-10{ + padding:10rpx; + background: #f5f5f5; + } + .parting-line-15{ + padding:15rpx; + background: #f5f5f5; + } + .parting-line-20{ + padding:20rpx; + background: #f5f5f5; + } + /* colorUI样式重写 */ +.cu-list.menu-avatar>.cu-item:after{ + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height:1px; + border-bottom: 1px solid #eee; + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none; + } + + .cu-avatar.md { + width: 72upx; + height: 72upx; + font-size: 1.5em; + } + + .cu-list>.cu-item.move-cur.first { + transform: translateX(-150upx) !important; + } + + .cu-list>.cu-item .move.first { + width: 150upx !important; + } + + .cu-list>.cu-item.move-cur.second { + transform: translateX(-300upx) !important; + } + + .cu-list>.cu-item .move.second { + width: 300upx !important; + } + + .cu-list>.cu-item.move-cur.third { + transform: translateX(-450upx) !important; + } + + .cu-list>.cu-item .move.third { + width: 450upx !important; + } + + .emoji-image{ + margin: 0 6rpx; + } + + .manage-content{ + text-align: left; + } + + .bg-main-bar{ + background-color: #f5f5f5; + } + + rich-text{ + word-break: break-all; + } \ No newline at end of file diff --git a/static/customicons.css b/static/customicons.css new file mode 100644 index 0000000..14ed5fa --- /dev/null +++ b/static/customicons.css @@ -0,0 +1,20 @@ +@font-face { + font-family: "customicons"; /* Project id 2878519 */ + src:url('/static/customicons.ttf') format('truetype'); +} + +.customicons { + font-family: "customicons" !important; +} + +.youxi:before { + content: "\e60e"; +} + +.wenjian:before { + content: "\e60f"; +} + +.zhuanfa:before { + content: "\e610"; +} diff --git a/static/customicons.ttf b/static/customicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a3c8ab9f22d18d5d605503eda314e5d2a31fdfc0 GIT binary patch literal 2416 zcmd^A%WoS+82@H>?IgD2#K~q|hdkDH>bQB>&f0O>=25F@5|GlQX`8fENObGiPEx<* zIHl>yDoB8U!lAtvAt9k$df{KC1gT1(TA*@aKU;Z8A_c6Yj%<0Ab$%Pq=pKvad z-A@0oKRQn&-bGc{Qu=Do+{0<;!iM5&AR2xX-va&;wQns~zS&B(8f^c>xHVfy>O!2V zuzd$(TTZ`OWbJet@*^0lc|DhE{bb?+k@a&TAyX`DmiI>vrzUh9wW#VtLONPQPcgH{GfcG%HCo!>rVIv8K7)wAe(G9W~W6s*} z5MlL3;c^>AXo`e0v-20pnbpgA>V(Zx`M)vCu4i=kuX|?D<5C8Ok=0}+EcYWmqwucq z9k>tcJ$p@N7UdY3K%*@M)z9zF77#b3%z!fxHdq^cAvWrY zjm5{}(W73UQ-HKbh-#b|iyQiGC8|vcP=ZB(`A1^`pS7F$eO6f+XC1Pl#U~jwSS-Z6 zoYdm6fFb2Ts4UG+2aoy3eJ4h)WHMJqPWZ+ggv;Y`8Ne>v?K0a?dV7a@d%xnHstS*S!80>UHNq5P zcT^Cf-6E!7v@~-j7+e|8elTC7!G#HLb7P0n=yWzJ9gWT2iG@K%Yp-64j#evA{TmZG zWJPwUm;la=mS?v1K>SNwq9YWdlSr<&p0z19Zlu(!^)Mr=JSzZ7)T_mjuz=s|>kl!c zB@l~)Q)H`{IH*LH!r`TeI(%*{!Lr8Sps0GoVXsi(ZM7mhk8cX!KdH!FU9!mAbI=zO zP#q6W0#>gAiixoIV3!-P``)ng_~q*Du3#5l{`J@HiH~s`$rPj0xaF>5@3G|gDTd`t z2}&`saAq1brJKoCUtp5O z;^K01ht1M-_H0vw)#X+iuR9#q9aYKR<`5;DCw%I1?(O?_+2N4wrR4G}CnNsOmL?^| z?r41nJAO^`vqW__v>3uGEQc3DyKNq9yhk|YJmP6uSZGw-E=vQP_BpOMS9fi$j;5~R zmD%KpS-b3(?Z^BHZ8{R|>1<(-tEK86+@Y}Cr!9vT!UsEbw=A*jY1`o&ywm0}zN$9* z)x4>Q+QHOsI)0nBn^>R*ddb8hc%O+S-~kg`@aNM^Yz04QVjB(OyQ}-O!($Prh)GSD zCqQqSm{BWzW@3Sy^o5B<@ZXwP0{+Rw7E);6#8&VJCbrQEYc{c+0xUUQO6ld)s(Ni( zT~8MB=|aAI*q={jwz7KZaCq3Sq)MCXg}gcviX2jNseGz*=w|aqMk|-oYPwX&sk88x z%4Q2{u~gVdCCj0;a=Cai9OmS z&fu!b!m{+7^jYf_XqRXcdfcZoHN+IGM+T-)9_ZH9MG(} zz7$rH1y-?vT($u}Noa>?&9ExsItb%AjOS24WW<@{KiqoZ|NR#gi3v<(60?v^AJ&GW i+l8&0>&^ObYFtuIC+Gpxs*A((`E@KK=o#Msw}} literal 0 HcmV?d00001 diff --git a/static/fonts/iconfont.ttf b/static/fonts/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a171b54bee03852bb2224972a8d19046f6b1cb9 GIT binary patch literal 10516 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 literal 0 HcmV?d00001 diff --git a/static/fonts/iconfont.woff2 b/static/fonts/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a32fcc08a1b673f4e97d73b5c2852739e010a548 GIT binary patch literal 6228 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 literal 0 HcmV?d00001 diff --git a/static/image/123.gif b/static/image/123.gif new file mode 100644 index 0000000000000000000000000000000000000000..0475abbd2d65b340783d76fc96ab5cdee332aadf GIT binary patch literal 551416 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%0AjQSyZEiQa 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%0D^=__$$!q1e zA_F)QQ+B_n$5O9<3dM!nx}Tk$GyLzO<)N%V{FaaaBKp|jqK;H77K(-Y0B8d)5ICr47m5%BVz$ubN zMGX!SK2(%w!+|V2LIJBfT!e8a!if!U=r({1-{>nFRmlqJ;wy>9J+P8HS6& zB5kRN5!r=v(lgt9mRRX-vk^+PDgGk1sPSafmp!M|Br~L7_;Epz?}jZ$7EfK;!;bjQ zS(jNd?)X1Ia-7+T^eb}4)PdRKRS7OrWi12VK4;Kk^dfUR*%d%_C4)OSt#w0d58VC)%`1rQ_0!X|= zS>p|!bep4;V&yq0X_S$%!z0U4ee)ja(zaUojw>wOXsN836{iwWd5Lv{99Pwe7r=s@zjad^no$?Jas5BHTcNR<;xaMt$Ix61vjE zB*0OZb4v{yM}PYK%DBl&*QH~mwG+$2@U>w3+PkXzHu`_H=Kr+%e@0+@hPH%<8%GDe zyR$#b&PU$%!4Y2@VW$jncRcr_mXQ3?e>6mQgBRwH*RkOGuhtCim|?MxzmJ~jX+?9{ z-$4u1zh{c+EasJ7LJ&H{-+US2o~e(<^VNsVeHj%>(Tos8G{6SAcO?bir8 zgy9*ig5-|rH6t>_Iqy|aU5u%4Tsx9|Sa)yU)EP2gr*_h1ztNVMA0oJd#DAYpG4Dnt z)(m?UtHe!c2Oj7a{9+K72OS=a1KT_N^;1h zo_|nv*ZgrlO>~kW6F67Nk6-xMS|(P@+njEMor%THgDOybr4 z!*Wf5*H0Ou#G5xfIfV)1Q1ag>S)Jpo?}V{Ghn7(C&ho17vs2MuLdzsAOTM>zB)E3Y zowGP8X!#XpztC6yY8>%-o*56VZuDn;>&4(wMulic%>jK|ecN6B>cf77xP$vup-tmY zl2izsuHj|~W>;eOnfp77H=JhM2r@l=n5M2gV0`rPYfXl5T|Q9ZbJ&A49(I}BZnu#ZKctYxBZ9f%YwY(C%c zND;~1D5dU_ZiHaSyncFJJtrN}2s)5~p_?}t*`GKpD;$oUA<@s6eZEo&Z+pNOxWu^GB@pId~ zx_vC$bN7Au)b#;1pm-(B@Z(|@QIKxdb*b1Vui$2=NyzUJOFuY*3x!j3DQzld4*xrP*Tn$vs`@Ey>)UVEXJHX6keiXr@>_s zQ)dtyW6*A6&@E%owgU7Xv4uZl%a0LtvSF${he$i|rWfjr3IpI&m__;p?lEm$g_-1O zsS+h9Iue3<8-g6>gT7mOY{YxB!-a~*@rSd85}8VGgIHzx(->^)1WY|G+DxD?$s;oM z6-Qxha{}e$JVVYj2^`Bv21Kx02YhLh7$mu+l5x#a+h9-w0Vxo~b;1~NmR>e%m>5RC zA!*sS(Ib9(0`#py0gy}s;h|WT=KBR$GFXJ_NntvYvbn76>Suw!+89>hz)we*=D3)~ zxq<4O%rG!U62d~b$`Hwtn7`p7b5tTr&KQqbiDBxap9Uk+w6u_<%oA}Lch`b@3yC`R zfep>zL+h8|@sQ8*5|v;dC30j~Q% zAu$v9l>cq@AyQEZteIvSLYEGi=33*qK-K}_0l=TXgANjOI7Aaf#$wV}B?Ln1~JfBFkqf1`h`orzYrO7Cy8mfMBt>DcqPGmfGOZHzK%s_yCnCZ zClbOl0_Y;t;Egv1`LLbA@!ioG(QtC9Zb@4bO5?tP_lD}c6L!qY1;OX_YIaydIzNV)4Sp{UjGHybr?x@6w zsb`d&XRul)W=Mziz$Uk%>$Th`Z9Hf;S!ZChsYTK;88-@m!lUP%6?(}9e=Vm>w`mN* zr-iD87Vxmso;ij>r*E`r>=nq&g38r_R@uLgLk}QgclWc=q?sn$ZQ#JObe=LdxU(Cz zv(2@$zI$Z-Ige#@$=Y6sOdVt3i^wG4U;;x(evZg}b^xfmWNq?+NMfNC%XO z632G6(X)a_*7C9nrs;$rSmiW9*g_cL#O3?)K+K90&I-2i`0R!<&x>3U>LMF@v-17Y z-3Sr+i9lwZN|?~fIGVUgiI6~q6MA7s{U02K3g+QT|cr^w=ewc9{ zk!kXXPX4lJEul6pBFLwV($E^HJE0++IpW%I6Y9gD4NRXd)fTK@+ z>_yweM5b3|XV*q<_ZPWt+o7Thcx-Q5L}+q~0+7R)xPoWrToy^Zd(!t8M*1}L2i0w| zb`9~R!=L8Qg9ch|OpCi|tlE&0uc>-22N zA3xVBWTpC#rJos0I((CD*Xy}V)PW|;81k$1c2S|Y>j~5S2k~(trlM&A+Ay5biS#zp3yc1l;%hjDZ2lXGH|bB;N)HNro@ zY~9_dXO!+0PL?3t^sR!8^J+ zyeiH<>-SIn)dVI~e?0QJQ_xVRx6?H2Usob{a{JyAM7)#df3iq?*(aDvLEfWQbvPil zSLrX-K}B0h6o&ECOe+;Hc6}p0dCvNIa~nfNp}z%5a%TddZw*qu0BH?VIC$e{(})aT z4bVqeI z?d&am?|nnf4pZ%;P;U-YhVzoS!qCk`m4<^9(GBJI$DMv^JoM`8m?!7ldnJ>6Ui!bL zyKDZlPu;A25a*nZx$OL`(S4$eKZ&0icbS!}r~k&>+ErZ2^{glmzsS|@XONr`TGyRV z#1MVozK?$ir9H4Q$n#}B=1}d9b$HSTRbdGlXgWMG|9q7Ph++GUN7~zU9*Ip_Qk5yb z>TJAXt38kD?|S7{Hj-G<Bb{s92&Le30kK4`H*2lLg<>vA5 z5*gyQ)Yxg9o>z9jN49-8+wRmUaX8TI=2WGJ`15KS{-F^C6%`7FkalcOI0PPx*^D-P zPc$5jjNAG@S~C!j18`(@+b0?Ke_H+jYRwHt5K)kRKs}0jsQwrpSYER8p@^X%p6?J; zZ$IKi2$jGXq4ywV;Kg85KVQo7tb=kie1CN3HI|8mL4@u!y$VZ= z&-_|4Ajv@V$Q)#|6V8f) zB+gaRLL9t#if~!vOU>v2RyYvwH7tN z6@ssZ{ zx}cof0z^ue3fQs~dr%%MAvNm7p@XX6omCy)2A*BR^uqIYqYLxKS%dnDr*ujDgBzdq z_aoe+SMF-h8ZnOd3I|G4H7kdKP2>wrF?8-_>k(}I%{Ba?|iUl6$D)~MSDReDJsFWQS^FVcq}$(E9XH7!AUs!{L_(z631wr zy|%R%ZHPOoqx{mEPrhlQGS1)0m62@*MjP|#kUlDeW880BS{X|l|5{rW{O(kvF8{iP z{P1@mY=~K*6T{?+a;a4qoW+CLZqq?)Z2+HM`M2-AQB}u74`wqRzsityTiY6MOBN~` zc~Ajq+1Hk=YXE=hAR#ckNjT5?2f&6>_kxg?=sS^8tS?^{?zEZ&p#WU8>ek}mO-OZt zIX#UZ*&=a-MNh9VYivvrrHr6Bb-R*^;TMtVO~0N{v_Gt=LunvZAe9rx!t8m!nK24O z*91jiM*`}KiTd}R)mbru*4sAX8S$vEd-gK*DQ6@^b#KmhS=cX{4Pauj-Q#Fqn~ZZ* z6{)?SSe@dm)#`bOHWfbo)p4Q_asizz7hLGYH zI55kkkO=6oQ&B7MZlA`C4w;NPODaEPtCAmhMKLS~k+7dn*!37k%Sr2`b==YCi;AO* zcB*FdZBLh=be=#w4;BYPSQY}c@$>SQmNHTjDXQM-W`S=E)m`T}NabgFyCVJWbZObc?5?Ya>MS1{!Fg}8t8rwd6d!oqXI?h*iR2oA_lvtV&$Slp z5|HtrZtS|jK=PP`iZEiR9i3MyS`9O{eYAjq<>~TjA;-E`9D=p9#{P+ZyfG>;QXSQC@PJ&jmwQXz@&9!3viwi zY<5`dMm3qM-MyM`V~Q-MueuD;I^R15ed~R#v#Xw?R*9zZ%~!qBD7YiO*ec(ET&_TZ z;V5aaf4$D0!HyC9n`g9Cv4Xz_65%(?)RNKw_8?;i98zWTRCsW-??p>t}|fIc%@N zAn0tB($hgsAJ?gJrbcg#$F9R331eSnWn)RgBVZ82jPuS~Jb|SIRWPmTOr=83Fn|1b zhDvEG!lId;1r4nG>PU)$gBVt}`3V{gnd?4ltJog5$~Wp!#Th#fSGMs)xPyGU7`MuE zBpkKGnu-ZlqaIJuj6kU7Rh1nVN9%3c4(842-^J7Rc>gS%n}>?N`TcF0rL=F$;OGfk zQG8^t+UcxuU8+}TGQswy#)GOOzTpmvA}=rK`TaLBDTYET+@B2O(3@tjn?{uVxZVx}(-zf4`FcU9$i@>{m*y=aRSo03^ zMaJW2c(FpX>A4nua-s=^Wm4ZP_WccL%c?{V(dynzBdD!leKBqvR3RL(?njX3{&v(2 z1{9uy=wHDQ?#yVpe(1cg?&Dj6va4cKRG4sx6H=IDN|@!NK!{RI!fptHqK|c`AF@l7o)@#nFZ`IV889^!%Kijyp(!h_PN4e#$5+gR5 zJ(lTCOa`Y7UZ9@*re59(<)lJ7QYCv@E)V7Ce z062rlGINMD;tLspSKl(uC$E{L@COR>qKUGoEoqGr;}f!}>qFrwYv#6U#=0B~3Jq<7 zF?+>p@~KO4-AeIJ3@#Q50%441rVkvlE&0rc{exdAcv0~gGlYmdpaB!>8i*t4jZ815 zgy_Zvy*yo66xk^@`-DIa=hlr#r2J!QE|XCB9xCEUj1caT5{*h3mq-XhU_K2=nT>AB z1b(I=N}2en2ac*dqz|ZBKZWozzYsJ-d_5lwIb^LoaaMsq5Zy_1HA7jgQqQ77?G{IJ zM%C|H0QHfa*rdXOMaL*kvo@!)U^ejDg#pUhP}~uPjI6O;5pz%K(w!Y6UTAWpJ-uqK;S|wTDqn47Y31qG}~n2b6iG z1DDt2i6FRz*S<%9HCkzT9Q%i>$FP^CWYm%E)JSug7D}Rhb10 z$%%OV)8_SC{{$+w9Z3HWUnp!I4KhZ3mBYnjS}Xgf4iN~^!cLdftm8eU6MwAj?4{}Z zv>tRkZ5WLg;)HdIH=wJoo8hZDrxyT)y4D)HiI==d;D<^Tp5RcReX*z;Y^Dpf$Dcs8 z9)Y!mWS!SNn_A!WaPFB59|Q~^)p5q;RR7u=KKmKIL>sDuWgqMJk^E37XjS^83HnmEO~tQb@B^W#fd@6v63z9K zM)cN3kDY6yHVHBraw2Z}olSd|59%m0tlxU-v075Gb8u|@2xSn|WSy%gC?!G?$=#!y zaXw|LAdnZI#F_X|ftN~P0qQTC#>6|VBrqmaj0fl^V=2aI6UtiDzp1SmvVOXNeg8E1 zfnv%+Z2AMnC?9B&pS1@{Al+{ioA#vK92-BV>)-vMYQh6Ej*B_rJ-kvCz5uC2KY>;^ z<72|4%gL95&Z=N04r99dDv7^D!8yVmYga@yk1ax-$CR=YqK2z*WA?=}E5$@o;mgW# zPEPu&P#^8Y7EMRDAM$XT$-|5&L{ED^W_uI9IF^4%HTnMKbJP)9G4TcFw;0uYB9Hr1@bev6 znG4u|no$iL-w^CyuWS1=ow_imSk$n(DGb{IES3E&9RQ^!H3dF3mLxIe{x_EH239Mo zLjf&R0>k-1oM#}{9n1P)OMpb7Z;WM#OvfqZS%kuDq=Z%dV0E;CVbo2^zTe;{f^|Ie zP|{4-iHK=}e~C?Xc(S{7%F1bm#$Y<9NE}$fOS;7ehIlqi4=JLJ9r1}K@A+2Ld11_j zvL0)3i-nth74A)2MT$+$ig?=RmY5h#sm5N;jSWt_*{YmPS&B6n!DY#&O(Sy(1+^J) zXQ(RZRax9eZO<$vg_om;lvhS^b#8Rdz-;U9Y8IK+HRCu<5R|N*g$TCv%A;d zZuf_sm+)2p@2lY(`c`7=X#h>E;Kdw(Y#hdRV&tM@#%9(38vFO|yn9hr3fn@6{T5(v ziMiZ&*bcP&X}=d^1IKx>#|$_Wya@_2Ix+y90B&+W?M`C=lZk+u9+8V4z}3u+a*4t9 z4dBn`4G_ZN?z6yz(1Aw~;X%RS$>7hdsl#(h)`q`Bw0rFL9Q*fAV;E$zyMCnC8;2a0 z!*`V1Bw7a$vm@kBfQ#U5je!}AgCp!ON4QwWCiU9`Q;dHoBnY!6kx!>)3MeR=7BFQF zzds#4W^OSu=rKI50?F=_{PD42&2fG?DJnSO*WT6OIic?g;GLQg?cOc4+~q_#kcPD~ zY~2kEI{gxKrXX>qcDO(EaS97{rb>0D(d?!N*~87;(XQT8?A}uL-gnST|Jc1`l)Oj# zE&yV)v|?9uaVK`+s=eDEIV(?bQ8gXoO0{k7c&H)12|2l;r2z=UmI`s%3Vyd1C2%^($^btGmD|S zrr_TU`M;*l?l!;N^kScubDnIT)A@JZk$c^ZR^1$*|MF8kKM+4#;XGGzdbsaCxWP8K zrTjI)xp!Z+D)Hx?C4TbWea2}7%--1gojxg?dQ49K{daE@WC;vZ^t8ao<@fdc9s2^( z{mB-Y`hwHsDS`NMROSi%^TJ2HxLM}#_V=Kt8Ci$MF;>y*xu=K@+c9<34pzx4z0`51 zTQ{@UD{Iy(d)F)Hj~Be=kp_q@I`{S9uP#Zhldhy!0SFM9a##H8Z4cm$?cwGf_Ewha zjne8}J!)5!_LjH%1`!7Q_U9=S*2ngbHz&xl(a=XEj6tW?yM^XTKh~!s)yEa*r6cuE z`yaOy$-A!Sn{JR#|LS>PsarnD$0M_Em!$85hVRI)50_sa24Oy9v5%d#zEd>!le1r1 z^Ye7;BN6@k%rCpqXV+qqe~rB!ONM^b>V7M~{%Oyj`PVn34^$SRG+uHpnh~wA6SZKaS>q@bi;L!v8pT{Mg}h$K%^+tp9oL=kS{s{4cMouU3EeGqT((7xbBl zqjY1K69D!hk)7;V|g+#_IA1!%!(?vZU$@hNE!V zY_`Vg3rAxSap4*Q_k@uVXrv>d#v6(!|G)e*0wINzGzmCZ5CRr$lT|D-mD~TDlxBN7 zen}A6!GDE>{!daW`_~v5;s-wrDrtVzW~<}jM7FF)US2L-zMhf_c`<1ag|y7xCZus> zwHpS5!BktlY4|r0TqMV&pkaLCTkMbcz53JHucQ>|0JbPBv5QkhBk*Hwx@rgY4-vmld0pr)$*9j<1{ma zXD|;K`|*TSd}KU}bjK0xO1GhxEf}fn;&J%4ZU`4= zg)R~2y9&HyI`QZ#A{FN)h5~WK#d6V3^RA)JHW%e89IbOQWD#!*;J;KrA^8bqD>e-B zCNf6W8S2AF7h>8yUYB)4{vnpWmDEMFa&;<6w)JxowrKg_U|Mm_0n?baVt`NT>g?bU zhMTsd6x*Bj|MJf%h!?GH5$lyfeHpk+iEH?!G+pM(ot2usB1>i8o=;?nDnDen=aNmJ zyAB72ZftV~;Z>;)bGVhKQ2Xcb8FxrQ8XrrJRC*e8t?mW%PJX0OS6H^=Gd>NItKNDB zlkBqM^rD+3Rcf9~b1_$Kt_-5XXeZcy?V+I+6P6(U+MA+Jwdx z=rots%u?LJbV>$oVX8DacS3rd!+kNE&;%F8LB+1t zCl}yK!dKaoGCq!qzi`{n8Rcd4pvQi98yL~)-^3kLdsXZx!heMFwWh%0EiIR?6YgE~ ztq$GIG{DQV_e+N+eH<=_sij@Jl53p33YY!@^Kbce{@$?7aHG9sD(~43_#;dF05is~ zOq2&Tf48_w%SE__b{k03zX)zS+Rb_VN4LCC7G}4YzvM9>Fu*zoOi~KHb50S81zllU zN@~DxK0^2}9~y`mj%rR#iLA(k@RyNgwHw+|zz?{YTF?$#0T$poT=$*q&J#xzAKMl% zie{)Lw3=#bf2#x)EF2WKOw^}Wubz*gkKuPZl!p3;g^hB|cCV1M^L#7{nWs-Z4KA%y zd(5(BzVE>%yx@BZn#-`$_8&WRax^eFO9XK86qEySC?e-zAxv@-#iP-m5>U!Dg~(}5 zmWgm50rnbt%WsYWal*d$(VkTk@Lq}JquLD~V@?=-%DFmqC!+M0`6q3UE?ysc{=9JT&xT;Bi*-BtAoc_ zfbkS2-^zJ-cpDmGx2`Ot?AlPxzJ~o$*3=g=6rd6Q8}t}xWwW2Vbc3EcalC&qPw5t$ zDp{ITf5z&bH7~GFX!<=kCbL`7nYs*)!`afq4fRv}q6N1V9O9DUHWQM4l(lG9Da2v1 za6+$`b3D28dO6gFqc@w(u3FHf6`_>NPMR1giYY+|rRDHToJ`zsD&U(ZRD6J%&4+0$ ztBa@VD+{l-5yW6!949L4;#IP6a!%6_$6NWUDN{s^m0Si%^d9gOyqUb1Z>wC)X81spEl&x(1~~gR z-DBY6m&+CD$*HCEPWQ`KHa7->tB#NXKsZWHL6mS-j)V%%%Z9$tH`e?O=SiV*saXKh zAXOF&)n0UA6SI{XhmOkr#yn-61p2I%kv|{6xGDZ${#l_e2xrO&q7{&!-*147iKLYw zX2BpU=CH__1-5YERD)mi$1QeIXLIa=;Q-@@s8e(M9;MOXj}jAOOtAI#D!ZXIw402s zg2Ui9n^H2Z%q$wy1K{ z`A?B~+Y>t^|EjA6)}L<1j3Gu){bwdIEgRgaiR7lv73+P1l0Ai=_&F}}B8&|inR%Za z`mB%TEIBbeZhw=@$V4}Y8$5CklcQ~ltEI!mTS~jMXJDG12x~6b;&D52s0-z9re-=e zer`GOyk=deoLEl`Uva86wvY+GckDF6w=`sBa&WG{6=sz*K-}ZaRb>~ix)g8?fcrW` zuc`?U_nLLe{sTk``f!?ocDQvpqHpTkF0`|+*a5O_4leGvhe7IIFX0d^S~R@Ph(N`$ zUo)9VYG*Nv?5EbMLNb2mS%rkEq#WW~5>gaidR;qis0Xy4g%MEOs? zJ8=m~>zuohz^)s{$}UdVR5|#g*#rivL{#xVRw796al~GXyAXRg?7U~lz-B0=HXRIj z$zKSC!57U(Yi03u-|mDc!eX4?UNieD`^0?gCi6KyA?Mtt;mEJe0#7*lVM9OSrKNdV zmugCP5)Oj-8LtVat|DDKybc`biU}q+eK7t;xwij#ztIbj)%&@Uk=Gvu$#FQMDn;6YmH(V4C7HqPe-jz%{1=ag z9)gG=u^{Gmol4GqpdUjn{+aTNEyM~r&@5RTe}>EZYm17H84+BeoW!YZIvJW@Kmf`C zuh*azLcC!m+(d4~y))aWz={XSDM zK8C@lLj$4L$ZqR{aRwz!A%dosgJhJ=|KVUoSsK?h0&duic)+Kw7`qmczM+!r=RZ7Fd3r&eMv}Vx_I2v1>6MgoQJceV3xaR`4W_vqEK5 zq2zuc>SJ-rE{jA>BPg&!+Y}22c!ZmgN1!`JqSi+`9Yju{5$bU9CAZ+wVHwv;QJ}>I za_vVMjp2HyVG#~Q@oRBo=Hc}T1Bp=uDA0bSih~o(DZGq){U!yondpEtjA8SAaKWRU z1M${R!d%v<=fI$%fCsRF0RoCJdy@2(dOTw>GVB$L++^ z!`P>(_hMmtOd@^_6m|*I#PfWY$Z)AAox($_u?{`JA+vf#15$j4qs>~5kIWp$oor9- z1FduS;^7=>>OZKbgO=HLihskS5!ra@#;jrPkLy3Q;gParo0dlzMxf1{>k|hA-$uk2 ztw$!EqicHQ@krz>r>7^3N7C^r;H9Hhpek#)8<*q};S&^z zWY&7ofqDJ7iwJxR%ZGi*|3jA`0wKjTPm{SGhpj{WhDZO^pEA+=|CEUU!_OC!#-fbO z1G~WGyT}!aOefrkLcuGnuqrwoN0UY%bfm!Nd`;EXiA(1wN;l8eQ_U@xDuzbOBkjQG z_9Et*FNA_9{Yg>cFkcedE-cUc-714b!>06thR1l_+4-)x`n3o-GA(MHVV9211yo+b zMxTFBpM`v$Wu%-Nf>7c%k(|nvSQ4Kp-cb^_LAFar>|BBIJHk7w!#dL9d+uAA>Npx} zP(E)X|KT}ys!rJnU6}G)dTdI`*I~^ZSWxJlJ9}1=Az5WwU(_XIfWMKdEK^SNRB7v7 z-0u=6fJa(vQ{h^{>tB)a78dMNL57wQNY0KcXzWUoR+{3)bX!*A*A%wk zIst7eM6RiDSu^&ARSFl&{T>PqUrbjJu5H~AL*Ha60;G3hM>?ihZ>ukY#owcd@Vj(= zn5ZKLZ}_OM2E#52T5kMSSwKl!1FkNw6Nv8BN-zGNj( z99B?2u-;MQLu*_KCSuH$JBo{F-LhKNj6L5eAD>oeOX4Bbf@s^72QsPCDeVFiYZtf& z%P5Q;_}y{Ii?zal^XIb2&AQEO9yqXxRg#&Di>OYp>2mbWm;8<~Ij-!QT=rVP&0gAi`OV?$_EO`@#$Y!zQ2^1SN5tS6bRJ!TZ{BKx%M0sw~j6M zs4fj+TQsU_B?T9iOQ0KJyp`r>mO${L+qY6y%MQxDcZs_u!pM=%z1Cqf^vbRDaTW|y z9(2aM=X8T(+SSvu0sC=UIxzCOjq^M8^%@`QyQao|(;#Gufv$!nkVd?yG>V%>vpjl8 zjz$CYtj0Gqsewe_7%_^{N8b5rJ@{KNc-j;7y!@-^>>2AB8^>+OF>4kJ_bQ7|%rTov zM@#s}IraD$c~VuP;<6D3NU1n#@pbWgb2|pL zp#^3&!#4x3Dylnmb?RG9KB5*6I_6d@ z=ZKSs_Nzj_O?#6S&7PBi){tB&>1 zmE~KDk-9FSd7B}BkrB*2fG@HzEjq(42zF9X5H-5mF3@Z{;b z3zi1;hLml!d7?*I`Ifb&+y&cuz?b*~zPj;$0f@S5`0~`@*=Q0(DSjavW3`c)aLJ#(5_his$*S`GdV6S(B9X8v0J0X3!f!B)hzM+m}hoIiSC?{}wn zvSHV9=u!M8r`lXtN5wMH6zt7>PIzlH=8o_D9vVlV?mT5>i5B!szd~6XnBeN1-zFnr z$DisP48mQe`2KUGEnsV+73I-#i=SCzsu8pjqWLcyjWeP%N49On z=ZJ*pFsxeN!mEI-^OPv&P;$GRm-&Dlq?sA7W-}ytYAls%vYp1yxu;zFhAE{lftpC11%Q`2>VcF*ZZvV~3qVyBkQ$Msv zkBUDHAv}@3VX-Dm3shL_jNap65$@9C0{~1!$+HIiNCCvod5ptY@Ry_m{|{sD6x~VG zH(1BE?WAMdwr$(CZQFJ_wr$%+$Lye!{3p*l&&*oicQv5leZ@-(|73V({ECb- zq8IAscB=R85e$$s`X(< zz8{w zbQ<6HC%))hr}Hs}cuR-6pK+L9X-E*TM7CIxY#%V2J+qfbo6a%2ieg)OeU`yA99eT{ z4C01X28z`mAw$=%bn^P(^`lEOEL0J)faFKXj3_Y&~x6*Zalu{sLb9&(6$$3 zoqqJsqEHRUFWn1cH?cCvo#@LpNJG%gsF#D~o~p`HH`=-=zs`dHDe(s(s8kJ-H`g*z z5-f7tOCM>^&<~Mp$1rziUg9v#u6=+$l@ag9UWqfY6gK~Y?n`xwE>tz|7L8jz@ zzH}ID(tZRWvgVAOq)>yt_&&2rMA#?_gY?6)4hkvh7A{?tf+e#l{_3rwQBjIv8O8aQ zMV1nhX{C|OHnp3d%D0t!snYX#p$TH<%4=EPM|)Xi8nNVCD=W55bk(v97@`{#Hdsv~ z7RA+L-~LlM>$O^ICQ#m*;+jG857{kjnS%&@HG&M`u zVYgkj&ygCGPQLCq*s{&0Gu36y>pV&7^TyPqX2sJ)Ip7Gxq_|nTQ>@hGYr4!gMf|r_ zu5=0@o3mQvH@n(lB)n+Q%4ZT#IX!z=jszN4A`47w?gd4TK7xC+hwSN9nqHONPX zT!GCsq(I$!I1rKm`t-iwwMRe5nW=M-Ori5ZJ8wVTy)~q$A?QO3!;IFw39T`X^^pmn z!Q1k+h=h%>!eAwFJqmm$CDWk*H8&e2OTFBFVJ`=?51j@-lU-itF(dwq?xR`z9$40>p^8naK+X zXhs#~+7P4`c@oHt(u~BKa3Gzs72jv!->1pxwaMg|!@>h*(#Wy=Xr|c9t7C)!c+`-8 zT619#of9_Ubx8{)26!d!J@-8dOi)3m5Oh@4PT|g)Bv!xh>b&NjpOJDimd!7bQUzRw zY?Ax5OQd!H1kd)AlObkNwgV8B9o}7BrEY(*XBFZ5*dhkEx9V* zE8Q?4i~o`wmUM+AO{A?5GuN3By*p25VYw2w4OQ{ofKwaz%aG6Vz)H=Z4<+Y6n-{yD z>U~S8tTCD~I#W@ozNT|n!l$OCwpeRar7is?c*;pn~{MbK-9mASgc0){O3I zW#lqG(W=+hf{!PE<_wKpeDuOX&PTfiT_WbfcT*Q6T6<$GU2^Y8-$rj*YxAtFX?caZ z^xk@r|4_Ysn2lENiIe3JMWfRw>}R{UE3t8xwR5`6UKy39@!cq*<*dfugV08Iajn#M z;Qi31*GE4q+O4)M?CflcMeliRJ@_(j74Otk|NSf@-8BpWVUq+Yajnf74Ij(*#mDf_ z2t9h4D^bH%kU$jtr46e5UKc$AH1%0beYDgzj1Nw6l(-NQq;p0Ptd;~sJ*}6}{6Wa> z52$w&~k`KEL#MjA?vr?%jRry{<% zwuRvMNoI^mSD~;Kxd83eNQ73h-cNEo#V*}R;_GU=uLbqCzG&i4iF*&#*qX zMwu)dx86=^M)iS~ON!G9r0tF6K7=MWz9WN#vX#qC+SXn@Y3mo)K29t_=e7`7t-It zx1DW_0b31WFR0Xx=0)JKXScRC3GvlE5h54Ms^@GUA_Y{f nqGIGcE2+V%t@!ET$gDf z>RnHR_B|gr;Ogea9nQt`1L!-u;R+bipMyZN4`F8m>XRe!0lXtz_@xsv1Z0Z!%3|~Y zf*Qn^qP%gI3XXgA@KFCVU48aK_)mPDAeEci^|~uQfHLqC<5xD7LFd^jX2%X2ENdJIWt!{F>BNJS`A#)$qUbckBBif_?)oJU83(3~%Jj{w=Ym zuRDD2M>GP@CjqgZx#j`B%bz|6H7G)!k?EbRKEeE?n~h5)JvqWH-#iTKSHKCCvF#tt z>B#*(f&==>f)ud85GN_Z-UF8(J(!&X(4_-Yj?nPWh+55wK#T*i$-h5Qg(^veey+m+ zWi-kRHfRnWCUQ@)1p1foNDrm0$aG_u4&vYqAXUbmRrA7K54r*i11kns{$t2t&aO!j zB7gpkPbM7VDc}yw?NlVZ?;46600uFwRCTS;f}z*I zqnFPeCF~f4Zi!U@8{LK;l7bzpwIbn{9x_TT!ITn5Obmqd2}B7*29m82n`yQnBN6xq zj0F{?{__n?(_qb82gW$AusD{T6le@LU`;BL0fP;*kiv8!ZUD+CevSIMnVGMGE7qKM zRz1Qu7_|R01x^y}Ic&@ZL6i2uSZwS8JjXD67Gr%l7X*_f;#dxe(l$UHmLw)|B_KsI z{GmJDk|cqhpeY&aWQ6{eD#as;V8_$dBPkWo+&BFpsXH`I4qlP=bLqX~mPOIv_;b!FcAfq~ybq z=a{At!)PlGdITEKpcrb>EmP%ZO6AoWdO{!!F#$@@T$ zXJO0bnauz7O?@qG-&zo_y_QdCq|S)N_)<-)```e99t1(b2gS!S)gG#Xn=`BehS^X= zxKTvxm33F8e8x+omQfV?SNzYb<*>9B05*tBj)0W+b211I3SJuR1`~BP7f1}BW_X^a zd-2m&DJe%$XL?cp&&2bH5;FPHcWrj*8ymT>BC#9>Xr6Lfld^izlzVJ%Q)wN(-t5T9 z9NlaTJ$ef@n+&a=A_ZL=fLW~uT22LWq>;@IFT{44lw6rJP9@Y=X*gR6NN@3<@e=Rp z(7MplRJ4*1u4=xHidY(bz>@Ox_3{~_oWegyk0}b<$5Dr zHL-rqx#5+H5hbPx2*KYl%1sO|i}H(&jpRruvjXMRuhSr(@JvFG)v1H z=tf9a)5=ui4zk-+V{1g*)k1(r{2>GjzBUm@H?3(&G-tUr#I(^{wTfrw%KfzYgSD&3 z7pv;DO<_C$6p zT6YF^b?4NCqpo!qUbcGR^_J?imtBBX3VL zC8d6f^(EAL-@5Yia(kE53=MH#nusEK&bom{(66G!Jybe^Y35tGRh5ce?I_FZ6~2> z@rI6-1NIUHc@PZ8ZkZlvgKvHiS}0bb?1W%mc^EEh*M?z?7G9|dA?7vuA7tqQ*$6ZG z;>h^9wemm6(nMkeI9SA9jI*6$ahxE8)G^S%(XquCew4DpL|JxdqWHpDG7=X|ZmZL@ z^Q24^{pdrqVkj}=9}C_jxuU5tpIjv&5JBRP1+NC)nIc>U+maZFVerR-m$JLLs}h3t zmI);DXmwF!!j+y3<_bfRk@0pDaZ#G8j$SUTv=zFa9jE?d!Q{$FH?kALpwhfc6GOH7_8@GI2`&W=4~!tOg&}xQ?tUEF#7Hw@Cpqy)J=&1pS|a4WPfqF z3V`x5`f^lbAS#gMchlL!;XD;sKc`XK37(Q+7X*d*q77SQ4T;I|tOAK@4S*et2V2P) z1uloMGl(jCEul@_^X`Fxv?}?6W9?Oe;SPV8rXjR!h_Kb>d~g8tb6#-j0TWDiAbO+3;S+PsNgR=%$i8rRNF$>3qOWT0B&Gru&bC|_mmRU8 z2pMKA(1Bnq6c-7?tf%-{SrSD~m5{Z0iWr?SqLHAHk}2HLz@1wXv4)gX4)2l#>$egG z8eXX_3|0HcVIz_D5|HrU@*ssRByylqQ}Qp*$;<`Apaxm(ZQQxFg;a$5wI9NZ{^eAOp8pun&YK1WlQd1!#FIR8Qh=z|=#*^&JCAWQ!J zWw~%cn5?5TxW_T?1blb0(Dh>QIwYF+9k_~Oj zC2CiV%BHX^P%3KO#V3t(EAs@WJR9Y!%fu#aaL(7y8HMrSK)S7(ChguuI)<1u9&Opi z7&F@PWG{}5M)9UBKT9KnziZJgg~Ho(GU>quZk28t zr#{;{@01#68=j(VjFa+`6}lOI5$(!*G~k5GS_fh)EjZ|O?HTwx=W&_6$L!ah3%Po4 z>#YXJS0qbV!Kom#09w3B<<7Biz^Fg{!Qe_Pnm&dJPqF0jj zD|s6L%>j%Kr`Z@UV1kORR>kERZ;{SIQS>> zdUeSI*^T2xr`~MW{)o0A#p3L5G7E>{j3SuX7O@RZ8KnS2( z3V(|A!noNBMk0X}$1|36#~fV@?hlIZmcg#j2_|ff4q)dRr|_XIi-l)S(`5Ko!S^z0 z&hHrIRwzdIcG>=@`mU80c1Cows7tR^F1o+7E=et(cQZ9gEq$@a_LE^T!hglu88c1Ef-a_3gA(sJU0%R3n%T=vdK z)z>xFFy(NDM;Wf2#xbcpBx^8x$^qcpd;ONKWN38bguy9=jq7skaz4+fM9{~)z)cWt zJC6tAOJs`#~nKAWS+CVzWZ)dA&QpYhCpgr~VV z7YV#vK%THeAPQcH+NZtNE`RKGe?JVGVv3!xzApH0+)h)j!Aj8E?DGWZC;#(76Jzl7 z>e_j3OE55w1b--gI(t8e@CW!&#=VVUi0!r_ss#v*d@%*4z8)qBB;*(< zOO}BMB;60$Xo)yk$vs_1L3FVhX>Uvz-I^!}m4kQ}^>ih~pTz?OQ|RC{6=BI7Q3BC* zfWhg2M1NAC2yX$O=cxA~Smy0Pvl+~LBOx=wpv`R*Kd_o!aLSg%zbwYWokn7e$@L{CLPdqDoG{(8n>M>9Q)d02Vm);1H8JY}B~}V2 ztBnS$Ccr6r!dMw>G7OzPk%x;_U6Cm6!44W5q?1%klfqFjDIDkzJ5E&?4SJd*CkpLb zTpgw1)=;$L8@W9(N`Xi$GPH`RR=Rl=3;HXPs#K(SNi?h{n`m?TWN@sCrgRx)aH|@t zOLN*0dh`QDieo0Npj3voC!3%bE%~6Fa}@1Isb+*!aHv;oVOWSPHnTT)#zmzDS!Kvf zS(rSFMygg8f)TN^6^KkoBu+_|=u>7JsCIZIYx#s)5w>F>b|%3)OU$33jgstSE{$5~ z9A8bv=JyQsqAYZ(=ti`xq^gjM3AG!sh+)dy4I}5)KdHN}xm8jeKJPg`@3fdJxp-w^ z{ea2fgA4g(E$7wFq;)BlVWCDFjtq%C9d3i^<2)*oGIqSjZMb6$Gq@NbTUol zn5-OjEya24)U7DF^Qe5MDvd8}#vd7xgGF}aWUyTe5Nb5$UTT^xXBZ!)Ec|6*PZk}r zG{dD=;rwDzSf?}rXMr~4V7h9TXvFNX)4*QP$Q+SB`JC^Ws=E`et_&q zP3=Sr)lv@3%Gj#H2GvRsmn1A!`huzoAF*=(kBS}fDu7m%Tu9XmNa+G|1+YoZq;Lg@ zXe9%1wI5m4N)?i-cJ#NU<5N>Yop*LTOiT+-mCjU|cuEe2bY+h;z4Sn_7j=;=YK`<( zo(ptfTy^TGbWYGm=H#*H6Lfko1@|E}@Cl3=4`|LrRgsSwe+YM-GgIwGcHJwN3ny0+ z<{um^Ey8zctU(I4$jcPNpSSNjw{(j9op;>>b@haJwW3S)9aTbHR79tB1S?CUo>ar~ zR`FWb@1p94mh}7(FPrikJXpK|#WPStbK2NX)iO21;K<^!(C%a2t1<5Cgt20WdbHtAwG(IiM$ z4^fGj7^Uo;sPGf$29>LPoJT<~=TX{_Qq@sT@_A$iGv9uHB`sXhEWGzYGOM7qvTleTuBNct6x4_u8&wvUmzHz4(>0lLDf^RT zph>uN2jq0)E=PN36=~3P#lSjXbf-JRuo>F4S9f=nDoH5hBv@UELjoEi8>>3!Yp|wj zx*wx$lF}=V+Y5_AbiU5dW)m^p2^-?hi?9 z_b@F^%R>pyB9CtQBCT?Y^=6{keLQz(P?eA83Yl@j;74~vI!K#8{YA>HP6mM$~NR4 zb8#{4wAbuMux-StVd8A)?}r%jc|;eG|1sZ z8_2}ko^W7wGhSxYt<8m{A=>dlQUOfu1N_ELnC>pTK>Y#nm|?R2Ux#r^D+tDcs? znaT2who_yg!^T~mFkPbXy&@TsUgB-KEC|=hpBtRstethbo=SbogpBQO#KYxCMdOs6 z_S8Y!-Qm2N$*Q`X8{O$4gq_cqUD)=RhddH|3ip|&#X^nr^{ZHbFkV!@nvM-$=$4%+ zNSa%?STMw0wAA&DGZ~#)itN8!B#fJN7+WN9?hlr#>i~S>6XD}c*iPTa1fUWPW#~3y z`4I~Bwwe1ZF#0WO>(;T)Eit;ozS(b=u)xUWd&EkTSCaNOX(;{lPi zg?#FE{(ERrj9JycS^8VMrd_@&eAE3CPaD@EBC(qk_)5%tWcqhHfFnojp}l-1w90oz zf%dqn_BE^26`?S@%x{-z+q*V5QIhnvvw4HJQ21{?r#D-LIq2GR?E87aOO63Ucp38_iD1-H5${G?-fFF1rCaZ6G~f2W z!4}2cdC;aR9F^XN=_?VD(+X>yCkDXs@Z_hZ)b};jf-OXN{`NkD7uxuRR{+G$*CsQ=s zmWPCzaW60~=+1N9!D??mQ2rK#T<$%7TLNxZs^8A*Y=nH>J~@7_s}M?Q^SsknuU)S6 z#{~(5`{B#(;nT+0^_xDz^ z?3gjkiB247)(#)U_6~D*%dMBc212)~{2*afiL2Bx$nRa_BYff5V`=(rhNGZZFiZNY zBX7MP;9~|TBc7eucK|R zn-{{v@Kmw4NYQMI zrh`k3?2egcS1R?VBKb;|ev?x7R7qiXlkQFCXk^UujZ8umxvyoq0T_kZIat0=J&KSDg@W9L)7{_!7K+aB-DT$$Kkq}$z0%nc6i z-Z;y@#_f{|W(st^(W9A#7zGf@+gAwhZ$taN@C)4OD!hdmyp|wdiqp>#q2L2nj3fmP z)WucXQb{pu-||`O+--4=tmUA;AcSmjt%ooT@;k%EaxXmLMV93IJm7X6@lN;VIK3n> z&vBR@g?B=^;WCD&HgR^SnyD1SuL^G>BkcFt>DnD*Y19b^=h|z z2Wt0HjBr;3YKq5!C^f*$oOPLn!BKEZe&u-5oR(|9QU4H7=xseqwN3S9*m3I>G8F>0uB%)4G_#!=R$*tfEbhRGg<5}7q z?hoA(e)Zqe@7@1#I->9Y$7uKVa5`VX0PypB$MyB*w?(T$S+v%%W==%m0RpbUnYORF zgSd(p$P2dy5`dwpWni44RGkE?=YIIH;EA9)iK57`K8T{MsyK-yZ`dT%B@Yx@{=%^N zjOpmYv0h-9$9NPB1VD5VHK7nS-&UI;s2YMsN*h`a?l%Q5h*N|Ao8w)tUQr&+kW{u7 z>@)tnm0Xc$A!^6m%yurL+wPf+P2*fyls(S9I+Ve26cj9k$u0qo<;hZImP|4xgP+Q= zbOpF9av*ZwDM^y9Ld~T+1}l^;wtX_ruA~=7DvOK6Ef!%3u*DEV$D=SRT!*T@NbOLF zDwpEVM#E3Zimkd02a~muRE~?<8zb!`~@mjVP z!bXN6)_k=kx77&i_%3US2l-q8xo)r8m+muzr`71veYtAA4!O3=S;B(WN<@$;g6xFS zf;P3CpImcLVhfbD?fBWfB=dL3G~B)$PTJ=wUH>P0PG+g5VHg z9W52&wVO(xzjSoOdxN=K?P}y^Rbi*RpSR z``}hSo6GHFOw1Z)lo*{EZLuG~^qytx+imG|w)omx52YYgxN@8sq?sa4mTNjHPUVxR zd~WZy@x1T0K9hDIB*7(h^$=p zb=!YEJ;~bt(R<86v%a=Kt0r%7kG)!7OdYSeZXHm;0N&Lmg8~o$`6Vjx z5EDA&{$lO8sOLmvMc5VHU=?Mu^E##}fQ)(^+WccG=rde&3X`1A+Z#c-VM5#6w%p3$)LUjdrQ}nHUvN{M^(q}*ob?` znUk2=&BvPm5`mOgHdisd!-;2Z^}_WiZcaMNH50MclBbtbF#%3J2kdFK9W^3^T+I}{ zer!^CbEo9KnIa3ltwnX-MHrN@l-{`Us~K{b4fO1@j({?|LXO zOM!>Za2q}-Q`FrfpO-BQqw`YCS}uanxz;BKp-ES-2V<-`f|gihM#g>{8B*BvC`=$!J)5Xo69 zC-qzImQK5MHPF!0!Jd}!IGS-^8J>T^0qglznO2?L)??6?Z4sQY^zS*m3E?He%aSbr3Je4NZyDM6uqW2q_l zqO3(E#ct_i&TF#$$J1`5mnk&{L!AzmgOQ$(07va#BV|R_G?4rgOV*AVmCN`neXY4H zX>ta4f$c2fbxs|KTq1n%h)h1OYplz)5ju!ceRJJY0&oPq;Hv7}MAk%^{*o<|H3NQ(1J!`Gs3%mC+wm95Xk3MTe{*&$(8Mcb`i*m3c8bjN@;pn}Zll zH{F3bq+0J;@x8y=#2)PI4HbCQ#0p*`iDFtr3S0e9vk*ETRTjUS@$IaBfstYs8luhm zwi}&i2#w18a+r(DhA7h^YT$>?dEwJEZTr{RHAD|6h40~X-FGXH`r-&lSwcSi!aXSW z_sGC5z5mLu-D+(y-n}%q_V%Uaj?=4IFjq>g>_DXbY@g*VvzFGbxy5E zI!C>uoov@7RrJCspVzxXih?vz{&u=Jq}rW>263(!*DU3m^lD90cI#4R>VPb0cOlEB z+;5=2G-iL?z~q+h{&bw^i-OBya&`;B#J9u#=6-lyw&>4Yxdu-fIL1(X%Dmexe~9hg zHt|TE7NonOYx}Lz8d6sq1+9pW)+3~@_nwI2|4^>V){7Wm9U;C#($+e%agBI^YMuTo?uD7^CpL9kjexWB@){ z&17#z+NYk;ZNJJ;2|u>a{kxh+e7K$V-ZbI;US|Wo1tq}z<>P&>X$V?aiVVJ=9GFDc z6cQy?`~I>^e?R;I1OR=~L=Mz{=JbVFR@Per834Bc*$P6+Rsrt_+{92`clY%v4uJa# z!tV&W2179q^@FT5BHD0?`gF7%38KjkGGFFCOf%^n_hPUzgQ*JP)DBKWL0vZrKH%n0 zr|{`F3lYHyGnfp%((oYYq_?RcW}pgF*a}zq@S&A77c6t3gyj1=3)9XBZxstaV8@3L z!KD$WV6O->(~3xJ=D_Sw7E2~iaSi|mSO~3{MYvK$5+#T4oB6Te2n%yW_{l{6fcD}{ zkm*-N-VO0_$kuaSi-?&HaaRkHY85zx@_hpdq*ivux)g}bh!WX~Ht93~7WjE)$T>FA zjvdNSlyVL%6kFkM9^d0M5+g5C)K`Y(i^UA#27J0k^*$5i z|B1?V6SA8ULBNSy@b*`cj0t%mBmx1ABR75Ev|o31nEQ%5gz^KD$0T&eE*s)1{$y5X z@x$2`IM|NgbhB8^zyTqp8pDy`lh8mV5$`XfD7#7o$nwP#6=NN?2$*1(1pgX4?0?f4 z3b381Fi}MuSngf;kW7Cr zW8guI?h#YV3Iyql=bOq+pP5wlo|I?=!6cPP_U$0S#UNjiDlsieti{8GP4s$>bU6O~ z$Rk~)npdhS9pcETmn#m|(U2ZYh@UInkeX9Hg4b6Q&6^YnCW%x*B&}pL(cn8xd?NjP z$U_u0>D>bq+aleuBO{M3GsDEEz&aS&kp8kP)5k0O7#YbLEk(>U7EC4?&&h$xIL;#~ zJFN=e&-+V52n8=TIzXyuEqY`cPj0=rWL8%UkyolGXoi_oZhc2s-dc8WMY>a#@I_~G zeP-5bdS=0isdgQwB7bEnkpGzm z|Hd~|8Yqw=L4nO0hs74(BmV>ky*GkifCk*^D+?+lsRV}oFJ|hASAKM)f-q~g1#T{e zX6~b9?q6)V4cGMCi2_HGLi?KnketE+F_3Qe^wtbMxY!&J`U2#tbWg~9E$JZi?CkY5 zw(ycdNG*3kOY+pUV#ITxEtQ-v3~-BU8%|Z4jI1Ks*ThUBcu%OD4mTDaqZEx|{iM_g zj@<+XmXhj2v88oj)~CF1)L?*9{O^sTzqraCrV7B4nZZiR7$vb#bcJV{;sry>Ry~bG zG?P?iOYS4tOCdr4^xmaO&9RNrS&A%4@npdflu=YM6%SKvyB*Y^Ng#goM#NKW7RCvX zQ3j2fDx{U=fS$#!9_0xiRdJk^JSp@qS9XJI1@V`0iQFCuH zf(vvY8iu9yGS5}rEbA^`P+HjQ6ih4hqst^a++M3Ai#p4EgYb&*Rlck1uJAy?toS$D zDY91_)lWr$pjlCJMKRl;6*#P3#F6!|-N?_8X@7hq#|L1i!REBY(U_az*sqniuoW8c zj>J*e`)4H{CsjumHc->ebhcq_m*qcLnT2^;*>#&!L@0}l)4)PnM?O;{A6j(Rs(N;- zp?unxN99JlQ4#Jrp+)LBD%TP zt)sK@M>rC`lXFTrsa>_Qv%5RuS38Jyx)mTRt3w8%e(09wF0YpyL;5h zl}0-NzuCx7RU8@U?fz}Ole%G6np#gA{U2DV->l}~U(?jAdJL8XL>8Nytp06XGfc0Z zB3chNsNTwZ!i^{=<&M_99&#IB)198dPHj))EG~Usq(mvu+TrTEC$@|b)?1u5oyo#p z1DPVV;Z-HUn%~3_GYaqmZUi*Swp42DDS2L|;oYJB0Q^A!-Bju2f03nY%ZwehgCXY? z0#EFSVKyhGbR;tv2jX6zfBOWfjKF7#$a9By;zTI<`e%BFHj`?)WhhTwt(zl;`6~zT z;=PFrM!)_Z^gSFB#v5VnD!%AJTl4AS#2euD9aj1p-9aX_N ztuH-pv@&=wGb_wF_Rm`6H`jk1Jr(sYQcE}6v0@L{9!tA9Wxj2c|7-edRW=apOhdjb zDcf|}`fS9{+_KNiIRDIQOy_Rs%(ncrxzXGY)xv>-$}FEyY)p?My%3Dw!b<)ea3gUf zY~k-~;knoCCa+&f_sa!?+IP-^N6iei+#>YM7&zDB^s2{>zSCcR54(>9;K*JRL|_r& zZ+T~O5h`x#<6a#zW=U9U=5>1(&;KVOy)x0=+!>=SFy10F-YP5K>R9(r3PfQfMQ(Jt zRsO9NAA}iQpH-3i@2LNb$An7ct;_VSPicQVWY#=grj_dS(z(_(@v}AlCd$*+zi+MU z#r2rJtsBSis|akCXDplLZCdrO;7x4W_cDw9uawelx_;Yqn+sgb+Ux+4_1@a_e_x%= zS`AXvCgpQ=^V^Q>9d*dtj@jF`@=K227GV(?eqc#X?fstYyMBwbox8n$1U6ZSKRJT3 zW5h6#q_{!)Yx^^itrWh&S0`P^Fj}@h+JHE0Fuy?_vMW;0-1>U}X!wrWGw+~+wLe_5 zQ=+mtUenz}xZO5C*|N7k@V`Bo%l%V+P9Kc3HGG?o3b**%{!aa-u5WqHxNRGQOX%C) zU-T~2e0kaa&NcS-um8y_M(JC)=}X_;+}v=Ucnaan3dhdf&cIy^>b{SroD40hj9Ny`?g;sT+fCH+htiqHwY{Srdq z6x6^8E8_~o!4iz&0js?ox8e}{{0MRW;oswfcbgMwty2YrGdRoR^6rD7zZ03mW0kry ztcCNhgkma41IkxNs(NR-{y#Jv4`>E!4ExUG$WJ90j|MysfCmH@W`ieY24`9iNA~(0 zP6uX=byhra7bb~Yu7YXq*GC?WCo0SbzF*UY@y%KUuA=KscJa(Xa;_2v23%PtQUR_F zC9c&+NGsE>GKjNs_2%TC&+;0>iU}$Mw>B*_FP=PZsvb#74sIG2)^GtY$%krM^)Ibs z(pnR4di!qrcWysiqamWZVY}^YUnyRKo6f%7(f5I=gZowajTyroRD`Vshs|61E$;f0 zwSx6|yq(p)qtL#4s{ZpLiigX&qjPWO$azQqg12Awo=E*3u?puw z4$fY8o^s!wNeo`mcP=RkUPf!4X%1e(5?&bz@9O4WS@rL6#9le`?->dnd3W!-RIUYx zA53E|MGPOd?B1mrrh*FI-C8{eh7Eh+H=8Z-v#SJ4 zXyOP3WXv;Z)`NlCv13dBi)Mnp_H@6DPmx%l{Mh6?>!f}Yq{IAgG&7TsI%ub(`Fu>f zS9(sitK|pH%+cSVK5V{Pj}F0@P3&sB`9U*TN*B^C!ND3rhW89rt8RbLOq$n!M(mD< z3kIkRTh5(7XlC<%E`Q79)5U?F4oDXvN(#7IebjIzydC{@?pDj!?aja?;5{_)~8%aUXr7blX=Jtf?RKJhHqHJgG6=!Seu zC0um%&v`*GxmS^~JQG%7dLTvhg%;~&CsJa`=yO3KG_CcYGUZ*Z5&O8fKl^#ehSZmp zoK%+O!fM_h`L;UAmzOo_Q-Jb;lHaS(`o0xIKY?QOLzqC|%0Ba}YT?1Py}7Kpw&XYHEigS7X-#zgZUo7{GJ>$TAA*)whH{n$^S_<7Cd zuJ`S%=C1Ga?-fJ;Kt4^wz@O|@y1J@MwET_+glon@@R(Jd8mO2~3s=1F%gbTB9Nb1V zXgKuh_ES@V(F z)^!WA9Fndol!SD6ErJ|&Y#{*ipFpv$$IZ*SVFbQInKJCFOR@4 zE!XB4gmhuc( zw*(<+>Le!^Ezu(aR>~@zbaETWA}%rhw>j8X+Cu}p51p%dTo zAh||BDKi1G?L`3Cq%tT(a55>05)tw7<{wW^VZts`NlcjHpEkws$_q#^Mps0kN_MRD zo(Li!UgDI>4H24PFiJzJI3#qev{}z_W5jm?oV?PWU9bgLY$Fr&-3?@5CBc~AUirF$=$*9ix$K=X0MUZLZyC~|&+wWWUNTIZW)leuP3fVurD%E?k}CO+ zG}EystkapZWYv!8^SU~$TuZXb?&3++?}5k$RY)?$)ls{=f@si!>@;C2cE>vtkV+~5 zIZ64`m^!0#q1d*>S7jH{SYRYtBa^XNpj3pJdPVUIv9(x9!WK+JyEGfE2VE9NbLQH6XqvW3870yC zmPYQEnwBHFtt(Vby)prYsXH`f5rm1{?1CX^LY+DegJa{A_TMJ%F6!=UiZo?F*K-9( zN8neuw0hJhSXE-0MI*$7pR>mb#i`Q|pw&X2x(dmQWTmskQy_`gpL>n1dx0P73w&2CGyATOkW811Uq1n|U zKFsB!qREqC7QXy&Ik)YB)c-};IW}h&Zi_ayZQHihv2EM7ZQHhO+jb}E*h$Ce_hz5F zPu2Z)|HE2UPt7^z7(anxd&SjEb|V5CH_|wzmjrdb56MK>DDa!;zJ(MV`$`DTFffUNBa%l-&rxONchboxL_f zPm6g0hX;M8vSI}_nKZ`U<$Q-^(4&?;X%BT2uv%{bl!3PbQ#gEYTt6nkyxSTN z7m%RnI0BBnR|aqu1mi0_q_Unb>(?J!ymFrs(L;$k*(fiSjYWK-Xt#@2TlNFQ-rf&n4K}S`p^krs4Xs zmO<@F`CZeQKt}gwL%8^Oz2_;~q2o|m|C8liFVT4T$L5*5dqe}WbA?Ikj)Fi6;y_-< zE&5MH@OKmYnA6rxbN!(m4=OxhZ+|GA_mDDybp%!0jVBFW7JK2@4Q21*O9tWOR|AV> z*7vPvh9pSa{QJ1a_uVZT|AhsB2@RP0q52F_fEn(F*1@Q=xuWkL+}vkXg}vSG#U^m0 z{`y4XiEAX`U)TDo(H}wmG!JR-s|nYGQXKBLWyAnL3X$vQ6)BmCxpk%7SAJ$MiUi03 z=77aP8y93^sP?l)-B%H=OJGdRR?jO%{D%LKxZ%SF+tVxPUt>dsKba-zS*fe4M@_swAskDxpoDmqSKzbd@+p~6U3Dfc?mWWvIPSHK=gB4CC>Oy9Wv z21oX&MsmAH>anu(vfz4^dq-15hK!<(Iw?Me;6Y*W<8!%@PqGudvCncE9}S293l68l zGW$A3cS!>JO{}@eDr>Td&t@5+xZXwYjX3WI#t{nFi95)on6FVZsbsA%6B7uHR zE3FxCs4CP3u42j-C)~mwQ6UE;$%z3KtpyryBx?Mf93#x7+rbihqKP+GDWypcgvLa& zU||QEfi&0&WDpXCq{*q9nLz3kqYVXu(8c%>8G!f_^KY35Wi!k($@vOY8$(J-~w1KII5^ruP3ReN)9xsV2VvG#VtnX zQ@u{K48JrS@kN}LHplkWq#;#J*^~rFU}-AgG+=7wk4K%q!>Li488btM=2@w)#Y8FK z$ZY299>%FYt?9XDDHG_agq{gC@DZmmtunn zeSR+rMk@h_$x8Au9${BZJ9c{nyF7|f~#-mps-sS9nvD#g8vUye{aMgss?Xd-Xnc}>-Z+4QqoLjLB( z;D;9Km+DN>HM!G_Zqf zOT%%{u#Y8GIi;%58+E3t0XW6WRZVUwwFuj`k2E5Sm-R!d4regcC=qqznrUYnF%IWB z$kZuBFlFw5Xue0D=5x(vN$Qk)>CiFbx=!;d_$G{)^b+i>=I7u7TG7UO>$E@J9Ld&= z(M2t!Q!N|gc}Y_x=$9gE=Kf*r4G%OGM%gJUJNX1U9-$vGm^Fph+x6yKNmR6z>L=m) z6HXabgjCjfX&#xRN_BVCZAj;3zCMjQB~^|&ZNRV@!Z{UR6*?Y0y1$k>?R&Dhy^v6* z3)$YQRC}=0ecGaO+8lY>Ppu2kU)l;H{F<9O5OF&>R~n%{a$Hj)Ib$?vWSTW;yFrZ_ zU1+5p+8QP_EIpk&W&c!hXSL>8c2#AI{o87n^{(lXvDKF8hVN{T|Llyj_77Ih11vX- z{3%WWP_*cDCTf5-<@@w>;&vCyRD7OD;RbgP%|vyLwX37{y!3=yOBIjAG<`|;M&=M| zPq+1d_K;ZlKa!bwB_%xTG@APiSoN^*7PpdpU>EeXEWz4f6ZM4d)Z`l_Zsl}CyS1Wi z_qJf=s7v>2N%qBTV*m7jFF&m>r91MFEsiq1CpDtlgq*OOwr-}-o+Z=$nAqmc%YgEm81CJr7w7!ZqZ#(45x_C zq9@{Q*{Pimk7f4tt$?KO+HCD=?QJ^u4gc!Y`n)zpvs-|J(^~7OrM#J=h9?{V_*Sc; zw~y<3S<)?SF0<<(5x~wZ(AqJy@G$DZEVM!s2=kBpKArdJ_1x-R{TEb)C^y+ayoSiJ zN+HqZPPbsozEY02au>TO+cBtX($vT|3npBm{6e6ax26qGx(dCd`PECXwfZ9&BFbCA zE180kT|M3Evxi?-z}O%^YF(sT4DFkleOppgb(b<)$K9)jk6jXmTaC#x35TcDI6-Zc z-f+X8z%dr+KHD@|oM(?^RkhpL2%fR-)9k6-OwqH-iDSp>*~a=Nbol1mlvTq>-k6?Q z@$_Cus@ln_+iK(AB-dlKHQsHhGXc8TEawcX_S=OWS-XMV7WvxsP2ar*Jj|-o?~v+| zfI3sI)@?}8uG5%E4(AbTudKJv?fIPUNq=vHEIB|9);{p>=khaL&}*&5(!|$J1j*(} z$!&e<{eI;C{ZzLE`)>{LA6?qp4)?e6l+P^hUSX>@y>^##!Oa>>{z3Zs0YX0e;0-~~ zH@4G@+vSZCQw@vjM@JVv>6=KM|MmWQ+%8%F-VCq0TGem(Dc*@P!%@oeR>IOzLd1&g^$N3cen5IF4#}~IA4Ng%-c#<< zeBFu4-dI8(kkt8V!UVp1ypqMg`i!_g<oaZ zss4Xwg7teW{O73n*Wyz7Z2zt*wHY;-4;lp&Kb5vsBd!OaFP-LZ$mh40WiB@|Hys!* z+io}3f>&GjePM53Kud?)J8i=KtU@FqXDa5P#2e0qBvC(um=SQck8Q3kc2? z5bk(x$%*yX#^!Hf?~=4s!aV8k9W+vL5+d^LL)&H^>?RrFdT5o zk-sj0cpXP*MvHjpEci}JKOp@j%?N6Y+wj(5pZ!m1HOSLpy!!(|{lvQA2BqMYC?GQ3 z;8Q~J4D)qpEsa@SlA>_nnR4VbZ09GBn&#TD^nviM3t)V&Us!2mOmK>tQeaGbD){Q1wbi>!07pc!_z#+?SP1$*fnraJBH>7+F(zM0 zRtAb+vrA2d@u5sg2d><7)1N~J`sHQieNFPf>faw?b0ZN$J-wFotWNQ_)gcBy#2 zR7{!>49AmNf`!D!LZhfGW~drxf`FFkEfKpK3tvkix0!l`SR^hO>Sx7as+=mbGW-)L zW>CuWdcHl`*|?idkrYM1^64nq?Fff9M*rI^C5eQ{&jI{N9D+Qpg-8Xw^EQYbt3saG z7m0PaQA;hSVq5(7=Q6zBY$5z}<3EAoE~`g4-=?~;sAMb5P<$Qt$paA`A2EJ6I|=B5 z0!}9_V$!GLbznY@xxJvvArVdlPEB88ucr&*OY`6Re)8yW#&`ec_(QfsldoeT< zABBpyNN?Cc5-M3I34|e+LHd>Pt4L;;MjDf#x<}N5*vwf^#agH$ow?dh8tqA5oRZx} zYLpt)3m|HAZJ9vA!r5f%1;^#-=@DsBxCzFUR>_I{OcLjcdWw+S7J5FSoYQp2OsVd|o8 zYi7-AkiAdz6y5`Wsld+om=uAa?`KgP5oa~4wC&{{F*)QS<}~(T)_Xinq7$q)WN`@j z7xc@xPCb7oJD@EZ)Bj2i420|u_oS;my>lAC%8JAv_38{5>oj zY|Ywl1gX&Ueowwc+GWX1=?=M z?l=KMxiIHwjBSTmHv)qN$NX%wa&_TPgHa)8s+_G2DcU}B{RT$W^--BGL(uV#hO1D; zZbenshi%%vb=MI^hfH_DnzqOA_bd|%6>f$Q5eP0gk|Q-}vaE4NKU$as7?POY%i}Zs z;4WeS+LH?8?`8m9be5erT+`~U`3n8JtQmXpHr^SRCe=>gz4t^)fe8T`H$2K&*gCBK z!1Ad`5%G!t=RWYz zBA?_#K338|l#`x{uJU`dTTj}>taw=svHZ_vM(2f@u-ow;yLlnP(`P3&=%8I}x5{xe zsUI9e*RW~%ys4B9%0IHS6bqXjNf<#nFg!IIJX2F@0XoVDofbW)x}1q586x#N>X0Tx z90@H5h!o0d*z%2pQNh`n8QzK984g3hsjNN?2u3#ohr1W|nT6gBCE1+ieYVf^A;pST zp0%oUh7}+S=dhwHxl(xAx-^?aUEYf6XPi8)wRRF|Y&*~C2Px-yX_gEUa+0h%nOI3z z8mi7#M7&Wo+xz{C&)Ybr4+xBbZ(lsC&&47iD7zsj(}I+McNwDkJn&PoAizE&F8CjcktgTOkWYC&y^r>!Itt5o6RPcewmDbhloCN%L>WJc1=06N>ND38 zc~q*EVw_P|L^XBnFtaQs?WIcYr+jbUVacjwDL0YaYDx0!)nK}`s)k`QdG+W_D8r^2 zjbkhCc^*dOWU4q!wMp`g>gj)WEJ~UN zhc-ZisatjJ)5&HvygENXj5exXy4TA{J=Y7o`qwDW7TX$XFmhsvC1u&x6BV#HX|l{Y z+J&~M2uE|}n5x(k&Hzq5d1+@GimeaNVrkGb!<-i7Q#Go_QM#4GH2tjOqJ*ki0n|g#=`8(~^=G9hv{NyjOo9kDB9f{HX z*Tm936o<7^ZIGsB@8`OVz=Rz=mMj$^PrNMS)(UmVj*VvE{hFYG(1S;e=w7^eN9n&Z zItfu{Ji5B|U7A|P7btJi$Y}PYTDJ(2C5()sLcSx&A>dZ4Q0wudG&s(xWMhMv#CzLy|Bz^UL(fb&l6Lj zw{5$@;hftiR$Wl1ms;BJ`*6hJZETwi4(C7nE)Y;&H3TnCp zo4)I5!ADlq6IgC&)lL}Nnpv0XzafZcQn0L~{o%{(6Cl_UIw=G1^{{B1S2{zQGuSj& zgOnNNZhR#Egi-eUd!yq$4*tx=fHABNW-2*j* zpm^=$*!6Ib^(ZQ8B-h0%@xeM6uBAhak9-Q~#9uhKuc6A_zsVKK9+{(}} z`x8AgAG6xS0Qa@1plvVDEUQ%s9ItHg`Mao??5IENsC*AQj_J@7x0raYnDl5%gcUvB zuJHAgs1fXt^p}_-TBA%Z*A9|cBp1_KOs}G@xVkQF53(4)ZV%miKem;)POo^0an$1j zDL#p?B;5c^uc$7bgmEf?-Y%Iw9h5BJSRXF43$27@tOSdZ7}Yf;{?%|QY>rl{g#GpS zQzI_Q(`e1T2yT(c-u+LY_}56`__bB=uMsZu>)vjxZg%BgKY`+h6am?sM3SgqTSEP- zBBH){lEK%lk5iqv+(i3GQU0?nO3g8IKI6f;lR>)Go@nC$QIKIU<$=c%$pqO66IW6S zXrL08YAi4urR3rST`4!T8YW!OH=9853rUR8VXy2m4P&XixUmP{{S5n0r@(=XVAf|x+OcVX$e(Xo~0sr1TRu=iY*J*GOhs2+WJ?U2A+}~}HHrKA z5=gRzaDdUfaOJjjg-2A;@o9+0z+&Nu(0QeqRBPn`hpyt&c%=B+`HD(Fah}|0(Br1V zlZUbMtle{D-jczZnRs7lc{{l8+T0gk^HN3f4dhB56=bCf%{K!MYPwIcVv3xm}1 zqHIu^MZhqU^J}uGQK-M(t{1FQ7v9MtPZQ^^TTw@p7|)*+!10l_{=`5W;M`0CWoQ=U zI!X}LOn}cRK3gjG-vg;z1?7z>z_HM(lMoB7D5BvbJk*vdj-QN zjV!yCMZ``)`}Kml@Q+M);NmNr{8{Wj7-$q;AUTIw2VQ<@B_)Yl-eyvUw5x;PO#T#` z1xl3Cz+Sp^5uk=&fhbWpmKGhsc_G6gPLHnRRSU7ujClc z|9#IKPo3a~Uu}P2V#^c6I#KQp;?hD^7PeCjVPitJlrCJENX*ODm%J$xv%@x!v#Rb(%QJquu zL6;-gqg5#*yJky1>6IM2D34_84*_2QNa}59eyZE^tMZW2`yP!%f6r%%CA;I(-fYTc z(p6&V6d%B8U4Rv&z;!oyqpG&e`s!&>>okG6Z5gx$UREt+ng#mBQ9K=|Ot5JDJJt%d zlO`-uuaU$;tc)&t<_NCJ>5U!Sm#pE8lPg1?M`91j&SE(cTdvwuk(!&2{>YbfQHHzG zo}wda%3N)zf=i{}$r1`wfKR^BRH@A?@%2WTbln+x0+J%>*)QE`Y}uil(UJDc%4`B6 zm% zVH;VCh!j}x)?U`8LoU>R)ObyHSR>#YSXp}(Pc;DX>FkGn;C+o=@dZVzT;R+Uc%*~} z<|%;>^#9uA_S4RAjX?N~(BzHK^^Gv>jWGRe#u5VfccZrJNAq9PA7-FFd(Ctg73GUuX7YQ@{N2b(10q<+=c}8S338McKwz$)bf1m=>2E@ zi0!lM`HOn^np?)3Tjif>cV`Z@%&C>PZl1{5x(RWeRCMDE6Dpaj%%8|^n+089-0E4l z+go_JTi7+7GWwRk){z_D2rs}-5$(gUFla1xp9Gqoy8O%XV6Y5f5IUQk@|q`u@Wlxv z$2H_-v4~LzIP04z*_6>}@?lDa@-&Ak#K%D29vBr)M$8nsu?`9_a z`!j2nJ*r2u^R9f#vL7vK6*AYD#u1qwewOiKNp7pS-Wj*?lpbAvto~_Lh;V8D4qwb6 zBA-XsFshZWua`z(DWrDvFU2}C`hs|VXP}WbMRBh-eYo!QvPM8T6T^nwgjk>5id4oX zO4mkMCJj*>lXIDFJQ!VcV1CEwrqIl$dHA_DG*m+r00 zpur%WPzAA@^&Qb0NRd0@Py~O_%ro=?Ck)KO9nS}>g@^s+hlzB@-9aY;#7DX=h+VoP;Q>l~U`?TE8xq(xnWGtNU>Ekc|#99QE6NA0`k_OAc%nmB(9ObJ&L zXkSPe`wb@?ku6^0=Pk_*pe!cbUA>;I5j~tJ~BCX4#n!;#Q4BH+!2&!~Hi0@-lG6Zy(BHKHK_)2`t((J$i-dd4%Qz{|&V_K zX~I4^!z()hMOwzIu!AAT!9MryIO&zc1M!0{|0*BR6?6gG3{i83S3lO_t$e^+l#UO>R-V%baEFZ*Ue z$5Cgm1_htS-#)_$5B(7z0}Joazhg=#KAYoShtDoXCZZ}|O}jkbb!>bmG7csc?xqH! zrZY55>OZ43KIa9$5dpqAP~RyW@UsJD$-ll^H+{DWPbw3N0p5Tu&N%J{zXQy_ zJCNVIcizhi3M+ShC$GMJAF%6?D1*Ozh7A6(OFbM6_@4+%oc$U{Jv1ny=boGR_f`IH zf8CLqv2MBlYtQ2Am@?p%(~eLuU{MbF@u_4pAmEG8mJHx@00IRG0*OLrd0z<1W`RLq zd45kk8i@j4EM)mWG9HV=>3n_uKsuR-`|~2UdL)}prO{}%y?7*_&1A7yuC@9rBn~Mt zzUvw(VThbhLQiwNFcD`J|gXl#k`gjxLL4-XJ40#4F`{ww&Q~?vfYJa_1iq)M=sZwwI zZaqJfuEckH{r*>JuJ~6913qVn=87|Gjs49B`}JnC1tA{l6UXgtx5wYxn@^9$AQTQH zM*AYdHD$inr4&In^HArRnF9z9RT1bj^h!b4GJAP(+^N^OOcW0fb=glFxJo8j zTU$LS$2*(6oW5#{qN)_)ow`~hd^)+js{7-zw5FTex~k28imJA2nyN;+?h*#2egLM2 zxPkhehpu@FL5og$g65O1m6F9Lxn)V)=O&1AU6sCl&pT&7n#1XnzUxHb^-%6lb`L`j z$I)g=_sujfquFMdJ7wSdWlfgWYjZo}AaH|u>Hr9?Z=((sQYX_0Jnz^2@B;}S^O&og zCG9x2O)v8VzK`uyl^OfbJA*vOmt~r|W)^jZzUK>)WtO?2)>-I(O4|@Xh(L65KWw!A zf7xil|9@#4WI@t#StueQg$<~()M=S4AH_mwI#;Ttd@hH}<#Knbr9vU!T(TbQ-mxqm zmL2Zv|IyZ_8HIxJt6Hm8i4JF08~!gFjk;jEsGWEsMb3_t$tBuhABTdiNC37t0=7L6 z2ntIe+sP!tY6}TbcxcL?7vY|kYYQtBd^nTIYO_DvRSZ@P?l8H=)e$r_ou^WxKiB=N z3d1Ji18yY}9N#Xjd$m8;({UGJ;u?sd87Lx~?MjPu?DN&}_iV8Q)t%)_IJ}cPg|XpY zt^4)vVB{5GO5|&}amv${^Ge&__xXBHN`b`y#GsNSfOZzY@T0B0M~B zs3fw1K@tO2W2fsl2t`wW)9?p*A0!CvFx$)vBMPTFQUIx?OoyKK;yQ|^Yu{YLYC`Tf z6oHL3G691)j{Flh$z6oy%>Y4toCrC@g+w5PqDq>8fPZitffr>;lBBABVH~ke{tg7n zVf;h}ivM0&oMxKNeHb)~J^C}I;_pg=I?bX!%YBHl(i7I*J}#A@-j_Nn2o#Cf%+zVl zTFJ*mr%E&n;<&W5VYbFvR*3XoH*!lbueLJMl-ML!Nh>egEH6!uRtNdDUbz_Oc438F z;-3wmxvEtTqS&sMvc6ENM52ZXtZ#*&t(C)u1G`R#7UoWA9^B%&ZdoLO%+3?9k4`B< z5%08Y-F44dDl>byL<-09{$Zoxi4AMT4a+lbgvbj&t6X5=Lg~AMi=wKs*+9sVyH3|> z_4{6rY}Uig8?RJ)2J2vNdheKR8a2y>)zL@(n7`czfGF^(g8|#_I3$68ekQh0LgbVL zqxj&h`Lm_!(&x)h)hb4eRr3*#GsuLoI@WIU5r}zO%3d|```DOHhqm#tu9Q9Y7OqIW zx&|$UE8*j;mx{<1Evnr;xj5jS(~)c%{Xr`+w-l_a+CY~`d{Lfji%VaH8jF0~q1y)V zb4pShOL1(-@LRndMpD+l9mR6qc6K5kZodBJhfh2;*N*AE8}{lt{?XR{hm9`H5a3ac zBAH`3;k%G)P{nL@9l37Z_`huQ=WXwfJWws#p`B5FtpRMvWTp;y_9bW3fvA&X8qxRD zs)ob&^YWhu4CPIaJO1Z#>ifcB`VT!{iOuYVtw;GRpfN9}I6$@2ydaQ}$%BcQpgP^N zR?__l?{7JjpHrS)ATQY@xPR6rc+rc9f-kI6Us&gZkoH96dJoAlsU(Bhkr#ngRyte8 zZUqF9j1=)!h7Cu?C4*T&5F5QfV)GSW#R1w`Kewt@`0J5HkD5Vl%!q!$bsF$F&h!={p>e{M-GSjd~4 z2D(gab*Yxvl@AG_B=wi(I7(1|)rpP3RD&yhQ&LfqDyvdgCLBtO@A!2j1^Dw=Iaoy2 zfUeqnXe1>Lm~-}&bHO)<*Bp8kO%4vQ(UN%CKxsoM`mgs>orLEwCJ|{0>YKXeWc7x>1cPl8{DYW@F9NvT?&~RI4G*vvw$Ws!@_x zW_a2OE6CJ^yrHPNUppH~e(Z%2g;&i}Wt(94ES<>P`MN&9DNzXS=2SHssx~T_#Tf?4 zfQK21Z^Kxn{du)6d7m9)%0CvUcxhSMgjDXGiK4!|s*1DgY5PqUxeLHo_p3W6e>|GJ zO>|E=>WL-^ijSlC0p@xl5@x^6JWcy1bWz7g+~D}&v4PmePTM+r8TaVb{#hK!&OlW| zzxk|O#QT&ra5)wUBSv}=j~wbJPSnH|!#uvUmsI&n z?o#>AQh+~jg{kXj+t_m&CLl)X0^Vn_s_oUw`u_9w7{1c~{MhK#j{&jvW0LRDW)=EY zD-$MRAQl8OtWTCwx6BB#*7@AtoNsS$`o{1k;N|h4zi`gltH(jrt~u39Z%KMfC%bf* zPc+YI8pvz&YWA4UD_6yZ&$G(fObcS2T?dW&wDyL*^h8X2?A-AwfI|*T+S1|_O^hBU zt#=IeT!(LhkH^+*Lj6rC;!z8kd8I%A83znVFhsFc|p zl1z+sLOdh1g|Q@czfukMZtJ)N{wrLF!@hxj+fH@edfX~tOR)PFnF;JNJxByOVNbVC zN>ou7O0AX$?E)$&2`{}RRS5J{_%!}HF72jEt zYDwLMSrX=S&M$At?%YenaoPB-a0lHIH-pcD(*o0qzHE5=VDf4Y!>Q3jkzb^pdx*yAmq0Pt39( zuetHTYT#v=Z~vh`@}%F%qt3Yt7pjuDRe2CDmyp6QFN8`n;z@dA5Ocj0#f%OnEGqSw zF;q-*Z6qU{tZ z14)Shw6Kp9^lT0ZRbgLxcLHlbveV74Fmz^Y9Tg-?a;$t;ByTRKY_7)}WYb9ZsGVB*QxK}%{U5v&1ERF5ZutxcrWQEgJu1WeKths^{;`+Xb;FKt;DH2qoK$R_wuO>31A`fsR0jIT8n-k7A$!M%CB)%+s;CEXws4T83Y^C&I z#S8Zkbr&-y}hnNsEEu;m0-Mb~hlcNvnM*%Zn? z7_r=*oxQ2iuax#Pu$;kkfz+g8p?1JSX6(N};(JCrA<4~N&$Ld-%vj2huN0IsPaVPL z%wWqdh|(OEmR!Xpy(-kme5pjvN939b2uQ_H`*8ahs@;?Pixu z_vlx$Q1+L$7)3kIQ zSWhD^MBU%%Fd~`ac%N1hqgWkdHJ>XoG(`fww>-tAS}Ga&sp^)n&)Ue(BIlV3am|kJ z$+QI5>gyzT{RpluY~epRSe=!P{5@Hra>^HdUpJ!=6rKoWAAHMoEwUHJ?6x9dVAdZlfJHgJv66pDr$5EW(|p+UOp5+-@z= zzBTO@+8la!VMpoVzL!t3ZBmoN^7>wz+WRil@T>O2CD(e@20!k|ejl>-sE&79QMg!N z6P>PZ?y_8)p4kTGM2u0GlMQ$rWKYU5;@^tNhPURslP2313c6=nuRWtandim~Yi`Z*v<_?Vvr#($SmO#o z>Y`x{{%}p+y5qvdC0tqKo6&;_s~uW!(mK~_wLX&@>=?~4C1y^B6x3z&G~Eh#B+g!? z(lC<%6E#w&>iF{!GpphFa+J!-E)DHTlFHf6xe)FmXnXT7 zEmqGtIU(6DpNxnD8M>|B=|?^$oa-1HoxWt-4vqC$s#w8`-VQqOV8z3k zo6C?!jak9g2@B>0Se1q2nMoPzF~q(ph8a9jwSgDf_-$BT@EeBP?lx|~(rDeemNQFT z$;{mS*8l>&VglK8hwS7s-<;^7{8wS*MPVl6~tmI?=;$iP0ZeE?<-t(K=De-TOn0T(LL=ZZ!Z>7?^@a^nd!_* z1>Qm~`Fi49d9oa3YF^C-Uqw(KU5Fjph1#U?%+yY0Qo2c-Ab!@wo$*&!Pp>>bWwvg;CD{_}6)D1E~?Jjj3nMbcqNBcT+ z+;)H6HVt);ZQhPx9)5)DuHr$C;MW$E<8GN5OVGn~we3)Ssn#r3k+N(B1wTPy+^#jq zgfXowDWBD%9fsMBvp4>r!^S=fP4jkK00GFNZ_@AIb)IiI;dQKwGQJZPat8ppy)>77 z)w=N{&h>DY-_18$u=XY^vL!_eDz0bH@`;#b4!p*KzIVHg#JpJLA~F* zhTCjwjI8YZ1f^;8_7?VwI=2^SbwGyl17t4BdEe)<^~3jZC!KmHDc>DL8(p^lE(DDz zS7YZbU$;KLhz=$B166+LfFtdgek0~{6a=cj?uIJz=XZLuUw!ko6ARGwv>pTrn!^&I z@#=Z@1Og<=6cC4*@zZ-A~bMo5(wkRb4|4r<$UTLS*wyU@_&nOtq^Qf&y zhTo^*`)9)W=S&4BP}Vz0Q@10XDP2u7kFUt7m6yxrgQ>Td@BYO{u38r#9?ER zy7$ojqBtPWVuZ7SF1773&*shBGYBuO_3i42?OOaho_~{R>O8oiPQLY@M(x?00-hAh zw)OA&BmX^`&0p%I4CeaDL*GhbcFjn4EWy&Bsq}492BgveUO>f*bR8ZT`j27YX-RXdvAts}df7So6(Iu!E|IyZJsT2a|aJ$_eOS#Mjv(g*E@J%5b zFXV}G^C(5Hp2j8q62(YWR5D6Pp-2@fJv_Du3FRq-Q7t5^l&`{9;o;vFy_qPNKY@wm z-MH0D5`4HliP3OaD5m(dul)?XFf0+{J&KxcCfaP2u9m1B3+XAnf?J_sjidT$k%05C6!pEom{5~H zs#h~mgWqX4iT4EZ1U4K|#n|rTkA>zVXfbK5C-e)clN;{!os$Jd26>>MTquDH zO7OM>B8GRtvzlRS!~Frq^Eyt`XFodo04Vd%1)FmHmb(3uTJWEiOvk0AF^A~ z;{f^1$Ig?mTm@|vS}L!FDyk{{&=`O2cJCa`u-FYg>Fn4cS#Mm8wNLyu$q?g=lPl|L zeeG$42-Ip`savjFw+;lw2KJs&+D`N$vTNUFr;N2Q0U?vY*#A>FQ znnAPYiRge#(3NJ3v}gfE#Wmt?&S%*^J)7j|#IBqsbB1VjeT7RUE{mu);45HY{`L&N z)d^*&0yAxfM`qeCZoDZ^|M}BvDmc7hF?ZmFJM~4+n_oIjl4kfiPt#`f3USj9;PoY$ z$Kf!|0wKMVVCBE0s&t9h;8;`&uYI{~8WGYimm3H0*$#al?Oe$E z5aCA-V6!7vqkVgk^)N(xUYaP#y+yj***vcic`JU(CKzy5K9{=*3) zg)S~7!?q>5=XnE^@A5Y?qN!rP_O6qgcE!3~f9U=ecpLuAoe4$BHd1KLsCkvLqo6({ zf{QpA>FPv^^a&as7n@8*Ij4>Q#g^`#7w0mEXO2|n%P8;#LSI-bjm+Xv-H7K((;q{U z8Gs?ezIha+PG{5li{E+*1^O~;r zKAL9GOE$7?MV{k|LgNy#mQ^$@!ghcjGIfhc_X8sykK~>(_+Vjdmp%RM4;Dgu+MFei ztn5MMIVl1#Lrm|$E1xRo9{<=o&jArJ!}f?AbZ(kW+dC%X&El4)k$6mB3$0-JPT{nb zU&*_xJ)@v?9rh2W%{;xv9!7Cj^t@#)oYk=u&LCOv=V2*kP|_8x6YWQ}cPV9}HB72CFLJE_>VZQHhO+qP|1>^xI%_wGLCnE9}O z$GYxwy~+D$qN+J0#>+l%il&q%YA~)4%HEAFTtz<>)W z)~6Yw!Wv3oip8xa<**}NDx6SGy{;#fa`fb5#dy*eD=-x>F|H}z{92H4Y^hQ#f$}{y znGTUlsWc^x(NWhDOcNTe-BYm=A9`OaAwo@pXgSyG!%(hPLaqHVK9OeElA}|c2P8o_ zr-rzitoC?5mUmk(OLADP_6JVZ1(Me2)nFpcLc><9zFTtZYOVNA)|ny$-{>cGHrPh8 z22w4ab1-{Rr~IfW_-Gcf$ZoD(KcUvQ+)UZofoq>0vUb`9S0mY=i=T3}>CWfS#d}hh zZW5*W1^blP#}(@)&Wh4+lNK8dluCt%u$3O-)lK4t>pEwm_WVA^a@Shcax_%>#s99$ zyI|Q%`cft%qyp_d2@ za0rY_+<_+Q;C;svzqMjt+FB2qN2I}7w)SZPF4d35I3L=hPcyVO2m^92$LHOb_m%(~ zl;_CfFr!(*mtp@HwwHi7vt|87Dwuw8A^cF)G(It~Po|;kPWXXVV6=W^z)lj?6 z{X*bXTA6w~k<_Q_WU1P6a0Iko-^lx%POMZREqaOpG5uD#scW0)u)LV`L$+z^O!JL+ z`SA_?Mq;bQ?&{7wQr<#n5E;Au)_Oeh@zxrO@tV9rqg~2sR)@)qJ)lzacrjaLdh4KQ zZxFAy$qjnDvxf0?h}PGEZV^^AKG13AFvcN1jHhuH|7=Xu*D<-xk&O@RtxfsIG2Kgi z&YqJV9|%jH2IdulSIg{NL*zDM#H$o>d1n&!wDOv-SS`lWLL3i9BDI z>baClPBu56I6vD-J3sa(kp-SnR`<4WCB8;Hg9sDOA9s@?zKL) zx_#aH`FVIsiS;9EA#Zk4ukHfOyxRaESd;J&2+I6UYZ!a()ADY>D5c@s8C<8nE8g5` zbKVy=F;7ciQMZ^OTXl-k4b544FYssZ$7M_>Mj=}aP^X;#Yzcsud*71tY-3VHvOcK? zGX(Tdsm)ygzM=CZj8ZugzcvS=MW2^1_lwEfBlO>kNNMm#Tcd5^9S>8;!nc@9N zyQt$~mD9dm`rV439~Bjy5_J8d>B}yft1vp*5I@K@Uv?Bv-UKWPW00k0_lrW~NFk45 zLmx=B07POv@kIQ22UI!*p5SDiv;!5MLF{^y07^G0mI1#MHqamw=ynm8*k%+kk03Tn za-M!46f%}+B|>#ObAkkId6gjHHC&(-2@-HDNPG-GBP=c$%~|Hazq=Na^`OuJ=|Mhl z&_*Ug)PTAs2`o1Xbg~em_3w+%e3D2=(@LP%Ai-6n9snq=Fh?{J)l-#-fLjQ9_YcPzk0GJ3ZXmeUUGQ84|zyQ4C11`M|)RVS|>{AAB zanVbcFwbRs5K?>6IqD;IxU7t5p1UykX8mY~2!x1mSzuMel!&T|sP-3*TEuXuaQ5$q zMr~NJF$!S_@gooOumGxQT(=`J`k}G#Y+ev8PJNtMh_^8{ ziz?!#v4zL+IOFa>3hd{FX2L~`x_tqE9)dF~NlI@?Cl;VZW1%u@hAHq^i)dR=-lP$@G-yA_Wpq&&MH`15L}!hRqA?Y0Bkq|LzNxE0mBCXO@CZ5ZvgVjUS5UQSm=~ns6$H zG2cx3Ydt$2IK9IS-=+jLxs*X)E%!>p3qd0bR+IH0q+r0EIV(c|HV&&j2uo(1M@v+& z`k2>OO{qq$FufK3E;D`Xp-|R=1A*rMVqJ209?%~k?MKtDz@mt@(HeR`k5B?VG46j0 z+lPXt2t6+kelc;B4~Nkr_7|k06Koc>MR8174p(#*3oBvK+P`Ol9SRZn9CG%%d7QC4 zQBnlTSQ?5_8Rg1Ysl`d@L`HhXA06;9Jb(X%Lkc`jmokh01{?D!IPnzD_r%TI(v`oD z)ErFq^e!X5ptM_o6zVR`D#Ca4rdV?cS<%JEsk6xU%!a`NU)msTCM0Hx4O+rjj0Y>t zRI)6^%38u0`@zFS(2_aK0$T6^O|dh&ILRk=AU#E(>X^Yfc1?~vtXe`X`(55utAYsH zj!qU#hqSK}Du_89%J1zz~IhVIqYT;k1ldRkfjatjX}Lj`q3f^tP$$%g*2sTJ~0zCk|30 zuv}Z~6b$px2#?W-@KGqdUjcNz$)SI%`?I2+IjH1O0^z}~=LoN17;5xH0RNKEOwrX$ zwb4wo(cB>xHk?X3E>^i~LZ$8iTBnjfa+Y$qp$nnaOwgrkEmvJ4*uW(LYMR&J#NAAl z0D`ZmtlCh!Rl+mbER=3mFYXa2^Pxu()vSlpZot!SObKcV;?KXe^pkiW<^vuTjm9s4m7U0P2U+8NkySq}71{LM`Im?13w1*M+kV9-bqBLw4xYJ&p0ThGj?7NX3D(_h!#L+%v6@z#g*)sLLnIZ@RQO;AJS5iw=nh&Ixf zjl{ao)(Bfsev;j@z|%(<)G<|^C_3Dq6*7>V%;Mzv<4-6A10jpqT6&?=S8uchwD zKLDT!KKrES>GBSA85F)7FfsK(V;@G+9vV9uu78*0hs^grYm=*CQQ#MB#q3aZCI)ls z9oZ=THZ>&PFa*e68q%vB!mDwk&2q5YYJqIDGa4F=WE}}@j47?i)QTRlz#k%y?$Q5{ zz1YgPv}Ctn=n_;)3)cHb5!87(4Q{k<>&u(3!col09VZ z&t;st{2(h)sdD2Rn+Bh`&z^CyQMmP*`TU%fIq#~En)&0`aoCQtUYTCxw1|m6 zo}3NS?KOE>S6ly{$hDp-Jwv~?&UR1@;glWyVL>*@>wU?2g&EDIv*Gv5V40EI*}d7x z-3Roz>i=_UcjZ!kCTtFFZ*)m*w%C?Ded+%5?wxr0taqRyqW>cFc0A!qZgTB3+_;&vouobbcr`p?RS33ckI}k2Ah77wV6gxs##7{bc zH+a!+d?SFE_)jR`5Wd})Zxx7mJE(d!WLtmv>Mg`v#9nPD7=PCXT@Q5IH4KK??Q9E_ zTQrWNoC(5yO-m^zSnR}|b zvwynX9iLq%f}JC`t+P17jga^@JN=WCU#B#JeG9%xVfvHAuldvEdkPh2 z;;?h>A7@-Uv~S~Qlw=11zmuW~#s6k&_12OsfL#sgT_^s+8p*%>DSOZXI4&k!q}f`S zyIEM|xu%%DR8c>el1KA~6e#Su-X38r)d;{bAtC0tcu_Myu87(m9Fyz$&q@bed2`rc0JKJ+`ebFT@!~^&=xy_6{`TaQ_nxJ< zsR4M;BlvXreoXsm6|;Y*cE2sFf6tityo$W3{_)wMmuRe3)#rO{_s1&Lm+;H&4&eJ2!SDXJ-vhnh zBRk-K(Oozo8X4f&{|!rV{_kNa1o3(~VL>o50)?!S0K@+e-KG4i839db4umPCLa7+n2-!cub_?DBhH0ignW@bMh!Bifici^t3V zMt6Bt+j-Ajj+=(UQK%t;?a!I}z300h z{-L|!yqI4KAT9qvcdzu`Xeb2HNMVQYe?G_sfvD1N^=7*}9(yp-zvTqFJ)cd-u=w|8 zd%9k;(#x~~zx{kZULVhws{G20?LmR1#;59fH_tvPq%ZnCOvoMLlCVJ0I zM4_D!NRBoZJNXxudh9a??L1?pVS7vzrK6_*3ro*p3JgJONJme_ZG9=oG@K!*&TYS+ z|7m0_lpBW8LI1*13&Fz*a=A#Mw;}-op2~|-zmNz@!|+=b3x9A}XUekjQmIrRu^3b; zAtGJ?elxLFl8g*{U^PpD9y*R-2p8aX*!OhCTQA! z#`5l)Q+wL*ajGU*v~lSt6=~P)gb2J&ReFXUvZ?1;G4M!d4LjNpYa02UOI)D!E2$U6 z)Mtnnl~>Aggr$|hOAxSLjtU&CE2L3gs%=7vq!3M>Dl(Y_X%ag#b2D@en=ZhQLy zG~AR!Yu0lxw;o)sO1D-*i`gyGk0*dU`D|dozwVSMXr?u_WiXqOvuhTYT_UCO(k< zOAppWBY^CtZ)(w>PVNQmQ@d&D(D_)6}PPvhvakK+}=67 zI#vfLvf%#E!FCp~=Lj&|$lVr7vzb^H#PBWeSma72y!iXm#e?Gj0u%V+m_43oYy^fP z!N#SW!YVQzBtv;m*V2NKYC~o}(&_kle=k1aGO|}UgW?Y%l6y#dagp&ZoyoL)awywasM$LJgUpSv33CR&FI6kbszHk?`UDXlKfoL3hbDvx<<2~I872B!8d7wX}Z>bBEx5r&!&x?3)# z4#pM!u8gS@T~fm!xQ(?+1(cNm-fNcUFm^X0neo3wUtLOaY#lbT7;qUNs}yOC!XPU~ zULkF13cBlp$+L$MYpOMWLZBDiOSE$s;zhS+l2Z`Hzfl(TA`8(rhNE(4rwC8M zXtGyy=}7rSLn1j=fLum9nsq$3a0_wz#{A$lSg4x(XVCpE!Tmg+eV7<6 z1<-`M&y>qv{R!NC7#EcSS6!Xi5TDXGm>aAxD7?H$m3hs48!!S{%o$@?3`r#dHbMe_ zv!dYC>t$lNA1ru%s0WE@Fl#Hz*(`Flg1cddakPmm-iG=+wz~dy57y9N;x|VHUX{)# zQjb2t|5YBy%4mN`9=t^sq}d*d&dg|BCd@^|#U5apHL77Z?r)9BVt_*8O+o3Qp>#I@ zJ03(NG!O)pLK9)C^FS8huE7ZaB%}J*vr>l&i}(9N8#wunyB$C9H45T~n2D5#pimaF za1(`b6a=)8sl}@Ye~%$nDT;7q>}9X&;-t4Q#dvxKIJ6&4zSnTAQVXs4g}JROAUoZG6L@Q4!POD&@=lj4%G=~;5Hr-Mre zwZzi1;9OwJfD7V`rQ#t148+#W>4QsSBmxAY&Va$(P+2)chfpM^hjpD?V`(CgOqT;| zjN%kSkX6)@KEsXWjYD#t<$)6YnjBE|JJ1lIQu>myAu!EK!=m>`g1Q6L_nDLUoRR#~ z%(N<$5H<*g4ilolV!w&eYC;(C%2Tc05$z+q%A1)yp^#iUB&^2_Ln!q`TX<-dkZ+gJ ze_H_0#LEM#3M#r=P5?WJ9ecqzpDqTm*+lt3`f9IPUtvdp}* zLa9UMpZxSE7&RU;d1$aKRI7ru13O+q%#Aa^mpzMVqoT~X()7NN;iE!pGQaY&vJO49 zev%I-zM@XBtZxuUEj>ehB75(uD$9FveFd2zfNBL%e~*cfG?R+=dz$|7;o4zYfrOmJhPPAvF@qTrG1q=dA!yjBfRcZRZ=jW z5{6SAFdW{cm9=jq@Vg6-@XC@;tiC#-?wJIYJA+$6D1(PxVmKX<<8L~?72DfKJcV{s zO;g>+c%AH19YItj$3y85Ycm&&lhb{@{2(_gfuwGM`iM~Z9djk(VvxXGr%^jLa2^RB5RsbfuD4`}arN0YyVQdD@O=+t)>@W>o{kW!pJ4 zkuVbO7O7Obk-k+`Bd0qG6@Ba4@GNMR&5AQaLNeD z!U9^;76I6#G|pJrUkcmW$8-g1%37G(`m2^EiwFY!{1D{UjHpJNrmk+7&R*$cPn?bl zfER=6RGGAAa(tA*3{FzAm#YJJ4Vg=i2#k6_lz$sa{8^Rp)8g*DEu+^rWP#runX_MVLWUsJ_@M zlzGr-1Jyp95;w&VH5;vdKPgTb@M@fCe7x%c_fOw_n7CipzoD#!Z4@zKs|T&L2kIr+ zMm38j+eNFyb6YaYx4I;BqJ}te)0nin@GToTo`yySoJugw;j3$9kjhB6L)}-h$8j`X zO0dddDuG~y=d?#OyDKj@>fkqq0K+2-o&8+nJ?mtnu9>5#xZ-!^xjm%=@+O)0fUQb4 z>oyP`7q7_j=ZG=#u5r<-9{uaC%Sh1)j)}5I{rj|W7oL{j1T6!%q1pQ;0T`c%DFv|7Xq~QkWDw*s(ZV=jn%Z;>hAenZXXPiSdID zAKXz3igBs1YWNN*Mjf`bX2jyvX6xnXF@G!S*I`Pxh(fMs?aOWg-?OaOnXGm ztg@~}OizaC4H#GkZbp6eX8$p| zkj1Imj&K97sK!HiH~semvD)ocPr^yk zO$b}N@=2xF1m3A5)9J?elp>6-h3z8Up$I9yHTi6hUG1SNz-SxrUIXD&hoPNg?7Nzq zbLP}ru6XO{SG&Sni1*&SRGBjoMt2;cSO0QDBr-GcNw&4KdOTBb7BV~95prSTyU*53 z3n#p9JNP~ zk9Yo@b39BpB8E*NnkgLvJlM2)U83hu4tJKXcVkR^HZ0qC&AWyR>rg$5i%WMKd~j}N zt9#mew|6s!jm#U%d!u1{xORJ@xR`5SSEJ@!L3dE1<^dIzD*aWC7RCl|7eAC7Fx z^h~%~{&V|XvZuTI7he9Nz;r3MlGXfWyE)fjgIz2D@WiuiJJ~sVZ>-69hJ`e&dB2x+ z^QZUtMeXhdzKvi0BvkZ%_$EHRfP^UGTw3;KTK_Np9AYDsWWU@Q$jvpt_8}?uA%ksl zbn0A*?@9te7qJH9p7!qzF7kTlqrBX~%H;E#Z%5khgAo4{!rsY8#@r8%rBq+LYbK?Y z{PWZ2OK9CA0@NgRP(ze-%Wn3Ao}INwT|BAXt6SJ>0KnD(m1rmHO?sz)k#-mZWjrj# z&RD(yw0G2b?|DSeF2(L0cyNb$vB=2sDXZ?rvVlbYcLKJ&f_=ih=3Qh>=7;V^YMK|T z{?Coq@15$s9dXz<)4J2N-{mB5&vfor7$a#vfZN5%3$YifH`bYxhuv{XjL(?#OaHUO zoxATPgmaUZ4feX*zCQ6HZeXxBKF~Wtb}&Q^Y}luK!+pVEDjpWZ@xL3w;Yg%%#qMAS zBM^iPZ0@1)hvMBA9l;(vvu|Ap>~cLtj?5RV2jdxY||BbF;B z3d^IncX6YDb)xZ5y2rMCyU`i1r}?D{u+yvnRF*FY;hB+bgBRYp(21-YI4--vJrw$GZE@ z8AD|ZOHOnp0XIl7u@o~Y2WWrubMn4iK-K6+9MdWT&uwkG^&1`W)@G2M2r_Zv93QH3 zbsTUSmk7=9eJl(^&&jM8l3+zAC}kA{`O{y2Gd_2QfR^c`3(zObqM5;f=;J%qL*qxQ z3FNBo8xgdo<%c?Ot>}iPMkS*==`-9a#v$^#sPk}K*{uY@I%inNaiX|pNMhoO>A2#2 zuxO>p-lt~A`R@Ad2L+K&D}V(*kICkKE6e~hiURo(k96V0dGRd)K^P9Q1fgnrEJH@3 zj8hHq5E#-TC6o)=yogasig;?gAxRnWc2sf!7GU^_Ksl?Mk?4jD6_u$4I~)4f7j%7e z0@sSS^mGA-u(Ae4#dFeD_Jt*N?g4q|@RF2a{y zQieQ=2Ha(P`gHeA^7&$%$S|6E_VuVyU&OYS(Fd0N>dMLUVWFxCmP=Vj(o*$&+h_H$ zVnCEPLqw09g;k!kBfiswjvJoqM$?%tX->9vrsH56{oNvhG(yF?8Sf3Q%5Po{uA*aY zkXG+}U8-)fm_tJue`pao?#XmF>V%?kTK#4mL*>sbLhL1H2dr((~j7jz!`( zA9>14UWHW6)t|v1jDDa+TmL8F@lRw>TFg;}Q08I-I3tSONjMuLHj-;7Q+YZqNGvmShU#Nu;O_=r z1xI669juMg|EyGF=j-DJ{k|oV%pu(x5PDa`r zl$>Z1nE=*nSKRE9Lu{f3NlW^GjG>ZWLF43jAa&#l+%pUzkb-@q7!*}B|wZZJ@6vwQ0FA9BI6xmcL7YR0<|?Iy+Tk?w~PsMBh`xL#6pyb#E|{ zsHwG)*=nG$Vr^Y2Ce^f39LxpfO(M2>DyfuXJQP#ovXOQCXhVWH<_}>GfC=xh+D)AB+D$ifarW@8}wZ8R0{_=JHUyWc80Phd4rw<^U-JR!gkLx1!~meK z!rYkFr#;s)CJkzvc$yZxZP#6?kBJG;4^NbQI=bZ_ZsTu=^}^6XnI&8w?3)@h9Clu5El@XRAnF&IK+*HG zxjTX_JQl=jQWea4j*O}xc_mG8SB*7<$Tjn4Vzyi=-=mO=B(BHfpHtPG0u}MdyXFo} zNt+bk6-iiy36_3ZrhgzAT+gaEW0_R3S)*2Ex2DUYiX9PH;jRLZ6<3epF99C>a8q`3 zD9NYJJNV*wd{L#9>taKH+9DyOimxWK-J&JT8wSExi}@!|K>1bEs$TO#uHM_JGSe^QZrOdm((Rv zjzV^-<_7hX@QE)E^f6nb|E#Q+7&6l$rOP32=$ty#zV}&0tu|)KG12Myt9Rrs3U44g z)6V_bR@a@kJiA@NuzUW20NAB|e4E6YzDeKZlJ<;j(der$B%swX6r8-t4COYW?C6pz z!iXQGt$8qC*!qu|ONv6~Lla$m~;ynn%6QR4DAKY}KCC=u2%$XikjLq{6k+WH7|6!$*5 zCT=dlo4>lJ-o9=;xgO#8ui@IRKkexA&(7vXpOW|wwE1hX`_HC0w7S~lX_k~%K-}!q z(9OysytE_`PB8Q=&DAJ1gfX2iI4Rs_F|^b**zy^RPFd#6M3uudjNvtq`gf?yivKl< zC2*qOPFh5Anq1^~2$+z^+lYZj6SA$d(VSCJ?=Pj~eODv=hmeR8Me6Z+YZ7*sbexHr>*`IyX8jvb*m?$VGJPfRIF zUgXf&2q;f;(3mL+HEvUcbEJs3idebQGF1T_h8iC#CSINBL87Tqq%~c~HJP{unbeOR*?is{CEQGfRK0%(%NE z8iD(vsB&1U9g#k4X_9rC^$v!u(;B%{CbHkDi{+gsQDmxFWy;xlVhRZ(>Pdt+8;1f0 zM;jVW=qS3qnU*l3W(m6|XL+I@HbOwE(=1znbZ87tLLyok_w5SN>^wd1JcXV(hwvJk zJzETKTBZ_Aswz8MMw)WHIj7;U!Vq<)B_rp%zZx*jQVdfiy|FA)^)NQz%;n}GR`@kM zMAO`a9DO`Kd9)vQ^i_Jn+YJ;C>; z17*K}IU7AA!pXI3ST3+Uvf-G#CW9H@jPUBwf6FuZjyq(1pI=ELL&rF(ggahy-SSY- z!4Dn3crCCiHSdBg1OGe=t}^RaJ^s(+tD%-hkR4Uh9Bc35iZkpxe^)p-%5+Rr9AKG) z&}G_%j3cV5SpAyii5^?{$k%$8PN##>ZD8e!PRRaN&c%C2u-@o*PEOvKk03 zAql>ie;kv8t?@4`Rif1(&_OXP&IM41XhhGfkL|-~FQ~_2le`EmSoOdG3^ihSHIsEo zBW`9o=V>qhA~Y~>B&s z9}MI_fHvZ_pjBj}GjpPLeZTU@ak|oGjbbY?bVp}tX9d8yS+v15TD~MIwD^OK(Zj2| z8KT;Fv5oX=>GYN z>C!-*voL{Erc@BX3<9Z$NFUKTn*IZJoA*7F5v>zVaJ18#!F~A526{UV*1NyP*yI}m z3FZF>m@ZOC2FZV7RBu=x#We-omQ98*XTl^LlA#C3dJdG&0Glisbu~j1E*FZ5YCtx@ zPG<}IU-#Kzfcw&aW&*_jso%XL*9S>V=zEAnXqYpwGoFIbA>}_qQ=XwQqZVRFAG>Z` z)PbL%b#@Yqp?4^_y$GP!I}%DT{43Qc9V!3Wqg1bA#MXP%U~i;gRbm4C=T`;rqG}OT zs}2vHas2#IqbA!^!uBq&;ph?+t%&#mtFaXNGJ_m?UHGJd;QC z=`-YkxNQ_t?;l0m6XDa&nm0YfSxCRm6!}*1UMCY>U#MDPS=kpSD$l1>3}bkMPl@fOfQuS5I!x*w@aFG~t0sbGwS7kCAhZEznOae>l!f{A+=tY-S_Q zvyEWj&4hdXQBpFOix6A#)5J629+foQOplQ38BO#~O~>IDCYG^Cc6>^Yom`U~_}HvA z4j}K%{yw3$pcw;P<@SR347%^jYd_9L3xM57@u?=rXm@L1Gt8rU&0%LTNHI?|xwlvC zO`#dJxea&79drjpF9=+J`yHGg97ZJ=nEJI47g3pVk6K{Akj(iLLhM`Q-0S7pGB}I% zWyLem&=?fS?ISDXMeCf)8Fk8YniwZvFc)j7^F4b-BWdgrQu0Z6kJ!Nq7EK)W-trAU1>8RSjIh=jDjs?E)&N+d=OqqyH z*+>QIjo$+NGC45Mh^nUMAHn<{is__=NG#<0ITOCxDzKkH5}!iTdJv z!B;0v@{GA>ocH+=m3&;lu0k-5FQpclbZ*Y$@*zh7ed#T)^vX#>T{V6BNzrVXzcRWP zD_IiZ&j}fB8M@;LuZvHrh%$y<>6DA^-alXWSr20|XQ3y!6+>n&19JUl%fwc*>{*|E zRlx10!PpsyoR=C!4rew4KKF{Q@{z!AkO#xXG)>be$IvuIcafMO>O7S*55+X!g46R^ zR0Uy{gsT|pAH?}AIYx;2o8doUDZtG??T_Rt-x>@fPVS?I81J2H_*87}V{RT<4iccI z$*nVYPRG5?6zSN9v2 zbfwbhAzm^?MpPnN2lASx6pWozd1KX}_niHxjJwV__7|A7%ACEL@J0)L&jv;~&#G9p zLbuTl!h2itH-VnFm)Z9oW)%ulXzZF>5-XXiJ_`ot_h_@Vf%?OMyca%juNALW>@vk{ z?nG~w{Fc5Cbmz~)uum;wW(KVf(z^5gsvKy17jk@0M|x{;-Tt9E53JT) z=(&GMDZiLSpV!nLITQWwKU3Z_dwjEZUOp|Y3wC#l^4?HZ^{PHT^ zru09peI>{2o(p*?V-=rge;$`GoW0orgM397uOAdPfUP~MhcVChUyx>V5Xj!E`vil* z|AP51dwbZSaAa~N@AiCx{};MT1clF`aQ{E(?qbP68k5;1F7pG~Y&M7V;&lh&ykG#9 z8J9KC!kKgy*MHDmmLkbwr81?O$;F_RYCbHUo68g!mZv&41nF2*Bj&Uc%s*>iFL=laYP_1Iv*G3 z{mHy7o*A9ZhqLK?A;zOfj{T!ThA6L}o()dz)pmK*Wv%x6i}qrxif+lf(4^< zcL08WU}%nfjXTz~MQbps_I-aUTriLzq@S>z07!gt!ceSSjHFP!NO7GIblWq+i2p)& z18&9y!ig4BiJ}=_zzjg)C*6+>vRclGVtGH_h~vwkT8ZNXu{}uO#i=OKG~qek|Dn55 zoTSNcivNY~cAO-U(!86fbq8<)PE~oi1kf`$u#bVWY&zfnp}UPxAj}q<8_1c{=N;sE zJ|FL8xsbsB&|Pn6Es8>4qTth<7_JWr*(^ndf9S53CuJ$j_`L#Ly5~nl2^<_4RYfiz zWJQEV#Rz0&4P7UZ2@I}+N*U|0=Q8x)h2VZn2%sa3U-npanilMq+5?GgsBi_LJ7S-R45nZZ^L7g}4iMF&(8McvPr>T1?h zDOR?iOQuzKU0ViGbp47BICVYm8x*F4aCuMo#I2X$HTh@A(TSaq4gYwUrBIjpArLkk zrio0(D8(AeDjn)5=!H(e!X%?t_WUUJ1g?`iWPlFS94`uFgTyM=OQW0+waTL$>32)h z+>t}L{Sql?4aX#W&ktp`#exeo)zI`&>w0GuxpjmWKSs|I`JU(F)TiFN)|}H`!_%sIOa0peRUh&rtH<5PMQa-U>i8YG zSFhAX68_gAodq3$A5gVKe|WHd#`9$WZ+mdH_q`p~ul9{V`VutpfyvMft~Boi$1?${ z&C~^@ra3I>kjvwaVjEx(G?y0LEy}=;Jhd1#(;@gyd2kWMXKbK-I>^lv;06 z8Y9Xn&BaB46jeJZom0h>?!!ZBj?Tf7Tn1S^Qd9aU&nY9?uW=JTVU#{pGL{qdCSBem zAWxNpUqv3m#hg`{Hp^rj80W0t9*Kh41SCC@TogN%6u*?8K>ne#7@%L(f&hdnX=1PhFR#0A)-~N?cNrHYZq1vI+_-(R+O|{|)4tJ&0WvSfU zh^Ao_4Zf$oMWs&qY!juCL#^j^%tpV(uce%A|Y+`2c}8`ZY4SxlUn;Lx&TzG zAb{DlY71P}614Z5);@@O`v98VtBaS;CZS^cgsH7#)`!ly2xsU23=|-N=z(aY|7)O- z4GaVc07Ce`4-~*<71rkof+Gi$Q*j>G}6{@zC>3vRQQ*XQVX9^B}1|L=iZ&%*0M6nm9ADZ5unbZEMH2ory8~&-c2cyecM%CebLp`z1DhatONVzG33$hwm({+whHBGqW&i+l%omP+E2FsvKyBEmYu8A z*>bgkRv+j-oz)73Ce^u5qTJQy+=~@jlRVeieuLH-r;w-I{Wgo#nPYc?jAx^Gu{#(A z`o^N><&Utj@HezOyX&ibT}?Aq(<5vJEy**qGu!*eW{bYwa>qXl9Xjy8^7XFKYPIxk zP&QrJKp>X3b%91-GwfbyxZd&Bf92~!nYn6BUDurwyafm%+tdPiiV@m_Xk@NB47e_} zA<-x&F1Ws6P8d4#Xza}~d>KX;>w_=}?la0jn~d;PMLFR%N-$`_@}ty4G0{a6KC#st zD8p2nW9J_OC8p_69dp|mP9rw!RvFdf8d(hEs%qdBHfgscDMznn&u~ zYdXd94fynD#hQMWRL@MU)P(BOCTmW;&P5;Id z!*T=I9|Z?jB!$S^p-cJ?>?U+R`=3AkxpwJ>NnP!nwa`zF499&!s~TD;6hZ)9v0_N& zLkugMrjx34QI2NQ^HkXd+_1=GGk7p?dakR~)ek^Lo~wriRT-woMNJ)t$0d1J(uZXz z3?t?VALlNPJQ!C8?#SJWRL@_<@`sT-AF0 zc2PIV{9a3Ci1l`L9qXuZ-t~O#vla$kYNtVCp(+YJMpOH7KgHAQdp9ERB`D06?FL-6 z9n|Xz%k$4}v%d%TC#z}4-NK-pWQo4^N zxHWz!bA9G(F7}6jW-B@+f*3%RM2L%z&Z4Bz8y^J&GBXqIQiC6%!Gs<{23M_|xQvZz z4mhOX@8xa%J1r!Yriv6iEEYHPM6)n4PDTufK{ySU|B;EDu4`Yy5Vh7;(WjOcX}SrG zO0M7(i@*y05zaLmsub0A$tib9t%c>qH%q(=QJo#D#$i8|L6-wqLfz(Vub%HaD!pu%g1AU zDpKPPTT4^8sE6fG7g0i;sbuph=yNr?X?+xn!2)G4lj%#jvTPjPycfJkN=uFDtop_x z#<`VU0p)De&+)b#CGPA6&<+)ofn`fxwuvQD-H~u%k+a{XF93!{89IaT+KOy0RiXIu zatyzg%Q4K0hS-lxQnh8Y;U7($wbl&LAy$n_U~9dq8El=r+Evdv6Z}FDO$s{dhv?nw zXMv@Dr0+O0q0o7=4|XOD9hwoAO6gC8h_`|Y8|xtQnq&gPcv6a}+Rk(Hc*lxfMoRUf z#j*w~V=vEZzx0axPL?}LV_we1v!M(x`J|bS4&Eyc&?-B-`VNgC>a5h@xm)>nC$Z9F zr?LH;I+o`%o^+^q85KRg;w3~d!d1bF;UJi1-wKJD+tcr@~$4l1}KUdFs zTLf@F=HFzUX|HJ0swfv{@uX6#O%6$us^-GFPyerc-M9TKlv-3#hfttqi|?n5pSnKs z8o@lhY&9yp^)OD{@#?Cy?YAH6X9enZ8>Cr{ucgEy0=NPjr%y*wrW;py2Sekbxw>I8 zQ)2X)uj^+s9`wkF92Tza1Ls5hU_ zkPock?T7Gu9IQcdl`UoPMvYZ~$$_B%GV<~8VQY1Alg7PXeM~t}GG&ops`X9eF zj+;;^`#YE`yAAy+gP`nvb+_|#PSMyb)*?2XFC%F!@+s!QIWrs4P`=Hj#skC^b*#3J z{7iNnT2S!dUODj_{G;J^*ofb`*}6YQlz+zky%G}nTT_NW8oD)T8vlH48Yp&_bl`V5d&2;MlrKt47*)WV60 z&o^!d5iO6A2cult8Y(>xgeDIV-;Qm2>v5Qk!OvxQ>rKoI3#2S0y%JmX@7=r&79h$S zm0?~u=}7;`FM!Em2C605F#7XDnqiH3xU&F#yoc=7hvf+3t(95bJ;v`K7{!T&`Qq~{DLVIvo0WDl?})@4VZv3AfV+`Y7Ewr@Xuf1T*j29 zT;XBjHD8gK^M16LpOPm~1{N*BUg^o6yQ*R$pzU*SD)6)=2(pyu`O90Awm zh?EO5wWAe|ZSYRS!xK9dRYSM9209Oxh3J_vHV1{~FN81381@83u0fdSQUrJLk{-cA zkPq|2h=aAK`Zv(Zey$jodPIp+M2qnH`kH5l6@-v^=^Bx7#+-f>9J`p+;E3I{6ERhTp)&8~lyC)uCW5H-c4* zYvJM&cp)AE#27-WutwPZOmUQ13s8oPgOl}s9!eIINZmh8#?^~%E=gUxPj((lV$&j& zGR03RGfaPy)qag=3lFs)4-$RWkHAjnX;*Gj6V%OcRJPGf4oI!N^C#L*fZtOL9p`lN zN@x3(k(nVgbO$y|iS~+tuExa}FTQUbNl(iKZKcEozz_^iE;r9I9?u|d%i1(2>4uM~nNKT*BT_2@7qjNd z3q}jp{j&@TPAGqg={RMQKFyeU&F(UT=qdV@MS}*6!0YJGp%TmCxer~mz@r$8Y`Bj^ z0fy|#rS}xa{eVh4Z_hmq&BF4+Km+4CF3-9f!Ka1KbUT%El=av6E7#>33h9|SW<##j zn51wJ$M?bsPfuI~pEJ)_;7^Hx-b&#Lh<@?PE+^yKu}MwknAlJlxIyAUrym`KHaK3y+{+e_q zEJ3k$5yu@}9y5VTRe}K`9w}jPz8?Lbx)UNCI^hU7IY#cn;q=He{20qf2kVKly;ms= z{x~PlxqBf#uY+3LFl{tiL#oJ_ZalsV<3vJmMWLd+Jh?oVN@S>-H(tJbiRCLGG87!6 zE+;WESg;||u*2kqqLfj;G{oCJY(1ARQ?^&5!n`?bAHIO$a-Si-!h$~ z42^~Ic3XR6$-*-Dss$-$RML=Zxdf7SX4I1sWU6AfOrfmELZCMh0|B5lvibtscHP@e zS0cNR7w-}xdy+1*j>1VM7o3my)`>&<5iyl*3fw_LU|X%jcnR@Z?wLLjv4B4eTZJ=d zyz*zHG-G{UlbbU2WG$9ib!<4V^jJYqMg96fjCv6l{tE>^QjA)CJqJOgqKBJM$qCxVYaVY${t$OmeQ>T^=UN>CLhYY0G=? zIg{5~r!w0a2picuYh=p-%?u65;hnJ)W>`;6Zx!qX>v_v78Gj-Qjnm6VqFTK`3hnd} z8Jl)>vR@4&fwseY+=a>S0}7#kECV}CdB`lee;E{N@a0usbnN@Y;xcqzd3Rt<@bb5M zI(w=&Q=qwSbpBpT1~cqpVQAmm=*?)Uyee-$MZ|RtsLC~vfvf69x-8!AWS0`CM-b5M z4XVV-wpp_aO&dtfvinA8SVN2?>BtqyTpoyzR3Dg`L_yR~4;Ww|inmgzfVd=Z<&U{; zss66nJrmNhXcq@-%riJ1QMp$vlsO=NS^n0NL*p6Frbx=79>Il#CsM^8fLU)j*-2^G zv#-mj=i6maRrC79;w(FSLNH?5WhsbQJV7S)#E@Qr7%B!yx)s^0O4Iia66iOKcF<8D zI;8K2gB!Kz8oUtiu+$CQx)`E+&s`}WrsE$Hdn#t!Z5BcrNma~q+!$>?vIsCtg*K@N zO*WGS)gw!dJ0tZJFiy~?HV?gzfI|$HS52&TDAru|K~_#;CIMb1#%UQxr{U{pJ-g$h zTV#kBAXfT+nHA9o84z(zJ(^^zVRp?{P0fFFSaWyASB(;>^LPNJ+b#_|M|x+c36zyG)xX@{R#c%8Y}P`TS28E5Q&cj?`~oC>d>Jz*pf;hV=Y`Z~rIky^`& z23G{fU;90ZAne>)y2}TrpCf}yef?x1C(vM$*&Eo2Xp?A8iI_n2gLNL&4s$&@p*2CZ{AcuKxQXV^c?c~e2Vu(-5Q~A^$+P7)*1b9 z+lgS#>BUWQD%GnHQ7dPzpe46*7G?e={b``+@{;3c5R{$XE&uXg`nlOEusl0paTwTd z=^4cCC7o#j|8D%y=_R*r=3%dqNTp>Fp*kosrFO{%l1sU{P8M+iElpj(*+$cY>WDponR0 zFsCDrO+7aY3`%eVt7v9qnyH<5#>L2DV2eENYVIw1a~(9z=^%;Gr=RiBvKFhfe%?Q4 zZ!~-suwCM?K91arHnpy`wO9(|ynhwrQ~KI=-O%;fVhS7&_gqQo?(40d({`u6W7?t` zo7mb~f7;qs<`^#ITNResZct*I<6l_Z66pBc?Tgu36Cy>O+B>`2>WpDxcAE4+T5*Ie z&GBt4tY)Hq8>yJyrcqv$=G$M6$xTIQ7y7=F^vM~KOlBXjyxTs(_WMB2XqkO$poeLX zKX+G<`DiIwkX3!#!9vrwXeOGJgc_S`&Ca`uB} zjze+}sA4X}zhBTq?G#L&C)O-qke7GR8UF3;%;-7&F?BYRdm&c38#_>^P8~RdXb$o>visMeHiQ+p`nDigCOZ+}~9y zZgd4NmAmu4byjoT`FmG@;Izx}+;_`}hJPk^Z+}LHCgJ5g@cV5y+erkGxcRhhz%S>=wVJ#oT;Wz=KlP?24DNDw|!mdcfa=UdNgauMEH)H z-04`QB;a>IsbZ zy|`VY;N=}H%zdUBP~zLeCdn(P>b#!#ti=xKF9OV9N(S30y&umBOa8l?G_T$JV&{0P zpEv0(^Q<81cH)9h_aWd!i;dE|!D8WoKN3WZYFi4+D79-G;Gb*?}n2%W+OO!aP0DjJEZ zXSeQdI4A&*2Mv%;9snN(%j+qt#s(P-i3igrm@scC8%JWd?hD|MlF1Pad79F5J5?)| zOJVK?0M9f4Y9-1g`b+0pReH^iDVfQnV}(Qp5OaNQ)~gXz)20unffZlnK9OX`fQCKU zOg3nM5hB^)VxCx9A@=4o`Cd#YHj8C;;)U5*0+mW>6|hniCzx=^VH1r_ED}fH{gaXP zVK$oTIPuX~r@%HX^*Qod0Ou5Bg{#Q%;WuI0DuYubl*UZE`QluVlEPxO{c&y)(Tn(v zhB?*!AiK3pL{kj6|6++0=ai}3v`nu^q$u$pAej^fKr=wDqx;F=_wkx@bFw4C{t!3E zUmfsKA)wS2RFNb~i`K;pHGph^W@<)l_(Z}>GW!*-4WhDxs+Q}u0D6TTK~(d`NV!=}X8 zi7XQArlpPfIXABLnA}VzQtb<-h-n-1lL;Hs^-kFsUcf=dR3Y(im4H`+LrMF0^0pSuhkFw3Pzs`4pX1AWAp~8w)>T98TYeF<-~AJiy|Co%XrfX0 zejW0SbR!?80^$Oib=tAKjRpL7q^$x^B;idbs1)B`1ARgChvzKycnOS`01;FwD`6yb znkr63buT`Tk%W;(FUE1a1B|jA4B9B5_))o4NU5MW_w><>g}y-3luyKDs;ezT)PiJ< zT3LZjqWAL^*X< zJ_xb3_1-Qv@&^=%*&zRRx?9Y9wQrzC(kgTd?x_ATxqjL*%v2E_qF=ryYIpgotG+83 zV&GlV-qQtC@V<8zgv3b<6)h!>)p9}~Fo-0M<1Pxt4&?>*5qSB) zKkTny$={e?&E@KU19zm?R#3e`(?;*>GXG;tmm>*iOR-o}jY=p$1H%}QxJ#gg9oI7p9O0`AT=$R(sc96ZMj#?&ludIgJvd=aM{r(6q=$H` zxgndGb`ufghm~rU#1U64cUy>>$pRxFb12fdw0kaz63OmcQ zeHK3fZE~gf)v_r?GxEmh_9bvf?Tf$W;VVmh4C`VS!EhL5*{SU-E`ygjn@Y8+wH}v% zP>&>F{gTNJ3>Qh8n)0H^PSrj~mGiVMP4LmqmCFjdt-{B()#)+uxJ(qpQIEP~(%PVg zq?9W4`H&LxZUv^Y^#eB8_cg2msUL>$$B@dV6WFg;(Vxj+)?re5%4{WNLPBGmFgAT1 z#|gokNXs%}8*P5T$=_WI3^L9qD}Yorh~6_j*PIIud?9YLY(_l?Jb5BKc^lzDP9(A1 zccWVftWKi8n?EbdN~*0%U7pSg*<2A8uAC!$N7}0sa``H^2Ua?|t}eN_-hNbWj@sEf zOv0xn8+=O3^{ka796M3#Uq{Ls_cZSpVN_v32C-2bSLZTOh4GXdtyazF)H(yPM2imT zieBFm!>1GX0LU@kL@h>6tqPjB7s*3Nj;v>;rs8gna{dF4HnDkQKX}H|N4P*wPUJBk zHPBI~Jqn67Vf^wdDly2-PC+*wV_bSn+-xvbh`>wKt^k!f*Z$GM#8q-DgzrmsTgJDTK6=0hkbNqbb zpe9YqXEBn%DO&}~2sfo&2)2fNz!%;SH>dE#$aP|jI!Av#FhvmNXfs4j5=b`{a!nLp z_%AlJvBiN`s_z>%~A^yHq35`GfN?{s8$eNH!@ z1=-MTtfy%SpE>bmnY)@1j^oMCM5|P@hQ{N30g?742TH6a{p-pDn{FVnkq8p;z`EY! zR1SUXt8^a~dopUKf?klrg2i7vJ_xhMmN=mE+~U>##?({x1+lYl*_#UdURuRp0T+uP z&0Vs$GFfD-dPYPj&!hQ+VMfQZ(9V0>Cuy%b7Y^s7SoB0{g73JfD6TB8?Ncm_s~V79 zlz=4PZFB{M`KW&tz9Ppn8Bzo*jU#;bw1e*@X|hMkl( zaM$g3E#X`vx@7W(j_jT?n_GntWq@~5{rVumLu=6LQr-<0)f=uJ!Jd&9)+nNXCeRKP zS&a~tXz0G_ECZYh4QLdC?udHFlVgEcLuRc@cHJ7bqOiWAXB3@srfFvkbRkhJszCyx z9B_`nP7laztYYrF4Y6B+u5GoH5IXozhqJRG&=e1s#S&<8|xQ|s* zsH!w@+kFthekWae^sko7&C!v%AsY@KId4xRGyuXHOQ;Z~VPy$MV zX913Eaj=Xo=X*vrzgHKaz7DTJjQlWDX-KTbBuBfeHz)&X%!~>nKs@VJpaHRKKQM`U zo+UdASJb6Tx2fJD5L1cqYqO138B3tpbr`jtQs%I$>0M%Ol_&0kr?U}8(#<;`Qod)LJ@g!R=j08LOt^WFTRShDWLJ63o?ZNq zZ)T*2TuhXfR5`;EL_I`(LsA8=p1^>li!?_~)a-r1Qib7CVNuM7n@eENP>elSeu{21 ze-HqW4Z>W_9Y2Vp)5kuak@t7gLRzBt%DM-ZK zQri|Rd!HgvGF58wrQ8u!^RQPVQBt3WnztUzNOeWX2cK+t?}AZRXQ)=Bb^xl(w;P%$ zX4#CLR%JX!PcblQ^h~MK1OhRBA%Hx|QClzjC=F?_B)K@MHQFT?IAbCV2BecnDXZIL z^7Pp#n>EB!CaU7GqMK$RSj9=5f$o>RdwdvW`g7vdi+Rx{yHl-e`C!72V6%d`^ANbW ziwX)%S{5IZ9^P>4;L0ADOR4#)T+PD^oLc%JEJyG4q=Wf~moZ#R2&EWWDAigfzlsgG z#&~^z>8B_U2MCXWTD(+ECNazG0}EmN{D1Vdxc!#y;L0u<;v7H3ZIE>;3ba$mXV6Zy zjFiAEq0`I+m7V=ooL?K%5>yee%GikWc)Ae~)GFLRzj=PH2+}P-0MQ=Ng{8RsbCFVi zU&;GB=zg~G+=}X)3obs&>w*Y>=|<-y`e2eHu%Uj(26_kd>`mz=DhVfRgromb2aER~ zr4>(5YGYv3%V-t|2#K};#~#w>%u*7q1_P$&=;af46js8k7W6&$vw0xvmk7-kDCy-e zDMpKFhZ^Zulr)APpj+gC?Yd>~xb-&0i&O&i>$#e17qn?Cy3&-oiIT_a9SjD$^dpYe zMfiID^~ZnD(Qo}_-~wHZI<^KEgG}4clobHnn%bz?GU$mBHF^Xaf6+cs&>t+(ANpk6 z;}C|vH2|_RV#aI^RJLuL??wEUX+$GD6#nst^O z^z4PeCOc`z>L$1mG(hV)YnhWP8zt;iZ@%I{hQcYsjMmHV8cW4J%`Kf^BqPI}6HB5iM+A8sKy~vU z`dT!I`r$_qxu|2{KI8)O*Gbd@Xclt!F>R8F+G3={@Vc^;9t_+-3St;x)V$ zO#xes9Z~pu-9^F?lN@X#v`gb+C&s&}Y0?_a*hv$?HwCI5vd89GoO*Grshk{zbd?-a zg_Q4Bd>dTj`yfkpV@^x;?si=6Ds}c!Q^afadFTwv5tA}0FpH%upZ)alduG|J1Nmlo z21^ny%UxtqGq+cQttmnAP~%4`eMA!D71_f$BWn1NZ^QMq;f(p&AHcXpe}m{l{$?Ev z6v8RC=?!R%3oTJoXThN{Y0d{$S9%ML7Io70?6Lhp!JZ{DcW`Xu#mpjjttRpy?ffZR4^|s2|fh{G-ZXJHB+` zCaB~9UO21ACVR#vXW3@7$eIZ<7vQFBi2$7IE^vj`i<=v`j5&kPR@h%kA$A8V&$X?n zv90VmFW+7cdp(0%M%BdtN6_Q{CS@=n+7NfBmuN{{HbPzHXxHj^;j@LxL>K|#dEo3t zrJSS>ft>QHkj5mO9rkaw$(?SC(6$^WS5eM>_`Cgx<0XzLczLW{d+tSO0M#MessDpK&>`mcNEYYPt z_!VeQ_;N+mVUNVoy&dZ-n7y)19n&GcW|}*yKBeY-;>~K@A~@2 z0++exI@R26at$kP82OBzIu|qhAs6nV1$&43=IYq-M%v*P<>#HWoFT%osT$_AHsv^n z&aCpp%Rk#)>X|p?t1{NF(6(dOOtNdq0FRvQFx^-ysZgrnIk?Us1dr1d%mft86~Nd@ z#M!C2Ww1R%iFeyc_S)%4*eR3PdD+qF^WV*hNx;!*DvjkG&Zy(yzgy>j3;44)kxh3S zUbdT`^Ar;I&m^-|lh?2Rjw(o<$!|tYxkMelJClTo0)p;Iaa~|}9oeg$jb{ke_fA37 z9w@kfoJp;Ys`BsYVP#T`@1UmP9@m#Rzx{12qMmnmt@3vjcD~9e9F4L-beeEI{O!U5 zx)=F&&nvQ2FyInzD~|n(zDe5cNb^DJ`7gH1gG`(h#g0qFfrHYHn{u9u3hDzn>MymQ zk9kTh5$At3;_@|h9(~P!>8Qx7hqdd5eWgTBS!=rtMjuQ+`PCh`f}eibD!Z_a9+^@; znL=w42t0|uv*`VBx2%3t*%33GeT0y7bA_z4OLNgjb!YN+x7HD+`e4FqX_6%LaPdHQ zD07aucK_M?tTQ_0q4VUK=HWVO=cw|`zT;%us^u8uF#+c0|HIB_^!cZ=b^yx@2(RJ9 z@8{p&uul(eo-scf6yiMNXcC-jkq)*!6T`YgK0T99;_P%{6Ii^yQrGFA4q>a<)Hts! zkLu*vR}A#4W58<`$SWW9&0pR+GtRz1#JgDK?V9ZENcW0W#~TpmT^^PR_uH(e#sGiUMM zJp1zF*Siny6`IN|G+w|M^?HBp4W!D)*ALiVFus!d9%CZjUkU6z64ZlOy2;iX=rP;r z9p8oH{qa!`#3P@DI3zvTPoQ?h6v%f8_uH%t{1UG7{5QWUm(3;tzb&0u(Bhv@U2Nx} z9bb@{!^(~?b<1Y~#>Li;e>wyndp~XmVRuhf^q^Wl6s7+qC;DEZdY@SNR$G3aru`f8 zm|VpL_3vDa?)>94{r&WOOBF|kBB2nO`|sXS$fA(TBvRU_4of4D>7?36I32*Ielr3xj*%ZlW%GO7 zU!MJ?nadXs!(g&~pamAo|0gIs&@BS~6BKMy%A{l2nF`(VzsRX{1BUH~$UDaMCfk*U z95`^WO(cgCV71*d^L7_fqdSp6{e@1QaBTTGV7b|lVJT{`37Ewzt>mqJh!_8VVI*G^|e>w z%}EkN#OkejtH3gaKdK-6PnYXK6PC&XN0(tUR^p?gpMu`Njg`iqs9o=WBPS0~xAC_3 zOrGDKQI-1t6BOv7zxibZoaA^uZMCjALh!$k2BXWT69*isapr|Q4ma(Jzbd_ug_A|{ z7HVL74=n}2adU1*93{N$oBr$PrHF~k;01=z;n1Q-A?Y5P#E40Un0ZTm2?~k$#G`xS zcrChWaU$Hblqm{A@sz20w&UwDwBEzT;%XhbAgT8c9#Jm{-62f~(pt@%7si|gOKb*lSe){OKgOP2KX zix30~qbK>_3+!!|N^wkV>E0Pz)@(OcE$nPsQg!W&I+@y!GCMW3>Fxc&JFhz4nY->v zCj+}4*Eg6IFSa{xI!P71nEy;e2;REu^}DeSz%z8Q4k8PDunwV7NIUsU{_|!Vk(RF$ zA0qboU>hSl`5Fq=vGir1IH^})nPlqx0I^T8O$u^Mvs!>b%C z9pT<|9(CYeH$r`QT=lx>=FzaQyHeYdfA@T@bP*9^*onwGe-0%TLi04{#&+bLh&1?4 zf54tm$9IzB<9G+|`C}%%uP95|;y4Sxj{hP7!jJ#59yW(RzrLGU;JW>%!h0-wM2&z( z38ctJaM$y{xtk#tX#S&V0Z?Ur-d2sT2DQi^p{FeApQ{gxJ|Lmk4HCg&m;&<^5%Kk_fk zB!zYb3=#|1YVl~2q6X0pkrmqO)IgA9Vj`v_+E3xE+WltW{BPYR*~+EG4WJ%g+{1^Nbe5{(sEe{ zVR3sXEI3MX%nZqCwuXdJ4N6K1IyrV2C@`{DC}?;vvi~^u7%(G<|A%vz`2XkJ;m8C5 z38FBeNmMe@VB-xXlWDAG6WMZ&rPEowuA#c3{g7V|lt2V*+NRSOM0nCu!-@aPxs$>| zVM9Pw<2Cg|qGV&wX7i zu`x*gE5zS$G>O88hNd{j5IBg2y#g?1r8S)bXjFcm_AW<;&W5&(CsjY#Lxfgp-Jb4j zz1czF;|%`goRC+?Rk<=VU(KNXuuVUz|JW8RB>?3=^steK_Yo&OP4({Sa3i?39lR=!?qVx*LLL z$%_LEuKc*}4Pi^WA5J*}6%fR`s)`MT=dZgT#X4e57)d6sMW}``1~`Zn43#_(M{+Xm z1DC|HIZVLu<|K<1;yyc!Lgb~D5EsXwn@^BG#ubfGaX&lq$z-!pO(Db{M~Bv@em%;x z4}IsGgTVXLqI0!|qmC0Cc}_klJ{|&kn|vLjbGW zDXqK~j}aQH(p~yj0a?hQj3pvxE;p zEi8J*T@5Mf%SCU)z97jgA4kfq#INI{obqCVYGhG{-ALa5Z(NCduhXG@!*%@*Uv z$aE(>$c<*Pn~%YreBcA0-pZB&zFCw`XS~kMmKsZ2 z(Ow>B{3*u?rN8dlxu7*HdNOGNy{;%kzKUh0f^qG`NIpzqjmBWXt|@uR0IJXkbJYB9 znf?nko@|8|t4ki-tjxf+ZZ#cTet;FoU8)~nTvYZCzaBD#YJhZ%WGISFffI>aRn#e~ zn9k`3k9d9>=G2}<)S`q0oZJEg!FYQRgt z-^)u5CZuB0I6yNbF|9o5m@*Rd_!zYACD^2w;se4;-o`vSg-B-+YIhsfhq3Bcrns0E zJ_D~~&e+3-NP||!COv>i6h4=Hpfe02TA3l0#Vae^Uz+viSiR?v%-3X}GyBmF5l2 z(q9Nt%e3i@JCVd^l+#h?PaK1$)3Q%t@&afiNa+acq1hlI-gcFa^9OWom@(i}r8{eU-}X@#mXpW!g6AKJiJ4h0^t5 zLX-NM;%=mqAyr;PHj6 z9rr58!`dQy2eKW3@x>-FW2P%s@vvyjjQG0%lS*72ceP)QsaN*iqTex3RsjgXV1`sWVvM+o6^5dX--PJC-ug5(*k`F> zH7foPY-~iwY5=^MN@R4P2-jMYBJ<8|oUlmO8^xPDKHzb=L`<71{X?mq63*SJ-qvIK z8tQ}wMbLfy?fg^FDo!A{}NsQq^WFv)1S{7GPm;-IxV^%aqGK_*!e{q zx&D`0x3i@oCa8aS$eN_31_Ey5&k|ojplf(~W`!H7eNV%NXWx=cr_;Jg z7J;GCu!og*WZ`f6n3J^`>H!`r?LSr*?+y-RNxtDZC{4;Zes0R36Nxmt23=@+%b33V z5tUr+KhteHvVKpX7zgf#v|htq_Lb&A+!(ltOLCnj6jzNys>^6nNGmao<1trD1HjlO zx{8|4MAea9k)F%WKvmkTCAGaviyl56O$Sf@K6wnA4VBCjZ!=9}rHrx>d#pUKcb8;R zNax4dNj?L>{X2U~1GW%%m~Op>@?j+@MW^YzVnp_cS#^N~sg?jf(}=j6r7pXALHy17 z4q~JpSunvFGhrM@j*U6RzZ(sg@!S7}_<1~yx5q_&E*xj$p%<~Ajo1j`U=}#&T3hDeWd#y~nL=mEnu!1H zb6#ccyMVln?GDnfjad>yevI?2OD`jzv?EQwHACi^L>p{o+-5W6&;A-_G|dv7M57Xm zpBYk7^rM)k@^oExfpe@cR9(0@k95ZAe`68D9~@`}rWni!Y){wZ^>ylLh?R{wUKyA& z^g7~MQgZLkLM0~J) zlqOex2#Po8aNI5-6qDbKY_x$U6G?)-sN>ESaX@~D)oqLrPDcBprq(lYarcK&AD2F9 zAD{t6CiHUoAL9BaH!!*KLVB=zciX*Q7#TaC3?_07b>NCiGO7QL22`ioO9bx91W1Q{ zVG}Vw2Wic?FjGTRm2h;YWn3S5{C8SOV9YV=ut*n1Jy_Y)g`su!(!2&B7~j;&}~CJ79%3)K?i zw0o5dND(6|U?Z5i!@D?fCG{W{r!}2>wCXpJg=*8hF(Kw(#TV5g7ajY)Ax5?wiUsh% z7G}eGYyDFZf~l_cZG6d{+#1JhOmjy&P<0s}wmxjj9J0`2K^7hW7oKP$>~8A0>Yx|SnlKPy=^R?vM$>(&(h44l0S>A3@SPANiXB`U-om#^&9$3@cwh`;o|d=+ z4t)tPq?L`x91SE!K6@&*Ay8ew$tjb>OnWv7qT3~ORIu<$&B6?oa-6YBBa~PXZ)5F64b#4fY<1#Vbfc+6xbt zB^02RLETFpOi!T{PepT0NClTh`o$$im;B8+NuHfZY+j}@A=waJYV82Snl2^TIVsyS z8RI1$h68Ll&9)PRCm5fRYYi>%RihFPl3x|vPZC`W3TRBX2>9mYjH^=~VW}5m zlA&*2j`zv&Q<^O!PcxHuDV>KbE&P?xPcJz!HMK86uMIs@cie=UoWMv-3>(a)d@RIq zA-M+M5VD-M!GZ{JZzY&#)WyPN53q`BZW;>hs}$w&(Um) zCCxB>mgA;)RU2JNfm^dVcr`6@EeKeRpXbeQR?CmPGn3Q1c71r?*|9e#`h0OX@pPK=my;_ck5k{HOjE!qjh_X(i@0}evQbG=q zgPw^#EmxX5?`maBN#Nw%;uWT^htAcZBbjMJfWRi-QQRw@uL*iBb}^+y1#^Z`D}xg& zCm#E0yihW&n-DsIj%0)GF#!-h1Ng{O9-o*RuP3nHl?Lf^Ve=OlPLxOg0?>P-7uZH# z-W4BsQ08U?bHQLx%a|Dx;KcE9)n@`Q7b|XfOWV8yB+W}p-sIK2wUF;hGhZ#5^h?+$ zNXu{v4C(Tt2%;4!oxRWHWfDvAo{QMks`gE)buz2Lxy!;LbKN6jpdfIC*MH5~*7)kD zO+@PD*kt6x)Z&I#VbI$kN0gWn)U3RksmRNJoOAqb)QS$pz0{{Ckf?*9s9ieu23ptZ zl3}ghsTUK}*Fq6C>Q>6ED)xy*Fm+brAYk~kpuf`*V1f*YwAC5}`YVMxSaB~faDA{O z-l8YV(Wv<91o+C#o|5^v4O-~+xEUIpb!w0;DW_yaB+kfW-f^!HiuU0f!(jM~F3MF2 zo0a8jw%Zy%l~%gS5d&Oa^^? zpUJ#Ye*Q@P7E2#yjm}yvfi}&vrn;0?Et5h4>DH`>YM4$EKdW|gfwvvw-)lI5VC-H&_ z+q>;31<%XC-pdqygc{fCWiUyM30o%h>st&WEkToo)`;~f%2C|X$BzCQ~uMI?# z%=f&FeUWl)gbEasU(+yc8bdAo;E~5gK`889-|Cwq&)SRr@@a^*KF~rAdG)?!_QrcR zHnWr8Z*-&B^f^;FdM9IMzZc`TGl7$BYac{naNVU zT`LOdtcXppC6Oauu;?14rAQ_CIse^EH5KqtucBA(fWd&t) z@2m_Z;jb2-f({mw@_oV%L5E4EXQG67~k8d@xx=OB6OR@;}rIk)$-Uh7_j06|WVf zA547GRldE}zbSxY_zt06au|G=S*cBGy0)r9wDjTyEWM92i{bWMjLvpc>I;rVW3w`E zP%h|Iq4WRYQEX&m8|WV&@!`+I6vTw^9Ye*O5pqd1#>)yct%xumAKM)H$Tk6!m=z?S zV#!APZa8;lFOo3Tl4#Ie>N`V-K9qqE(8A{G+su=ospGsGvp>g26q=aL9A+Aux{Yr4 zeVwx3k7mS64>rUk(Hy*pZXxfU+y?~&qWN*-PWLb)mkE4!zrie|Om^x;f5lCS(+$h9 zg&6o8S}T1Pin4yaF^-dM%`EU^&Rpuw5lyp46^<)Rs#NuY7#CeI%GHrE=@>gKTk4)o z6X)9aOW(ptx8?-i=h*IQm2;B97kc&$SEwb2Nz`Zq$9_-vhTm+?-O8=9nk1`9^{psi zA_>ka5El^#WWa6#Q)q!YS+X ztuGag&Y7M3YS@IFI55d{XOy~>!+9=54qemW9k9L13#?X>oQ2)Sk1v(nTk9m-q{d&n z-e63v+%-5O+b7t5RggSB2!!r)+Kr@HnEt+CT{tGBPlp^7H@L}xwei~yw{LW_wUW-+5K4=YY*x_Rsb_W z63x?pX(V)?7P6d4K79_6Y0Qe`_qFX;V7rNB6c*=v_I`YUaBsO;9Am-*4uh=6xuT zo}urLuBOjc28Y|6BdZpY3ZpQL zk4D{XhO2t$7A?SJ&Kd~)hml=3{&-W*v2M7B~-}@Y|07{GyQ< z45RO}CnyJfh{^B0z>hvbquw~pIqjvwyh+i$yD;AOx;;H8Ei^tj+J1mkjoEK2{>!es zyl&x4e_#YrKTEj@RS9$W#AW&CS?*vy<3q-dPN&UZirzXqk%1ETOD z6owlLOhBS2jL0x`R&AvU2_#G9bsH_#o19L1)o`CEb<)^yjKOhzmHAd$ng+sb2b z(a@dE^0ZP}*gj-k*N2h(exC(VoS)H1%@4ld zLIDWNTd;yZG^>@FaDTHsN_9kvEpia34cF5J!-ZFZA`o&-h`d?bvV_o!Z#GVKr#8<> zGf%Oh%fMm}ITsVnK}6Cg?jy{}^Bg_aDe&b%FwJe%Zdu9;fMdEUiQIHAD6%4(0c({c z@YKWE8AL6giV=02iG@URd-01f z7HnAnwOaZV;(+b?!3s#|jg;I*4XaTTiKW${iZE7&s1X3Xl|O+y?C~f;*S(|ecW7kB zgqb3enppvf&jy8-AfKm2iuoz*gqgu8H&srchWAB!hA}FykW0`yabt z^^~(tOP#p&)!FyI)Xd?Ox?7#=77wJZ@^sts<{P>zK*lZW-Y73wPg81z1HZ6y#%1No zuI`W$G(`5r$OGCIZ;YA1hMGF7c$di#@*ABrZvL*+Q(s%rs>8$dEX+P1EF+)GyzW}t z12*YT9fK8kkDaFhIl;A;QoL1MF=LxHg6F-q+U=Sh&$20QfE#0l_Khi{+MfeqL4T2= zT21|GAOz(_vkZ5op7(K1N$>lRa+%WC4LBn@^m-m;-rQ4yd5>SRtwb!*_Jcw5m;S=7 zbFj3|*5O$nB!MF(+%gO}Du>V;{=PrV^7tneOzXSQOb~WR){a~$Fa@^P-Xou8+&a6A z8`?XRF&)fOfui|D^G=JKm3*q)(Ldk5HtTne`P&Fp}nv+?;lS~y? zSSaPji^fi)`6jbRheVV zRWY^UOS+{yZ?NKkgU(tAWXH7b2tk9-XJnz0<7iJyo{>4OTk%MG-L3a#;{t42ZkB40mYr9T<`j@zLlB;Bn^#83~ZF6>q!2>jG4C(>|Ta} zWqp9=#$7ifJgxg_hk}gOvxYYz$?LJi;g{~InmYi}AW7^hWBc3yqHnQ#fNX7Lk+#B+ zUDNkv!!C$kt_w~Qo)#?_#FTS%5B~SMveAxB8PQ>&p?67A){IfJ%r--Zqw+ATyLK4p zkOGv?8r^M7gQBpE36bJ-BYYT>yrvv}_%#ZE0+^r+eiXG$B>9o|*hL{IG0MWRd9$t^$SS&IxuYt2J zNztQdryLlMk~LNa7xG$eQiv$GDaQK~I5IH*lEn~%miO-~eRYT-q9!in6#1HRMbkIe zfHSxY99?%a(mvTpLEf-Ey-F}Q$Gr_S*h)v*TJneC4{(fpl%E}w3~~a^Z9}#iDs~`! zfgDXXmWc(7U0qwF9B6zgwkh1;cOL1uD8RlK{v#D+m+cd*W-uk176eGCb?CHLuzmR% zVOgjihtZQ3_a*ztrS(S8506yv+v%wan?vHVmVuUIy;Nnxp*;YjFD;C7>hJXvCK0F6 z1y)0k+qf<6pYG}r?1jioqsM%Mf88Q>oneDMR^dQFhoA{u&y!ux70aB!9$S*j4Sbad zklIHB85jnxv#%mgW*mZCp2{VyKw~>``ZMfB7&-lJlKle0-HWfQWtc$0{&eNv7J^ry z6YY!yHL$%g9Jbz3Z3M2hA8P{2bK#*cye(RHLQ>DhlG3Q#g` zpSMTN?XQvegOn8$?7W1SBR2XWv4Gm|1bVsJydwQqDJ}TI&b_bpJ$`#eO7FJfC*WoD zd`15DxwLUq9Catrk7;|WTZ&pAyfn&CrL7O6<=7I|z<-94Ks|;)5Z=DeuMRwQFXVdL zciLRqP3j&0cif&}oCI7UhRSn95F*a+!z)m!Ht2K#P?TQQMc6+VICtPetwA8L>4Iuo zk!SDNQM&!`UNEES0bxs#vJv6E&Ur~6TnGsLt}>l*k@w+Wi|S{d`l~(5;tYFo z!3L?5E3b+oyPXjLtU{=I@jw<)J}6-x1eD&}KiS71d65Y%EXnlSvO;C)iEvUVcR`IP zas(eq&DSO;$%tzrh(S~Y{AK0Wnx@sR#)(}A zSzY)6NhDN7g7-B^%hN5WDu#n{iHlJ!;s3x}ZyCODB>+Jt!H-aC6)nDVDZ(M#cf2_g z@S|hsfts};z(5Q^wG(b%G(gm4jAo08V-r+;h{1ii+{Cv6B2XxpPbx%CDwM442#i0M zRSJ$u0#TPgXMHf8iWMkUjdGP37?@3+6&c`!A@!~maOMJ%#3!9BC!L}vogx;{0V9Qt zD#4s6g`L&=D~hopOT0KLAe0%U=UnR6h9KP(BkH)8%xR+6QA&1$KT~a>wmvUbEkeLI z;KNA(WxA6ImZpR*xe$SekgI^s!MqyZS9T_ zEEo%)mhJiO+_$H|Vc?79c

A;xU>!@!`0qvjwKdA8;oVc;qTRvj?l$VZr2>(PhRz zG4rw`Em2YLtSQu`V}>h42d5Jd5)kUcBQr%~ zb#s+j7}zIg6O!kYwyL+P=%MVCh6WS|mgkoFNJy^Axd!M|j&nME70*5~nvEmt;gwNu z8qrh`$Eq2l4_eaC>A>7_5N9wT*nddswV{0pKVHvkJt*z5C|%8uC1fj$!OE?7FE~EU zln><9CZiNpu@K!P;r2|Q4l6&P@DuvQlD)|Eamfyn&7~PBBZeySCoUrC$WtyZ5*{rM zL{!qQC;*vvGQoJuD9scgp9+pI;(Ir#<+G>%s4Y_LU=oL_bU!TgJI_%UjdHlDvg~AY zr7S%jig#8nD)Fj`%`A$Wsntg=Na?A5^e;pBsp5XA3IXusSK6?9XryzNS!&c|?MhVX zd87d9a92y;j1Rh>I^bBX0Zsk zUlZaPxn+~cWmfgx(FCwD7{93c$4GkLD3G}>8X{_i%q$>LX$8w`{k~ZPH)4#)(Tc3m z0!E3a*0yWK>}bW_XvO(;{kB{9{vnh~r=7$voyf190?}coSXy>hHlYM9x5a|4!(k|rR%w1WFM-*AHjqLT+DW93DzaK5H+3f9>t(wuP zP~W7s9lo>Kv^8t%>u!AShJ{IonYb2;i$o~QY-Q2i%$C+|Ns%$X9%xLV7O0#vJLG0Nz}1(X zZFRgp0(KF^_019nP96PI#4gK9OcXo)3ryY-^#S6nUG~UMOYiOZP(G|G8dL&hG(hS- z{a!Z9q88mA3MT%oSylSYZfJr!F|~Y}h`|e8-fQR{gzTI%Cl2y$=cXy+mx79I+45YY6gf!7LaeAeAC1G#|-pp}4D{ zGAJVjX!2+i;V%qHj9uqX}kdM9Z zAaE$`v$?lzVzzLMt^s@Cc~g(LciTKint4;#_$bE2X?LkU4%t%mOl*#RLFOI}t3%$J zWV~orZ0$(6o5ubDu$3}XApwE_{S_<6oP?S)`zDVf#=q@!P($FQVhtFi+f`nTq$yUC zbJDyj%yh%B^=8ey3--13>3c1;jobqOgr_NV<|Z1_s<-rNVY*1;9K=}-3cZFeHRd+G z=C-}&BRzncnoT6FQv-??TS5zGhO_!DbNk!VUVL5cQ3f%jvsKxxopL$HursmMt<~!- z@76QgTBF4i-IHw#|52k~8nSa=+wSgXffA$%b^`2Pmh2shf%@k_$k(&mD1Dci^XOIm z^%pa^O!LTFWr)~a+g*Klo74DI<&Tlm1?lr-D3hquW_kY$gV+l{4$~76tIXSF3Mj2d zu#233%FMYd`KK0H?pA0omh)a`g;N0)PhOW96gJ5JE}Jyy^ChmBnQchT&D$7kYA6UAa<8FJ7|B3!R>azl*XS$9+DwJ*+1a0@_Fm1{H}%`r?b3dC z?sm%xH+jL=^P?N;a;Hh^*Q@3_!ohYaJ)Ik|#;`Cp_BQp=Jdca|6g@jDA<&Cki)UxNgygnT(E^f ziMR;=mkz6#gF?n8RnSdR>Jnb6yv5- z5RK>Pib_it>M}Y?O|{kS^#y>#3xqG)=yisplfL$2T?7q$>#*O|+@lywXw;zkbjQ>7 zG|hm{|LCwws>1MEmmMuOu$38w|J7j;TX0kMJKG#kB=E%g<-6M-jslIa)i1mL-tCMR zee1A0Ww-OQO@fL#JzZ~i`=rJ|{n{SiJ9tmkOqjXvYVKmPAuDf>M@*Ug?&)ez(c4bt z9i(*>$Kw;zazD_5-N_&T!5a!Z5JrOPAY_$(eLplZLGmCB-+g>R>5)AR1suoOJW+#(rezL?dpn0}Hx)MvTA zg)fG2S_^LIem_E1zpFWw6*3Ta!sDaFC(O|P;$#i$i;{Hn%8Sx$_sfg2{IKt8t~k~D zvZB27ds@4?_3~STO$EXg6vb^~SfxaqR$eK9<#QQV7ZDonMo?3ATs4gQs|BaR2!q(x zpR$)qG%joSpk}~zP?)=imYUwQ?Q=9&dv92G)wp;bVBdCL!-?7Ew}8D|cRznubERZF zK6kwXtsmILVX1g`9lg?1cLOk#)%SyG0`4F~D3Wv!!&wad8>-vyl~>XD9@RO0{+HCX zDavM&4--_R`Nd;&ZMF>K#v`0Kog_amA7{99GahI8-nuW4UH+Xu&A&>-KP^ZO;jiW~ zLGEOY`jF7G&&p^**0&|Fr;&r8J#)XT(QERj*b7>!Jk)x2(2@X&FnQF07$RC!_1 zQm%V8eR6CcD*!c^R-I1i|3v%nikFxvzWJT*N1JH z%YixtWnf<@sFT1h8d=v@qO4YXqRSCa&{!rtO~?cYa4*W9JJX2ZQ&2M*&gfZtisHzK zg$gCZ!vh@-2jxy=g9WaoQ#n{g;J6+ll%h#6hLSszgut1LgQB_=&U;9_AEFG|F#mRA zj>_BJ%TSlA8Vi+(2i{Xr)E@*HuUifUb~BR-LmZ;msPwW}Uq(Y66I$$xjEk%$5KUbX zI@)qciQ+D54a#5>K9vvhFBZr7+u{&$r;pN-#1So$!t^iyk><5`Hcd{>C$~`PT|z-| zR8pQt&^(W?a;hVOR*UvbXP;1ecSs@108p^Q%JwoRrXn;bo*|HcpafVkpeUEd`yWsJ z1AQXZeFA}Frb-pgMWbZ#H7~+I>mUnLO*@3ck*xeXW#b1o|rE@0T z*uE4CwY2K_q{(SxhUPq@Bws~msenSL96Zocy~1j_h{TOVzB8fU{*o0EGl@oH*jk8S zGCn1ol_CU{N{Vh(z0UuI_~cWl8cRu|L&OXW^#0qhRB3afIL_v$zg9Tc(Hz}*AuiaU zom*^EH(^-`r&=&)6BG(pU?ys^wXQZH{;OrqV^vqq*57+6ffeo_s%pA*E~2-!xDL!b z2``+fv3K(!Fr3gx)@s(&V*H?PhkC5cEL2$|V@Z~bOtkVfy0$Nq-LaOy(g>TWrrdfvaCbvNRM3TG04hVAI3@7qP?LuV0&yIPFP*tpIN5@ zGsB=SAHB7toMuA!a=S1Hip*$XGwiO&Vm9xQ^Hr%ak9LQeX+-lS5g4 zb`|aY-K(_8?Mn9Wu;CS!LQh(_95l}GY4z|pRK-J zcdh_^#tNrwY_xYkOGD!G?5DP}K&)I#lZJ}pDbimql~$4ufFX=lteji;wh1bR{l>D$(`917k-P3Yc`9X8MJ7xMwX6(eb_G)FTKj!{U1IkY2 zl_|XTWd3GiTqe*+kX3W;{9Qewzs!%@-P6AA6u!Z@e(j05@|fc?2HjnrPpFWmpuhX& zkoz_cjTck^K3ns3=6Q8Qz3YeTqlxt7N~#PV`Qqa@H8HYQH3kDT40e$_*dvRzUb&=q z`^5*l4r!O%`Qf^?`el(4pq|G(-O1QQHHfF^o_#_sQtDZUZv5gAAOH^eNNGO(+p!Sa zx3XF5EYu@%#2-2=AWsD2-h!Igkp$-tjdPRp-WrZnfy7~=GC7ss%`ke|7&Umim(>%R zOg`8=38L7^RKkVKvo>E^v1yRq+bB15J^k7lx6h5R_fLgPrfH`nR#lC zb?v<*FurgW;Bko7I)_Afh}1fWrns~`vsLD)fV48B;qvIW#$T8spt?{x&=35Jm{!^lx~=Wbk_8}j;+zGE5`wJM8kRpN%Bd?o z13rCf=(B;EHT+)B;uhfXntq| zj8qaSyb{eCuvmxb?#As5#q}{v5)?$x-2V`HdfL|lRpJNAK{d{)u`~dn8PqId)chHN zT`hJRrW%6}@u1kWPh8af=|U{jZipTD&LPnd6-gD&WIEcv=3JsbLIYqk*qKm*Qbs{B z)`FoyBTEKT#if29rK-yt27@{#ZH0o^PlThPr%+-g?!37+Ibnn3V`E674kzkWJ|>+k z(6fr^5Fh)_ojK;PB!4_6i*f;k{{~ki@-T-$zxhd2gc>Ca zypc#knBi||ri;3yJ{e^$QKASFd%v|u&Oj)oG=_qND*Kyel*6PCFC-THP2^}yQG+3x zqSWf3PWwd?at?)`G!c1GoYQ_Ru3RA<6`nl-wTq;*l0)*AEXlUXfjh$y?=~IzfC5yIB`p|kIWoHJchzj(Zp7&r${Rn`T zJlQU?tVn8yQ|U^j3?}Ne9Kj-y4hfo*bm^JSYJctG zrk0|rNwXTbnuW;ngthq1h`dyj8r!Gx5uDmX@4O#4g$VA%ZYJ)A(1=apwE(ZWVDErZ z@57AM5(DiW1xQROide&rUuO$r@5w zwmt9A@yXz1or>F6rjPX))a& zz#vH&LQfVRD{NjKwhfsEKt{%zWbLStGfPz!bWt-%B1LhU_rn1oD5-HEBOlgMj0pEP z^i)KLPGNWiqjX>~VH4HcYVE}$Yh-y~xd}CW7b~r9;b26d4sWg_Zmc@51VUC49lC~h zc^gj@8|GG%wXR0xW`nkrj;?HT%LL2Afuad7$v6iyXhqU}nO2NTI#EUR@2GYsU1r4% zfL2yIJ!!ZxPL&34RS9^VvR0RvcAcoMGvI?2r>lMymez2J$k?MXC{4LOf>WR>EtQwr zDVRmCzd`k?vmLInWu4^<*j8c4sn0J`F9?%V^DVaXI)TUQHR-nHZ?bqAIpEWjmdFi#jPqbCq-l8xvTJXUQH;{u5y5P z1mhdPyJoIQ)@SSPCw?e^2OnOYQlg(8qS>~x?PQh7ZsrKJRg_Ub+%ifv8Pvwi2g5hz zzaBD}ZvAZR?rk>{z|G(;EeC#Nq6(`Z9QB)YNAI8}4P!FPL^mV)#JZEE&+_K5(uLaD zR&{OGxZr0mq>mc`>4+!2*yt8J2h)wfk&b14(nLiQ`HC}BRE}9*GG~ei(1H(A!B5DqXm)Q;o)1lMt9HmcqTo&& z!jOV2TeNax4M~blp(J(pcTZ;9#;W>OvEgvW{i5+(jGvz0OoUeoHT%^3!dM-9?go-X4>rLOM;5__3U%GtY9F2hlb2dKuf8 zlV8~*7L@!c@XVp#7uC;=bR@I1lCuU~b0aGw|FZo_5f0)J zYQPqW{oIp**DOpmi~b=Cv}jZHXkZy1UHDBkS_oCBIg8@pO3=35Tr*>^IiZ{cOEVlD zedMkCS+(e_@%mlMwbP5b)+nCkb#Nx5;FCPTe5I&#D-0=pCM;#kK1}5G^Ev?0!R#c# znmP8X-Z|I~n`x6c+1b<|^T=J1A*gG*Gb=b$tK6HZMcAEQSy@Eg3%irdLV7hJF~7ok zQa-DeQJ$7-4s)FoH2=MuD)TTh^rSfgHjK%pjdV?=HUs5Ht%BFLAH#*2w-hy&*p{n44>P}&_Fllca^XVOMxSuk1}oG=oW(RN zB4Q^{Z&^VFn{ZxWlW#Rfw}+@Qc~W<6VW#Xrj;i{LdiS%%{wo!cJCQ%soO?@pMs*W> zdzT1eoBPsSD@OIjZZA=6%TAe+JAx;sYHL4(TB524q<2w1M<|n@dH4qZ(r#NVXFIeZ z|M+8yUj8sX(il^p4NQUcY-h6tW{dc3V^M9l5prHFM4E_ekA%BT6lae*R`Jem*W^|2 zYNCzlwoHQTXvZ(}Vmgw-vFCiF6@@Sr_Hs`!mgd!#X!#}?b0-F4sgIY#%j!l+J~6oT zv9PSB6wLD^mEd^9?^K1)M9@Vm*KJ!i7w{2Pt9h|1>(i~Bk}oiOI>5KXpWZ73AmIVR z)z48AjmtX(+PWV?t>+lc3$8b6=trW{pO+<`KsKJZ2jJ9uEz2 zBxB8G>N79(q$?v`YSO!e2yqDE9?B_$W2H^z4o>FmSa4wG2mZSRlR9TNJ$L6P?YFvW z|0n0ZVBs_1{CSgXXm@Qj)WLIj(bZ!p@vldRlwRI+1U{gvwD*!yb^LGi%@`8-IU!Bh z=Z(%fK5QAqqKW(C#_TC*YAxEG`R3vE?ydOXjgRgA>)A@qjgL$N)zb4ZnN}K6o93DK z1?W%a&D@1j<80B(D}Dd__T$YyPmT=G6q)Z(=*J)!Nr99tDGEr-{~Q$K>gVTxtg~aa(Zjw0Y8yu$m@%$<1_VyyxL!K%;H6<~HY# zw2aj6CHbgEAPE|MBkuZo4(gnx!A{oJ1q1^7u3xP5UW}yN_=vzW86pbGe{|S`F=!Ab zf3^x@6fqGnb|krC9FZAh2pAl+yb@D&i7ZLVBtW|H@lND;G&s|TSi zCmY%r=ZC}*VTEVMyMc*Wny{vZN{3e%^nBmg@DXuP7!8Wb!kKTcH^}z>HX#APbKP%@ zWhinuS&2MZ%-XB#tGUj#csZ zq9~%*@Fb`XlM`KN;3iYxSl`v0IF3oOlLQXqHF6uoOyiB%%6<^NI5;%;V@Gm4>!TD| zoap!L0*mS6C?)ZhtYqVHRb4-XKoCp;ToubTIXnIlQZbdR7^5`Xl3G&jZQ=KEWx8_+ zI`0GdDOn#~YYU7J5P5QaUYH>QNGnK-4!cZF;3LfC z3y?d)*PvHaEm!>%p>bnTMW?-N36XHa9G5jPdz2H;$}C?U%QmH!`jGCVvh_nZ%7Mw#$R=qpgDVdT0_FQclZe=Qh zn2gg`gx=N}KEEsK!Hfuh&8D=Rf6m>K4x!{7|%ZUc{Ls&kxjZ>!{dyO+o zQ7V=i|CBE?@((gWnyy+u>>H)Yd4r>oUp^ez=yN$an!-YT)OFoKa4Ix z#sTu%cDwb>6}?uW3foQiyrJ98<=0oqTQ;RU7;&PWe~P=L)dZ-Y=ileof!4ycxI+W71N_9!Ud(o_RhtE_{LT%F8fg z{U{B{{)=#V@?cm$VM?h2`@r>~(nx`9$nI2uS2{AY=4pJ>IrYwX!+HPoaQL8ShXV#8 zew0Yyh|qY+dm)HMD3+UdFE=Q8b2X!BzE7uxBW`dx4JHRhXTx5h&fm6h{ zwNl*rJ&#a3S|;kJ)IDlC9MURQWYugagiN{kh^WGjT|=c@1D9fN_goqqslebRojQ^q z&YjVOE;b{B4h8bU|NLl@#0Rrv%Mzstomr}S^}D&<>#EY{E6w;mvnM&xA#53!?z&jI zu<2F2Myv{xA$V}DC$kwyZqi8mOGQcR7lnpCUy!Xu2e*Lt%5P&kK)S{6&6YYDHJ41Y z8h@-R)EO-o8z1TnG zjN+9;zBDYAd7%|kJV;B?(24Eq6L@DN*-AQMnZ?!F5>bO@X|Rr?bv+gK6cjvUZ{^2? z)l&}&bmBD^hb!H@+(i@k1x9cW(k&DPcGuR2I!I946|Clyfo*uxK%**y!^R3T2Jk3% zMQfupYEYYFNT&$RM;+(ENG^19rzpUuG0s@~$d3_wI&s&O5*&~cmQ$xVzfTh)=nl7@ z!qwPNU(^3AvB?4%s3M_H4`!LPCsj+GQ)>9)EjiK~G*6w=dOpoSmP*25{vA0F_?oko zY0sd$vMigPB(slc&$^VdN*4YAAhOFcIo7)5eSMzM*l^V%h*TbS29uG3>nuc>H%CJP z!v`sdFXfZdHI9YPq@;<}4_s zasxjby|c{rNq$(>KqvyLpQB2h6z&buF-lRdovp9bCFm|@ww97U3qta((nJ_PKpk+* zOTN_F7@bx6q;^*(7YfcY^AkkC;&1=f};3J~zewbW& zLhJ2I#kv9OsFRex<~OIoEj)*O^c?Ro-`7mB5|jx1ouUENXgTDxCu0OdpcQ^iB!L;c~TiFT#WO16ZkN@@#jLT`9d!MJeAEqnuO75m}2} z3!;NivVL4uN}P+Ad9N7F?5)VZ?vhSa>V>HWiO#u}=r1&^%;?)XkWgmtn|3;#4JqB# zUS7L+w8SExfrdK*K(v%S77(O8`hR}Zrj;s>By>zwtpDd+ zY-x@eEXz1oZr2H z_EP}u3}mALY8y1A&>r%yk1{&H41zoo6wj@L1uTz^E(4%+Sl{&Jl~%WGOvq5ALn3Uz zmLSA)!vi>eY6B-&wxF$W0e&aetE>?GG4ml__dZw`v|a&X|*^i4LvLrLG56Xa;1V3*G-wY-~ zY&+O<*=JTEfZa`Z?~TOXj)_JmOu0SisRAzuN=WjF_cAX03p}ynNQ7;g0D3yWey9=1 zgwPf%8}~l+!~C(QU0RgS_9t|7c$w#rD0MFNCmZ}^Egzj&jJ7aGGi#nB?(%r#)ra7e zPVya#n2Z?Ztn*NA{*V3je(r3lAD?wH2qW?bXgLGJREfASFk<)zNwq5N;27dst`(qg zSb_7AlkvD%P*f&bhVY2Lx(IA;5G+%y(b})=4KzxQGpdZt-el!wc#)K!Hg9yiU&xPEuzbv-<4g z|4e_flswAs!x|Q`2I#xvgj!UF3?* zC{{OCx=8rMU|Ek6S5UVM!*na?6b@4IVCl8Y<~ll#;h3Y^7@QGSmfF;p>UhEiddInF z$1zqbIxM=>D5x<=iE(Rhc%$QyEV`cXBU9YteEBfM&;SOkTQomRJBQh)m{f)2xND!S zE{x7KAHxFeH2ySmNQC!?;CPXc{Y6ZUuUti!{Pwi`&h~$F*u78r{bPCHsEO1eox%~H z!f`Z@fi~)?t-_hF!ufW_akjzQ6JT3I|!q1k*;*cWy%0RRnSx;9&Z4*+QmblHMc`A8$8h|SBuygU?p^?In)5Nq1 zvqqkKT55;4mPI_E2cr+8TA3ZNL@>j|>8Gl9rGj&hHH08Ec$Cx178NU9$3-e4gs3Lm zvw%Pv!N$HUidaf_f#GL@+qFCmDjvZ@l2M;Ijc}t%TeQs9vMftJCUUZ@E2<_StOQ0z z7Ee5t)ikYJ(*A6;BJ{DO`GTF}3POjOt8k;DP$3~0IGA-vzxNPN@v_YBqHc;Qca*NK zQ`4p05x~VhqgI{j6OmcuJZ#NhBu&0*dlN3OxqPv}Zu!+#kWT#3n0X$kY*fNxo1+@^ zePch9XXYmJPdYIodB)YRz%6vqU47Utbj|){mESBsRD1~-_O*7jzZ!1V;uRydzJx(f zniu&sXFRh08*%;eLMq= z=dI=%?k=+}E7I*jc0ED)?Hc~kBzcX27Pj#iy@?cE!D?lk;q7UH*(!Q~A)3VULU{N{8Lpkh-OgKQm`D4w`IvdMa~qdhpYmok;kzD~ui ze}>p`7MkUWpm$obyV#?D4UkSX+PJ>i?X}yUdeMI%FhGjgoy*u2EmXL?R(`QFc=Ovk zA~X04ke+7Q+Zb7aoH6+N1_o~o{>^BAkZ00n8-ST>0{IOg6bvC#zh^P(!2AuPQbMKE z4dH4H;d>1cQuqH%8zS8rBL6c)@mGW)Jis^>`Xn{N*v(^$S<$*t7WspTrN8usFpXob z`X_n^$~+NfV-(}o2)l9_mrzaKP7?>|Fvlun@EN&7|Y}96W6wz+saESsR8$@z^kbe(n-R(F|?zJ3Y3{_@3GvjsTM_vg8AkihS_xWi7Jw*-HSZv$gvhh zqJe#pw*Gb*zM1hXIY7X?Al^j$^`HUK{KD**t#>=`rC&{7{)W}mGIqiI_H-cmbTudL zM=lQPt2r9S0Vs!so4u5yy^bm7nHq(K!LGTt|CUj!UVqNmcDM!S;;Hw)Gj+SOsZa|i zQv_xx%MhprpWIVl3QI423o!iwtWZl}q`B5Fb@TjomEX4(aCd0 zqBv~QIZl;#q^j*tY;P@FYc*VZZF*iyx9k9I6gKLmSDg|U%?!3Z&$bWq!M_ak(^NXPmJM`Op3y>FzI??Ja`?1vf}5hQo`#1Cab17`=f6tDc(1){ zn_f7dzB`@14cWE-3z8-2p4l>DkF??}Rmv$q~te zcxBh==baIrBoYDe!L!5(GVf}d0`6bw*#U(!W!m0Un03~x1F1y~mEZ-`I3H$iMfzmh{Z* z?nJ8nm<;8nHl~lR=uA%OBG2KXJV%La@uKnjS*!2mxxi7U?nSK+T`%nra?ed4coK2z zW-=!SitVm1=x*-t`WN$l2;|`GiE%qBh5xf6F?=2^(GiWdrYoVFepIwKHIX z4u-< zTkS5qYP`!L*L!_C;e>F)Z4XD|NpJK*&nWk216j0r3O$`KIWwH1d;i|S7NFO@*}$KQ z0)@ZtwwK22>7SMUzTF?`A~RzIzkk$QKz}W$^a6n(sT`V03;P!PHr=Q=`#}gCQW_-J zp#3X>815RNPDtkE2VuPYOxYorVdFobaGWgr`V5Qzfc0VFql=e$j-Go_wV_ICg&YYJwVR*)aoN#KK<{mlke;|x@q zfVY1KkhR^fmsfS&gpL(TUkldP4e$Udn)+#utLvr?xT&0)aSfXrp&_RSt13>X-_#Xr zVK&!ZQzCfR8Ff(V0qxhhnHQ}}qkp&CDkrUPd;XkO-PIvnU)}YAK-1m#Lttk!g3Zg| z)phsxbX^n(O3*#nKxx`OjNn*QKh!~#f6S-K3sVmJBP-f|kD=LBKTguMU9&(Bzd{10 zV@Jck1IWJf{{)cNPdy+)uiJWrpSI5nQk3-dpf}zlx}+lDk`6`OngF*Ym4)lI`Or

bXv-Ns$|WFX;Vall)6YB=SPC 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 Di7g&G literal 0 HcmV?d00001 diff --git a/static/image/blacklist-red.png b/static/image/blacklist-red.png new file mode 100644 index 0000000000000000000000000000000000000000..751e4e1e24d9054b814d6a9dd1ae0cf4a207f4df GIT binary patch literal 9692 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 J()}yq{{i|dYw-X8 literal 0 HcmV?d00001 diff --git a/static/image/invite.png b/static/image/invite.png new file mode 100644 index 0000000000000000000000000000000000000000..91b0b2e0fb56740bb27f62d803dad19ba4a64226 GIT binary patch literal 11656 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 O5Z>;TZM8Ku=KlaQHMSZ6 literal 0 HcmV?d00001 diff --git a/static/image/jiahao.png b/static/image/jiahao.png new file mode 100644 index 0000000000000000000000000000000000000000..618f2d2a443ab75ebf000ed6223c3372a0b66878 GIT binary patch literal 446 zcmV;v0YUzWP)Px$cu7P-RA@u(nL%oVFcgLp^0b0~|7>3w1jftWNtEw_dl3<#qX7v-9l=7W1_Ttc# zYlPk@rMCM(f0j`xK1u!1Fv8Wm!TT$D*!l2*XgcZ3{sV2xE*8 zLV)LaLTe2GAP^Czn-g_YIShl~oWnSd`-A*JG26tn)?Y9QB2D&vXRMW&%F-Yr%NTo>2_fsqmdestDp@~S5<*3?4n9!| zl|9?26cLl1Ecbb<&*%Q`eck)J-+%7s)#uf`pXWU1oab!MInQ}YFf%dS$9#wxf}njE zqmx(&LV}-2h>;%rwH(~H3I1Xt7+vs(Ahy5Z{}Jg@Z2S;J_uj+8I>6fatR~*qTNdZ+ z>*OLE>`egB5TvCWOu*qUxdaG1xwv`wXp1b=H;V{+IBSbosTj)}6Hd6edl-fIxtNET zSl~l0;WeB^bajNaf;9mGZyS5TLeSC>;zl2K6ARF>CNR22U6p9rAl z=j^J9J$dR6E%2o+;vNt{(3F!43JQ`9Qj+!cbCXlh(9n>RSCms!lmQSj{#ShhaKSP@ z{zw18aMHye@8>}X@bL8!hB4xte6Iv(ivUi4Z^4`JFIpe}KVkv`lMBWX

D(;Vu0G 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 Zokhh`#L?LM@IRNp7?_-VeBANc{{Y-{KY0KE literal 0 HcmV?d00001 diff --git a/static/image/moments.png b/static/image/moments.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5bdd67447f12390b843157675ad23bc642b339 GIT binary patch literal 1459 zcmV;k1x)&hP)Px)ZAnByRA@u(SZk=1RTNz-3Mvu`Ovs)_q7~V#q<5rYR#rwu5kd4cveLSSSyYsf zP&e(Vy(r7VgseXqJ?RaZ7HCOY7G>H4dO;x(6s*n~_6*;hJ9EEpX6{@S=D;wAnRCv! z*V%iowf9GC*GNaAM8{uLQ7?oDeC;&-20{95PVfFyYrTrNdU~Tw$0H%?g-zbQI25<|2y8z50 z*&}IY3Xw_u81*24W}O2gdDxPqItW^#Cpg&|Sx%Ljl|vp>_p; zdjZTRIjv;?l8yp!34qZB4qHg_IZ02)p0faK3@|-8`we0P$!HcCe=GW6 zNe3jiUkSj;eK>&OvG-q#7XZinD>K z!2B5rV5bzSOH!y_moSWI$W=*9g( zry~XmKtrrUa(spW5P4%Evtb^~0Bi#A7XT--`Tr3API9uO835)1xQ65-l5PWVQVlQ; zqf&m>3!&^o^Deyn|D41sw@P|Fl?A5&xFF*F(^xQ-xB<+#_xB@lzPa*lFqz?fc z8K2Dn)+HU-p@tFNBp=AjfqL@a=R6-K$yDpGcr&rf*#O=FU^O33(n?x$NO}~&RRE3& z?Rgo%wImlrXjSjCNBi|a%}md8MJTaL2`i`B#`D|~IYi3Dumr#j0Db}RJW1C^y+%_> zoM(9Xe@VU>ho3{peC>pvRD|P0poWkfE9w1|3!Ymy1{HwC&n1UNuQD%k0ZAjxbhpRe z%6zZ^%#9E@Hc{@mG4BA)(8{A$H7#M3t5pH^cqPQ0eCjir0MWa z08bUn0aL1LuNO&Po)r9d&qF(`;MS6>Q+KyEdDzrhDRc5zsL<_Ya==3MiK|5bcSo1? zkJ%+vkA8SP7IN8c#+wpA+>TxsAO;n{&S8L+*L95>lbb@oTuxM~#|&r}dM=aSCOIKB zQ7-D-2TUaSmL#{E4xtro51|MnH#MfujU@M#WT868jfh*t=+a!w?H{Fu*KZ=ZPo|t$ zl)(D;KBKKPnz_}oFqJew(iu@sxcaOfb4kvWG&GeEzXI5tY9n`Er6I|&f3nN&IIDe0 zoV84n)zsb78xhYxqyo<`y8NEVot~3+t;0&vWs&ec;%Jh7J7MDu#Oq83)|Mw+?6ob4 zYjC#nU~v?02J&r+=PyHP4a6RCC{2hwaQRT_(j<+FW@n@%C;D!w6I(QB0OA&pPYugG zkIF8|n-43~Kg&Nq)s*wKoVWwUfRyYP}aK)g#S5tj+uSyl<`fszj1o zLx0Q~Tf;B|EhlL<>NQ$=*RwSs>j2o&Ug&tB+)Myo_I3`g{9Z!j|0S3IbNtUV3pwDwNZf3N$p2d@ZABG;xT6aQz{SkX zWX8t93*g~nX5-@HW#?oBu(Pspv#|29uyHc6vhlO>@w2i4{`DdMT+PMYf?ria>R)Sp zUI~#~xw$#-@v*S7v#_%>eNr&FdONt8criJ+Qv6$j1jyCQ z#oEcu+R*{2j!pn^@qetw1EAHib})DJbfx<*9z{idSqE1)69+Sptb`Exrxa#uYjb{9PA+aS zRw-5E|QY}QQp6J&Htk=l2ZSXm*rC#mVcc4e>wZ#Q=bv^ z&+vaj_w(X^f*<7Y8SyTkq5U=TV+Rb(lUG(kRNZUiq8ql5QrerzuWIlxE9c%JVPl#8 zf<71nE;uU1jvX(Q4TeyGbvEejwV{A?Hh>!?C?5IM_!a3G-L6j}m`w&QX^!5qwnbFe zUP;UMCQqPJ?M-7_h(m~D`|~U0dQ$hJWMgx2ak1#f*;1vNkw0ls8o7dr4a2sp|3@8{ zhyBgva>pz%>zy%0ui$L_?t37m->%7-Eye&j++vgBVrQFJlz!;Y@k=!w|G zB!Uj=h&8-Y0GPhstJSYUBRWJTlcn7J+n{j7qQJ5}?#QvREAeRAB=}#1oo;-S@OY(_ zHumX8U}E>|#_!_yvbT@hh&u0Vlc>$FwjPA-LX0!4;e|wHtnM=@qiemmnVUW)P51H` zu;{|@bFg;Yc7M#Dw6u4IuUT|@=C48-Cs8B93CcueRkfi^bS;9W!0(^#X%PIK7v6va z;7UbD6j=G<$cq_x-*{N`4BG zEAm4xI~qzcyVyP9zgJOFgj}}lRL<7>dO3}ls2RfY;A(l&l zj5d-^;dk?)#>H+em$Cj1H$MzW_^LcIoUjZnZ4j&M9xQ8h@nku;5qeD30?yQ2Ez+__ zh;i$`ciLLu(U7~B+YXatX3I_1d@~C?L?+IEfYEl5$sE86amgGwOrlOI&m5EVB z$)P*s=mVY{#nbsdqv_Q?OjG8+RlCk({(er^n#pdG`}A#_b#m3{TzTX$x zICEfW6^lKL71>31_Id+B0EZkMX6!ONvz>lzGKnXY02*yCuOd$dNi9=M1w}2B$o+;r zmbjS`H6GyJ{}BXmJRM(-`ny@Ei!Slp-SBG=E95$;R60OlHRBvj)gVIZVs?ew`l|b& z-XCceqS7K{gvvqbOWSKOuadT_p_1AM->J{;?H?_u>sJn=-snkGhP6AXCnH~9ikD7Z z-M2MO=UC<L;?Y)t zrP}AzXT;b7`mU&BC+IvLO^!Z$R6_N84|RI7NF?a)u-|)6kWV7hZ#1&0oqG903D=tiMg~iz|Jh2@ z{9^*l0ToR0Nc_GobRSi{5kQ$BDje2mM&l{C0tb*+Q0oS2LCxIP5h?55;T1QMDvv|7PDi=B-gxpm zbFscLtiN9ZA zc4ruBh3`l#5PnE0W1j4Pie+rIU0-<@9cVr}Z;Iu^2H{U1y0(FT@9SCa*g`4ZVNV0Q zgRqwRECxoHeKHyu$06Wlc`fKc9IrjuSU~H?`k{9Jz@3iD5hUCl*XI=lekJ)VzTrrK zIdaG77?#lUiyc~L{$@0m1&4j$WNq|&crEXzv#Fgeh*IZn($!}Tb4o4We^d8Vgmw=5 z3BQa_uJ0<|-R5ABmN#FeBM=PT%C?bd7Ot9)F8!cWYMPoYLE;@UT?Co0O8y!hC9`)Q zmH*wRtKxw~7b-}_rI35cj>8>1W9N<&GUVa9GMjhMJGbN6^4R}cdvUqVxJ&xtW;zQN z(kN4Y%73(3>Pa{n&x21BZ~q2iN&`5_r_E$p93$v;zKuu?oZ?mvujPX}0?j61syePY z)12PExSUh>NbU6DvvqdhqS=PjC5-Y%TQadO@>hPl&a#g>RYS@|zJXo7jJ~T!&OQE> z5oq*o*L=jzYb&kwBZS=`PE>^7VHdUXXzTbA-fZKf@nD5h!S6@ItK!8?=i07kqrVzb z;ib9J&Wvy%&3)z2cqx?WJ&jo|y`lQE>XmX_=!iR~^ntuHixRL6F=_RuR?{nsNi~Y7 z_d2zMWO53B=FmC2|7&&Ps-N&v&lXx|c!o2Ysj(XyWMAu1)__l+J2X4)$ktCVof+|{ zS*IU%;#94Sq_nL%?5$kxk;w3L%?3F_u5=VRL2P-!tZgcjDG!bnxj6;R2vZkE;vpUp z$?y9Oqto7(W$D9Xw(BFd>lviX0kpG-m$7!cwe!kU$1hMLul?ME+J1yqr#v!Z0@AyA zx=n4{U}MW})@xPbDu!**kj}bILEe=ZkY<1AQ(q#z1Q=26<9}kov8qL7rQ%rW5C0VH3l}_v{!$Q)h zA28Col^tepFne9J5P5B65*Rqp_Y|DZW~TcCYvi?{pSBxnP7x7j;GN2PNAxaGm5C+e z_7zjIemPlSF#Wfg8_`SzcUfs$58Aqvlp#CtSj!)Avfk_|{?2I0AvN35S)gvuv*b#E zj18HM%S5?rzG}oaT^ZYpiLLmDJu*$jLFTnE@f9HnRJ3-POR0coU#9HlswbGYGu+5w zIJKHbx99%5U~T^Vk>@Vx$(J!O6x>YooMZPK5kN|khc%EnsjsEuF1N3mwq%mT;blwnH z^(m}>F~~FEEZCxmru&P|%QZA%6w8IUVkuB;k)yqCoHWJp7%;y>BPP6F-7kn3?ARu`&ljg?+owAImGpUY-HkfnO69$ z?qjTM0?@}pC0yFziQMs+H!=OWTgxCM*HMaJ4Rj`0gFDz)r5Rq;XQ_(>{Yc`%&5yLg zAg`zR3d7m7=!S0$Cy8ZW2wXu&=G$yr`7ibB@4J?Lud*}WC<<&^d@YO_2geM?fsd|? zMhiHby7dT@UyUh3b|zA}0g;EypZ|qwZ9f@1Q0e-wVYLHbYsTh?A=y+qbBk*@7O(xX z5uG#wr4?-vnKjbf582PDxq)hgh0!LE?(uaB_96%<4Q*O!Xp15+X5*up#ez?xS{K$F zo4~K?cZOE3#&v-s1dGQgLHO~bwH7ZQ3BP@DAx~JEXA6=)*bI#W%`T)^jD^N_8+utD zQfPHGXs<8^=l+ljK~8~C#~$=aU-?GskdI=UsfK+Wt;yDbudI`So5%oIGEmYQ1f;}Z z8Zl$McFhjFs15t7xCULoJ`MR^wkF6P+sl3z7yAazMvi#M`pFKj%)`!nRXxFuny($)RUq$6 zv;UpZ3eh0d6*5xNt~Qj80ox-CEjyI#VSF zeGq)HWg>>I_OaJV=}{+}y_Oe$-&o({O;+ajTGk_!#Vplc1=YC~^y6J`bM4b31nL!t zV2HuBM#1NRMz^O1*g`4|#QkA8NevLuIFq{0^-Bk5AJyu?@E{(_G{7&t5xvtB9Xekt z_uFQfG2tT!xyGRRgUV;DaLn;SYWAe)e=yvF^JpVlFNfNJ9S*={G|1Gpy`ESISF0-= z%7a$R5z->Y{Q9s+KqKzs!BmlQ5%t@H9MsZCxw$dA)6tOH{i1au8X?#1&$m_m^NwDl zXM3B`1uST4@zhdrunjCr;8fSF$A^qtm6$$8tD$I15diT3d95#Sqn+lL_i;o<%iL>g{O5<`Bg|o?I zQ7OjEIErpUZh~y7R)ulToLs+Hj}kM|*U6f*ZHFCwYfYn`gLLKF$*8fse6fd4+EWcQ zLP3rCn@ukF!LtGnI7dnfZOY&MU<5zR=+o`C(nx)bKqRBqeR})Z+)2tNFpq|lVfYEa zw#Tk5=gfY$>(N1~R>tW19pwSf?Q*R_IU$-snP{UA)PM1pqbP~urq6O)?hcG;Zu!5m z6X3ao0DmY&-hLa-w;pBEh;zjzH^eS|_J1$ufP^v6zt8(k6nk{em@-7~XnI2xRp*Bs zHl|71`vx%y`}v&Tr%b8KTe-=USCJQ~Vj$l)6lHFxmgj~hytN7H*d2P{w*^e*eX%a8U^E6Br77>r@>nmiSUKB8E^*&t%3 z5u*g#ylU{``Xrr^V_0$%5gE)6OXUX^0W6G4w|W zS{f|CotEb2ue@j9wIDZMbh}qX^T~cx;ijmLEVMSV+{I<|cz&flg$1|+c8j%lYyN4} z&K}te)FC>aZVil#H8HENPoV2o!O4Sg(AN1YW&he$JPdhnGZ=;zZ1s%2s_daV!5ze5 zjUj6ctX%Lx2pY{p!En$NB&4e=>9l#bt^)~TVj!U_>Z@>CB}?#GZSj-pGin3GW<+7v zkoJnhe%q)Z_f~i)qn0}9T$?zvZ;<%99-%X1e4D-_0kZ>tb^dOZd_&RXT&(y7PZQ5% z>AOzDrDbp;)%vUR2p*u`y0j^TQk2t=NrHG#ugj73n8b^`@#L4ICyRXG&Cx{DngQJBiNDiJ9XN z;U_=XCY1H&SIcm!b9B66H>w63wZgmT9#I+mB?s97KB%jQ6EcTMWZ~>CX8EDm7pO5m zKVka!YeuNU*mhcT$VN@rsUv%C^(AagXVjIqod$fjRw?*vQgJ|!V6KHjvLWuG1buBwa&Pii%FUOL})gq9=j5j?vlW*KfNrd zxee{WJo*fGrMkkun+Y9lHCcS^%+u&-03^#OLVQ7NajWnQQXn@ESf;5KhD7`AAEauVI@dJoEw12WGV$$32uaY)101;1-GN0 zFa&>ijwE52Laf~}kkixjnvNeDz`n4E-ke0~xn6T+CqtymvstPIV{VyFWUOCn63^d!@ zF5;NKNfgfIobP^E_)u65Jeg(arcy%2krkT~uq>hXF33)U*na04sT>p-7EaTXSmib~ znfn6eO=Py3&um1gAP+sUGZd54b%pEs+rL3QG;#{T=Dn?NZPB{xfixf6d zI{s>QUL*^Jxqn0L|5)+2lQM_n@X?VDZFZVz^2aE+&MKl9zD>$y9?iaX_HmDLD71xe zc2x3Z0acKogBJKQ_>fY>g&m3$SSy&lGl|ci(agY$4?eIgjsqGzyn@PJmCSUsDPFz0 zX007KhU+WWj7e8KEG`tD>dg`hK6gpkI;-|2HfJfj^?`J@c1+*RR{a||YOA?SA+9|D zr^Wj$8swoTHd!4L`4N8KAl)KndE z45qg|qCz9@(PTM)9h{tt^)gG2{P>*qDu{B02Uu_w(Z-YiS9rNYc_s! z1^Z?6hZ!GuQ>w-Sf0?X4*fjRhnMmh2wmk%gE_l82c(K&P&!Dbkz*8NOj4FH^nmp7q z8TtrYx^iqGqTNywMT1sKXo+?tmkm&R@S2)<-varUF*qlrIVa>H0@GGu%B{2pR&Q3( z6Dgs=IQ}#1(=$8lVFjdJE58c2e$bi~l-Xj32q}{`!)uvm>yqq1OIqR7vk|>n+VX1w zGtKw_oq>8s9VTz|piZ|qztcXMGZ-mV>k7f0^!FlSH4$M+!CcsmCU2Oa1?rKcKu>f^ zoH+y`hogruq~D_W&jFQ{_7F#*+r{L!(if(&s!_PMNp-3KyL-zel_?G&cTA6C;u!GN z9#JB|A?~;bk80!eKAy%ZMnTC?jzp(SF}2V}wy1bPawVwgXMe(^cft`oCx0`lsCQrF zM^;M0<Zla9Es*Kg?Qr7`jM8spd2U@< zm?24{iWOh2tikX`ZV6U+RWk>v5$~mhyia_JG4%}%WuVk?#DoZb<|*4*MdGSiRz|C; zY}S0{8zE&Z3i$eXwwa?oAo-k9_cf6c!Sk6TZ!&RTzW2s+Go#p_U6hN~Jf7gdc(f&f z>1N6@pu^u>tJ@Q9LO$nFuAAq2TzD8x5J7fUr%B2-i_RLRYU$g+w0e|9EKhd0vCXLd z%$;^3rVK6=?AS8}yWDO+WU6n#Nk@Q%ccs^_m zp3F6KGW%~gQ9bNpu_95$UiC^{Q_b-vF4sH7h^UNeK#vG%Pj=8g#E{^PYy<{`E&wy6 zNm}pEV9p0x=giBbqFXZAmX-Na!%U<((mF)zh|YPH`Kl?B~htiNhHP;Rze!7r6YS zlC%aqU2mA9Ub~%he5hkypFW+wxa64-m{4S7!W88K~uKbAsKJ~x?Tni=z+FQku#Fjo{d2rm*P||=2 zDjD-Ik}G56?|R-cC->5Pg?0^f!bz-YzUH*PNWoR=AL~;CUoX2}LL#^SI2tbqt-e@Q zAs0*r#v5LJPojGeao*MckeKJaHBzs{Z+4tJ0)6$7!Lpad|GkL&X*H-awr131*G~}P z&xSX?4-Y?~_$P?5rZ|b&)R@Sz7aoBQ{b~|p?z@!=skt5RIoP2p&cqjlJ4`kt{}wQ3 z_schDr)j?H*Df^go?+th%Vbi&3#J?CnG|r>x5BCuXo4SqE*$rR58IipW!}zNV%2Ww ziLF==^gp--U$J@IF^qZ@{a+)Vi9ie7Ia#nQDcoR{p6tK`4@Zz_IW+BVT&JO$>9)&Z zjJkA?J_QAmd{hrDxE+=a*m~DHdH;U7DRt~`Thqkbp+AD2-`v|I@GE&-&%F^u*MBq3 z<(uyu1O(gX8#(IyfwG7XHq<0m&^~@B!?)6IKS5}3@#aL0*$Ahp1BGnBk;RW{Jg96O z5-}g?yE4Kax&xnup8BSC$R0#DpQL_l&*O7rA9QV}*<>E9swS3(`EZMjfxSaLgr(J;&@{(THEp7*&_JcBUo7 zwi>koWeg;e$0^#Pt=^8-{z`s1O>DAU;wTt55PB?gn(YJu92v|f-eg(ADRk`@6Z$M% zyzQOvI4nnF{`l7`9wBaIrOi9jobjYYb(1AvB6SPk;sIQTzjSkLtj)DYbW!080z|$I zWEPg`Etyk8rqrD8t@)ng>aA#yJs1Thzi~6_ZGVn=l}c zvoKm)wuC(upr`Mr!2=&Q)ZdGQS6Ng%O5wSvP#@M9m^9@w(Yn4j)PqAK+0AoXT0H<{tn#%U}MrXyoMihcBZqdO{SwU zoOK)-c&gNt5K3JkBuO@H>U(|x^|H+t4;yaRsMA8te7`dV3{tkII*DY_N_I=ccCcO{ z$PNmZ=6vA@X=OO^(l20>rlkzxv{7h?tKtI0g4m?BBeDFx&uF{s5nkr(mF1774?`J^ zr4_WEE;1&5PoeX(ojMwktc3?MTOZ=NuKchwBMRz}NC8dp*6W>kF1uUXHgg!odBaa1 z!3|a|*}6-3-dd2zc{aAAt->r0DF6f7xd1uDsOPohgal9N_im2qu_RrS?X9fJmd4>c z2x?<#p~~AX@KRGd{WDiK-;-|hFB+HG+!@nCX)I^FBPRTy0iG6=H_JgG*oHBj;3n^S zD95?@=kEC%x>Bz9)(E&Q9r|izzduv*hU|PVe96};yUVj_a|*Cjg$KpBCZ+brBp9=W z!09wqblM88#6{(%mrlW-2{PCSJa6LziM;Ysq?(=oR7909jA|bOH((4d!M)@g7VYKZ zzZoJ6>%v$}=6!`$gmHhMnZNhvzFJseW_>YCQDn5d3G?J9H;Qqn9YK$3t-s)o;K%un z*M>Ft{XmN?{WXTsr-L?j=0{M|);3fQ{1_@bFyH2~2j1FzcqHp56Kj4?=#F5ZoNt7^ zFs9Pq@IpZ+_4Sd&UJGDzr9q#oLyP&8RR9T!xexN+6(21I0ce|%jmd|-qxsse8Eqba zTKi)OMOdn{#KMpV5A3k|+9XLPlVEQSI~3;&;_#w+nMb*OV(}f6)@5+>Klq`|GxHjM zx&-!zH0h#Q_I~U==^^Lki}Cj3epVSLaA(bW{ZUVWWkHvF?aFPxCoG6Ro}K0vzulZ# znbxm&yNq(1#sJb=jw{2wi(f!+=rL=gINFMrkkN}#)#=NQzRw;A2aYJ5*OcN!*>~1pOv=XN0G;uhH+F`6c2%b91)t_@nbP z@Y&d|wrV!mVfDNMKekO2PK(|L`Y0sMQFvAKHX(e$`IsKPVAi_ZT8JdhaO+T&K_z#z z@jwp57&1Z$_wHU}ZN#GQ0bP%GrkW=y!}&>6k)J+L$O4~6d%3Z6NamhnJd-3OXwGrf z+O@;e*lv4O>?CNu5w^`ok0)@g_T|dDY7cS?6Z0$MX%hR)=7(HgIybbmP5O9s1^T5B z31kM0I1p8v=3?UuiP9X8I$%vF-boo18mHfolEj(#e)(YGhynobB=?qj9AOVF<9B;F z?MEqg1=Xhnj+0l8gb%0d(XBsF9k5f#@V3c~y+kkZ0rFY|Np+{a0!B?`$*gCo?uJtxVz?E0$TgtMll_pdoT_1dg;1ZwQ_4E{ljI{2-)yB8lXu~B0^ue?(={7j_nwai4GSf$&q0H= zK^;fe2izHa0vVKA={(=ZFSh>_`_-#P82eF(+6{pDSVQ$kncRv~B~`SQ)XH|1e3@Ln zZ%;(33L@HK`t>blK`kDPw7aa+rKl=Oya0Xr1aDFTk2Ob1DzL)BzfB! zip|S+U0o`LW-eK@Q^{(q`K3L>Uj)}~QSDF?i^S1jtGU=d8HP zLqD;|AgryaW5c(=)Gv_NlZ3=3zp8>ccofB^VXJ)^TyQ!@W8+!EgDtN;?zH3}gC%H`trG|T8Xm6#4lSBU$OVj9qut@T4Ipj~q z3#^6kmOim?YJM1TKDNaA24tPmW?xMeqK9`xtVclN-8P{I409&G z6db#7A@Qw}0@DqPL^nA5uJ}3<&vzMtcsz_i;pA{O`(}l&*o$UVjLb@+xB`e9RTF%S zxmjY)iJcat9b)49@p;OARn6=u{+g^tPUQ5al*DWXWdpvq_Z}nZ!)PR*xCdRW?R^m$ zvZ}1O#L7ZbJwC8!sBmP`7SBC4Y9=ppl8b0jZ1;C~M{YA?cGe^n&pmF^xKGU3BqF3y zqD+if050V0D@5Fr)Cs^()xpFQC-#Z1B3W_{hglX`DpEe#n^8g8^lBc$EfH=xm$*Ej zcg^{{>_^aGL3H-KQoBBzFczqfkt?p|>LF5#6aAQfxW4)btenA5yl%X1V zs*I7hAFK_38+mWd{?JyESl}Z`$fEDlBREF^qY%DA@Wdb`SmMcMQfmt(LNGge2}=5J1)ngC>!F@{R; z?B7Pj7&}>#7a{%i&4OpLjY*byB^rTN$$*C=IJw?5-=&n`$8&7TokF)|lW7s6(Zvq{ zd%8k$T=ZHKHE05N=q-hd@M0GJ-ctHj4PKc>l58jJS~BulvN+AS+{nb;raMQW@EpeC z1c5iel!T)>T<++6Nq;6|Dd_mv#bNdf1&A|Q|7`jwR}}`ecZloIxwtndjv+S6j?|AO znJ5YIi5`#>gk3Dt{XOiK6h|?SZ;aA`mGw3dAw6OX8o*#l&U>qa9wDdr=5-`9)$$|A zSI;SxeWlsYEDBKMH$QuukRCLX7e8y=m`cl~8fhTe385_4Y%yQ?Jbd-E$PnR-~^R$@!SQFYbNO+os|Z)d#TF5uN# zrHtJjm?}tOW>T!l<%%L>NJ)!?8DL3I{;$Un3%o>AwMPe-N zHdRjGHZ>$+L>mLL1oOP25e^0^7gSL#AylLYsq}k^Nj@_PcB2a~f)3W)w?q%f7c$T4IP}ew~Rcq~3lC^-atPUxKQB}@*S|2sk zFB)h(H7KccZDGbW3Pf=%a-*K<2_PPP&xLZJNO;x@@(pMbqd(#b3WKeZ3$8P9Mrti% z%i^g(j1pdyufc7)9OHenm2#udg+Zi<=W}oHLLa zt9`KOPm3uDK4rx(K)~X~HeGI4boN~)3&tM5OZFrV3Ka7y@d8w)?U}GG0~xI+8$FVx zxIYz%#-VV!be;er2miglBl?TuL=k5>4_H126$W~Z?$?lLRa#Zw=Z+>+-LLfVRr;WCx>5X-BHKnlUAhy%OqNyl;f)^lwLaK6QnN8G?Q?erFMN19(D}vfU7{x5);1*}>P4a5EI@;o<`< z)6t?kL=I_N48AbLL_wkB$vOWxXym5FXrdASE5h-!I&if1`aDhndL02awh<%t7^U%`-L`mE3)?h84D6 zhr9o1h2pYAhx4%F5Y=T|#RTWFkKvisU z-B*n-oT*Gatz;EjG6Mf{E>3-2{dGm1`(K|pU?R5-v|AyNt6eaF12 zfXw!A^VM1h!Nef28orxtGDs<$R`SJjx+ZAgV;cC@1Lei*P%Miwrc=?Zk&)Y&!I&tg zz=aMgj4%DCaCy^JGdDqAn~$jZBH6#eNTf+}y9YP&@29z0RHZkxO~a#Xg#|ZQkq(<@ zyp;Ve87RW?+}%C?WYHa?@e?ock`jxrOlN74x?rxbsw47ZpT_0;HN@4Ju#N8U zd8l+=XVX&8gwqMK5=r-Ky2AT~i$?}0k%%}$1*csavXd44*5UdD%&%mO-Bzh3P1fCP zQwSZh-^=FlY90$I1h)QqCgk>0?8`Fbb6*wk}NH(kcg7jGaSipz;XL4TW(jqHXF}=!p*$+oV`@U+Xn58iFI8ed1pl? z0q<`4F_MCi;lL6ml^{NqOkAu?T{@Z(8M(9YBs@60sKgQ=Nj^@}#V-#;lU@EU=1k*0 zr{3?}+YK&gCMR(kD?3*?1Fo|rLzZ7ax)w7D{`BiZo+F}0qYGTF2I5+_dtL!+2xMB1 z&B{})Y&g1zmL{%(!fQY>B+Kk2J^^*qRF8z>l3gc`VY^M9@`I{2Aj3S>Cu^Xwsy^WK z`!3Zwy{9CS=^^7)#aMH_@XeKKig$vIHuWItE)`1 zebITC_swg51wvs4B$kq+2AA@HmS8Iiw0#(%;`w$yw6f?2%RSK;ReAan(-*NVDEp28Rzn-p|FjdabTO^Mfn z@fe}w6XX0HFsjW1EA<0O0h?ncW>e<^_91`jfw9Y~mh5N_eZE>!CF^y4d64O?U4I2) zw|Q=f%JFH^d$X!U^(<$*;dW!5Obk!jX9-`y-HDD=M728|%05}z*dj;(WG&B?xKlfJ zb7#0-RBS6xC25w#tyz)u4<+vZ#OW`24L2;Y7=>0vocN)6u@j7J`6eRs1bJ9={Mi}v zx1f1Oj!2M$w@PO1!xMf=*i?NNl0mgcHIbz#{lXZrqMCGi$1(INXHwwKXB5S?gRGM& z{PSIbxN7f4asdielezO**;(%;YRzuaWGVJ%4VeDAzcj<6!|Wy;r_cxMQHFh;laLM@;Hn~ACIAq2(I zL86{Va1mc>eqFvNBhdPB4yc* z$!?zK)DHu&-q$(pec|s{wqUPa;1~k3u7y@%UCSD6eLXWaMHVhy_NtS(q5T)8eBhsC zw^8aP2#O<K@ooG(EsPQOoz+^}k==gSap z@VMKz9MR1XG2n{FwSqkJHrvwoWZa&0Ye zIA6R;KzTc){G#137h~r-^x|VKF@sY7*x6GR>H7A|&6@f9yn~v_R!?v;3&JQ5pl9!q zojwDbu^#!kWE@+g)BO8dfReF;lxX^benPYEObSJlHs~oW8#6=Db#4WjfiN4h2HCcN zWAiqlo^eqfGMs~L$UrWy8Ke>2njkzt6$=2*@+=`OfwX*27f2h*PefE9N=SZ8;>k;z zUiKMpSAY4jnMM=BoniK}(&T^e*$Ib0t9&VE{A+CBq!^g><}8tj6wKVO=yqrXlK^Ludz}l?Zh1!Vnnw#}W{bu2<{Zky zk3t0p5izM`FXF3}5|EoJ77U#4Neb9Q&!d9v8sLfWA`EZ!bk=?2nIt=*&4I&HO0};y z^}x&M70)MUK>iRmE_A1dwOwpUr6rGC zb>9|)Ylr5{?VC@AtAGeB%%Vdmnp(~=caz{ZPj+UC)EHxP-Uw_Y3C&uW%!}*-+iUcZ z*V{DdQ~a@$YejIKU0fo7bUln|Jt-xSI`aodsQ<^96n4UL6wxbt99ccFa%M`nE0mPM z4!)J`&G*ls={KD)(RERQsSC3fRALgKAbTcg^Jdx9J#e{To$Q^yo@VR~jGhGfvnbK? zXEp&4{s4bbK!cc9Z@>S&G)QRkopHfug(_NV`t{R#FEi!|a_7CEJ?;x*8bO`Wv&9B3 zKuvS7j8w-8e(c&Ccn0~@uOp=ho%?7=0Nc|ig%c~Kh;N~~H9;Pn$@rtE+~Tg<-qESn zy!E)(D3O(^(T}Y=R*yyBDp{zQUtVlTe!Wh5ZKQg=T!^tZ=7^`+FLe4F7h!G&`(24v z`F#kwFqEg%(%&>VA3Nrgt@-%0Juc4sVpqKg?0cKun&4uQ73Xnie3(AOI#30DY>hZ3 z{&`!K!)Y1Tt+a09Bp+Z_xC^X`JCY!IK72|#<^l$Ga3SQSk@t~BR^e5ZMJ)$Gl0;Fu z!G_b}S*nen$#u?HPBH?LHhLXgH?L6Uf-7aHyb3)x4W0dn3i{~OAos4PuXB;okNO_P z_Gh%jcD*C$=@uhHUip@V%MrGU5+nfH7v77!=RBrL42r)mHrGn5+yFU=;6II9s_+WN zt{s2TvR{YV9}r|nHJRJwn7h1gWDQ#$!6yx3jBD82*kykQScig-J;71GbH_wO#u3{t ziyhrrQeqBou-TU855&kG0JmJUB^Xj7r(&1}&~$B@uzGs}+~B7u$hMfVKW~tI;;UHV zllv-q!;R|<*g}0Dh>0J_2!7veJ=%ii=Ov~Q7<>EdxN1Jn298Enr}SsM71oKW_P)>f zf(iP89@}A2jgKi{_{fZJcF!~ z=%n72i18MA4zlo$-zC@u=qI{`)}dMcN(ym{bK~)!wA@qSyd$CVsQ%wy*wJjh{GL>b&=ZrO7M%-0k~)eF8O8QKq6x6ssctwJ9qV%X5S` zjsED`b6O7NT)fj?tH7mw#;HO>mVTw8W=d&OaF?Rh=7eN%QAf=R@OyXDA*kA zS77-_EjXyj99WiHuwYAndFzH^yMmPU;&m|BO?{jz;EtF}0Righ=*ZP7KK<&+xA5&Z ze{fcV^TNogU{rFgXSRS`1XQ;YmkLVYXSsY=|2)l#8R1Irpit={2XP3)W5ud)R>tD@ zO*L6g(5p2zB?sJcLg8aErOU^kwPI}s5~^r{ibNAD+KE2q$0$ZB;xb}yIqLj8j|^3* zu{8g(pEWFHp3WRilXgH0gUg9lyq^6)GWL7hi`GX2Q}4;3v`G~frEFiR`hM;3crr^o zGiCxD+85#|7eV?4H73@+FLrHM<5NFFR=1$OXzE*T9Z7(zcHzkg_NJ#}D=Pfu}@s%sK zo|{?aKI+A!Aw7ppd<%YcTee1m)!czQK0zSvEI;g}Z@@g_gsg0Y#1r`7t$TI+h?%#C zW#Ar~pCX^>c=yo1dNDG6kx>({IN`2s{$k&tVUI!8xqx^6I}<-&W)Mnm$Bl45OP7#a z)P+Zp$AzXyam(ym$K%0W96S#TrZ{$^li;RH(GZaB&=0DaG@;n7{AJaQ;tNt~F{=;U z*w$4UYxNPWK+4eDaMB1s!Qy)5*i+$%2*<{)p1eMD zW1;dG%~J_)ux4Spg2}2rNiOH;nhX8n6V(9)P0^$dZ3oo!;)Hc0q!! z9}pEv07vdZ5@%R8vT3VL8hk)`21!!9ne)_}BYI18Zl0`+is-Y4a#z4HJ}V6sMoEW0 zgvlA9+77(@5Kke~l&SMBO`$>nxYX4b;h%P-8R6f9Z7%iqUEsHhHT)!ourKl1?ZM8Y zogEs(l>9qlQ$qH>Mk*+_X4W=MUlA*t-GP)dKhf$|^4)J)G^<@mgGICU!8>ACydAGj z0Rg~H1tr#sc$aUdGO(>~3Y@QL+6nqFS(y$JYz%6`UUur;*%ingoO8RIRcup89uG|k zih@%!%4GK>ZN>)?ug6hvicGVA=X%E<(uQcf%Mc^^L1dcyg?PXIJLSG*5iW^&uTB*j zyO7Rt_d&e1;9D$&l87d5tP+O`BW)DTM(@Sns&bvrlbZU4A%Xp^d1NkRDiv2gPDCb< zKMgWujzc?idVj5+(RZnRKq&9qkIYL_^~Zh(=Bq&27u4 z(&+g9^1ov_j~oB46%43g!3-cp6+5Hx_3Jugg0+r<#u{rtJi{k+1P&CG>kfVBvXFo-!CWr$0S;+yVr_O#_dt{U zhGk6(if%9;t7&M8j}}gEEN<=4&-6i@5JWR=8HlO|>N_0V{bVeBoHC(on`uVS1oaN9 z8HKg+I=;`S;MI?Vh=CtylP}2|J(TX~LYWr~+Y=GUs!Eagy^R*(ZF+e-8$SCwJPsdv_zS@WxA8Bkf;1A z;?Z*)NG0QeHBS|)!A%Yb43Gt1Ph)t`YCJH=Qw5lMhv|@e4BUZq{^Iv<5N0C(p8(Q0 zEyskZXQ0f-n0#VSa{#a5vRwzvd~tqhH^jIVqD0UA9Qnf!xxCjiEZ>c>YZsQVT-08I za$-!xj@PH~=)Y%c*|JYi7UdEHnZ{9 z_e{Z%B9KS~2JOFeVVsF!{?8>Ca~%SDQdn}DsTveAA>BqWQ4pq{fHK#S*V&-uWXD2X zrgg)AYZ6e)K4OA0)hDp9_bYWW0jDzDR%#yu`2gTR$a{^(F< z?3ihD3C_bpUB?s=v7>sVR5e#*Wf6`EFpC?#3B zseP$HgjMU(ol#^z*PYP;Nr<3J+#1R&O`FLR?nAFyB`Jj4;6a%myU{LO!v%=zvsfo( zP?XL*g6K*Eh2x)rQOr94e1_%wmzW*bGv%J9)G85Mu1nzH&#R8xInbzz-Zbn{G%*J` znq$X`R%8zwYv5(^UwSIfI>hUdF4-rlC!;s{Q}T z&<+G^v}17lNqy-Xgi~kqHR0Fzc|L^O;6R!CwMe2?M>bpl*=?U2Yv%9kFv|zc{nNV! zv0SG6aS`6$&bcm*J>RdI$7z~7EfORZk=P<*zH$YS%h_bff??{IV1IRnpa*Wd5QZjU zVe%XZO1iBGCa%B?e-TW0j*SZ#+kR)~Ag9ND1G2bY2YJbVLL1p*elAV#hhCUL`ocF< zm|QK7a{!G|GHb11n#D`3v-8iK3E>M}1k;+c_(RsQelK{Lfy4*{<-s)X^^&ie{9qbk z3IvpSP0QGl1wrk^o)_qP$rpkx3vjt&alp%EwqF<8aCNK(lnvb-lw*lGn<1B_3d3v_ z0yp*IpA8$Bsl}c(MaKM@EexZh;PG19jbP%{09$Fy+}Ycz=O2SaI*%qV3>{_vp4SwR zg%pAKg1ykry~*r|oJq@{!Q7)?LgvC>2Z>sKaA*_f!v-zF3RosW6l12xS<@wtGg^mf zZo)uV*V#AhU|N9wR1(=wCP8z(@k>EQW%OxY(wBbeT0cDeYrA}&4dJ$XQ08TtLha%Z zCsU>lkTzT-4O(|R5Ak#y%fpU*re7CY`<$q?Ho(RV-364nJu)vggRx}Pv1Ef!+LiZF zYoDgXk)2&lw*~e+Gu-B>Oh&g0CV|!&Ox}ixSWLkzJYQy#fJLZBA9y08ame#IxbakyX3Nt zTm@xn>B$_3IrC+VneSIiDdZPcRGNaT4RI@C*Qv(LcC3Eh5s1R6uF6C;h9O@4d88sY zKs&vP)j$GabRN={r%@Q)!=7={_qlRMZ-<^+L~7g1q3QG8ae~D-3g3#N_=`SB3KD_F zqpl19C=)*xI;}m%%^*x&fwF|Ebp%E2vT36Zbe&AOeh~?O5tCSct1Kt`d9fAe%2iOV zGfEXi#WsH<74x?$D0A7uuw@GYN+AuUn6CZ3TVPfnQbs4{a`ABiD=+AdB`f*}jQnvk zEJEU{AG$JyBDNqmcLs*)ub)5j=s2GIP7D{keF%wl3(&RsrgBCNAW;$ekvQ@{kf1); zKYf>uOa6nX^*H%f%bRP=lL%ACpe)$?4KyyBCXRj7af}nBMVlQ@n(b$KrW5_V*x0$U z2Sc&Im#^I8Ruz`{TiMFO!I}-qz&ORgChDp|xdLjyQL?$Od*{6$`e7uBJmqoGWdFwHJz6v>01mT??QSBj$U6l

KK$o2iTH2ASNC_?Q|Tr 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 literal 0 HcmV?d00001 diff --git a/static/image/tabbar/compass-active.svg b/static/image/tabbar/compass-active.svg new file mode 100644 index 0000000..663e44e --- /dev/null +++ b/static/image/tabbar/compass-active.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/compass.svg b/static/image/tabbar/compass.svg new file mode 100644 index 0000000..b2efb28 --- /dev/null +++ b/static/image/tabbar/compass.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/contacts-active.svg b/static/image/tabbar/contacts-active.svg new file mode 100644 index 0000000..33ffee1 --- /dev/null +++ b/static/image/tabbar/contacts-active.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/contacts.svg b/static/image/tabbar/contacts.svg new file mode 100644 index 0000000..3cc0f4e --- /dev/null +++ b/static/image/tabbar/contacts.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/demo.png b/static/image/tabbar/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0a8dc29869888278b98ee0697645c75f864a57 GIT binary patch literal 7671 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 K=n@s{$o~iAp`0oJ literal 0 HcmV?d00001 diff --git a/static/image/tabbar/message-active.svg b/static/image/tabbar/message-active.svg new file mode 100644 index 0000000..8c4438b --- /dev/null +++ b/static/image/tabbar/message-active.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/message.svg b/static/image/tabbar/message.svg new file mode 100644 index 0000000..eddf7e4 --- /dev/null +++ b/static/image/tabbar/message.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/mine-active.svg b/static/image/tabbar/mine-active.svg new file mode 100644 index 0000000..56d53f0 --- /dev/null +++ b/static/image/tabbar/mine-active.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/tabbar/mine.svg b/static/image/tabbar/mine.svg new file mode 100644 index 0000000..9a212ca --- /dev/null +++ b/static/image/tabbar/mine.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/static/image/user-card-bg.jpg b/static/image/user-card-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab4be9dd9d741a37bf307020289e6bf3eb5e6c21 GIT binary patch literal 29335 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 L7^I`&`Skw*elTRp literal 0 HcmV?d00001 diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..94e2432 --- /dev/null +++ b/store/index.js @@ -0,0 +1,5 @@ +import { createPinia } from 'pinia' + +const store = createPinia() + +export default store diff --git a/store/login.js b/store/login.js new file mode 100644 index 0000000..5443263 --- /dev/null +++ b/store/login.js @@ -0,0 +1,47 @@ +import { defineStore } from 'pinia' +import LoginApi from '@/api/login.js' +export const useloginStore = defineStore({ + id: 'login', // id必填,且需要唯一 + state: () => { + return { + userInfo:uni.getStorageSync('userInfo') ? uni.getStorageSync('userInfo') : {}, + globalConfig:uni.getStorageSync('globalConfig') ? uni.getStorageSync('globalConfig') : [], + appSetting:uni.getStorageSync('appSetting') ? uni.getStorageSync('appSetting') : [], + multiport:false + } + }, + // actions 用来修改 state + actions: { + login(userInfo) { + // 登陆后本地保存登录信息 + uni.setStorageSync('userInfo', userInfo) + this.userInfo = userInfo; + // 登陆后需要触发一次更新联系人 + uni.$emit('socketStatus',true); + + }, + logout() { + uni.removeStorageSync('userInfo'); + uni.removeStorageSync("authToken"); + this.userInfo = {}; + uni.reLaunch({ + url: "/pages/login/index" + }) + }, + getGlobalConfig(){ + LoginApi.getSystemInfo().then((res)=>{ + this.globalConfig=res.data; + uni.setStorageSync('globalConfig',res.data) + if(res.data.sysInfo.state==0){ + uni.navigateTo({ + url:'/pages/login/404' + }) + } + }) + }, + setAppSetting(setting){ + uni.setStorageSync('appSetting', setting) + this.appSetting = setting + } + } +}) diff --git a/store/message.js b/store/message.js new file mode 100644 index 0000000..8626b43 --- /dev/null +++ b/store/message.js @@ -0,0 +1,163 @@ +import { defineStore } from 'pinia' +import utils from '@/utils/utils.js'; +import msgApi from '@/api/message.js'; +export const useMsgStore = defineStore({ + id: 'message', // id必填,且需要唯一 + state: () => { + return { + pushSocket: '', + chatSocket: '', + instantSocket: '', + webrtc:'', + topContacts:[], + contacts: [], //所有联系人 + chatList:[], //聊天列表 + wsSendData: '', + unread: 0, + sysUnread:0, + msgAt:0, + newMessage:{}, + msgList:[], + webrtcLock:false, + NoticeCount:0 + } + }, + // actions 用来修改 state + actions: { + catchSocketAction(data){ + this.chatSocket = data; + if (data.is_group == 2) { + this.unread += 1; + } + }, + updateUnread (data) { + this.unread = parseInt(data); + }, + //初始化联系人 + initContacts (data) { + let contacts=utils.sortContacts(data); + let topContacts=[]; + let otherContacts=[]; + let unread=0; + let msgAt=0; + let mainContacts={}; + contacts.forEach((item, index) => { + const parts = item.avatar.split('/') + let lastPart = parts.pop() || parts.pop() || '' + const isNumber = !isNaN(lastPart)&&!isNaN(parseFloat(lastPart)); + + if(item.group_index){ + item.setting = JSON.parse(item.setting); + item.is_top = Number(item.is_top); + item.is_group = Number(item.is_group); + item.is_at = Number(item.is_at); + item.index = item.group_index + item.imgname = isNumber ? lastPart+'.png' : lastPart; + }; + if (item.lastContent && item.is_notice==1) { + unread += item.unread; + } + if (item.is_at) { + msgAt += item.is_at; + } + if(item.lastContent && !['text','event','location','contact','create'].includes(item.type)){ + item.lastContent=utils.getMsgType(item.type); + } + if(item.index=='群聊'){ + item.index="#"; + } + mainContacts[item.id] =item; + if (item.is_top == 1) { + topContacts.push(item) + }else{ + otherContacts.push(item) + } + + }) + this.unread=unread; + this.msgAt=msgAt; + this.contacts =topContacts.concat(otherContacts); + uni.setStorageSync('allContacts',this.contacts); + uni.setStorageSync('mainContacts',mainContacts); + }, + //更新联系人 + updateContacts (data) { + const contacts = uni.getStorageSync('allContacts'); + // 更新联系人 + contacts.forEach((item, index) => { + let contact = contacts[index]; + if (item.id == data.id) { + contacts[index] = Object.assign(contact, data); + } + }) + this.initContacts(contacts); + }, + //添加联系人 + appendContacts (data) { + // 检查是否有该联系人,有就更新,没有就增加 + const mainContacts = uni.getStorageSync('mainContacts'); + if(mainContacts[data.id]){ + return this.updateContacts(data); + } + const contacts = uni.getStorageSync('allContacts'); + contacts.push(data); + this.initContacts(contacts); + }, + //删除联系人 + deleteContacts (data) { + const contacts = JSON.parse(JSON.stringify(this.contacts)); + const newContacts = contacts.filter(obj => obj.id != data.id); + this.contacts=newContacts; + const mainContacts=uni.getStorageSync('mainContacts'); + delete mainContacts[data.id]; + uni.setStorageSync('allContacts',this.contacts); + uni.setStorageSync('mianContacts',mainContacts); + }, + // 初始化当前页面的消息列表 + initMsg(data){ + this.msgList=data; + }, + // 检查是否存在此消息,有的则跳过,没有就更新 + checkMsg(msg){ + let msgList=this.msgList; + let hasMsg=false; + msgList.forEach((item, index) => { + if (item.id==msg.id) { + hasMsg=true; + } + }) + if(!hasMsg){ + this.msgList.push(msg); + } + }, + getContact(id,message){ + if(!id){ + let contacts=uni.getStorageSync('allContacts'); + return contacts; + }else{ + let contacts=uni.getStorageSync('mainContacts'); + let contact = contacts[id]; + if(!contact && message && message.contactInfo){ + contact = message.contactInfo; + this.appendContacts(contact); + } + return contact; + } + }, + getChatList(){ + let contacts=uni.getStorageSync('allContacts'); + this.chatList =contacts.filter(obj => obj.lastContent); + return this.chatList; + }, + // 新消息推送 + appendMsg(message){ + this.newMessage=message; + }, + wsSend (data) { + this.wsSendData = data; + }, + getCount(data){ + this.NoticeCount = data; + } + } +}) diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..c24ca6b --- /dev/null +++ b/uni.scss @@ -0,0 +1 @@ +@import '@/uni_modules/uni-scss/variables.scss'; \ No newline at end of file diff --git a/uni_modules/map-Point/changelog.md b/uni_modules/map-Point/changelog.md new file mode 100644 index 0000000..c7d03f8 --- /dev/null +++ b/uni_modules/map-Point/changelog.md @@ -0,0 +1,42 @@ +## 11.0.0(2024-08-15) +- 根据反馈,很多人开发环境不一样有跨域问题,为了大家方便,兼容处理了跨域问题 +- 很兼容的微信公众号复位定位做了兼容处理 +- 微信公众号,网络请求编译问题处理 +## 10.0.0(2024-07-24) +- 插件市场 +## 9.0.0(2024-07-24) +- 根据反馈,有人需要我返回省市区编码--安排 +- 省市区编码已经返回 +## 8.0.0(2024-07-23) +- 忘记添加微信jdk的引入编译条件了 +## 7.0.0(2024-07-22) +- 功能已经齐全如果没有bug,可能就是最后一个版本了 +## 6.0.0(2024-07-20) +- 5.0.0版本少打包了东西。 +## 5.0.0(2024-07-20) +- 很多人质询为什么微信不能定位,所以现在把微信公众号h5,获取定位配置加进了 +- 支持微信公众号h5,jsSdk配置获取位置。 +## 4.0.0(2024-07-11) +- 修复了点击附近的地址,有时会刷新附近地址列表bug +- 下一个版本加入微信sdk配置,微信公众号定位功能 +## 3.0.0(2024-06-01) +- 修复了app拖动不返回坐标,不改变附近poi问题 +- 修复了搜索直辖市和小城市数据不全的渲染数据格式异常问题 +- 【u-loading-icon】加载组件替换为自定义组件了 +- 添加了新功能搜索范围设置--字段【Radius】 +## 2.0.0(2024-03-25) +- 修复--定位复位不搜索附件地址 +## 1.0.0(2024-03-23) +- 实现了拖动 +- 实现了拖动搜索附近pois +- 实现搜索附近pois +- 实现搜索关键字 +- 定位复位 +- 动态配置复位定位功能显示 +- 回调【地址名称、地址详情、地址定位、省、市、区】 +- 动态配置key +- 动态配置定位复位图标 +- 动态配置定位图标 +- 动态配置列表图标 + ## 2.0.0(2024-03-25) +- 修复--定位复位不搜索附件地址 diff --git a/uni_modules/map-Point/components/map-Point/amap-wx.js b/uni_modules/map-Point/components/map-Point/amap-wx.js new file mode 100644 index 0000000..1dba132 --- /dev/null +++ b/uni_modules/map-Point/components/map-Point/amap-wx.js @@ -0,0 +1,616 @@ +function AMapWX(a) { + this.key = a.key; + this.requestConfig = { + key: a.key, + }; + this.MeRequestConfig = { + key: a.key, + serviceName: "https://restapi.amap.com/rest/me" + } +} +AMapWX.prototype.getWxLocation = function(a, b) { + wx.getLocation({ + type: "gcj02", + success: function(c) { + c = c.longitude + "," + c.latitude; + wx.setStorage({ + key: "userLocation", + data: c + }); + b(c) + }, + fail: function(c) { + wx.getStorage({ + key: "userLocation", + success: function(d) { + d.data && b(d.data) + } + }); + a.fail({ + errCode: "0", + errMsg: c.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getMEKeywordsSearch = function(a) { + if (!a.options) return a.fail({ + errCode: "0", + errMsg: "\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570" + }); + var b = a.options, + c = this.MeRequestConfig, + d = { + key: c.key, + s: "rsx", + platform: "WXJS", + appname: a.key, + sdkversion: "1.2.0", + logversion: "2.0" + }; + b.layerId && (d.layerId = b.layerId); + b.keywords && (d.keywords = b.keywords); + b.city && (d.city = b.city); + b.filter && (d.filter = b.filter); + b.sortrule && (d.sortrule = b.sortrule); + b.pageNum && (d.pageNum = b.pageNum); + b.pageSize && (d.pageSize = b.pageSize); + b.sig && (d.sig = + b.sig); + uni.request({ + url: c.serviceName + "/cpoint/datasearch/local", + data: d, + method: "GET", + success: function(e) { + (e = e.data) && e.status && "1" === e.status && 0 === e.code ? a.success(e.data) : a.fail({ + errCode: "0", + errMsg: e + }) + }, + fail: function(e) { + a.fail({ + errCode: "0", + errMsg: e.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getMEIdSearch = function(a) { + if (!a.options) return a.fail({ + errCode: "0", + errMsg: "\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570" + }); + var b = a.options, + c = this.MeRequestConfig, + d = { + key: c.key, + s: "rsx", + platform: "WXJS", + appname: a.key, + sdkversion: "1.2.0", + logversion: "2.0" + }; + b.layerId && (d.layerId = b.layerId); + b.id && (d.id = b.id); + b.sig && (d.sig = b.sig); + uni.request({ + url: c.serviceName + "/cpoint/datasearch/id", + data: d, + method: "GET", + success: function(e) { + (e = e.data) && e.status && "1" === e.status && + 0 === e.code ? a.success(e.data) : a.fail({ + errCode: "0", + errMsg: e + }) + }, + fail: function(e) { + a.fail({ + errCode: "0", + errMsg: e.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getMEPolygonSearch = function(a) { + if (!a.options) return a.fail({ + errCode: "0", + errMsg: "\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570" + }); + var b = a.options, + c = this.MeRequestConfig, + d = { + key: c.key, + s: "rsx", + platform: "WXJS", + appname: a.key, + sdkversion: "1.2.0", + logversion: "2.0" + }; + b.layerId && (d.layerId = b.layerId); + b.keywords && (d.keywords = b.keywords); + b.polygon && (d.polygon = b.polygon); + b.filter && (d.filter = b.filter); + b.sortrule && (d.sortrule = b.sortrule); + b.pageNum && (d.pageNum = b.pageNum); + b.pageSize && (d.pageSize = b.pageSize); + b.sig && (d.sig = b.sig); + uni.request({ + url: c.serviceName + "/cpoint/datasearch/polygon", + data: d, + method: "GET", + success: function(e) { + (e = e.data) && e.status && "1" === e.status && 0 === e.code ? a.success(e.data) : a.fail({ + errCode: "0", + errMsg: e + }) + }, + fail: function(e) { + a.fail({ + errCode: "0", + errMsg: e.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getMEaroundSearch = function(a) { + if (!a.options) return a.fail({ + errCode: "0", + errMsg: "\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570" + }); + var b = a.options, + c = this.MeRequestConfig, + d = { + key: c.key, + s: "rsx", + platform: "WXJS", + appname: a.key, + sdkversion: "1.2.0", + logversion: "2.0" + }; + b.layerId && (d.layerId = b.layerId); + b.keywords && (d.keywords = b.keywords); + b.center && (d.center = b.center); + b.radius && (d.radius = b.radius); + b.filter && (d.filter = b.filter); + b.sortrule && (d.sortrule = b.sortrule); + b.pageNum && (d.pageNum = b.pageNum); + b.pageSize && + (d.pageSize = b.pageSize); + b.sig && (d.sig = b.sig); + uni.request({ + url: c.serviceName + "/cpoint/datasearch/around", + data: d, + method: "GET", + success: function(e) { + (e = e.data) && e.status && "1" === e.status && 0 === e.code ? a.success(e.data) : a.fail({ + errCode: "0", + errMsg: e + }) + }, + fail: function(e) { + a.fail({ + errCode: "0", + errMsg: e.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getGeo = function(a) { + var b = this.requestConfig, + c = a.options; + b = { + key: this.key, + extensions: "all", + s: b.s, + platform: b.platform, + appname: this.key, + sdkversion: b.sdkversion, + logversion: b.logversion + }; + c.address && (b.address = c.address); + c.city && (b.city = c.city); + c.batch && (b.batch = c.batch); + c.sig && (b.sig = c.sig); + uni.request({ + url: "https://restapi.amap.com/v3/geocode/geo", + data: b, + method: "GET", + success: function(d) { + (d = d.data) && d.status && "1" === d.status ? a.success(d) : a.fail({ + errCode: "0", + errMsg: d + }) + }, + fail: function(d) { + a.fail({ + errCode: "0", + errMsg: d.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getRegeo = function(a) { + function b(d) { + var e = c.requestConfig; + uni.request({ + url: "https://restapi.amap.com/v3/geocode/regeo", + data: { + key: c.key, + location: d, + extensions: "all", + s: e.s, + platform: e.platform, + appname: c.key, + sdkversion: e.sdkversion, + logversion: e.logversion + }, + method: "GET", + success: function(g) { + if (g.data.status && "1" == g.data.status) { + g = g.data.regeocode; + var h = g.addressComponent, + f = [], + k = g.roads[0].name + "\u9644\u8fd1", + m = d.split(",")[0], + n = d.split(",")[1]; + if (g.pois && + g.pois[0]) { + k = g.pois[0].name + "\u9644\u8fd1"; + var l = g.pois[0].location; + l && (m = parseFloat(l.split(",")[0]), n = parseFloat(l.split(",")[1])) + } + h.provice && f.push(h.provice); + h.city && f.push(h.city); + h.district && f.push(h.district); + h.streetNumber && h.streetNumber.street && h.streetNumber.number ? (f.push(h + .streetNumber.street), f.push(h.streetNumber.number)) : f.push(g.roads[0] + .name); + f = f.join(""); + a.success([{ + iconPath: a.iconPath, + width: a.iconWidth, + height: a.iconHeight, + name: f, + desc: k, + longitude: m, + latitude: n, + id: 0, + regeocodeData: g + }]) + } else a.fail({ + errCode: g.data.infocode, + errMsg: g.data.info + }) + }, + fail: function(g) { + a.fail({ + errCode: "0", + errMsg: g.errMsg || "" + }) + } + }) + } + var c = this; + a.location ? b(a.location) : c.getWxLocation(a, function(d) { + b(d) + }) +}; +AMapWX.prototype.getWeather = function(a) { + function b(g) { + var h = "base"; + a.type && "forecast" == a.type && (h = "all"); + uni.request({ + url: "https://restapi.amap.com/v3/weather/weatherInfo", + data: { + key: d.key, + city: g, + extensions: h, + s: e.s, + platform: e.platform, + appname: d.key, + sdkversion: e.sdkversion, + logversion: e.logversion + }, + method: "GET", + success: function(f) { + if (f.data.status && "1" == f.data.status) + if (f.data.lives) { + if ((f = f.data.lives) && 0 < f.length) { + f = f[0]; + var k = { + city: { + text: "\u57ce\u5e02", + data: f.city + }, + weather: { + text: "\u5929\u6c14", + data: f.weather + }, + temperature: { + text: "\u6e29\u5ea6", + data: f.temperature + }, + winddirection: { + text: "\u98ce\u5411", + data: f.winddirection + "\u98ce" + }, + windpower: { + text: "\u98ce\u529b", + data: f.windpower + "\u7ea7" + }, + humidity: { + text: "\u6e7f\u5ea6", + data: f.humidity + "%" + } + }; + k.liveData = f; + a.success(k) + } + } else f.data.forecasts && f.data.forecasts[0] && a.success({ + forecast: f.data.forecasts[0] + }); + else a.fail({ + errCode: f.data.infocode, + errMsg: f.data.info + }) + }, + fail: function(f) { + a.fail({ + errCode: "0", + errMsg: f.errMsg || "" + }) + } + }) + } + + function c(g) { + uni.request({ + url: "https://restapi.amap.com/v3/geocode/regeo", + data: { + key: d.key, + location: g, + extensions: "all", + s: e.s, + platform: e.platform, + appname: d.key, + sdkversion: e.sdkversion, + logversion: e.logversion + }, + method: "GET", + success: function(h) { + if (h.data.status && "1" == h.data.status) { + h = h.data.regeocode; + if (h.addressComponent) var f = h.addressComponent.adcode; + else h.aois && 0 < h.aois.length && (f = h.aois[0].adcode); + b(f) + } else a.fail({ + errCode: h.data.infocode, + errMsg: h.data.info + }) + }, + fail: function(h) { + a.fail({ + errCode: "0", + errMsg: h.errMsg || "" + }) + } + }) + } + var d = this, + e = d.requestConfig; + a.city ? b(a.city) : d.getWxLocation(a, function(g) { + c(g) + }) +}; +AMapWX.prototype.getPoiAround = function(a) { + function b(e) { + e = { + key: c.key, + location: e, + s: d.s, + offset:20, + extensions:'all', + platform: d.platform, + sdkversion: d.sdkversion, + logversion: d.logversion, + }; + a.querytypes && (e.types = a.querytypes); + a.querykeywords && (e.keywords = a.querykeywords); + a.page && (e.page = a.page); + uni.request({ + url: "https://restapi.amap.com/v3/place/around", + data: e, + method: "GET", + success: function(g) { + if (g.data.status && "1" == g.data.status) { + if ((g = g.data) && g.pois) { + for (var h = [], f = 0; f < g.pois.length; f++) { + var k = 0 == + f ? a.iconPathSelected : a.iconPath; + h.push({ + latitude: parseFloat(g.pois[f].location.split(",")[1]), + longitude: parseFloat(g.pois[f].location.split(",")[0]), + iconPath: k, + width: 22, + height: 32, + id: f, + name: g.pois[f].name, + address: g.pois[f].address + }) + } + a.success({ + markers: h, + poisData: g.pois, + count:g.count + }) + } + } else a.fail({ + errCode: g.data.infocode, + errMsg: g.data.info + }) + }, + fail: function(g) { + a.fail({ + errCode: "0", + errMsg: g.errMsg || "" + }) + } + }) + } + var c = this, + d = c.requestConfig; + a.location ? b(a.location) : c.getWxLocation(a, function(e) { + b(e) + }) +}; +AMapWX.prototype.getStaticmap = function(a) { + function b(e) { + c.push("location=" + e); + a.zoom && c.push("zoom=" + a.zoom); + a.size && c.push("size=" + a.size); + a.scale && c.push("scale=" + a.scale); + a.markers && c.push("markers=" + a.markers); + a.labels && c.push("labels=" + a.labels); + a.paths && c.push("paths=" + a.paths); + a.traffic && c.push("traffic=" + a.traffic); + e = "https://restapi.amap.com/v3/staticmap?" + c.join("&"); + a.success({ + url: e + }) + } + var c = []; + c.push("key=" + this.key); + var d = this.requestConfig; + c.push("s=" + d.s); + c.push("platform=" + d.platform); + c.push("appname=" + d.appname); + c.push("sdkversion=" + d.sdkversion); + c.push("logversion=" + d.logversion); + a.location ? b(a.location) : this.getWxLocation(a, function(e) { + b(e) + }) +}; +AMapWX.prototype.getInputtips = function(a) { + var b = Object.assign({}, this.requestConfig); + a.location && (b.location = a.location); + a.keywords && (b.keywords = a.keywords); + a.type && (b.type = a.type); + a.city && (b.city = a.city); + a.citylimit && (b.citylimit = a.citylimit); + b.datatype='all' + uni.request({ + url: "https://restapi.amap.com/v3/assistant/inputtips", + data: b, + method: "GET", + success: function(c) { + c && c.data && c.data.tips && a.success({ + tips: c.data.tips + }) + }, + fail: function(c) { + a.fail({ + errCode: "0", + errMsg: c.errMsg || + "" + }) + } + }) +}; +AMapWX.prototype.getDrivingRoute = function(a) { + var b = Object.assign({}, this.requestConfig); + a.origin && (b.origin = a.origin); + a.destination && (b.destination = a.destination); + a.strategy && (b.strategy = a.strategy); + a.waypoints && (b.waypoints = a.waypoints); + a.avoidpolygons && (b.avoidpolygons = a.avoidpolygons); + a.avoidroad && (b.avoidroad = a.avoidroad); + uni.request({ + url: "https://restapi.amap.com/v3/direction/driving", + data: b, + method: "GET", + success: function(c) { + c && c.data && c.data.route && a.success({ + paths: c.data.route.paths, + taxi_cost: c.data.route.taxi_cost || "" + }) + }, + fail: function(c) { + a.fail({ + errCode: "0", + errMsg: c.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getWalkingRoute = function(a) { + var b = Object.assign({}, this.requestConfig); + a.origin && (b.origin = a.origin); + a.destination && (b.destination = a.destination); + uni.request({ + url: "https://restapi.amap.com/v3/direction/walking", + data: b, + method: "GET", + success: function(c) { + c && c.data && c.data.route && a.success({ + paths: c.data.route.paths + }) + }, + fail: function(c) { + a.fail({ + errCode: "0", + errMsg: c.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getTransitRoute = function(a) { + var b = Object.assign({}, this.requestConfig); + a.origin && (b.origin = a.origin); + a.destination && (b.destination = a.destination); + a.strategy && (b.strategy = a.strategy); + a.city && (b.city = a.city); + a.cityd && (b.cityd = a.cityd); + uni.request({ + url: "https://restapi.amap.com/v3/direction/transit/integrated", + data: b, + method: "GET", + success: function(c) { + c && c.data && c.data.route && (c = c.data.route, a.success({ + distance: c.distance || "", + taxi_cost: c.taxi_cost || + "", + transits: c.transits + })) + }, + fail: function(c) { + a.fail({ + errCode: "0", + errMsg: c.errMsg || "" + }) + } + }) +}; +AMapWX.prototype.getRidingRoute = function(a) { + var b = Object.assign({}, this.requestConfig); + a.origin && (b.origin = a.origin); + a.destination && (b.destination = a.destination); + uni.request({ + url: "https://restapi.amap.com/v3/direction/riding", + data: b, + method: "GET", + success: function(c) { + c && c.data && c.data.route && a.success({ + paths: c.data.route.paths + }) + }, + fail: function(c) { + a.fail({ + errCode: "0", + errMsg: c.errMsg || "" + }) + } + }) +}; +// module.exports.AMapWX = AMapWX; +export default AMapWX; \ No newline at end of file diff --git a/uni_modules/map-Point/components/map-Point/jweixin.js b/uni_modules/map-Point/components/map-Point/jweixin.js new file mode 100644 index 0000000..1b5014b --- /dev/null +++ b/uni_modules/map-Point/components/map-Point/jweixin.js @@ -0,0 +1 @@ +!function(e,n){"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(window,function(o,e){if(!o.jWeixin){var n,c={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},a=function(){var e={};for(var n in c)e[c[n]]=n;return e}(),i=o.document,t=i.title,r=navigator.userAgent.toLowerCase(),s=navigator.platform.toLowerCase(),d=!(!s.match("mac")&&!s.match("win")),u=-1!=r.indexOf("wxdebugger"),l=-1!=r.indexOf("micromessenger"),p=-1!=r.indexOf("android"),f=-1!=r.indexOf("iphone")||-1!=r.indexOf("ipad"),m=(n=r.match(/micromessenger\/(\d+\.\d+\.\d+)/)||r.match(/micromessenger\/(\d+\.\d+)/))?n[1]:"",g={initStartTime:L(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},h={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:f?1:p?2:-1,clientVersion:m,url:encodeURIComponent(location.href)},v={},S={_completes:[]},y={state:0,data:{}};O(function(){g.initEndTime=L()});var I=!1,_=[],w={config:function(e){B("config",v=e);var t=!1!==v.check;O(function(){if(t)M(c.config,{verifyJsApiList:C(v.jsApiList),verifyOpenTagList:C(v.openTagList)},function(){S._complete=function(e){g.preVerifyEndTime=L(),y.state=1,y.data=e},S.success=function(e){h.isPreVerifyOk=0},S.fail=function(e){S._fail?S._fail(e):y.state=-1};var t=S._completes;return t.push(function(){!function(){if(!(d||u||v.debug||m<"6.0.2"||h.systemType<0)){var i=new Image;h.appId=v.appId,h.initTime=g.initEndTime-g.initStartTime,h.preVerifyTime=g.preVerifyEndTime-g.preVerifyStartTime,w.getNetworkType({isInnerInvoke:!0,success:function(e){h.networkType=e.networkType;var n="https://open.weixin.qq.com/sdk/report?v="+h.version+"&o="+h.isPreVerifyOk+"&s="+h.systemType+"&c="+h.clientVersion+"&a="+h.appId+"&n="+h.networkType+"&i="+h.initTime+"&p="+h.preVerifyTime+"&u="+h.url;i.src=n}})}}()}),S.complete=function(e){for(var n=0,i=t.length;n + + + + + + + + + + + + + + 搜索地点 + + + + + + + + + {{ item.name }} + + {{ item.address }} + + + + + + 加载中 + + + + + + + 确认选点 + + + + + + + + + + + 搜索 + + + + + + + + + {{ item.name }} + + {{ item.address }} + + + + + + 加载中 + + + 没有搜索到数据 + + + + + + 还没有历史记录 + 快来体验世界吧 + + + + + + + {{ item.name }} + + {{ item.address }} + + + 清空历史记录 + + + + + + + + + + \ No newline at end of file diff --git a/uni_modules/map-Point/package.json b/uni_modules/map-Point/package.json new file mode 100644 index 0000000..a4ea247 --- /dev/null +++ b/uni_modules/map-Point/package.json @@ -0,0 +1,87 @@ +{ + "id": "map-Point", + "displayName": "高德地图--地图选点uni_modules插件", + "version": "11.0.0", + "description": "一款基于高德地图api封装的地图选点组件,移动选点、搜索选点,返回省市区", + "keywords": [ + "高德地图选点", + "高德地图", + "h5地图", + "小程序地图", + "app地图" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": " 无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "u" + }, + "App": { + "app-vue": "y", + "app-nvue": "u", + "app-uvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "u", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "u", + "钉钉": "y", + "快手": "y", + "飞书": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/map-Point/readme.md b/uni_modules/map-Point/readme.md new file mode 100644 index 0000000..c2fe651 --- /dev/null +++ b/uni_modules/map-Point/readme.md @@ -0,0 +1,167 @@ +###使用 + +``` +1.