UNPKG

ng-yunzai-mobile

Version:

1. 修改wechat.micro.ts

533 lines 36.9 kB
/** * @fileoverview added by tsickle * Generated from: devices/ios.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BaseDevice } from "./base.device"; import { HttpClient } from "@angular/common/http"; import { Inject, Injectable } from "@angular/core"; import { BASE_CLIENT } from "../client/base.client"; import { preloaderFinished } from "../auth/preloader"; import { from } from "rxjs"; import { TokenService } from "../token/token.service"; import { UserService } from "../user/user.service"; import * as i0 from "@angular/core"; import * as i1 from "../token/token.service"; import * as i2 from "@angular/common/http"; import * as i3 from "../user/user.service"; import * as i4 from "../client/base.client"; export class IOS extends BaseDevice { /** * @param {?} tokenService * @param {?} http * @param {?} user * @param {?} baseclient */ constructor(tokenService, http, user, baseclient) { super(); this.tokenService = tokenService; this.http = http; this.user = user; this.baseclient = baseclient; } /** * 手机网页认证 * @return {?} */ auth() { if (this.baseclient.ios && this.baseclient.ios.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { preloaderFinished(); resolve(true); })); } if (null === this.baseclient.mobileVersion || this.baseclient.mobileVersion === "V6") { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { // 设置token this.tokenService.set((/** @type {?} */ (this.getToken()))); // 发送/user请求 this.http .get(`${this.baseclient.gateway}/auth/user`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(response.principal); // 加载结束 preloaderFinished(); resolve(true); })); })); } else if (null !== this.baseclient.mobileVersion && this.baseclient.mobileVersion === "V5") { /** @type {?} */ const userInfo = yz.getUserInfoSync(); /** @type {?} */ const formData = new FormData(); const { account, password } = userInfo; formData.set("username", account); formData.set("password", password); formData.set("grant_type", "password"); formData.set("client_id", "webapp"); formData.set("scope", "webapp"); formData.set("client_secret", "123456"); return new Promise(((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { this.http.post(`${this.baseclient.gateway}/auth/oauth/token`, formData).subscribe((/** * @param {?} response * @return {?} */ (response) => { /** @type {?} */ let tokenInfo = {}; tokenInfo['accessToken'] = response.access_token; tokenInfo['tokenType'] = response.token_type; tokenInfo['refreshToken'] = response.refresh_token; tokenInfo['expiresIn'] = response.expires_in; tokenInfo['scope'] = response.scope; this.tokenService.set((/** @type {?} */ (tokenInfo))); this.http.get(`${this.baseclient.gateway}/auth/user`).subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(response.principal); // 加载结束 preloaderFinished(); resolve(true); })); })); }))); } } /** * @return {?} */ getToken() { return yz.getTokenSync(); } /** * @param {?} window * @return {?} */ openWindow(window) { yz.navigationOpenWindow(window); if (window.listener) { yz.listener.nBack(window.listener); } } /** * @return {?} */ scanCode() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.scanCode({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject("error"); } }); }))); } /** * @param {?} navigationBar * @return {?} */ setNavigationBar(navigationBar) { yz.setNavigationBarRightItems({ showMenu: navigationBar.showMenu, shareFlag: navigationBar.shareFlag, items: navigationBar.items, onClick: navigationBar.onClick, success: navigationBar.success, fial: navigationBar.fial, complete: navigationBar.complete }); } /** * @param {?} ititle * @return {?} */ setTitle(ititle) { yz.setNavigationBarTitle(ititle); } /** * @param {?} ishare * @return {?} */ share(ishare) { yz.setWebCanShare(ishare); } /** * @return {?} */ userLocation() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocation({ /** * @param {?} data * @return {?} */ success(data) { resolve((/** @type {?} */ ({ address: data.address, latitude: data.latitude, longitude: data.longitude }))); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} bssids * @return {?} */ validateInWifi(bssids) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocationContainAp({ bssids, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @return {?} */ getWifiMac() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.getMac({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errorMsg * @return {?} */ fail(errorMsg) { reject(errorMsg); } }); }))); } /** * @param {?} count * @return {?} */ chooseContacts(count) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.chooseContacts({ count, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} targetUserId * @return {?} */ contactDetails(targetUserId) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.ContactDetails({ targetUserId, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} count * @param {?} sourceType * @return {?} */ uploadImage(count, sourceType) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadImage({ count, sourceType, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ openReadWithTimer(url, openType, title, id, type) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.openReadWithTimer({ url, openType, title, id, type, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} limitMinute * @return {?} */ uploadMovie(limitMinute) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadMovie({ limitMinute, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} title * @return {?} */ fileBrowser(url, title) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.fileBrowser({ url, title, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} ticket * @param {?} callback * @return {?} */ startSearchBeacons(ticket, callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ stopSearchBeacons(callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ onSearchBeacons(callback) { throw new Error("Method not implemented."); } } IOS.decorators = [ { type: Injectable, args: [{ providedIn: "root" },] } ]; /** @nocollapse */ IOS.ctorParameters = () => [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] } ]; /** @nocollapse */ IOS.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function IOS_Factory() { return new IOS(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: IOS, providedIn: "root" }); if (false) { /** * @type {?} * @private */ IOS.prototype.tokenService; /** * @type {?} * @private */ IOS.prototype.http; /** * @type {?} * @private */ IOS.prototype.user; /** * @type {?} * @private */ IOS.prototype.baseclient; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbImRldmljZXMvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE9BQU8sRUFBYSxJQUFJLEVBQUssTUFBTSxNQUFNLENBQUM7QUFLMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBT2pELE1BQU0sT0FBTyxHQUFJLFNBQVEsVUFBVTs7Ozs7OztJQUNqQyxZQUNVLFlBQTBCLEVBQzFCLElBQWdCLEVBQ2hCLElBQWlCLEVBQ0ksVUFBc0I7UUFFbkQsS0FBSyxFQUFFLENBQUM7UUFMQSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDSSxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBR3JELENBQUM7Ozs7O0lBS0QsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM3RCxPQUFPLElBQUksT0FBTzs7Ozs7WUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDcEIsT0FB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QTZCO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUNELGVBQWUsQ0FBQyxRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7O1lBdlJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVBPLFlBQVk7WUFYWixVQUFVO1lBWVYsV0FBVzs0Q0FZZCxNQUFNLFNBQUMsV0FBVzs7Ozs7Ozs7SUFIbkIsMkJBQWtDOzs7OztJQUNsQyxtQkFBd0I7Ozs7O0lBQ3hCLG1CQUF5Qjs7Ozs7SUFDekIseUJBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlRGV2aWNlfSBmcm9tIFwiLi9iYXNlLmRldmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtCQVNFX0NMSUVOVCwgQmFzZUNsaWVudH0gZnJvbSBcIi4uL2NsaWVudC9iYXNlLmNsaWVudFwiO1xyXG5pbXBvcnQge3ByZWxvYWRlckZpbmlzaGVkfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHtJdG9rZW59IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQge0lXaW5kb3d9IGZyb20gXCIuL21vZGVsL3dpbmRvd1wiO1xyXG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG9mfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05hdmlnYXRpb25CYXJ9IGZyb20gXCIuL21vZGVsL25hdmlnYXRpb25iYXJcIjtcclxuaW1wb3J0IHtJVGl0bGV9IGZyb20gXCIuL21vZGVsL3RpdGxlXCI7XHJcbmltcG9ydCB7SVNoYXJlfSBmcm9tIFwiLi9tb2RlbC9zaGFyZVwiO1xyXG5pbXBvcnQge1VzZXJMb2NhdGlvbn0gZnJvbSBcIi4vbW9kZWwvbG9jYXRpb25cIjtcclxuaW1wb3J0IHtUb2tlblNlcnZpY2V9IGZyb20gXCIuLi90b2tlbi90b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2VyL3VzZXIuc2VydmljZVwiO1xyXG5cclxuZGVjbGFyZSBsZXQgeXo7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIElPUyBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnRcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiYvmnLrnvZHpobXorqTor4FcclxuICAgKi9cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmlvcyAmJiB0aGlzLmJhc2VjbGllbnQuaW9zLmF1dGggPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG51bGwgPT09IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uIHx8IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uID09PSBcIlY2XCIpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIC8vIOiuvue9rnRva2VuXHJcbiAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRoaXMuZ2V0VG9rZW4oKSBhcyBhbnkpO1xyXG4gICAgICAgIC8vIOWPkemAgS91c2Vy6K+35rGCXHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyDorr7nva51c2VyXHJcbiAgICAgICAgICAgIHRoaXMudXNlci5zZXQocmVzcG9uc2UucHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgLy8g5Yqg6L2957uT5p2fXHJcbiAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG51bGwgIT09IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uICYmIHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uID09PSBcIlY1XCIpIHtcclxuICAgICAgY29uc3QgdXNlckluZm8gPSB5ei5nZXRVc2VySW5mb1N5bmMoKTtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgY29uc3Qge2FjY291bnQsIHBhc3N3b3JkfSA9IHVzZXJJbmZvO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJ1c2VybmFtZVwiLCBhY2NvdW50KTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwicGFzc3dvcmRcIiwgcGFzc3dvcmQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJncmFudF90eXBlXCIsIFwicGFzc3dvcmRcIik7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImNsaWVudF9pZFwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwic2NvcGVcIiwgXCJ3ZWJhcHBcIik7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImNsaWVudF9zZWNyZXRcIiwgXCIxMjM0NTZcIik7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvb2F1dGgvdG9rZW5gLCBmb3JtRGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRva2VuSW5mbyA9IHt9O1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2FjY2Vzc1Rva2VuJ10gPSByZXNwb25zZS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sndG9rZW5UeXBlJ10gPSByZXNwb25zZS50b2tlbl90eXBlO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ3JlZnJlc2hUb2tlbiddID0gcmVzcG9uc2UucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydleHBpcmVzSW4nXSA9IHJlc3BvbnNlLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snc2NvcGUnXSA9IHJlc3BvbnNlLnNjb3BlO1xyXG4gICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW5JbmZvIGFzIGFueSlcclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC91c2VyYCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyDorr7nva51c2VyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIuc2V0KHJlc3BvbnNlLnByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9rZW4oKTogSXRva2VuIHtcclxuICAgIHJldHVybiB5ei5nZXRUb2tlblN5bmMoKTtcclxuICB9XHJcblxyXG4gIG9wZW5XaW5kb3cod2luZG93OiBJV2luZG93KTogdm9pZCB7XHJcbiAgICB5ei5uYXZpZ2F0aW9uT3BlbldpbmRvdyh3aW5kb3cpO1xyXG4gICAgaWYgKHdpbmRvdy5saXN0ZW5lcikge1xyXG4gICAgICB5ei5saXN0ZW5lci5uQmFjayh3aW5kb3cubGlzdGVuZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2NhbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5zY2FuQ29kZSh7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZykge1xyXG4gICAgICAgICAgICByZWplY3QoXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXROYXZpZ2F0aW9uQmFyKG5hdmlnYXRpb25CYXI6IE5hdmlnYXRpb25CYXIpOiB2b2lkIHtcclxuICAgIHl6LnNldE5hdmlnYXRpb25CYXJSaWdodEl0ZW1zKHtcclxuICAgICAgc2hvd01lbnU6IG5hdmlnYXRpb25CYXIuc2hvd01lbnUsXHJcbiAgICAgIHNoYXJlRmxhZzogbmF2aWdhdGlvbkJhci5zaGFyZUZsYWcsXHJcbiAgICAgIGl0ZW1zOiBuYXZpZ2F0aW9uQmFyLml0ZW1zLFxyXG4gICAgICBvbkNsaWNrOiBuYXZpZ2F0aW9uQmFyLm9uQ2xpY2ssXHJcbiAgICAgIHN1Y2Nlc3M6IG5hdmlnYXRpb25CYXIuc3VjY2VzcyxcclxuICAgICAgZmlhbDogbmF2aWdhdGlvbkJhci5maWFsLFxyXG4gICAgICBjb21wbGV0ZTogbmF2aWdhdGlvbkJhci5jb21wbGV0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZShpdGl0bGU6IElUaXRsZSk6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclRpdGxlKGl0aXRsZSk7XHJcbiAgfVxyXG5cclxuICBzaGFyZShpc2hhcmU6IElTaGFyZSk6IHZvaWQge1xyXG4gICAgeXouc2V0V2ViQ2FuU2hhcmUoaXNoYXJlKTtcclxuICB9XHJcblxyXG4gIHVzZXJMb2NhdGlvbigpOiBPYnNlcnZhYmxlPFVzZXJMb2NhdGlvbiB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51c2VyTG9jYXRpb24oe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgYWRkcmVzczogZGF0YS5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBkYXRhLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogZGF0YS5sb25naXR1ZGVcclxuICAgICAgICAgICAgfSBhcyBVc2VyTG9jYXRpb24pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbldpZmkoYnNzaWRzOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbkNvbnRhaW5BcCh7XHJcbiAgICAgICAgICBic3NpZHMsXHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFdpZmlNYWMoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouZ2V0TWFjKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJvck1zZykge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNob29zZUNvbnRhY3RzKGNvdW50OiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5jaG9vc2VDb250YWN0cyh7XHJcbiAgICAgICAgICBjb3VudCxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb250YWN0RGV0YWlscyh0YXJnZXRVc2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LkNvbnRhY3REZXRhaWxzKHtcclxuICAgICAgICAgIHRhcmdldFVzZXJJZCxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRJbWFnZShjb3VudDogbnVtYmVyLCBzb3VyY2VUeXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51cGxvYWRJbWFnZSh7XHJcbiAgICAgICAgICBjb3VudCxcclxuICAgICAgICAgIHNvdXJjZVR5cGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVhZFdpdGhUaW1lcih1cmw6IGFueSwgb3BlblR5cGU6IGFueSwgdGl0bGU6IGFueSwgaWQ6IGFueSwgdHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoub3BlblJlYWRXaXRoVGltZXIoe1xyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgb3BlblR5cGUsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRNb3ZpZShsaW1pdE1pbnV0ZTogbnVtYmVyICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZE1vdmllKHtcclxuICAgICAgICAgIGxpbWl0TWludXRlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmlsZUJyb3dzZXIodXJsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5maWxlQnJvd3Nlcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==