ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
545 lines • 37.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/android.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 Android 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;
/*
* @type {any[]} 暂存被选中联系人数据集合
* */
this.checkboxTrue = [];
/*
* @type {any[]} 页面上的被选中联系人列表数据集合
* */
this.checkboxName = [];
}
/**
* 手机网页认证
* @return {?}
*/
auth() {
if (this.baseclient.android && this.baseclient.android.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 {?} 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 {?} 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 {?} 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.");
}
}
Android.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
Android.ctorParameters = () => [
{ type: TokenService },
{ type: HttpClient },
{ type: UserService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] }
];
/** @nocollapse */ Android.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Android_Factory() { return new Android(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: Android, providedIn: "root" });
if (false) {
/** @type {?} */
Android.prototype.checkboxTrue;
/** @type {?} */
Android.prototype.checkboxName;
/**
* @type {?}
* @private
*/
Android.prototype.tokenService;
/**
* @type {?}
* @private
*/
Android.prototype.http;
/**
* @type {?}
* @private
*/
Android.prototype.user;
/**
* @type {?}
* @private
*/
Android.prototype.baseclient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5kcm9pZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2FuZHJvaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUt0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFPakQsTUFBTSxPQUFPLE9BQVEsU0FBUSxVQUFVOzs7Ozs7O0lBV3JDLFlBQ1UsWUFBMEIsRUFDMUIsSUFBZ0IsRUFDaEIsSUFBaUIsRUFDSSxVQUFzQjtRQUVuRCxLQUFLLEVBQUUsQ0FBQztRQUxBLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNJLGVBQVUsR0FBVixVQUFVLENBQVk7Ozs7UUFWckQsaUJBQVksR0FBVSxFQUFFLENBQUM7Ozs7UUFJekIsaUJBQVksR0FBVSxFQUFFLENBQUM7SUFTekIsQ0FBQzs7Ozs7SUFLRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxPQUFPOzs7OztZ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LElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCxpQkFBaUIsQ0FBQyxRQUE2QjtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCxlQUFlLENBQUMsUUFBNkI7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7OztZQWxTRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFQTyxZQUFZO1lBWFosVUFBVTtZQVlWLFdBQVc7NENBc0JkLE1BQU0sU0FBQyxXQUFXOzs7OztJQVZyQiwrQkFBeUI7O0lBSXpCLCtCQUF5Qjs7Ozs7SUFHdkIsK0JBQWtDOzs7OztJQUNsQyx1QkFBd0I7Ozs7O0lBQ3hCLHVCQUF5Qjs7Ozs7SUFDekIsNkJBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlRGV2aWNlfSBmcm9tIFwiLi9iYXNlLmRldmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtCQVNFX0NMSUVOVCwgQmFzZUNsaWVudH0gZnJvbSBcIi4uL2NsaWVudC9iYXNlLmNsaWVudFwiO1xyXG5pbXBvcnQge3ByZWxvYWRlckZpbmlzaGVkfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHtJdG9rZW59IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQge0lXaW5kb3d9IGZyb20gXCIuL21vZGVsL3dpbmRvd1wiO1xyXG5pbXBvcnQge09ic2VydmFibGUsIGZyb219IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkJhcn0gZnJvbSBcIi4vbW9kZWwvbmF2aWdhdGlvbmJhclwiO1xyXG5pbXBvcnQge0lUaXRsZX0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHtJU2hhcmV9IGZyb20gXCIuL21vZGVsL3NoYXJlXCI7XHJcbmltcG9ydCB7VXNlckxvY2F0aW9ufSBmcm9tIFwiLi9tb2RlbC9sb2NhdGlvblwiO1xyXG5pbXBvcnQge1Rva2VuU2VydmljZX0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIGxldCB5ejtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5kcm9pZCBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG5cclxuICAvKlxyXG4gICAqICBAdHlwZSB7YW55W119IOaaguWtmOiiq+mAieS4reiBlOezu+S6uuaVsOaNrumbhuWQiFxyXG4gICAqICovXHJcbiAgY2hlY2tib3hUcnVlOiBhbnlbXSA9IFtdO1xyXG4gIC8qXHJcbiAgICogIEB0eXBlIHthbnlbXX0g6aG16Z2i5LiK55qE6KKr6YCJ5Lit6IGU57O75Lq65YiX6KGo5pWw5o2u6ZuG5ZCIXHJcbiAgICogKi9cclxuICBjaGVja2JveE5hbWU6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnRcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiYvmnLrnvZHpobXorqTor4FcclxuICAgKi9cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmFuZHJvaWQgJiYgdGhpcy5iYXNlY2xpZW50LmFuZHJvaWQuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobnVsbCA9PT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gfHwgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjZcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8g6K6+572udG9rZW5cclxuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodGhpcy5nZXRUb2tlbigpIGFzIGFueSk7XHJcbiAgICAgICAgLy8g5Y+R6YCBL3VzZXLor7fmsYJcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldChyZXNwb25zZS5wcmluY2lwYWwpO1xyXG4gICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gJiYgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjVcIikge1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHl6LmdldFVzZXJJbmZvU3luYygpO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBjb25zdCB7YWNjb3VudCwgcGFzc3dvcmR9ID0gdXNlckluZm87XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInVzZXJuYW1lXCIsIGFjY291bnQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJwYXNzd29yZFwiLCBwYXNzd29yZCk7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImdyYW50X3R5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X2lkXCIsIFwid2ViYXBwXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJzY29wZVwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X3NlY3JldFwiLCBcIjEyMzQ1NlwiKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW5JbmZvID0ge307XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snYWNjZXNzVG9rZW4nXSA9IHJlc3BvbnNlLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWyd0b2tlblR5cGUnXSA9IHJlc3BvbnNlLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZXNwb25zZS5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2V4cGlyZXNJbiddID0gcmVzcG9uc2UuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydzY29wZSddID0gcmVzcG9uc2Uuc2NvcGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbkluZm8gYXMgYW55KVxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlci5zZXQocmVzcG9uc2UucHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgICAgIC8vIOWKoOi9vee7k+adn1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb2tlbigpOiBJdG9rZW4ge1xyXG4gICAgcmV0dXJuIHl6LmdldFRva2VuU3luYygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyh3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHl6Lm5hdmlnYXRpb25PcGVuV2luZG93KHdpbmRvdyk7XHJcbiAgICBpZiAod2luZG93Lmxpc3RlbmVyKSB7XHJcbiAgICAgIHl6Lmxpc3RlbmVyLm5CYWNrKHdpbmRvdy5saXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnNjYW5Db2RlKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclJpZ2h0SXRlbXMoe1xyXG4gICAgICBzaG93TWVudTogbmF2aWdhdGlvbkJhci5zaG93TWVudSxcclxuICAgICAgc2hhcmVGbGFnOiBuYXZpZ2F0aW9uQmFyLnNoYXJlRmxhZyxcclxuICAgICAgaXRlbXM6IG5hdmlnYXRpb25CYXIuaXRlbXMsXHJcbiAgICAgIG9uQ2xpY2s6IG5hdmlnYXRpb25CYXIub25DbGljayxcclxuICAgICAgc3VjY2VzczogbmF2aWdhdGlvbkJhci5zdWNjZXNzLFxyXG4gICAgICBmaWFsOiBuYXZpZ2F0aW9uQmFyLmZpYWwsXHJcbiAgICAgIGNvbXBsZXRlOiBuYXZpZ2F0aW9uQmFyLmNvbXBsZXRlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKGl0aXRsZTogSVRpdGxlKTogdm9pZCB7XHJcbiAgICB5ei5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoaXRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKGlzaGFyZTogSVNoYXJlKTogdm9pZCB7XHJcbiAgICB5ei5zZXRXZWJDYW5TaGFyZShpc2hhcmUpO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbih7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGRhdGEubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBkYXRhLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9IGFzIFVzZXJMb2NhdGlvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUluV2lmaShic3NpZHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXNlckxvY2F0aW9uQ29udGFpbkFwKHtcclxuICAgICAgICAgIGJzc2lkcyxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZyB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5nZXRNYWMoe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlQ29udGFjdHMoY291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmNob29zZUNvbnRhY3RzKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouQ29udGFjdERldGFpbHMoe1xyXG4gICAgICAgICAgdGFyZ2V0VXNlcklkLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZEltYWdlKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc291cmNlVHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRNb3ZpZShsaW1pdE1pbnV0ZTogbnVtYmVyICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZE1vdmllKHtcclxuICAgICAgICAgIGxpbWl0TWludXRlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3BlblJlYWRXaXRoVGltZXIodXJsOiBhbnksIG9wZW5UeXBlOiBhbnksIHRpdGxlOiBhbnksIGlkOiBhbnksIHR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6Lm9wZW5SZWFkV2l0aFRpbWVyKHtcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIG9wZW5UeXBlLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZmlsZUJyb3dzZXIodXJsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5maWxlQnJvd3Nlcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==