ng-cw-v12
Version:
Angular UI component library
324 lines • 67.3 kB
JavaScript
import { __awaiter } from "tslib";
import { Component, Output, EventEmitter, Input } from '@angular/core';
import { Subject } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
import * as i2 from "./local.service";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
export class PoiComponent {
constructor(eleRef, http, ls) {
this.eleRef = eleRef;
this.http = http;
this.ls = ls;
this.ncClick = new EventEmitter();
this.ncClear = new EventEmitter();
this.ncToken = '';
this.ncCity = '';
//百度:https://mapopen-website-wiki.cdn.bcebos.com/static_zip/BaiduMap_cityCode_1102.zip
//高德:https://a.amap.com/lbs/static/code_resource/AMap_adcode_citycode.zip
//天地图:https://download.tianditu.gov.cn/download/xzqh/AdminCode.csv
//腾讯:https://lbs.qq.com/service/webService/webServiceGuide/search/webServiceDistrict#6
this.ncPlaceholder = '搜地点';
this.ncWidth = '300px';
this.ncShowType = 'simple';
this.ncDelay = 500;
this.parametersOk = true; //参数是否输入完整,不完整不显示组件dom
this.searchBarShow = false; //poi搜索条显示
this.poiKey = ''; //poi搜索关键字
this.poiInputing = false;
this.poiTipsList = []; //poi搜索提示结果
this.poiTipsListShow = false; //是否显示poi提示列表
this.$poiKeyChangeSubject = new Subject();
}
ngOnInit() {
if (!this.ncMapType) {
this.parametersOk = false;
console.error('ncMapType为空');
}
if (this.ncToken == '') {
this.parametersOk = false;
console.error('ncToken为空,请根据地图类型传入相应token');
}
//监听搜索输入框值变化,500ms没变才执行搜索
this.$poiKeyChangeSubject.pipe(debounceTime(this.ncDelay), distinctUntilChanged((n, o) => {
return n === o;
})).subscribe((_value) => {
if (_value) {
this.searchPoiTips();
}
else {
this.clearPoi();
}
});
}
//win11微软输入法输入中文时会触发mouseleave
//-----解决思路如下----:
//1、通过document.activeElement.id判断input有焦点时searchBarLeave不执行searchBarShow=false
//2、但是input焦点一直存在,searchBarLeave永远不执行searchBarShow=false
//3、接着增加searchInputLeave,在鼠标离开input时取消input焦点,解决上步
//4、但是现在输入中文时,输入第一个字母又会触发searchInputLeave,关闭了焦点,执行了搜索(输入zai时变成了z爱)
//5、接着增加poiInputing,keydown时poiInputing=true,第一个字母输入时不执行searchInputLeave里的取消焦点,解决上步,
//6、但是poiInputing就一直为true了,searchInputLeave永远不执行取消input焦点了
//7、接着增加on-keyup时poiInputing=false,解决上步
searchBarLeave() {
setTimeout(() => {
if (document.activeElement && document.activeElement.id != 'searchInput') {
this.searchBarShow = false;
}
});
}
searchInputLeave() {
if (this.poiInputing) {
return;
}
setTimeout(() => {
let searchInput = this.eleRef.nativeElement.querySelector('#searchInput');
if (searchInput) {
searchInput.blur();
}
});
}
showSearch() {
this.searchBarShow = true;
setTimeout(() => {
let searchInput = this.eleRef.nativeElement.querySelector('#searchInput');
if (searchInput) {
searchInput.focus();
}
});
}
//输入框值变化
poiKeyChange() {
this.$poiKeyChangeSubject.next(this.poiKey);
}
//poi搜索提示
searchPoiTips() {
return __awaiter(this, void 0, void 0, function* () {
if (this.ncMapType == 'gaode') {
let url = `https://restapi.amap.com/v3/assistant/inputtips?key=${this.ncToken}&keywords=${this.poiKey}&city=${this.ncCity}`;
this.http.get(url).subscribe((res) => {
this.poiTipsListShow = true;
if (res['status'] == 1) {
this.poiTipsList = res['tips'];
for (let l of this.poiTipsList) {
if (l.location.length > 0) {
let GCJ02 = l.location.split(',');
l['locationWGS84'] = this.ls.gcj02towgs84(Number(GCJ02[0]), Number(GCJ02[1]));
}
else {
l['locationWGS84'] = [];
}
}
}
else {
this.poiTipsList = [];
}
});
}
else if (this.ncMapType == 'baidu') {
let url = '';
if (this.ncCity == '') {
url = `https://api.map.baidu.com/place/v2/suggestion?query=${this.poiKey}®ion=全国&output=json&ak=${this.ncToken}`;
}
else {
url = `https://api.map.baidu.com/place/v2/suggestion?query=${this.poiKey}®ion=${this.ncCity}&output=json&ak=${this.ncToken}`;
}
this.ls.jsonpFunction({
url: url,
success: (res) => {
this.poiTipsListShow = true;
if (res['status'] == 0) {
this.poiTipsList = res['result'];
for (let l of this.poiTipsList) {
if (l.location.lat) {
let GCJ02 = this.ls.bd09togcj02(Number(l.location.lng), Number(l.location.lat));
l['locationWGS84'] = this.ls.gcj02towgs84(Number(GCJ02[0]), Number(GCJ02[1]));
}
else {
l['locationWGS84'] = [];
}
}
}
else {
this.poiTipsList = [];
}
}
});
}
else if (this.ncMapType == 'tianditu') {
let url = '';
if (this.ncCity == '') {
url = `http://api.tianditu.gov.cn/v2/search?postStr={"keyWord":"${this.poiKey}","level": 18,"mapBound": "-180,-90,180,90","queryType":7,"start":0,"count":10,"show":2}&type=query&tk=${this.ncToken}`;
}
else {
url = `http://api.tianditu.gov.cn/v2/search?postStr={"keyWord":"${this.poiKey}","specify": ${this.ncCity},"level": 18,"mapBound": "-180,-90,180,90","queryType":7,"start":0,"count":10,"show":2}&type=query&tk=${this.ncToken}`;
}
this.http.get(url).subscribe((res) => {
this.poiTipsListShow = true;
if (res['status'].infocode == 1000) {
this.poiTipsList = res['pois'] || [];
for (let l of this.poiTipsList) {
if (l.lonlat.length > 0) {
let temp = l.lonlat.split(',');
l['locationWGS84'] = [Number(temp[0]), Number(temp[1])];
}
else {
l['locationWGS84'] = [];
}
}
}
else {
this.poiTipsList = [];
}
});
}
else if (this.ncMapType == 'tencent') {
let url = `https://apis.map.qq.com/ws/place/v1/suggestion?region=${this.ncCity}&keyword=${this.poiKey}&key=${this.ncToken}&output=jsonp`;
this.ls.jsonpFunction({
url: url,
success: (res) => {
this.poiTipsListShow = true;
if (res['status'] == 0) {
this.poiTipsList = res['data'];
for (let l of this.poiTipsList) {
if (l.location.lat) {
l['locationWGS84'] = this.ls.gcj02towgs84(Number(l.location.lng), Number(l.location.lat));
}
else {
l['locationWGS84'] = [];
}
}
}
else {
this.poiTipsList = [];
}
}
});
}
});
}
//poi提示点击
//若提示列表经纬度则直接使用
//若没有则使用提示名字调用详细接口,取返回结果第一条的经纬度
poiTipsClick(item) {
this.searchBarShow = false;
if (item.locationWGS84.length > 0) {
this.ncClick.emit(item);
}
else {
if (this.ncMapType == 'gaode') {
let url = `https://restapi.amap.com/v3/place/text?key=${this.ncToken}&keywords=${item.name}&city=${this.ncCity}`;
this.http.get(url).subscribe((res) => {
if (res['status'] == 1) {
if (res['pois'][0].location.length > 0) {
let GCJ02 = res['pois'][0].location.split(',');
item['locationWGS84'] = this.ls.gcj02towgs84(Number(GCJ02[0]), Number(GCJ02[1]));
this.ncClick.emit(item);
}
else {
this.ncClick.emit(item);
}
}
else {
this.ncClick.emit(item);
}
});
}
else if (this.ncMapType == 'baidu') {
let url = '';
if (this.ncCity == '') {
url = `https://api.map.baidu.com/place/v2/search?query=${item.name}®ion=全国&output=json&ak=${this.ncToken}`;
}
else {
url = `https://api.map.baidu.com/place/v2/search?query=${item.name}®ion=${this.ncCity}&output=json&ak=${this.ncToken}`;
}
this.ls.jsonpFunction({
url: url,
success: (res) => {
if (res['status'] == 0) {
if (res['results'][0].location.lat) {
let GCJ02 = this.ls.bd09togcj02(Number(res['results'][0].location.lng), Number(res['results'][0].location.lat));
item['locationWGS84'] = this.ls.gcj02towgs84(Number(GCJ02[0]), Number(GCJ02[1]));
this.ncClick.emit(item);
}
else {
this.ncClick.emit(item);
}
}
else {
this.ncClick.emit(item);
}
}
});
}
else if (this.ncMapType == 'tianditu') {
this.ncClick.emit(item);
}
else if (this.ncMapType == 'tencent') {
let boundary = '';
if (this.ncCity == '') {
boundary = 'region(全国, 1)';
}
else {
boundary = `region(${this.ncCity}, 1)`;
}
let url = `https://apis.map.qq.com/ws/place/v1/search?boundary=${boundary}&keyword=${item.title}&key=${this.ncToken}&output=jsonp`;
this.ls.jsonpFunction({
url: url,
success: (res) => {
if (res['status'] == 0) {
if (res['data'][0].location.lat) {
item['locationWGS84'] = this.ls.gcj02towgs84(Number(res['data'][0].location.lng), Number(res['data'][0].location.lat));
this.ncClick.emit(item);
}
else {
this.ncClick.emit(item);
}
}
else {
this.ncClick.emit(item);
}
}
});
}
}
}
//清除poi
clearPoi() {
this.poiKey = '';
this.poiTipsList = [];
this.poiTipsListShow = false;
this.ncClear.emit();
}
}
PoiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: PoiComponent, deps: [{ token: i0.ElementRef }, { token: i1.HttpClient }, { token: i2.LocalService }], target: i0.ɵɵFactoryTarget.Component });
PoiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: PoiComponent, selector: "nc-poi", inputs: { ncMapType: "ncMapType", ncToken: "ncToken", ncCity: "ncCity", ncPlaceholder: "ncPlaceholder", ncWidth: "ncWidth", ncShowType: "ncShowType", ncDelay: "ncDelay" }, outputs: { ncClick: "ncClick", ncClear: "ncClear" }, ngImport: i0, template: "<ng-container *ngIf=\"parametersOk\">\r\n <div class=\"searchIcon\" *ngIf=\"!searchBarShow\">\r\n <span on-mouseenter=\"showSearch()\">\r\n <svg t=\"1725550918948\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"23934\" width=\"32\" height=\"32\">\r\n <path\r\n d=\"M405.2 746.9C217 746.9 63.9 593.8 63.9 405.6S217 64.2 405.2 64.2s341.3 153.1 341.3 341.3-153.1 341.4-341.3 341.4z m0-614.4c-150.6 0-273.1 122.5-273.1 273.1s122.5 273.1 273.1 273.1 273.1-122.5 273.1-273.1-122.5-273.1-273.1-273.1z\"\r\n p-id=\"23935\"></path>\r\n <path\r\n d=\"M911.3 959.2L576.2 624.1c-0.8-0.8-0.8-2.1 0-2.8l45.4-45.4c0.8-0.8 2.1-0.8 2.8 0L959.5 911c0.8 0.8 0.8 2.1 0 2.8l-45.4 45.4c-0.8 0.8-2 0.8-2.8 0z\"\r\n p-id=\"23936\"></path>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"searchBar\" *ngIf=\"searchBarShow\" on-mouseleave=\"searchBarLeave()\" [ngStyle]=\"{'width': ncWidth}\">\r\n <input class=\"nc-input\" id=\"searchInput\" autocomplete=\"off\" type=\"text\" placeholder=\"{{ncPlaceholder}}\"\r\n [(ngModel)]=\"poiKey\" (ngModelChange)=\"poiKeyChange()\" on-mouseleave=\"searchInputLeave()\"\r\n on-keydown=\"poiInputing = true\" on-keyup=\"poiInputing = false\" />\r\n <div class=\"search-list\" *ngIf=\"poiTipsListShow\">\r\n <div class=\"no-data\" *ngIf=\"poiTipsList.length == 0\">\r\n <svg t=\"1725549253174\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\" p-id=\"14899\" width=\"64\" height=\"64\">\r\n <path\r\n d=\"M843.776 577.536L737.28 403.456c-2.048-4.096-6.144-6.144-10.24-6.144H284.672c-4.096 0-8.192 2.048-10.24 6.144l-106.496 174.08v215.04c0 6.144 4.096 10.24 10.24 10.24h657.408c6.144 0 10.24-4.096 10.24-10.24V581.632c-2.048 0-2.048-2.048-2.048-4.096z m-552.96-157.696h430.08l96.256 151.552H579.584c-6.144 0-10.24 4.096-10.24 10.24 0 34.816-28.672 63.488-63.488 63.488-34.816 0-63.488-28.672-63.488-63.488 0-6.144-4.096-10.24-10.24-10.24H194.56l96.256-151.552z m532.48 364.544h-634.88V593.92h233.472c6.144 40.96 40.96 75.776 83.968 75.776 43.008 0 79.872-32.768 83.968-75.776h233.472v190.464zM116.736 684.032v-12.288c0-2.048-2.048-6.144-6.144-6.144-2.048 0-6.144 2.048-6.144 6.144v12.288h-10.24c-2.048 0-6.144 2.048-6.144 6.144s2.048 6.144 6.144 6.144h12.288v12.288c0 2.048 2.048 6.144 6.144 6.144 2.048 0 6.144-2.048 6.144-6.144V696.32h12.288c2.048 0 6.144-2.048 6.144-6.144s-2.048-6.144-6.144-6.144h-14.336zM884.736 450.56h18.432c4.096 0 8.192 4.096 8.192 8.192s-4.096 8.192-8.192 8.192h-18.432v18.432c0 4.096-4.096 8.192-8.192 8.192s-8.192-4.096-8.192-8.192v-18.432h-18.432c-4.096 0-8.192-4.096-8.192-8.192s4.096-8.192 8.192-8.192h18.432v-18.432c0-4.096 4.096-8.192 8.192-8.192s8.192 4.096 8.192 8.192v18.432z m63.488 75.776h10.24c2.048 0 6.144 2.048 6.144 6.144s-2.048 6.144-6.144 6.144h-10.24v10.24c0 2.048-2.048 6.144-6.144 6.144-2.048 0-6.144-2.048-6.144-4.096v-10.24h-10.24c-2.048 0-6.144-2.048-6.144-6.144s2.048-6.144 6.144-6.144h10.24v-12.288c0-2.048 2.048-6.144 6.144-6.144 2.048 0 6.144 2.048 6.144 6.144v10.24zM131.072 436.224v-18.432c0-4.096-4.096-8.192-8.192-8.192s-8.192 4.096-8.192 8.192v16.384h-18.432c-4.096 0-8.192 4.096-8.192 8.192s4.096 8.192 8.192 8.192h16.384v20.48c0 4.096 4.096 8.192 8.192 8.192s8.192-4.096 8.192-8.192v-16.384h16.384c4.096 0 8.192-4.096 8.192-8.192s-4.096-8.192-8.192-8.192c4.096-2.048-14.336-2.048-14.336-2.048z m-77.824 174.08c-18.432 0-34.816-16.384-34.816-34.816 0-18.432 16.384-34.816 34.816-34.816 18.432 0 34.816 16.384 34.816 34.816 0 20.48-16.384 34.816-34.816 34.816z m0-16.384c10.24 0 16.384-8.192 16.384-16.384 0-10.24-8.192-16.384-16.384-16.384-10.24 0-16.384 8.192-16.384 16.384-2.048 8.192 6.144 16.384 16.384 16.384z m933.888-98.304c-8.192 0-16.384-6.144-16.384-16.384 0-8.192 6.144-16.384 16.384-16.384 8.192 0 16.384 6.144 16.384 16.384s-6.144 16.384-16.384 16.384z m0-6.144c4.096 0 8.192-4.096 8.192-8.192s-4.096-8.192-8.192-8.192-8.192 4.096-8.192 8.192 4.096 8.192 8.192 8.192zM288.768 241.664c6.144-6.144 14.336-6.144 20.48 0l51.2 51.2c6.144 6.144 6.144 14.336 0 20.48-6.144 6.144-14.336 6.144-20.48 0l-51.2-51.2c-6.144-6.144-6.144-14.336 0-20.48z m217.088-34.816c8.192 0 14.336 6.144 14.336 14.336v71.68c0 8.192-6.144 14.336-14.336 14.336-8.192 0-14.336-6.144-14.336-14.336v-71.68c0-6.144 6.144-14.336 14.336-14.336z m215.04 32.768c6.144 6.144 6.144 14.336 0 20.48L671.744 307.2c-6.144 6.144-14.336 6.144-20.48 0-6.144-6.144-6.144-14.336 0-20.48l49.152-49.152c6.144-4.096 16.384-4.096 20.48 2.048z m0 0\"\r\n p-id=\"14900\" fill=\"#bfbfbf\"></path>\r\n </svg>\r\n <div>\u6682\u65E0\u6570\u636E</div>\r\n </div>\r\n <ng-container *ngIf=\"poiTipsList.length > 0\">\r\n <!--\u7B80\u6613\u6A21\u5F0F-->\r\n <ng-container *ngIf=\"ncShowType == 'simple'\">\r\n <div class=\"list-row-1\" *ngFor=\"let l of poiTipsList;let i = index;\" (click)=\"poiTipsClick(l)\">\r\n <span class=\"tipsIcon\">\r\n <svg t=\"1725550918948\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\" p-id=\"23934\" width=\"32\" height=\"32\">\r\n <path\r\n d=\"M405.2 746.9C217 746.9 63.9 593.8 63.9 405.6S217 64.2 405.2 64.2s341.3 153.1 341.3 341.3-153.1 341.4-341.3 341.4z m0-614.4c-150.6 0-273.1 122.5-273.1 273.1s122.5 273.1 273.1 273.1 273.1-122.5 273.1-273.1-122.5-273.1-273.1-273.1z\"\r\n p-id=\"23935\"></path>\r\n <path\r\n d=\"M911.3 959.2L576.2 624.1c-0.8-0.8-0.8-2.1 0-2.8l45.4-45.4c0.8-0.8 2.1-0.8 2.8 0L959.5 911c0.8 0.8 0.8 2.1 0 2.8l-45.4 45.4c-0.8 0.8-2 0.8-2.8 0z\"\r\n p-id=\"23936\"></path>\r\n </svg>\r\n </span>\r\n <span>\r\n <ng-container *ngIf=\"ncMapType == 'gaode'\">{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'baidu'\">{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tianditu'\">{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tencent'\">{{l.title}}</ng-container>\r\n </span>\r\n <span class=\"tipsDistrict\">\r\n <ng-container *ngIf=\"ncMapType == 'gaode'\">{{l.district}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'baidu'\">{{l.district}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tianditu'\">{{l.county}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tencent'\">{{l.district}}</ng-container>\r\n </span>\r\n </div>\r\n </ng-container>\r\n <!--\u8BE6\u7EC6\u6A21\u5F0F-->\r\n <ng-container *ngIf=\"ncShowType == 'detailed'\">\r\n <div class=\"list-row-2\" *ngFor=\"let l of poiTipsList;let i = index;\" (click)=\"poiTipsClick(l)\">\r\n <div class=\"name\">\r\n <ng-container *ngIf=\"ncMapType == 'gaode'\">{{i + 1}}\u3001{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'baidu'\">{{i + 1}}\u3001{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tianditu'\">{{i + 1}}\u3001{{l.name}}</ng-container>\r\n <ng-container *ngIf=\"ncMapType == 'tencent'\">{{i + 1}}\u3001{{l.title}}</ng-container>\r\n </div>\r\n <div class=\"region\">\r\n <ng-container *ngIf=\"ncMapType == 'gaode'\">{{l.district}}</ng-container>\r\n <ng-container\r\n *ngIf=\"ncMapType == 'baidu'\">{{l.province}}{{l.city}}{{l.district}}</ng-container>\r\n <ng-container\r\n *ngIf=\"ncMapType == 'tianditu'\">{{l.province}}{{l.city}}{{l.county}}</ng-container>\r\n <ng-container\r\n *ngIf=\"ncMapType == 'tencent'\">{{l.province}}{{l.city}}{{l.district}}</ng-container>\r\n </div>\r\n <div class=\"address\">{{l.address}}</div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".searchIcon{z-index:1001;position:relative;background-color:#1890ff;color:#fff;width:30px;height:30px;display:flex;align-items:center;justify-content:center;font-size:18px;border-radius:3px}.searchIcon svg{width:18px;height:18px;fill:#fff;display:flex}.searchBar{z-index:1001;position:relative}.searchBar .search-list{position:absolute;background-color:#fff;width:100%;max-height:380px;overflow:auto;box-shadow:0 2px 8px #e7e7e7}.searchBar .search-list .no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 0;color:gray}.searchBar .search-list .list-row-1{padding:5px 10px;cursor:pointer}.searchBar .search-list .list-row-1:hover{background-color:#ececec}.searchBar .search-list .list-row-1 .tipsIcon{color:gray;margin-right:5px}.searchBar .search-list .list-row-1 .tipsIcon svg{width:14px;height:14px;fill:gray;position:relative;top:2px}.searchBar .search-list .list-row-1 .tipsDistrict{color:gray;margin-left:5px;font-size:13px}.searchBar .search-list .list-row-2{padding:5px 10px;cursor:pointer}.searchBar .search-list .list-row-2:hover{background-color:#ececec}.searchBar .search-list .list-row-2 .region,.searchBar .search-list .list-row-2 .address{color:gray;font-size:13px}.searchBar .search-list::-webkit-scrollbar{width:5px!important;height:5px!important}.searchBar .search-list::-webkit-scrollbar-thumb{border-radius:5px!important;background:#cccccc!important}.searchBar .search-list::-webkit-scrollbar-track{border-radius:0!important;background:#f1f1f1!important}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: PoiComponent, decorators: [{
type: Component,
args: [{
selector: 'nc-poi',
templateUrl: './poi.component.html',
styleUrls: ['./poi.component.less']
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.HttpClient }, { type: i2.LocalService }]; }, propDecorators: { ncClick: [{
type: Output
}], ncClear: [{
type: Output
}], ncMapType: [{
type: Input
}], ncToken: [{
type: Input
}], ncCity: [{
type: Input
}], ncPlaceholder: [{
type: Input
}], ncWidth: [{
type: Input
}], ncShowType: [{
type: Input
}], ncDelay: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvcG9pL3BvaS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3BvaS9wb2kuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU9wRSxNQUFNLE9BQU8sWUFBWTtJQXVCeEIsWUFBb0IsTUFBa0IsRUFBVSxJQUFnQixFQUFVLEVBQWdCO1FBQXRFLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQXRCaEYsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFOUIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQzdCLHNGQUFzRjtRQUN0Rix5RUFBeUU7UUFDekUsa0VBQWtFO1FBQ2xFLHNGQUFzRjtRQUM3RSxrQkFBYSxHQUFXLEtBQUssQ0FBQztRQUM5QixZQUFPLEdBQVcsT0FBTyxDQUFDO1FBQzFCLGVBQVUsR0FBMEIsUUFBUSxDQUFDO1FBQzdDLFlBQU8sR0FBVyxHQUFHLENBQUM7UUFFL0IsaUJBQVksR0FBWSxJQUFJLENBQUMsQ0FBQSxzQkFBc0I7UUFDbkQsa0JBQWEsR0FBWSxLQUFLLENBQUMsQ0FBQSxVQUFVO1FBQ3pDLFdBQU0sR0FBVyxFQUFFLENBQUMsQ0FB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SHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYWxTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICduYy1wb2knLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9wb2kuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL3BvaS5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb2lDb21wb25lbnQge1xyXG5cdEBPdXRwdXQoKSBuY0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBPdXRwdXQoKSBuY0NsZWFyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBJbnB1dCgpIG5jTWFwVHlwZSE6ICdiYWlkdScgfCAnZ2FvZGUnIHwgJ3RpYW5kaXR1JyB8ICd0ZW5jZW50JztcclxuXHRASW5wdXQoKSBuY1Rva2VuOiBzdHJpbmcgPSAnJztcclxuXHRASW5wdXQoKSBuY0NpdHk6IHN0cmluZyA9ICcnO1xyXG5cdC8v55m+5bqm77yaaHR0cHM6Ly9tYXBvcGVuLXdlYnNpdGUtd2lraS5jZG4uYmNlYm9zLmNvbS9zdGF0aWNfemlwL0JhaWR1TWFwX2NpdHlDb2RlXzExMDIuemlwXHJcblx0Ly/pq5jlvrfvvJpodHRwczovL2EuYW1hcC5jb20vbGJzL3N0YXRpYy9jb2RlX3Jlc291cmNlL0FNYXBfYWRjb2RlX2NpdHljb2RlLnppcFxyXG5cdC8v5aSp5Zyw5Zu+77yaaHR0cHM6Ly9kb3dubG9hZC50aWFuZGl0dS5nb3YuY24vZG93bmxvYWQveHpxaC9BZG1pbkNvZGUuY3N2XHJcblx0Ly/ohb7orq/vvJpodHRwczovL2xicy5xcS5jb20vc2VydmljZS93ZWJTZXJ2aWNlL3dlYlNlcnZpY2VHdWlkZS9zZWFyY2gvd2ViU2VydmljZURpc3RyaWN0IzZcclxuXHRASW5wdXQoKSBuY1BsYWNlaG9sZGVyOiBzdHJpbmcgPSAn5pCc5Zyw54K5JztcclxuXHRASW5wdXQoKSBuY1dpZHRoOiBzdHJpbmcgPSAnMzAwcHgnO1xyXG5cdEBJbnB1dCgpIG5jU2hvd1R5cGU6ICdzaW1wbGUnIHwgJ2RldGFpbGVkJyA9ICdzaW1wbGUnO1xyXG5cdEBJbnB1dCgpIG5jRGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcblx0cGFyYW1ldGVyc09rOiBib29sZWFuID0gdHJ1ZTsvL+WPguaVsOaYr+WQpui+k+WFpeWujOaVtO+8jOS4jeWujOaVtOS4jeaYvuekuue7hOS7tmRvbVxyXG5cdHNlYXJjaEJhclNob3c6IGJvb2xlYW4gPSBmYWxzZTsvL3BvaeaQnOe0ouadoeaYvuekulxyXG5cdHBvaUtleTogc3RyaW5nID0gJyc7Ly9wb2nmkJzntKLlhbPplK7lrZdcclxuXHRwb2lJbnB1dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHBvaVRpcHNMaXN0OiBBcnJheTxhbnk+ID0gW107Ly9wb2nmkJzntKLmj5DnpLrnu5PmnpxcclxuXHRwb2lUaXBzTGlzdFNob3c6IGJvb2xlYW4gPSBmYWxzZTsvL+aYr+WQpuaYvuekunBvaeaPkOekuuWIl+ihqFxyXG5cdCRwb2lLZXlDaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGxzOiBMb2NhbFNlcnZpY2UpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdGlmICghdGhpcy5uY01hcFR5cGUpIHtcclxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzT2sgPSBmYWxzZTtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignbmNNYXBUeXBl5Li656m6Jyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubmNUb2tlbiA9PSAnJykge1xyXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNPayA9IGZhbHNlO1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCduY1Rva2Vu5Li656m677yM6K+35qC55o2u5Zyw5Zu+57G75Z6L5Lyg5YWl55u45bqUdG9rZW4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL+ebkeWQrOaQnOe0oui+k+WFpeahhuWAvOWPmOWMlu+8jDUwMG1z5rKh5Y+Y5omN5omn6KGM5pCc57SiXHJcblx0XHR0aGlzLiRwb2lLZXlDaGFuZ2VTdWJqZWN0LnBpcGUoXHJcblx0XHRcdGRlYm91bmNlVGltZSh0aGlzLm5jRGVsYXkpLFxyXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgobjogc3RyaW5nLCBvOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbiA9PT0gbztcclxuXHRcdFx0fSlcclxuXHRcdCkuc3Vic2NyaWJlKChfdmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAoX3ZhbHVlKSB7XHJcblx0XHRcdFx0dGhpcy5zZWFyY2hQb2lUaXBzKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jbGVhclBvaSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHQvL3dpbjEx5b6u6L2v6L6T5YWl5rOV6L6T5YWl5Lit5paH5pe25Lya6Kem5Y+RbW91c2VsZWF2ZVxyXG5cdC8vLS0tLS3op6PlhrPmgJ3ot6/lpoLkuIstLS0t77yaXHJcblx0Ly8x44CB6YCa6L+HZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5pZOWIpOaWrWlucHV05pyJ54Sm54K55pe2c2VhcmNoQmFyTGVhdmXkuI3miafooYxzZWFyY2hCYXJTaG93PWZhbHNlXHJcblx0Ly8y44CB5L2G5pivaW5wdXTnhKbngrnkuIDnm7TlrZjlnKjvvIxzZWFyY2hCYXJMZWF2ZeawuOi/nOS4jeaJp+ihjHNlYXJjaEJhclNob3c9ZmFsc2VcclxuXHQvLzPjgIHmjqXnnYDlop7liqBzZWFyY2hJbnB1dExlYXZl77yM5Zyo6byg5qCH56a75byAaW5wdXTml7blj5bmtohpbnB1dOeEpueCue+8jOino+WGs+S4iuatpVxyXG5cdC8vNOOAgeS9huaYr+eOsOWcqOi+k+WFpeS4reaWh+aXtu+8jOi+k+WFpeesrOS4gOS4quWtl+avjeWPiOS8muinpuWPkXNlYXJjaElucHV0TGVhdmXvvIzlhbPpl63kuobnhKbngrnvvIzmiafooYzkuobmkJzntKLvvIjovpPlhaV6YWnml7blj5jmiJDkuoZ654ix77yJXHJcblx0Ly8144CB5o6l552A5aKe5YqgcG9pSW5wdXRpbmfvvIxrZXlkb3du5pe2cG9pSW5wdXRpbmc9dHJ1Ze+8jOesrOS4gOS4quWtl+avjei+k+WFpeaXtuS4jeaJp+ihjHNlYXJjaElucHV0TGVhdmXph4znmoTlj5bmtojnhKbngrnvvIzop6PlhrPkuIrmraXvvIxcclxuXHQvLzbjgIHkvYbmmK9wb2lJbnB1dGluZ+WwseS4gOebtOS4unRydWXkuobvvIxzZWFyY2hJbnB1dExlYXZl5rC46L+c5LiN5omn6KGM5Y+W5raIaW5wdXTnhKbngrnkuoZcclxuXHQvLzfjgIHmjqXnnYDlop7liqBvbi1rZXl1cOaXtnBvaUlucHV0aW5nPWZhbHNl77yM6Kej5Yaz5LiK5q2lXHJcblx0c2VhcmNoQmFyTGVhdmUoKSB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5pZCAhPSAnc2VhcmNoSW5wdXQnKSB7XHJcblx0XHRcdFx0dGhpcy5zZWFyY2hCYXJTaG93ID0gZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblx0c2VhcmNoSW5wdXRMZWF2ZSgpIHtcclxuXHRcdGlmICh0aGlzLnBvaUlucHV0aW5nKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRsZXQgc2VhcmNoSW5wdXQgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpO1xyXG5cdFx0XHRpZiAoc2VhcmNoSW5wdXQpIHtcclxuXHRcdFx0XHRzZWFyY2hJbnB1dC5ibHVyKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cdHNob3dTZWFyY2goKSB7XHJcblx0XHR0aGlzLnNlYXJjaEJhclNob3cgPSB0cnVlO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGxldCBzZWFyY2hJbnB1dCA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3NlYXJjaElucHV0Jyk7XHJcblx0XHRcdGlmIChzZWFyY2hJbnB1dCkge1xyXG5cdFx0XHRcdHNlYXJjaElucHV0LmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHQvL+i+k+WFpeahhuWAvOWPmOWMllxyXG5cdHBvaUtleUNoYW5nZSgpIHtcclxuXHRcdHRoaXMuJHBvaUtleUNoYW5nZVN1YmplY3QubmV4dCh0aGlzLnBvaUtleSk7XHJcblx0fVxyXG5cclxuXHQvL3BvaeaQnOe0ouaPkOekulxyXG5cdGFzeW5jIHNlYXJjaFBvaVRpcHMoKSB7XHJcblx0XHRpZiAodGhpcy5uY01hcFR5cGUgPT0gJ2dhb2RlJykge1xyXG5cdFx0XHRsZXQgdXJsID0gYGh0dHBzOi8vcmVzdGFwaS5hbWFwLmNvbS92My9hc3Npc3RhbnQvaW5wdXR0aXBzP2tleT0ke3RoaXMubmNUb2tlbn0ma2V5d29yZHM9JHt0aGlzLnBvaUtleX0mY2l0eT0ke3RoaXMubmNDaXR5fWA7XHJcblx0XHRcdHRoaXMuaHR0cC5nZXQodXJsKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wb2lUaXBzTGlzdFNob3cgPSB0cnVlO1xyXG5cdFx0XHRcdGlmIChyZXNbJ3N0YXR1cyddID09IDEpIHtcclxuXHRcdFx0XHRcdHRoaXMucG9pVGlwc0xpc3QgPSByZXNbJ3RpcHMnXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGwgb2YgdGhpcy5wb2lUaXBzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAobC5sb2NhdGlvbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IEdDSjAyID0gbC5sb2NhdGlvbi5zcGxpdCgnLCcpO1xyXG5cdFx0XHRcdFx0XHRcdGxbJ2xvY2F0aW9uV0dTODQnXSA9IHRoaXMubHMuZ2NqMDJ0b3dnczg0KE51bWJlcihHQ0owMlswXSksIE51bWJlcihHQ0owMlsxXSkpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxbJ2xvY2F0aW9uV0dTODQnXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucG9pVGlwc0xpc3QgPSBbXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9IGVsc2UgaWYgKHRoaXMubmNNYXBUeXBlID09ICdiYWlkdScpIHtcclxuXHRcdFx0bGV0IHVybCA9ICcnO1xyXG5cdFx0XHRpZiAodGhpcy5uY0NpdHkgPT0gJycpIHtcclxuXHRcdFx0XHR1cmwgPSBgaHR0cHM6Ly9hcGkubWFwLmJhaWR1LmNvbS9wbGFjZS92Mi9zdWdnZXN0aW9uP3F1ZXJ5PSR7dGhpcy5wb2lLZXl9JnJlZ2lvbj3lhajlm70mb3V0cHV0PWpzb24mYWs9JHt0aGlzLm5jVG9rZW59YDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR1cmwgPSBgaHR0cHM6Ly9hcGkubWFwLmJhaWR1LmNvbS9wbGFjZS92Mi9zdWdnZXN0aW9uP3F1ZXJ5PSR7dGhpcy5wb2lLZXl9JnJlZ2lvbj0ke3RoaXMubmNDaXR5fSZvdXRwdXQ9anNvbiZhaz0ke3RoaXMubmNUb2tlbn1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMubHMuanNvbnBGdW5jdGlvbih7XHJcblx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0c3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnBvaVRpcHNMaXN0U2hvdyA9IHRydWU7XHJcblx0XHRcdFx0XHRpZiAocmVzWydzdGF0dXMnXSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucG9pVGlwc0xpc3QgPSByZXNbJ3Jlc3VsdCddO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBsIG9mIHRoaXMucG9pVGlwc0xpc3QpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAobC5sb2NhdGlvbi5sYXQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBHQ0owMiA9IHRoaXMubHMuYmQwOXRvZ2NqMDIoTnVtYmVyKGwubG9jYXRpb24ubG5nKSwgTnVtYmVyKGwubG9jYXRpb24ubGF0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRsWydsb2NhdGlvbldHUzg0J10gPSB0aGlzLmxzLmdjajAydG93Z3M4NChOdW1iZXIoR0NKMDJbMF0pLCBOdW1iZXIoR0NKMDJbMV0pKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0bFsnbG9jYXRpb25XR1M4NCddID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBvaVRpcHNMaXN0ID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSBlbHNlIGlmICh0aGlzLm5jTWFwVHlwZSA9PSAndGlhbmRpdHUnKSB7XHJcblx0XHRcdGxldCB1cmwgPSAnJztcclxuXHRcdFx0aWYgKHRoaXMubmNDaXR5ID09ICcnKSB7XHJcblx0XHRcdFx0dXJsID0gYGh0dHA6Ly9hcGkudGlhbmRpdHUuZ292LmNuL3YyL3NlYXJjaD9wb3N0U3RyPXtcImtleVdvcmRcIjpcIiR7dGhpcy5wb2lLZXl9XCIsXCJsZXZlbFwiOiAxOCxcIm1hcEJvdW5kXCI6IFwiLTE4MCwtOTAsMTgwLDkwXCIsXCJxdWVyeVR5cGVcIjo3LFwic3RhcnRcIjowLFwiY291bnRcIjoxMCxcInNob3dcIjoyfSZ0eXBlPXF1ZXJ5JnRrPSR7dGhpcy5uY1Rva2VufWA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dXJsID0gYGh0dHA6Ly9hcGkudGlhbmRpdHUuZ292LmNuL3YyL3NlYXJjaD9wb3N0U3RyPXtcImtleVdvcmRcIjpcIiR7dGhpcy5wb2lLZXl9XCIsXCJzcGVjaWZ5XCI6ICR7dGhpcy5uY0NpdHl9LFwibGV2ZWxcIjogMTgsXCJtYXBCb3VuZFwiOiBcIi0xODAsLTkwLDE4MCw5MFwiLFwicXVlcnlUeXBlXCI6NyxcInN0YXJ0XCI6MCxcImNvdW50XCI6MTAsXCJzaG93XCI6Mn0mdHlwZT1xdWVyeSZ0az0ke3RoaXMubmNUb2tlbn1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaHR0cC5nZXQodXJsKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wb2lUaXBzTGlzdFNob3cgPSB0cnVlO1xyXG5cdFx0XHRcdGlmIChyZXNbJ3N0YXR1cyddLmluZm9jb2RlID09IDEwMDApIHtcclxuXHRcdFx0XHRcdHRoaXMucG9pVGlwc0xpc3QgPSByZXNbJ3BvaXMnXSB8fCBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGwgb2YgdGhpcy5wb2lUaXBzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAobC5sb25sYXQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0ZW1wID0gbC5sb25sYXQuc3BsaXQoJywnKTtcclxuXHRcdFx0XHRcdFx0XHRsWydsb2NhdGlvbldHUzg0J10gPSBbTnVtYmVyKHRlbXBbMF0pLCBOdW1iZXIodGVtcFsxXSldXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bFsnbG9jYXRpb25XR1M4NCddID0gW107XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5wb2lUaXBzTGlzdCA9IFtdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5uY01hcFR5cGUgPT0gJ3RlbmNlbnQnKSB7XHJcblx0XHRcdGxldCB1cmwgPSBgaHR0cHM6Ly9hcGlzLm1hcC5xcS5jb20vd3MvcGxhY2UvdjEvc3VnZ2VzdGlvbj9yZWdpb249JHt0aGlzLm5jQ2l0eX0ma2V5d29yZD0ke3RoaXMucG9pS2V5fSZrZXk9JHt0aGlzLm5jVG9rZW59Jm91dHB1dD1qc29ucGA7XHJcblx0XHRcdHRoaXMubHMuanNvbnBGdW5jdGlvbih7XHJcblx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0c3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnBvaVRpcHNMaXN0U2hvdyA9IHRydWU7XHJcblx0XHRcdFx0XHRpZiAocmVzWydzdGF0dXMnXSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucG9pVGlwc0xpc3QgPSByZXNbJ2RhdGEnXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgbCBvZiB0aGlzLnBvaVRpcHNMaXN0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGwubG9jYXRpb24ubGF0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsWydsb2NhdGlvbldHUzg0J10gPSB0aGlzLmxzLmdjajAydG93Z3M4NChOdW1iZXIobC5sb2NhdGlvbi5sbmcpLCBOdW1iZXIobC5sb2NhdGlvbi5sYXQpKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0bFsnbG9jYXRpb25XR1M4NCddID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBvaVRpcHNMaXN0ID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly9wb2nmj5DnpLrngrnlh7tcclxuXHQvL+iLpeaPkOekuuWIl+ihqOe7j+e6rOW6puWImeebtOaOpeS9v+eUqFxyXG5cdC8v6Iul5rKh5pyJ5YiZ5L2/55So5o+Q56S65ZCN5a2X6LCD55So6K+m57uG5o6l5Y+j77yM5Y+W6L+U5Zue57uT5p6c56ys5LiA5p2h55qE57uP57qs5bqmXHJcblx0cG9pVGlwc0NsaWNrKGl0ZW06IGFueSkge1xyXG5cdFx0dGhpcy5zZWFyY2hCYXJTaG93ID0gZmFsc2U7XHJcblx0XHRpZiAoaXRlbS5sb2NhdGlvbldHUzg0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5uY0NsaWNrLmVtaXQoaXRlbSlcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLm5jTWFwVHlwZSA9PSAnZ2FvZGUnKSB7XHJcblx0XHRcdFx0bGV0IHVybCA9IGBodHRwczovL3Jlc3RhcGkuYW1hcC5jb20vdjMvcGxhY2UvdGV4dD9rZXk9JHt0aGlzLm5jVG9rZW59JmtleXdvcmRzPSR7aXRlbS5uYW1lfSZjaXR5PSR7dGhpcy5uY0NpdHl9YDtcclxuXHRcdFx0XHR0aGlzLmh0dHAuZ2V0KHVybCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlc1snc3RhdHVzJ10gPT0gMSkge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzWydwb2lzJ11bMF0ubG9jYXRpb24ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBHQ0owMiA9IHJlc1sncG9pcyddWzBdLmxvY2F0aW9uLnNwbGl0KCcsJyk7XHJcblx0XHRcdFx0XHRcdFx0aXRlbVsnbG9jYXRpb25XR1M4NCddID0gdGhpcy5scy5nY2owMnRvd2dzODQoTnVtYmVyKEdDSjAyWzBdKSwgTnVtYmVyKEdDSjAyWzFdKSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5uY0NsaWNrLmVtaXQoaXRlbSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5uY0NsaWNrLmVtaXQoaXRlbSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubmNDbGljay5lbWl0KGl0ZW0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5uY01hcFR5cGUgPT0gJ2JhaWR1Jykge1xyXG5cdFx0XHRcdGxldCB1cmwgPSAnJztcclxuXHRcdFx0XHRpZiAodGhpcy5uY0NpdHkgPT0gJycpIHtcclxuXHRcdFx0XHRcdHVybCA9IGBodHRwczovL2FwaS5tYXAuYmFpZHUuY29tL3BsYWNlL3YyL3NlYXJjaD9xdWVyeT0ke2l0ZW0ubmFtZX0mcmVnaW9uPeWFqOWbvSZvdXRwdXQ9anNvbiZhaz0ke3RoaXMubmNUb2tlbn1gXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHVybCA9IGBodHRwczovL2FwaS5tYXAuYmFpZHUuY29tL3BsYWNlL3YyL3NlYXJjaD9xdWVyeT0ke2l0ZW0ubmFtZX0mcmVnaW9uPSR7dGhpcy5uY0NpdHl9Jm91dHB1dD1qc29uJmFrPSR7dGhpcy5uY1Rva2VufWBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5scy5qc29ucEZ1bmN0aW9uKHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlczogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChyZXNbJ3N0YXR1cyddID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzWydyZXN1bHRzJ11bMF0ubG9jYXRpb24ubGF0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgR0NKMDIgPSB0aGlzLmxzLmJkMDl0b2djajAyKE51bWJlcihyZXNbJ3Jlc3VsdHMnXVswXS5sb2NhdGlvbi5sbmcpLCBOdW1iZXIocmVzWydyZXN1bHRzJ11bMF0ubG9jYXRpb24ubGF0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpdGVtWydsb2NhdGlvbldHUzg0J10gPSB0aGlzLmxzLmdjajAydG93Z3M4NChOdW1iZXIoR0NKMDJbMF0pLCBOdW1iZXIoR0NKMDJbMV0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubmNDbGljay5lbWl0KGl0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm5jQ2xpY2suZW1pdChpdGVtKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5uY0NsaWNrLmVtaXQoaXRlbSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMubmNNYXBUeXBlID09ICd0aWFuZGl0dScpIHtcclxuXHRcdFx0XHR0aGlzLm5jQ2xpY2suZW1pdChpdGVtKTtcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm5jTWFwVHlwZSA9PSAndGVuY2VudCcpIHtcclxuXHRcdFx0XHRsZXQgYm91bmRhcnkgPSAnJztcclxuXHRcdFx0XHRpZiAodGhpcy5uY0NpdHkgPT0gJycpIHtcclxuXHRcdFx0XHRcdGJvdW5kYXJ5ID0gJ3JlZ2lvbijlhajlm70sIDEpJ1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRib3VuZGFyeSA9IGByZWdpb24oJHt0aGlzLm5jQ2l0eX0sIDEpYFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRsZXQgdXJsID0gYGh0dHBzOi8vYXBpcy5tYXAucXEuY29tL3dzL3BsYWNlL3YxL3NlYXJjaD9ib3VuZGFyeT0ke2JvdW5kYXJ5fSZrZXl3b3JkPSR7aXRlbS50aXRsZX0ma2V5PSR7dGhpcy5uY1Rva2VufSZvdXRwdXQ9anNvbnBgO1xyXG5cdFx0XHRcdHRoaXMubHMuanNvbnBGdW5jdGlvbih7XHJcblx0XHRcdFx0XHR1cmw6IHVybCxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzWydzdGF0dXMnXSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlc1snZGF0YSddWzBdLmxvY2F0aW9uLmxhdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVsnbG9jYXRpb25XR1M4NCddID0gdGhpcy5scy5nY2owMnRvd2dzODQoTnVtYmVyKHJlc1snZGF0YSddWzBdLmxvY2F0aW9uLmxuZyksIE51bWJlcihyZXNbJ2RhdGEnXVswXS5sb2NhdGlvbi5sYXQpKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubmNDbGljay5lbWl0KGl0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm5jQ2xpY2suZW1pdChpdGVtKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5uY0NsaWNrLmVtaXQoaXRlbSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL+a4hemZpHBvaVxyXG5cdGNsZWFyUG9pKCkge1xyXG5cdFx0dGhpcy5wb2lLZXkgPSAnJztcclxuXHRcdHRoaXMucG9pVGlwc0xpc3QgPSBbXTtcclxuXHRcdHRoaXMucG9pVGlwc0xpc3RTaG93ID0gZmFsc2U7XHJcblx0XHR0aGlzLm5jQ2xlYXIuZW1pdCgpO1xyXG5cdH1cclxufSIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJzT2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hJY29uXCIgKm5nSWY9XCIhc2VhcmNoQmFyU2hvd1wiPlxyXG4gICAgICAgIDxzcGFuIG9uLW1vdXNlZW50ZXI9XCJzaG93U2VhcmNoKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB0PVwiMTcyNTU1MDkxODk0OFwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgcC1pZD1cIjIzOTM0XCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNDA1LjIgNzQ2LjlDMjE3IDc0Ni45IDYzLjkgNTkzLjggNjMuOSA0MDUuNlMyMTcgNjQuMiA0MDUuMiA2NC4yczM0MS4zIDE1My4xIDM0MS4zIDM0MS4zLTE1My4xIDM0MS40LTM0MS4zIDM0MS40eiBtMC02MTQuNGMtMTUwLjYgMC0yNzMuMSAxMjIuNS0yNzMuMSAyNzMuMXMxMjIuNSAyNzMuMSAyNzMuMSAyNzMuMSAyNzMuMS0xMjIuNSAyNzMuMS0yNzMuMS0xMjIuNS0yNzMuMS0yNzMuMS0yNzMuMXpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHAtaWQ9XCIyMzkzNVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05MTEuMyA5NTkuMkw1NzYuMiA2MjQuMWMtMC44LTAuOC0wLjgtMi4xIDAtMi44bDQ1LjQtNDUuNGMwLjgtMC44IDIuMS0wLjggMi44IDBMOTU5LjUgOTExYzAuOCAwLjggMC44IDIuMSAwIDIuOGwtNDUuNCA0NS40Yy0wLjggMC44LTIgMC44LTIuOCAwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgcC1pZD1cIjIzOTM2XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hCYXJcIiAqbmdJZj1cInNlYXJjaEJhclNob3dcIiBvbi1tb3VzZWxlYXZlPVwic2VhcmNoQmFyTGVhdmUoKVwiIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBuY1dpZHRofVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cIm5jLWlucHV0XCIgaWQ9XCJzZWFyY2hJbnB1dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7e25jUGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicG9pS2V5XCIgKG5nTW9kZWxDaGFuZ2UpPVwicG9pS2V5Q2hhbmdlKClcIiBvbi1tb3VzZWxlYXZlPVwic2VhcmNoSW5wdXRMZWF2ZSgpXCJcclxuICAgICAgICAgICAgb24ta2V5ZG93bj1cInBvaUlucHV0aW5nID0gdHJ1ZVwiIG9uLWtleXVwPVwicG9pSW5wdXRpbmcgPSBmYWxzZVwiIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1saXN0XCIgKm5nSWY9XCJwb2lUaXBzTGlzdFNob3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWRhdGFcIiAqbmdJZj1cInBvaVRpcHNMaXN0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHQ9XCIxNzI1NTQ5MjUzMTc0XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCJcclxuICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcC1pZD1cIjE0ODk5XCIgd2lkdGg9XCI2NFwiIGhlaWdodD1cIjY0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04NDMuNzc2IDU3Ny41MzZMNzM3LjI4IDQwMy40NTZjLTIuMDQ4LTQuMDk2LTYuMTQ0LTYuMTQ0LTEwLjI0LTYuMTQ0SDI4NC42NzJjLTQuMDk2IDAtOC4xOTIgMi4wNDgtMTAuMjQgNi4xNDRsLTEwNi40OTYgMTc0LjA4djIxNS4wNGMwIDYuMTQ0IDQuMDk2IDEwLjI0IDEwLjI0IDEwLjI0aDY1Ny40MDhjNi4xNDQgMCAxMC4yNC00LjA5NiAxMC4yNC0xMC4yNFY1ODEuNjMyYy0yLjA0OCAwLTIuMDQ4LTIuMDQ4LTIuMDQ4LTQuMDk2eiBtLTU1Mi45Ni0xNTcuNjk2aDQzMC4wOGw5Ni4yNTYgMTUxLjU1Mkg1NzkuNTg0Yy02LjE0NCAwLTEwLjI0IDQuMDk2LTEwLjI0IDEwLjI0IDAgMzQuODE2LTI4LjY3MiA2My40ODgtNjMuNDg4IDYzLjQ4OC0zNC44MTYgMC02My40ODgtMjguNjcyLTYzLjQ4OC02My40ODggMC02LjE0NC00LjA5Ni0xMC4yNC0xMC4yNC0xMC4yNEgxOTQuNTZsOTYuMjU2LTE1MS41NTJ6IG01MzIuNDggMzY0LjU0NGgtNjM0Ljg4VjU5My45MmgyMzMuNDcyYzYuMTQ0IDQwLjk2IDQwLjk2IDc1Ljc3NiA4My45NjggNzUuNzc2IDQzLjAwOCAwIDc5Ljg3Mi0zMi43NjggODMuOTY4LTc1Ljc3NmgyMzMuNDcydjE5MC40NjR6TTExNi43MzYgNjg0LjAzMnYtMTIuMjg4YzAtMi4wNDgtMi4wNDgtNi4xNDQtNi4xNDQtNi4xNDQtMi4wNDggMC02LjE0NCAyLjA0OC02LjE0NCA2LjE0NHYxMi4yODhoLTEwLjI0Yy0yLjA0OCAwLTYuMTQ0IDIuMDQ4LTYuMTQ0IDYuMTQ0czIuMDQ4IDYuMTQ0IDYuMTQ0IDYuMTQ0aDEyLjI4OHYxMi4yODhjMCAyLjA0OCAyLjA0OCA2LjE0NCA2LjE0NCA2LjE0NCAyLjA0OCAwIDYuMTQ0LTIuMDQ4IDYuMTQ0LTYuMTQ0VjY5Ni4zMmgxMi4yODhjMi4wNDggMCA2LjE0NC0yLjA0OCA2LjE0NC02LjE0NHMtMi4wNDgtNi4xNDQtNi4xNDQtNi4xNDRoLTE0LjMzNnpNODg0LjczNiA0NTAuNTZoMTguNDMyYzQuMDk2IDAgOC4xOTIgNC4wOTYgOC4xOTIgOC4xOTJzLTQuMDk2IDguMTkyLTguMTkyIDguMTkyaC0xOC40MzJ2MTguNDMyYzAgNC4wOTYtNC4wOTYgOC4xOTItOC4xOTIgOC4xOTJzLTguMTkyLTQuMDk2LTguMTkyLTguMTkydi0xOC40MzJoLTE4LjQzMmMtNC4wOTYgMC04LjE5Mi00LjA5Ni04LjE5Mi04LjE5MnM0LjA5Ni04LjE5MiA4LjE5Mi04LjE5MmgxOC40MzJ2LTE4LjQzMmMwLTQuMDk2IDQuMDk2LTguMTkyIDguMTkyLTguMTkyczguMTkyIDQuMDk2IDguMTkyIDguMTkydjE4LjQzMnogbTYzLjQ4OCA3NS43NzZoMTAuMjRjMi4wNDggMCA2LjE0NCAyLjA0OCA2LjE0NCA2LjE0NHMtMi4wNDggNi4xNDQtNi4xNDQgNi4xNDRoLTEwLjI0djEwLjI0YzAgMi4wNDgtMi4wNDggNi4xNDQtNi4xNDQgNi4xNDQtMi4wNDggMC02LjE0NC0yLjA0OC02LjE0NC00LjA5NnYtMTAuMjRoLTEwLjI0Yy0yLjA0OCAwLTYuMTQ0LTIuMDQ4LTYuMTQ0LTYuMTQ0czIuMDQ4LTYuMTQ0IDYuMTQ0LTYuMTQ0aDEwLjI0di0xMi4yODhjMC0yLjA0OCAyLjA0OC02LjE0NCA2LjE0NC02LjE0NCAyLjA0OCAwIDYuMTQ0IDIuMDQ4IDYuMTQ0IDYuMTQ0djEwLjI0ek0xMzEuMDcyIDQzNi4yMjR2LTE4LjQzMmMwLTQuMDk2LTQuMDk2LTguMTkyLTguMTkyLTguMTkycy04LjE5MiA0LjA5Ni04LjE5MiA4LjE5MnYxNi4zODRoLTE4LjQzMmMtNC4wOTYgMC04LjE5MiA0LjA5Ni04LjE5MiA4LjE5MnM0LjA5NiA4LjE5MiA4LjE5MiA4LjE5MmgxNi4zODR2MjAuNDhjMCA0LjA5NiA0LjA5NiA4LjE5MiA4LjE5MiA4LjE5MnM4LjE5Mi00LjA5NiA4LjE5Mi04LjE5MnYtMTYuMzg0aDE2LjM4NGM0LjA5NiAwIDguMTkyLTQuMDk2IDguMTkyLTguMTkycy00LjA5Ni04LjE5Mi04LjE5Mi04LjE5MmM0LjA5Ni0yLjA0OC0xNC4zMzYtMi4wNDgtMTQuMzM2LTIuMDQ4eiBtLTc3LjgyNCAxNzQuMDhjLTE4LjQzMiAwLTM0LjgxNi0xNi4zODQtMzQuODE2LTM0LjgxNiAwLTE4LjQzMiAxNi4zODQtMzQuODE2IDM0LjgxNi0zNC44MTYgMTguNDMyIDAgMzQuODE2IDE2LjM4NCAzNC44MTYgMzQuODE2IDAgMjAuNDgtMTYuMzg0IDM0LjgxNi0zNC44MTYgMzQuODE2eiBtMC0xNi4zODRjMTAuMjQgMCAxNi4zODQtOC4xOTIgMTYuMzg0LTE2LjM4NCAwLTEwLjI0LTguMTkyLTE2LjM4NC0xNi4zODQtMTYuMzg0LTEwLjI0IDAtMTYuMzg0IDguMTkyLTE2LjM4NCAxNi4zODQtMi4wNDggOC4xOTIgNi4xNDQgMTYuMzg0IDE2LjM4NCAxNi4zODR6IG05MzMuODg4LTk4LjMwNGMtOC4xOTIgMC0xNi4zODQtNi4xNDQtMTYuMzg0LTE2LjM4NCAwLTguMTkyIDYuMTQ0LTE2LjM4NCAxNi4zODQtMTYuMzg0IDguMTkyIDAgMTYuMzg0IDYuMTQ0IDE2LjM4NCAxNi4zODRzLTYuMTQ0IDE2LjM4NC0xNi4zODQgMTYuMzg0eiBtMC02LjE0NGM0LjA5NiAwIDguMTkyLTQuMDk2IDguMTkyLTguMTkycy00LjA5Ni04LjE5Mi04LjE5Mi04LjE5Mi04LjE5MiA0LjA5Ni04LjE5MiA4LjE5MiA0LjA5NiA4LjE5MiA4LjE5MiA4LjE5MnpNMjg4Ljc2OCAyNDEuNjY0YzYuMTQ0LTYuMTQ0IDE0LjMzNi02LjE0NCAyMC40OCAwbDUxLjIgNTEuMmM2LjE0NCA2LjE0NCA2LjE0NCAxNC4zMzYgMCAyMC40OC02LjE0NCA2LjE0NC0xNC4zMzYgNi4xNDQtMjAuNDggMGwtNTEuMi01MS4yYy02LjE0NC02LjE0NC02LjE0NC0xNC4zMzYgMC0yMC40OHogbTIxNy4wODgtMzQuODE2YzguMTkyIDAgMTQuMzM2IDYuMTQ0IDE0LjMzNiAxNC4zMzZ2NzEuNjhjMCA4LjE5Mi02LjE0NCAxNC4zMzYtMTQuMzM2IDE0LjMzNi04LjE5MiAwLTE0LjMzNi02LjE0NC0xNC4zMzYtMTQuMzM2di03MS42OGMwLTYuMTQ0IDYuMTQ0LTE0LjMzNiAxNC4zMzYtMTQuMzM2eiBtMjE1LjA0IDMyLjc2OGM2LjE0NCA2LjE0NCA2LjE0NCAxNC4zMzYgMCAyMC40OEw2NzEuNzQ0IDMwNy4yYy02LjE0NCA2LjE0NC0xNC4zMzYgNi4xNDQtMjAuNDggMC02LjE0NC02LjE0NC02LjE0NC0xNC4zMzYgMC0yMC40OGw0OS4xNTItNDkuMTUyYzYuMTQ0LTQuMDk2IDE2LjM4NC00LjA5NiAyMC40OCAyLjA0OHogbTAgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtaWQ9XCIxNDkwMFwiIGZpbGw9XCIjYmZiZmJmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PuaaguaXoOaVsOaNrjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvaVRpcHNMaXN0Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS3nroDmmJPmqKHlvI8tLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuY1Nob3dUeXBlID09ICdzaW1wbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3Qtcm93LTFcIiAqbmdGb3I9XCJsZXQgbCBvZiBwb2lUaXBzTGlzdDtsZXQgaSA9IGluZGV4O1wiIChjbGljayk9XCJwb2lUaXBzQ2xpY2sobClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXBzSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB0PVwiMTcyNTU1MDkxODk0OFwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCIyMzkzNFwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDA1LjIgNzQ2LjlDMjE3IDc0Ni45IDYzLjkgNTkzLjggNjMuOSA0MDUuNlMyMTcgNjQuMiA0MDUuMiA2NC4yczM0MS4zIDE1My4xIDM0MS4zIDM0MS4zLTE1My4xIDM0MS40LTM0MS4zIDM0MS40eiBtMC02MTQuNGMtMTUwLjYgMC0yNzMuMSAxMjIuNS0yNzMuMSAyNzMuMXMxMjIuNSAyNzMuMSAyNzMuMSAyNzMuMSAyNzMuMS0xMjIuNSAyNzMuMS0yNzMuMS0xMjIuNS0yNzMuMS0yNzMuMS0yNzMuMXpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLWlkPVwiMjM5MzVcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05MTEuMyA5NTkuMkw1NzYuMiA2MjQuMWMtMC44LTAuOC0wLjgtMi4xIDAtMi44bDQ1LjQtNDUuNGMwLjgtMC44IDIuMS0wLjggMi44IDBMOTU5LjUgOTExYzAuOCAwLjggMC44IDIuMSAwIDIuOGwtNDUuNCA0NS40Yy0wLjggMC44LTIgMC44LTIuOCAwelwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtaWQ9XCIyMzkzNlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnZ2FvZGUnXCI+e3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnYmFpZHUnXCI+e3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGlhbmRpdHUnXCI+e3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGVuY2VudCdcIj57e2wudGl0bGV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGlwc0Rpc3RyaWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmNNYXBUeXBlID09ICdnYW9kZSdcIj57e2wuZGlzdHJpY3R9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnYmFpZHUnXCI+e3tsLmRpc3RyaWN0fX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuY01hcFR5cGUgPT0gJ3RpYW5kaXR1J1wiPnt7bC5jb3VudHl9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGVuY2VudCdcIj57e2wuZGlzdHJpY3R9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS3or6bnu4bmqKHlvI8tLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuY1Nob3dUeXBlID09ICdkZXRhaWxlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1yb3ctMlwiICpuZ0Zvcj1cImxldCBsIG9mIHBvaVRpcHNMaXN0O2xldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cInBvaVRpcHNDbGljayhsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnZ2FvZGUnXCI+e3tpICsgMX1944CBe3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnYmFpZHUnXCI+e3tpICsgMX1944CBe3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGlhbmRpdHUnXCI+e3tpICsgMX1944CBe3tsLm5hbWV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGVuY2VudCdcIj57e2kgKyAxfX3jgIF7e2wudGl0bGV9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZ2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnZ2FvZGUnXCI+e3tsLmRpc3RyaWN0fX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5jTWFwVHlwZSA9PSAnYmFpZHUnXCI+e3tsLnByb3ZpbmNlfX17e2wuY2l0eX19e3tsLmRpc3RyaWN0fX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5jTWFwVHlwZSA9PSAndGlhbmRpdHUnXCI+e3tsLnByb3ZpbmNlfX17e2wuY2l0eX19e3tsLmNvdW50eX19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJuY01hcFR5cGUgPT0gJ3RlbmNlbnQnXCI+e3tsLnByb3ZpbmNlfX17e2wuY2l0eX19e3tsLmRpc3RyaWN0fX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzXCI+e3tsLmFkZHJlc3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==