ng-cw-v12
Version:
Angular UI component library
146 lines • 22.7 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class LocalService {
constructor() {
this.x_PI = 3.14159265358979324 * 3000.0 / 180.0;
this.PI = 3.1415926535897932384626;
this.a = 6378245.0;
this.ee = 0.00669342162296594323;
}
/**
* 百度坐标系 (BD-09) 与火星坐标系 (GCJ-02) 的转换
* 即百度 转 谷歌、高德
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
bd09togcj02(lng, lat) {
var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
var x = lng - 0.0065;
var y = lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat];
}
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即谷歌、高德 转 百度
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
gcj02tobd09(lng, lat) {
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * this.x_PI);
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * this.x_PI);
var bd_lng = z * Math.cos(theta) + 0.0065;
var bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat];
}
/**
* WGS84转火星坐标系 (GCJ-02)
* 即WGS84 转 谷歌、高德
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
wgs84togcj02(lng, lat) {
if (this.out_of_china(lng, lat)) {
return [lng, lat];
}
else {
var dlat = this.transformlat(lng - 105.0, lat - 35.0);
var dlng = this.transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * this.PI;
var magic = Math.sin(radlat);
magic = 1 - this.ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
var mglat = lat + dlat;
var mglng = lng + dlng;
return [mglng, mglat];
}
}
/**
* 火星坐标系 (GCJ-02)转WGS84
* 即谷歌、高德 转 WGS84
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
gcj02towgs84(lng, lat) {
if (this.out_of_china(lng, lat)) {
return [lng, lat];
}
else {
var dlat = this.transformlat(lng - 105.0, lat - 35.0);
var dlng = this.transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * this.PI;
var magic = Math.sin(radlat);
magic = 1 - this.ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
let mglat = lat + dlat;
let mglng = lng + dlng;
return [lng * 2 - mglng, lat * 2 - mglat];
}
}
transformlat(lng, lat) {
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lat * this.PI) + 40.0 * Math.sin(lat / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(lat / 12.0 * this.PI) + 320 * Math.sin(lat * this.PI / 30.0)) * 2.0 / 3.0;
return ret;
}
transformlng(lng, lat) {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lng * this.PI) + 40.0 * Math.sin(lng / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(lng / 12.0 * this.PI) + 300.0 * Math.sin(lng / 30.0 * this.PI)) * 2.0 / 3.0;
return ret;
}
/**
* 判断是否在国内,不在国内则不做偏移
*/
out_of_china(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}
/**
* jsonp封装
* @param obj \{url: '', success: ()=> {}}
*/
jsonpFunction(obj) {
// 创建一个script标签;
var script = document.createElement("script");
// 给函数起名字,定义为全局函数;
var fnName = "jsonp" + new Date().getTime();
// window.aaa就是把aaa设置为全局变量!
window[fnName] = obj.success;
// 改变src,添加到head中
if (obj.url.includes('?')) {
script.src = obj.url + "&callback=" + fnName;
}
else {
script.src = obj.url + "?callback=" + fnName;
}
// 把script标签添加到head标签中,就会发送src的请求了
document.head.appendChild(script);
// 代码执行完毕,把script标签删除
script.onload = function () {
document.head.removeChild(script);
window[fnName] = undefined;
};
}
}
LocalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
LocalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvcG9pL2xvY2FsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLFlBQVk7SUFDckI7UUFHUSxTQUFJLEdBQUcsbUJBQW1CLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUM1QyxPQUFFLEdBQUcsd0JBQXdCLENBQUM7UUFDOUIsTUFBQyxHQUFHLFNBQVMsQ0FBQztRQUNkLE9BQUUsR0FBRyxzQkFBc0IsQ0FBQztJQUxwQyxDQUFDO0lBT0Q7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ2hDLElBQUksSUFBSSxHQUFHLG1CQUFtQixHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDaEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFD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QyxHQUFXLEVBQUUsR0FBVztRQUN6QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNqRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMzRixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbkcsT0FBTyxHQUFHLENBQUE7SUFDZCxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3pDLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzNGLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNyRyxPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUN6QyxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsR0FBUTtRQUNsQixnQkFBZ0I7UUFDaEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxrQkFBa0I7UUFDbEIsSUFBSSxNQUFNLEdBQVEsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakQsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzdCLGlCQUFpQjtRQUNqQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBQ2hEO2FBQU07WUFDSCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQztTQUNoRDtRQUNELGtDQUFrQztRQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQVMsR0FBRyxTQUFTLENBQUM7UUFDeEMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQzs7eUdBN0lRLFlBQVk7NkdBQVosWUFBWSxjQUZULE1BQU07MkZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHhfUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzI0ICogMzAwMC4wIC8gMTgwLjA7XHJcbiAgICBwcml2YXRlIFBJID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2O1xyXG4gICAgcHJpdmF0ZSBhID0gNjM3ODI0NS4wO1xyXG4gICAgcHJpdmF0ZSBlZSA9IDAuMDA2NjkzNDIxNjIyOTY1OTQzMjM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDnmb7luqblnZDmoIfns7sgKEJELTA5KSDkuI7ngavmmJ/lnZDmoIfns7sgKEdDSi0wMikg55qE6L2s5o2iXHJcbiAgICAgKiDljbPnmb7luqYg6L2sIOiwt+atjOOAgemrmOW+t1xyXG4gICAgICogQHBhcmFtIGxuZyDnu4/luqZcclxuICAgICAqIEBwYXJhbSBsYXQg57qs5bqmXHJcbiAgICAgKiBAcmV0dXJucyBbbG5nLCBsYXRdXHJcbiAgICAgKi9cclxuICAgIGJkMDl0b2djajAyKGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICB2YXIgeF9waSA9IDMuMTQxNTkyNjUzNTg5NzkzMjQgKiAzMDAwLjAgLyAxODAuMDtcclxuICAgICAgICB2YXIgeCA9IGxuZyAtIDAuMDA2NTtcclxuICAgICAgICB2YXIgeSA9IGxhdCAtIDAuMDA2O1xyXG4gICAgICAgIHZhciB6ID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpIC0gMC4wMDAwMiAqIE1hdGguc2luKHkgKiB4X3BpKTtcclxuICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmF0YW4yKHksIHgpIC0gMC4wMDAwMDMgKiBNYXRoLmNvcyh4ICogeF9waSk7XHJcbiAgICAgICAgdmFyIGdnX2xuZyA9IHogKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgdmFyIGdnX2xhdCA9IHogKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgcmV0dXJuIFtnZ19sbmcsIGdnX2xhdF1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOeBq+aYn+WdkOagh+ezuyAoR0NKLTAyKSDkuI7nmb7luqblnZDmoIfns7sgKEJELTA5KSDnmoTovazmjaJcclxuICAgICAqIOWNs+iwt+atjOOAgemrmOW+tyDovawg55m+5bqmXHJcbiAgICAgKiBAcGFyYW0gbG5nIOe7j+W6plxyXG4gICAgICogQHBhcmFtIGxhdCDnuqzluqZcclxuICAgICAqIEByZXR1cm5zIFtsbmcsIGxhdF1cclxuICAgICAqL1xyXG4gICAgZ2NqMDJ0b2JkMDkobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHZhciB6ID0gTWF0aC5zcXJ0KGxuZyAqIGxuZyArIGxhdCAqIGxhdCkgKyAwLjAwMDAyICogTWF0aC5zaW4obGF0ICogdGhpcy54X1BJKTtcclxuICAgICAgICB2YXIgdGhldGEgPSBNYXRoLmF0YW4yKGxhdCwgbG5nKSArIDAuMDAwMDAzICogTWF0aC5jb3MobG5nICogdGhpcy54X1BJKTtcclxuICAgICAgICB2YXIgYmRfbG5nID0geiAqIE1hdGguY29zKHRoZXRhKSArIDAuMDA2NTtcclxuICAgICAgICB2YXIgYmRfbGF0ID0geiAqIE1hdGguc2luKHRoZXRhKSArIDAuMDA2O1xyXG4gICAgICAgIHJldHVybiBbYmRfbG5nLCBiZF9sYXRdXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXR1M4NOi9rOeBq+aYn+WdkOagh+ezuyAoR0NKLTAyKVxyXG4gICAgICog5Y2zV0dTODQg6L2sIOiwt+atjOOAgemrmOW+t1xyXG4gICAgICogQHBhcmFtIGxuZyDnu4/luqZcclxuICAgICAqIEBwYXJhbSBsYXQg57qs5bqmXHJcbiAgICAgKiBAcmV0dXJucyBbbG5nLCBsYXRdXHJcbiAgICAgKi9cclxuICAgIHdnczg0dG9nY2owMihsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3V0X29mX2NoaW5hKGxuZywgbGF0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW2xuZywgbGF0XVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRsYXQgPSB0aGlzLnRyYW5zZm9ybWxhdChsbmcgLSAxMDUuMCwgbGF0IC0gMzUuMCk7XHJcbiAgICAgICAgICAgIHZhciBkbG5nID0gdGhpcy50cmFuc2Zvcm1sbmcobG5nIC0gMTA1LjAsIGxhdCAtIDM1LjApO1xyXG4gICAgICAgICAgICB2YXIgcmFkbGF0ID0gbGF0IC8gMTgwLjAgKiB0aGlzLlBJO1xyXG4gICAgICAgICAgICB2YXIgbWFnaWMgPSBNYXRoLnNpbihyYWRsYXQpO1xyXG4gICAgICAgICAgICBtYWdpYyA9IDEgLSB0aGlzLmVlICogbWFnaWMgKiBtYWdpYztcclxuICAgICAgICAgICAgdmFyIHNxcnRtYWdpYyA9IE1hdGguc3FydChtYWdpYyk7XHJcbiAgICAgICAgICAgIGRsYXQgPSAoZGxhdCAqIDE4MC4wKSAvICgodGhpcy5hICogKDEgLSB0aGlzLmVlKSkgLyAobWFnaWMgKiBzcXJ0bWFnaWMpICogdGhpcy5QSSk7XHJcbiAgICAgICAgICAgIGRsbmcgPSAoZGxuZyAqIDE4MC4wKSAvICh0aGlzLmEgLyBzcXJ0bWFnaWMgKiBNYXRoLmNvcyhyYWRsYXQpICogdGhpcy5QSSk7XHJcbiAgICAgICAgICAgIHZhciBtZ2xhdCA9IGxhdCArIGRsYXQ7XHJcbiAgICAgICAgICAgIHZhciBtZ2xuZyA9IGxuZyArIGRsbmc7XHJcbiAgICAgICAgICAgIHJldHVybiBbbWdsbmcsIG1nbGF0XVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOeBq+aYn+WdkOagh+ezuyAoR0NKLTAyKei9rFdHUzg0XHJcbiAgICAgKiDljbPosLfmrYzjgIHpq5jlvrcg6L2sIFdHUzg0XHJcbiAgICAgKiBAcGFyYW0gbG5nIOe7j+W6plxyXG4gICAgICogQHBhcmFtIGxhdCDnuqzluqZcclxuICAgICAqIEByZXR1cm5zIFtsbmcsIGxhdF1cclxuICAgICAqL1xyXG4gICAgZ2NqMDJ0b3dnczg0KGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICBpZiAodGhpcy5vdXRfb2ZfY2hpbmEobG5nLCBsYXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbbG5nLCBsYXRdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZGxhdCA9IHRoaXMudHJhbnNmb3JtbGF0KGxuZyAtIDEwNS4wLCBsYXQgLSAzNS4wKTtcclxuICAgICAgICAgICAgdmFyIGRsbmcgPSB0aGlzLnRyYW5zZm9ybWxuZyhsbmcgLSAxMDUuMCwgbGF0IC0gMzUuMCk7XHJcbiAgICAgICAgICAgIHZhciByYWRsYXQgPSBsYXQgLyAxODAuMCAqIHRoaXMuUEk7XHJcbiAgICAgICAgICAgIHZhciBtYWdpYyA9IE1hdGguc2luKHJhZGxhdCk7XHJcbiAgICAgICAgICAgIG1hZ2ljID0gMSAtIHRoaXMuZWUgKiBtYWdpYyAqIG1hZ2ljO1xyXG4gICAgICAgICAgICB2YXIgc3FydG1hZ2ljID0gTWF0aC5zcXJ0KG1hZ2ljKTtcclxuICAgICAgICAgICAgZGxhdCA9IChkbGF0ICogMTgwLjApIC8gKCh0aGlzLmEgKiAoMSAtIHRoaXMuZWUpKSAvIChtYWdpYyAqIHNxcnRtYWdpYykgKiB0aGlzLlBJKTtcclxuICAgICAgICAgICAgZGxuZyA9IChkbG5nICogMTgwLjApIC8gKHRoaXMuYSAvIHNxcnRtYWdpYyAqIE1hdGguY29zKHJhZGxhdCkgKiB0aGlzLlBJKTtcclxuICAgICAgICAgICAgbGV0IG1nbGF0ID0gbGF0ICsgZGxhdDtcclxuICAgICAgICAgICAgbGV0IG1nbG5nID0gbG5nICsgZGxuZztcclxuICAgICAgICAgICAgcmV0dXJuIFtsbmcgKiAyIC0gbWdsbmcsIGxhdCAqIDIgLSBtZ2xhdF1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1sYXQobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIHJldCA9IC0xMDAuMCArIDIuMCAqIGxuZyArIDMuMCAqIGxhdCArIDAuMiAqIGxhdCAqIGxhdCArIDAuMSAqIGxuZyAqIGxhdCArIDAuMiAqIE1hdGguc3FydChNYXRoLmFicyhsbmcpKTtcclxuICAgICAgICByZXQgKz0gKDIwLjAgKiBNYXRoLnNpbig2LjAgKiBsbmcgKiB0aGlzLlBJKSArIDIwLjAgKiBNYXRoLnNpbigyLjAgKiBsbmcgKiB0aGlzLlBJKSkgKiAyLjAgLyAzLjA7XHJcbiAgICAgICAgcmV0ICs9ICgyMC4wICogTWF0aC5zaW4obGF0ICogdGhpcy5QSSkgKyA0MC4wICogTWF0aC5zaW4obGF0IC8gMy4wICogdGhpcy5QSSkpICogMi4wIC8gMy4wO1xyXG4gICAgICAgIHJldCArPSAoMTYwLjAgKiBNYXRoLnNpbihsYXQgLyAxMi4wICogdGhpcy5QSSkgKyAzMjAgKiBNYXRoLnNpbihsYXQgKiB0aGlzLlBJIC8gMzAuMCkpICogMi4wIC8gMy4wO1xyXG4gICAgICAgIHJldHVybiByZXRcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRyYW5zZm9ybWxuZyhsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgcmV0ID0gMzAwLjAgKyBsbmcgKyAyLjAgKiBsYXQgKyAwLjEgKiBsbmcgKiBsbmcgKyAwLjEgKiBsbmcgKiBsYXQgKyAwLjEgKiBNYXRoLnNxcnQoTWF0aC5hYnMobG5nKSk7XHJcbiAgICAgICAgcmV0ICs9ICgyMC4wICogTWF0aC5zaW4oNi4wICogbG5nICogdGhpcy5QSSkgKyAyMC4wICogTWF0aC5zaW4oMi4wICogbG5nICogdGhpcy5QSSkpICogMi4wIC8gMy4wO1xyXG4gICAgICAgIHJldCArPSAoMjAuMCAqIE1hdGguc2luKGxuZyAqIHRoaXMuUEkpICsgNDAuMCAqIE1hdGguc2luKGxuZyAvIDMuMCAqIHRoaXMuUEkpKSAqIDIuMCAvIDMuMDtcclxuICAgICAgICByZXQgKz0gKDE1MC4wICogTWF0aC5zaW4obG5nIC8gMTIuMCAqIHRoaXMuUEkpICsgMzAwLjAgKiBNYXRoLnNpbihsbmcgLyAzMC4wICogdGhpcy5QSSkpICogMi4wIC8gMy4wO1xyXG4gICAgICAgIHJldHVybiByZXRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIpOaWreaYr+WQpuWcqOWbveWGhe+8jOS4jeWcqOWbveWGheWImeS4jeWBmuWBj+enu1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG91dF9vZl9jaGluYShsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gKGxuZyA8IDcyLjAwNCB8fCBsbmcgPiAxMzcuODM0NykgfHwgKChsYXQgPCAwLjgyOTMgfHwgbGF0ID4gNTUuODI3MSkgfHwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICoganNvbnDlsIHoo4VcclxuICAgICAqIEBwYXJhbSBvYmogXFx7dXJsOiAnJywgc3VjY2VzczogKCk9PiB7fX1cclxuICAgICAqL1xyXG4gICAganNvbnBGdW5jdGlvbihvYmo6IGFueSkge1xyXG4gICAgICAgIC8vIOWIm+W7uuS4gOS4qnNjcmlwdOagh+etvjtcclxuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuICAgICAgICAvLyDnu5nlh73mlbDotbflkI3lrZfvvIzlrprkuYnkuLrlhajlsYDlh73mlbDvvJtcclxuICAgICAgICB2YXIgZm5OYW1lOiBhbnkgPSBcImpzb25wXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAvLyB3aW5kb3cuYWFh5bCx5piv5oqKYWFh6K6+572u5Li65YWo5bGA5Y+Y6YeP77yBXHJcbiAgICAgICAgd2luZG93W2ZuTmFtZV0gPSBvYmouc3VjY2VzcztcclxuICAgICAgICAvLyDmlLnlj5hzcmMs5re75Yqg5YiwaGVhZOS4rVxyXG4gICAgICAgIGlmIChvYmoudXJsLmluY2x1ZGVzKCc/JykpIHtcclxuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IG9iai51cmwgKyBcIiZjYWxsYmFjaz1cIiArIGZuTmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gb2JqLnVybCArIFwiP2NhbGxiYWNrPVwiICsgZm5OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDmiopzY3JpcHTmoIfnrb7mt7vliqDliLBoZWFk5qCH562+5Lit77yM5bCx5Lya5Y+R6YCBc3Jj55qE6K+35rGC5LqGXHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgIC8vIOS7o+eggeaJp+ihjOWujOavle+8jOaKinNjcmlwdOagh+etvuWIoOmZpFxyXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICAgICAgKHdpbmRvd1tmbk5hbWVdIGFzIGFueSkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=