UNPKG

@ionic-native/background-geolocation

Version:

Ionic Native - Native plugins for ionic apps

105 lines 42.7 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { IonicNativePlugin, cordova } from '@ionic-native/core'; import { Observable } from 'rxjs'; export var BackgroundGeolocationLocationCode; (function (BackgroundGeolocationLocationCode) { BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["PERMISSION_DENIED"] = 1] = "PERMISSION_DENIED"; BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["LOCATION_UNAVAILABLE"] = 2] = "LOCATION_UNAVAILABLE"; BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["TIMEOUT"] = 3] = "TIMEOUT"; })(BackgroundGeolocationLocationCode || (BackgroundGeolocationLocationCode = {})); export var BackgroundGeolocationNativeProvider; (function (BackgroundGeolocationNativeProvider) { BackgroundGeolocationNativeProvider["gps"] = "gps"; BackgroundGeolocationNativeProvider["network"] = "network"; BackgroundGeolocationNativeProvider["passive"] = "passive"; BackgroundGeolocationNativeProvider["fused"] = "fused"; })(BackgroundGeolocationNativeProvider || (BackgroundGeolocationNativeProvider = {})); export var BackgroundGeolocationLocationProvider; (function (BackgroundGeolocationLocationProvider) { BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["DISTANCE_FILTER_PROVIDER"] = 0] = "DISTANCE_FILTER_PROVIDER"; BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["ACTIVITY_PROVIDER"] = 1] = "ACTIVITY_PROVIDER"; BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["RAW_PROVIDER"] = 2] = "RAW_PROVIDER"; })(BackgroundGeolocationLocationProvider || (BackgroundGeolocationLocationProvider = {})); export var BackgroundGeolocationEvents; (function (BackgroundGeolocationEvents) { BackgroundGeolocationEvents["http_authorization"] = "http_authorization"; BackgroundGeolocationEvents["abort_requested"] = "abort_requested"; BackgroundGeolocationEvents["background"] = "background"; BackgroundGeolocationEvents["foreground"] = "foreground"; BackgroundGeolocationEvents["authorization"] = "authorization"; BackgroundGeolocationEvents["error"] = "error"; BackgroundGeolocationEvents["stop"] = "stop"; BackgroundGeolocationEvents["start"] = "start"; BackgroundGeolocationEvents["activity"] = "activity"; BackgroundGeolocationEvents["stationary"] = "stationary"; BackgroundGeolocationEvents["location"] = "location"; // Register location event listener. })(BackgroundGeolocationEvents || (BackgroundGeolocationEvents = {})); export var BackgroundGeolocationAuthorizationStatus; (function (BackgroundGeolocationAuthorizationStatus) { BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["NOT_AUTHORIZED"] = 0] = "NOT_AUTHORIZED"; BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["AUTHORIZED"] = 1] = "AUTHORIZED"; BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["AUTHORIZED_FOREGROUND"] = 2] = "AUTHORIZED_FOREGROUND"; })(BackgroundGeolocationAuthorizationStatus || (BackgroundGeolocationAuthorizationStatus = {})); export var BackgroundGeolocationLogLevel; (function (BackgroundGeolocationLogLevel) { BackgroundGeolocationLogLevel["TRACE"] = "TRACE"; BackgroundGeolocationLogLevel["DEBUG"] = "DEBUG"; BackgroundGeolocationLogLevel["INFO"] = "INFO"; BackgroundGeolocationLogLevel["WARN"] = "WARN"; BackgroundGeolocationLogLevel["ERROR"] = "ERROR"; })(BackgroundGeolocationLogLevel || (BackgroundGeolocationLogLevel = {})); var BackgroundGeolocationOriginal = /** @class */ (function (_super) { __extends(BackgroundGeolocationOriginal, _super); function BackgroundGeolocationOriginal() { return _super !== null && _super.apply(this, arguments) || this; } BackgroundGeolocationOriginal.prototype.configure = function (options) { return cordova(this, "configure", {}, arguments); }; BackgroundGeolocationOriginal.prototype.start = function () { return cordova(this, "start", {}, arguments); }; BackgroundGeolocationOriginal.prototype.stop = function () { return cordova(this, "stop", {}, arguments); }; BackgroundGeolocationOriginal.prototype.finish = function () { return cordova(this, "finish", { "platforms": ["iOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.changePace = function (isMoving) { return cordova(this, "changePace", { "platforms": ["iOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.setConfig = function (options) { return cordova(this, "setConfig", { "callbackOrder": "reverse" }, arguments); }; BackgroundGeolocationOriginal.prototype.getStationaryLocation = function () { return cordova(this, "getStationaryLocation", { "platforms": ["iOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.onStationary = function () { return cordova(this, "onStationary", { "platforms": ["iOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", { "platforms": ["Android"] }, arguments); }; BackgroundGeolocationOriginal.prototype.showAppSettings = function () { return cordova(this, "showAppSettings", { "sync": true }, arguments); }; BackgroundGeolocationOriginal.prototype.showLocationSettings = function () { return cordova(this, "showLocationSettings", { "sync": true }, arguments); }; BackgroundGeolocationOriginal.prototype.watchLocationMode = function () { return cordova(this, "watchLocationMode", { "platforms": ["Android"], "observable": true }, arguments); }; BackgroundGeolocationOriginal.prototype.stopWatchingLocationMode = function () { return cordova(this, "stopWatchingLocationMode", { "platforms": ["Android"] }, arguments); }; BackgroundGeolocationOriginal.prototype.getLocations = function () { return cordova(this, "getLocations", { "platforms": ["Android"] }, arguments); }; BackgroundGeolocationOriginal.prototype.getValidLocations = function () { return cordova(this, "getValidLocations", {}, arguments); }; BackgroundGeolocationOriginal.prototype.deleteLocation = function (locationId) { return cordova(this, "deleteLocation", { "platforms": ["Android"] }, arguments); }; BackgroundGeolocationOriginal.prototype.deleteAllLocations = function () { return cordova(this, "deleteAllLocations", { "platforms": ["Android"] }, arguments); }; BackgroundGeolocationOriginal.prototype.switchMode = function (modeId) { return cordova(this, "switchMode", { "platforms": ["iOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.getLogEntries = function (limit, fromId, minLevel) { return cordova(this, "getLogEntries", {}, arguments); }; BackgroundGeolocationOriginal.prototype.getConfig = function () { return cordova(this, "getConfig", {}, arguments); }; BackgroundGeolocationOriginal.prototype.getCurrentLocation = function (options) { return cordova(this, "getCurrentLocation", { "callbackOrder": "reverse" }, arguments); }; BackgroundGeolocationOriginal.prototype.checkStatus = function () { return cordova(this, "checkStatus", {}, arguments); }; BackgroundGeolocationOriginal.prototype.startTask = function () { return cordova(this, "startTask", { "platforms": ["IOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.endTask = function (taskKey) { return cordova(this, "endTask", { "platforms": ["IOS"] }, arguments); }; BackgroundGeolocationOriginal.prototype.headlessTask = function (func) { return cordova(this, "headlessTask", {}, arguments); }; BackgroundGeolocationOriginal.prototype.forceSync = function () { return cordova(this, "forceSync", {}, arguments); }; BackgroundGeolocationOriginal.prototype.on = function (event) { return cordova(this, "on", { "observable": true }, arguments); }; BackgroundGeolocationOriginal.prototype.removeAllListeners = function (event) { return cordova(this, "removeAllListeners", {}, arguments); }; BackgroundGeolocationOriginal.pluginName = "BackgroundGeolocation"; BackgroundGeolocationOriginal.plugin = "cordova-plugin-mauron85-background-geolocation@alpha"; BackgroundGeolocationOriginal.pluginRef = "BackgroundGeolocation"; BackgroundGeolocationOriginal.repo = "https://github.com/mauron85/cordova-plugin-background-geolocation"; BackgroundGeolocationOriginal.platforms = ["Android", "iOS"]; return BackgroundGeolocationOriginal; }(IonicNativePlugin)); var BackgroundGeolocation = new BackgroundGeolocationOriginal(); export { BackgroundGeolocation }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JhY2tncm91bmQtZ2VvbG9jYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sOEJBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxNQUFNLENBQU4sSUFBWSxpQ0FJWDtBQUpELFdBQVksaUNBQWlDO0lBQzNDLG1IQUFxQixDQUFBO0lBQ3JCLHlIQUF3QixDQUFBO0lBQ3hCLCtGQUFXLENBQUE7QUFDYixDQUFDLEVBSlcsaUNBQWlDLEtBQWpDLGlDQUFpQyxRQUk1QztBQUVELE1BQU0sQ0FBTixJQUFZLG1DQUtYO0FBTEQsV0FBWSxtQ0FBbUM7SUFDN0Msa0RBQVcsQ0FBQTtJQUNYLDBEQUFtQixDQUFBO0lBQ25CLDBEQUFtQixDQUFBO0lBQ25CLHNEQUFlLENBQUE7QUFDakIsQ0FBQyxFQUxXLG1DQUFtQyxLQUFuQyxtQ0FBbUMsUUFLOUM7QUFFRCxNQUFNLENBQU4sSUFBWSxxQ0FJWDtBQUpELFdBQVkscUNBQXFDO0lBQy9DLHlJQUE0QixDQUFBO0lBQzVCLDJIQUFxQixDQUFBO0lBQ3JCLGlIQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKVyxxQ0FBcUMsS0FBckMscUNBQXFDLFFBSWhEO0FBRUQsTUFBTSxDQUFOLElBQVksMkJBWVg7QUFaRCxXQUFZLDJCQUEyQjtJQUNyQyx3RUFBeUMsQ0FBQTtJQUN6QyxrRUFBbUMsQ0FBQTtJQUNuQyx3REFBeUIsQ0FBQTtJQUN6Qix3REFBeUIsQ0FBQTtJQUN6Qiw4REFBK0IsQ0FBQTtJQUMvQiw4Q0FBZSxDQUFBO0lBQ2YsNENBQWEsQ0FBQTtJQUNiLDhDQUFlLENBQUE7SUFDZixvREFBcUIsQ0FBQTtJQUNyQix3REFBeUIsQ0FBQTtJQUN6QixvREFBcUIsQ0FBQSxDQUFDLG9DQUFvQztBQUM1RCxDQUFDLEVBWlcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQVl0QztBQUVELE1BQU0sQ0FBTixJQUFZLHdDQUlYO0FBSkQsV0FBWSx3Q0FBd0M7SUFDbEQsMkhBQWtCLENBQUE7SUFDbEIsbUhBQWMsQ0FBQTtJQUNkLHlJQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyx3Q0FBd0MsS0FBeEMsd0NBQXdDLFFBSW5EO0FBRUQsTUFBTSxDQUFOLElBQVksNkJBTVg7QUFORCxXQUFZLDZCQUE2QjtJQUN2QyxnREFBZSxDQUFBO0lBQ2YsZ0RBQWUsQ0FBQTtJQUNmLDhDQUFhLENBQUE7SUFDYiw4Q0FBYSxDQUFBO0lBQ2IsZ0RBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQU14Qzs7SUFtZjBDLHlDQUFpQjs7OztJQVExRCx5Q0FBUyxhQUFDLE9BQW9DO0lBVTlDLHFDQUFLO0lBU0wsb0NBQUk7SUFXSixzQ0FBTTtJQVlOLDBDQUFVLGFBQUMsUUFBaUI7SUFZNUIseUNBQVMsYUFBQyxPQUFvQztJQVc5QyxxREFBcUI7SUFZckIsNENBQVk7SUFXWixpREFBaUI7SUFRakIsK0NBQWU7SUFNZixvREFBb0I7SUFZcEIsaURBQWlCO0lBV2pCLHdEQUF3QjtJQWdCeEIsNENBQVk7SUFTWixpREFBaUI7SUFZakIsOENBQWMsYUFBQyxVQUFrQjtJQVdqQyxrREFBa0I7SUFvQmxCLDBDQUFVLGFBQUMsTUFBYztJQVl6Qiw2Q0FBYSxhQUNYLEtBQWEsRUFDYixNQUFjLEVBQ2QsUUFBdUM7SUFZekMseUNBQVM7SUFnQlQsa0RBQWtCLGFBQ2hCLE9BQW9EO0lBU3RELDJDQUFXO0lBZ0JYLHlDQUFTO0lBVVQsdUNBQU8sYUFBQyxPQUFlO0lBMkJ2Qiw0Q0FBWSxhQUFDLElBQVM7SUFXdEIseUNBQVM7SUFjVCxrQ0FBRSxhQUFDLEtBQWtDO0lBVXJDLGtEQUFrQixhQUFDLEtBQW1DOzs7Ozs7Z0NBMTNCeEQ7RUFvaUIyQyxpQkFBaUI7U0FBL0MscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZG92YSwgSW9uaWNOYXRpdmVQbHVnaW4sIFBsdWdpbiB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkxvY2F0aW9uQ29kZSB7XG4gIFBFUk1JU1NJT05fREVOSUVEID0gMSxcbiAgTE9DQVRJT05fVU5BVkFJTEFCTEUgPSAyLFxuICBUSU1FT1VUID0gM1xufVxuXG5leHBvcnQgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25OYXRpdmVQcm92aWRlciB7XG4gIGdwcyA9ICdncHMnLFxuICBuZXR3b3JrID0gJ25ldHdvcmsnLFxuICBwYXNzaXZlID0gJ3Bhc3NpdmUnLFxuICBmdXNlZCA9ICdmdXNlZCdcbn1cblxuZXhwb3J0IGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9jYXRpb25Qcm92aWRlciB7XG4gIERJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUiA9IDAsXG4gIEFDVElWSVRZX1BST1ZJREVSID0gMSxcbiAgUkFXX1BST1ZJREVSID0gMlxufVxuXG5leHBvcnQgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMge1xuICBodHRwX2F1dGhvcml6YXRpb24gPSAnaHR0cF9hdXRob3JpemF0aW9uJywgLy8gVHJpZ2dlcmVkIHdoZW4gc2VydmVyIHJlc3BvbmRlZCB3aXRoIFwiPGNvZGU+NDAxIFVuYXV0aG9yaXplZDwvY29kZT5cIiB0byBwb3N0L3N5bmMgcmVxdWVzdC5cbiAgYWJvcnRfcmVxdWVzdGVkID0gJ2Fib3J0X3JlcXVlc3RlZCcsIC8vIFRyaWdnZXJlZCB3aGVuIHNlcnZlciByZXNwb25kZWQgd2l0aCBcIjxjb2RlPjI4NSBVcGRhdGVzIE5vdCBSZXF1aXJlZDwvY29kZT5cIiB0byBwb3N0L3N5bmMgcmVxdWVzdC5cbiAgYmFja2dyb3VuZCA9ICdiYWNrZ3JvdW5kJywgLy8gVHJpZ2dlcmVkIHdoZW4gYXBwIGVudGVyZWQgYmFja2dyb3VuZCBzdGF0ZSBhbmQgKG5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyKS5cbiAgZm9yZWdyb3VuZCA9ICdmb3JlZ3JvdW5kJywgLy8gVHJpZ2dlcmVkIHdoZW4gYXBwIGVudGVyZWQgZm9yZWdyb3VuZCBzdGF0ZSBhbmQgKHZpc2libGUgdG8gdGhlIHVzZXIpLlxuICBhdXRob3JpemF0aW9uID0gJ2F1dGhvcml6YXRpb24nLCAvLyBUcmlnZ2VyZWQgd2hlbiB1c2VyIGNoYW5nZXMgYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9ucyBmb3IgdGhlIGFwcCBvciB0b2dnbGVzIGxvY2F0aW9uIHNlcnZpY2VzLlxuICBlcnJvciA9ICdlcnJvcicsIC8vIFJlZ2lzdGVyIGVycm9yIGxpc3RlbmVyLlxuICBzdG9wID0gJ3N0b3AnLCAvLyBUcmlnZ2VyZWQgd2hlbiBiYWNrZ3JvdW5kIHNlcnZpY2UgaGFzIGJlZW4gc3RvcHBlZCBzdWNjZXNmdWxseS5cbiAgc3RhcnQgPSAnc3RhcnQnLCAvLyBFdmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBiYWNrZ3JvdW5kIHNlcnZpY2UgaGFzIGJlZW4gc3RhcnRlZCBzdWNjZXNmdWxseS5cbiAgYWN0aXZpdHkgPSAnYWN0aXZpdHknLCAvLyBSZWdpc3RlciBhY3Rpdml0eSBtb25pdG9yaW5nIGxpc3RlbmVyLlxuICBzdGF0aW9uYXJ5ID0gJ3N0YXRpb25hcnknLCAvLyBSZWdpc3RlciBzdGF0aW9uYXJ5IGxvY2F0aW9uIGV2ZW50IGxpc3RlbmVyLlxuICBsb2NhdGlvbiA9ICdsb2NhdGlvbicgLy8gUmVnaXN0ZXIgbG9jYXRpb24gZXZlbnQgbGlzdGVuZXIuXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkF1dGhvcml6YXRpb25TdGF0dXMge1xuICBOT1RfQVVUSE9SSVpFRCA9IDAsXG4gIEFVVEhPUklaRUQgPSAxLFxuICBBVVRIT1JJWkVEX0ZPUkVHUk9VTkQgPSAyXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0xldmVsIHtcbiAgVFJBQ0UgPSAnVFJBQ0UnLFxuICBERUJVRyA9ICdERUJVRycsXG4gIElORk8gPSAnSU5GTycsXG4gIFdBUk4gPSAnV0FSTicsXG4gIEVSUk9SID0gJ0VSUk9SJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0VudHJ5IHtcbiAgLyoqIElEIG9mIGxvZyBlbnRyeSBhcyBzdG9yZWQgaW4gZGIuICovXG4gIGlkOiBudW1iZXI7XG5cbiAgLyoqIFRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgc2luY2UgYmVnaW5uaW5nIG9mIFVOSVggZXBvY2guICovXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKiBMb2cgbGV2ZWwgKi9cbiAgbGV2ZWw6IEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0xldmVsO1xuXG4gIC8qKiBMb2cgbWVzc2FnZSAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqIFJlY29yZGVkIHN0YWNrdHJhY2UuIChBbmRyb2lkIG9ubHksIG9uIGlPUyBwYXJ0IG9mIG1lc3NhZ2UpICovXG4gIHN0YWNrVHJhY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU3RhdHVzIHtcbiAgLyoqIFRSVUUgaWYgc2VydmljZSBpcyBydW5uaW5nLiAqL1xuICBpc1J1bm5pbmc6IGJvb2xlYW47XG5cbiAgLyoqIFRSVUUgaWYgbG9jYXRpb24gc2VydmljZXMgYXJlIGVuYWJsZWQgKi9cbiAgbG9jYXRpb25TZXJ2aWNlc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6YXRpb24gc3RhdHVzLlxuICAgKlxuICAgKiBQb3NpYmxlIHZhbHVlczpcbiAgICogIE5PVF9BVVRIT1JJWkVELCBBVVRIT1JJWkVELCBBVVRIT1JJWkVEX0ZPUkVHUk9VTkRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKGF1dGhvcml6YXRpb24gPT0gQmFja2dyb3VuZEdlb2xvY2F0aW9uLk5PVF9BVVRIT1JJWkVEKSB7Li4ufVxuICAgKi9cbiAgYXV0aG9yaXphdGlvbjogQmFja2dyb3VuZEdlb2xvY2F0aW9uQXV0aG9yaXphdGlvblN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb24ge1xuICBjb2RlOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2NhdGlvbkNvZGU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25DdXJyZW50UG9zaXRpb25Db25maWcge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG1heGltdW1BZ2U6IG51bWJlcjtcbiAgZW5hYmxlSGlnaEFjY3VyYWN5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlIHtcbiAgLyoqIElEIG9mIGxvY2F0aW9uIGFzIHN0b3JlZCBpbiBEQiAob3IgbnVsbCkgKi9cbiAgaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogTmF0aXZlIHByb3ZpZGVyIHJlcG9uc2libGUgZm9yIGxvY2F0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAqIFwiZ3BzXCIsIFwibmV0d29ya1wiLCBcInBhc3NpdmVcIiBvciBcImZ1c2VkXCJcbiAgICovXG4gIHByb3ZpZGVyOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25OYXRpdmVQcm92aWRlcjtcblxuICAvKiogQ29uZmlndXJlZCBsb2NhdGlvbiBwcm92aWRlci4gKi9cbiAgbG9jYXRpb25Qcm92aWRlcjogQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9jYXRpb25Qcm92aWRlcjtcblxuICAvKiogVVRDIHRpbWUgb2YgdGhpcyBmaXgsIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAuICovXG4gIHRpbWU6IG51bWJlcjtcblxuICAvKiogTGF0aXR1ZGUsIGluIGRlZ3JlZXMuICovXG4gIGxhdGl0dWRlOiBudW1iZXI7XG5cbiAgLyoqIExvbmdpdHVkZSwgaW4gZGVncmVlcy4gKi9cbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG5cbiAgLyoqIEVzdGltYXRlZCBhY2N1cmFjeSBvZiB0aGlzIGxvY2F0aW9uLCBpbiBtZXRlcnMuICovXG4gIGFjY3VyYWN5OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWVkIGlmIGl0IGlzIGF2YWlsYWJsZSwgaW4gbWV0ZXJzL3NlY29uZCBvdmVyIGdyb3VuZC5cbiAgICpcbiAgICogTm90ZTogTm90IGFsbCBwcm92aWRlcnMgYXJlIGNhcGFibGUgb2YgcHJvdmlkaW5nIHNwZWVkLlxuICAgKiBUeXBpY2FsbHkgbmV0d29yayBwcm92aWRlcnMgYXJlIG5vdCBhYmxlIHRvIGRvIHNvLlxuICAgKi9cbiAgc3BlZWQ6IG51bWJlcjtcblxuICAvKiogQWx0aXR1ZGUgaWYgYXZhaWxhYmxlLCBpbiBtZXRlcnMgYWJvdmUgdGhlIFdHUyA4NCByZWZlcmVuY2UgZWxsaXBzb2lkLiAqL1xuICBhbHRpdHVkZTogbnVtYmVyO1xuXG4gIC8qKiBCZWFyaW5nLCBpbiBkZWdyZWVzLiAqL1xuICBiZWFyaW5nOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgbG9jYXRpb24gd2FzIHJlY29yZGVkIGJ5IG1vY2sgcHJvdmlkZXIuIChBTkRST0lEIE9OTFkpXG4gICAqXG4gICAqIE5vdGU6IHRoaXMgcHJvcGVydHkgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCFcbiAgICogWW91IGNhbiBlbmFibGUgaXQgXCJwb3N0VGVtcGxhdGVcIiBjb25maWd1cmUgb3B0aW9uLlxuICAgKi9cbiAgaXNGcm9tTW9ja1Byb3ZpZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHJ1ZSBpZiBkZXZpY2UgaGFzIG1vY2sgbG9jYXRpb25zIGVuYWJsZWQuIChBTkRST0lEIE9OTFkpXG4gICAqXG4gICAqIE5vdGU6IHRoaXMgcHJvcGVydHkgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCFcbiAgICogWW91IGNhbiBlbmFibGUgaXQgXCJwb3N0VGVtcGxhdGVcIiBjb25maWd1cmUgb3B0aW9uLlxuICAgKi9cbiAgbW9ja0xvY2F0aW9uc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBTZXQgbG9jYXRpb24gcHJvdmlkZXJcbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBBdmFpbGFibGUgcHJvdmlkZXJzOlxuICAgKiAgRElTVEFOQ0VfRklMVEVSX1BST1ZJREVSLFxuICAgKiAgQUNUSVZJVFlfUFJPVklERVJcbiAgICogIFJBV19QUk9WSURFUlxuICAgKlxuICAgKiBAZGVmYXVsdCBESVNUQU5DRV9GSUxURVJfUFJPVklERVJcbiAgICogQGV4YW1wbGVcbiAgICogeyBsb2NhdGlvblByb3ZpZGVyOiBMb2NhdGlvblByb3ZpZGVyLlJBV19QUk9WSURFUiB9XG4gICAqL1xuICBsb2NhdGlvblByb3ZpZGVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXNpcmVkIGFjY3VyYWN5IGluIG1ldGVycy5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICogIEhJR0hfQUNDVVJBQ1ksXG4gICAqICBNRURJVU1fQUNDVVJBQ1ksXG4gICAqICBMT1dfQUNDVVJBQ1ksXG4gICAqICBQQVNTSVZFX0FDQ1VSQUNZXG4gICAqIE5vdGU6IEFjY3VyYWN5IGhhcyBkaXJlY3QgZWZmZWN0IG9uIHBvd2VyIGRyYWluLiBMb3dlciBhY2N1cmFjeSA9IGxvd2VyIHBvd2VyIGRyYWluLlxuICAgKlxuICAgKiBAZGVmYXVsdCBNRURJVU1fQUNDVVJBQ1lcbiAgICogQGV4YW1wbGVcbiAgICogeyBkZXNpcmVkQWNjdXJhY3k6IEJhY2tncm91bmRHZW9sb2NhdGlvbkFjY3VyYWN5LkxPVyB9XG4gICAqL1xuICBkZXNpcmVkQWNjdXJhY3k/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0YXRpb25hcnkgcmFkaXVzIGluIG1ldGVycy5cbiAgICpcbiAgICogV2hlbiBzdG9wcGVkLCB0aGUgbWluaW11bSBkaXN0YW5jZSB0aGUgZGV2aWNlIG11c3QgbW92ZSBiZXlvbmQgdGhlIHN0YXRpb25hcnkgbG9jYXRpb24gZm9yIGFnZ3Jlc3NpdmUgYmFja2dyb3VuZC10cmFja2luZyB0byBlbmdhZ2UuXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IERJU1RBTkNFX0ZJTFRFUlxuICAgKlxuICAgKiBAZGVmYXVsdCA1MFxuICAgKi9cbiAgc3RhdGlvbmFyeVJhZGl1cz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCB0aGUgcGx1Z2luIHdpbGwgZW1pdCBzb3VuZHMgZm9yIGxpZmUtY3ljbGUgZXZlbnRzIG9mIGJhY2tncm91bmQtZ2VvbG9jYXRpb24hIFNlZSBkZWJ1Z2dpbmcgc291bmRzIHRhYmxlLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlYnVnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gZGlzdGFuY2UgKG1lYXN1cmVkIGluIG1ldGVycykgYSBkZXZpY2UgbXVzdCBtb3ZlIGhvcml6b250YWxseSBiZWZvcmUgYW4gdXBkYXRlIGV2ZW50IGlzIGdlbmVyYXRlZC5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogRElTVEFOQ0VfRklMVEVSLCBSQVdcbiAgICpcbiAgICogQGRlZmF1bHQgNTAwXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBwbGUuY28vMm9IbzJDVnxBcHBsZSBkb2NzfVxuICAgKi9cbiAgZGlzdGFuY2VGaWx0ZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGlzIGluIG9yZGVyIHRvIGZvcmNlIGEgc3RvcCgpIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHRlcm1pbmF0ZWQuXG4gICAqIEUuZy4gb24gaU9TLCBkb3VibGUtdGFwIGhvbWUgYnV0dG9uLCBzd2lwZSBhd2F5IHRoZSBhcHAuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzdG9wT25UZXJtaW5hdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdGFydCBiYWNrZ3JvdW5kIHNlcnZpY2Ugb24gZGV2aWNlIGJvb3QuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN0YXJ0T25Cb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGxvY2F0aW9uIHVwZGF0ZXMgaW4gbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYml0Lmx5LzF4MDBSVXV8QW5kcm9pZCBkb2NzfVxuICAgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZhc3Rlc3QgcmF0ZSBpbiBtaWxsaXNlY29uZHMgYXQgd2hpY2ggeW91ciBhcHAgY2FuIGhhbmRsZSBsb2NhdGlvbiB1cGRhdGVzLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogQUNUSVZJVFlcbiAgICpcbiAgICogQGRlZmF1bHQgMTIwMDAwXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYml0Lmx5LzF4MDBSVXV8QW5kcm9pZCBkb2NzfVxuICAgKi9cbiAgZmFzdGVzdEludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSYXRlIGluIG1pbGxpc2Vjb25kcyBhdCB3aGljaCBhY3Rpdml0eSByZWNvZ25pdGlvbiBvY2N1cnMuXG4gICAqIExhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gZmV3ZXIgYWN0aXZpdHkgZGV0ZWN0aW9ucyB3aGlsZSBpbXByb3ZpbmcgYmF0dGVyeSBsaWZlLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogQUNUSVZJVFlcbiAgICpcbiAgICogQGRlZmF1bHQgMTAwMDBcbiAgICovXG4gIGFjdGl2aXRpZXNJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgU3RvcCBsb2NhdGlvbiB1cGRhdGVzLCB3aGVuIHRoZSBTVElMTCBhY3Rpdml0eSBpcyBkZXRlY3RlZC5cbiAgICovXG4gIHN0b3BPblN0aWxsQWN0aXZpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBsb2NhbCBub3RpZmljYXRpb25zIHdoZW4gdHJhY2tpbmcgYW5kIHN5bmNpbmcgbG9jYXRpb25zLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIG5vdGlmaWNhdGlvbnNFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgbG9jYXRpb24gc3luYyBzZXJ2aWNlIHRvIHJ1biBpbiBmb3JlZ3JvdW5kIHN0YXRlLlxuICAgKiBGb3JlZ3JvdW5kIHN0YXRlIGFsc28gcmVxdWlyZXMgYSBub3RpZmljYXRpb24gdG8gYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzdGFydEZvcmVncm91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbm90aWZpY2F0aW9uIHRpdGxlIGluIHRoZSBkcmF3ZXIuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICogQGRlZmF1bHQgXCJCYWNrZ3JvdW5kIHRyYWNraW5nXCJcbiAgICovXG4gIG5vdGlmaWNhdGlvblRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbm90aWZpY2F0aW9uIHRleHQgaW4gdGhlIGRyYXdlci5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkVOQUJMRURcIlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjY2VudCBjb2xvciAoaGV4IHRyaXBsZXQpIHRvIHVzZSBmb3Igbm90aWZpY2F0aW9uLlxuICAgKiBFZy4gPGNvZGU+IzRDQUY1MDwvY29kZT4uXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIG5vdGlmaWNhdGlvbkljb25Db2xvcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbGVuYW1lIG9mIGEgY3VzdG9tIG5vdGlmaWNhdGlvbiBpY29uLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBub3RpZmljYXRpb25JY29uTGFyZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlbmFtZSBvZiBhIGN1c3RvbSBub3RpZmljYXRpb24gaWNvbi5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgbm90aWZpY2F0aW9uSWNvblNtYWxsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSB0eXBlLlxuICAgKiBQcmVzdW1hYmx5LCB0aGlzIGFmZmVjdHMgaU9TIEdQUyBhbGdvcml0aG0uXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICogXCJBdXRvbW90aXZlTmF2aWdhdGlvblwiLCBcIk90aGVyTmF2aWdhdGlvblwiLCBcIkZpdG5lc3NcIiwgXCJPdGhlclwiXG4gICAqXG4gICAqIFBsYXRmb3JtOiBpT1NcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBcIk90aGVyTmF2aWdhdGlvblwiXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBwbGUuY28vMm9Ib2ZwSHxBcHBsZSBkb2NzfVxuICAgKi9cbiAgYWN0aXZpdHlUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgbG9jYXRpb24gdXBkYXRlcyB3aGVuIGFwcCBpcyBwYXVzZWQuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBpT1NcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwcGxlLmNvLzJDYmpFVzJ8QXBwbGUgZG9jc31cbiAgICovXG4gIHBhdXNlTG9jYXRpb25VcGRhdGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3dpdGNoIHRvIGxlc3MgYWNjdXJhdGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBhbmQgcmVnaW9uIG1vbml0b3J5IHdoZW4gaW4gYmFja2dyb3VuZC5cbiAgICpcbiAgICogUGxhdGZvcm06IGlPU1xuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzYXZlQmF0dGVyeU9uQmFja2dyb3VuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlcnZlciB1cmwgd2hlcmUgdG8gc2VuZCBIVFRQIFBPU1Qgd2l0aCByZWNvcmRlZCBsb2NhdGlvbnNcbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICB1cmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlcnZlciB1cmwgd2hlcmUgdG8gc2VuZCBmYWlsIHRvIHBvc3QgbG9jYXRpb25zXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgc3luY1VybD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBtYW55IHByZXZpb3VzbHkgZmFpbGVkIGxvY2F0aW9ucyB3aWxsIGJlIHNlbnQgdG8gc2VydmVyIGF0IG9uY2UuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIHN5bmNUaHJlc2hvbGQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEhUVFAgaGVhZGVycyBzZW50IGFsb25nIGluIEhUVFAgcmVxdWVzdC5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBodHRwSGVhZGVycz86IGFueTtcblxuICAvKipcbiAgICogTGltaXQgbWF4aW11bSBudW1iZXIgb2YgbG9jYXRpb25zIHN0b3JlZCBpbnRvIGRiLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgMTAwMDBcbiAgICovXG4gIG1heExvY2F0aW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ3VzdG9taXphdGlvbiBwb3N0IHRlbXBsYXRlLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIHBvc3RUZW1wbGF0ZT86IGFueTtcbn1cblxuLyoqXG4gKiBTZXQgbG9jYXRpb24gc2VydmljZSBwcm92aWRlciBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyb244NS9jb3Jkb3ZhLXBsdWdpbi1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uL3dpa2kvQW5kcm9pZC1wcm92aWRlcnNcbiAqXG4gKiBQb3NzaWJsZSB2YWx1ZXM6XG4gKiAgQU5EUk9JRF9ESVNUQU5DRV9GSUxURVJfUFJPVklERVI6IDAsXG4gKiAgQU5EUk9JRF9BQ1RJVklUWV9QUk9WSURFUjogMVxuICpcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uUHJvdmlkZXIge1xuICBBTkRST0lEX0RJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUiA9IDAsXG4gIEFORFJPSURfQUNUSVZJVFlfUFJPVklERVIgPSAxXG59XG5cbi8qKlxuICogRGVzaXJlZCBhY2N1cmFjeSBpbiBtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBbMCwgMTAsIDEwMCwgMTAwMF0uXG4gKiBUaGUgbG93ZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgcG93ZXIgZGV2b3RlZCB0byBHZW9Mb2NhdGlvbiByZXN1bHRpbmcgaW4gaGlnaGVyIGFjY3VyYWN5IHJlYWRpbmdzLlxuICogMTAwMCByZXN1bHRzIGluIGxvd2VzdCBwb3dlciBkcmFpbiBhbmQgbGVhc3QgYWNjdXJhdGUgcmVhZGluZ3MuXG4gKlxuICogUG9zc2libGUgdmFsdWVzOlxuICogIEhJR0g6IDBcbiAqICBNRURJVU06IDEwXG4gKiAgTE9XOiAxMDBcbiAqICBQQVNTSVZFOiAxMDAwXG4gKlxuICogZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVjbGFyZSBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkFjY3VyYWN5IHtcbiAgSElHSCA9IDAsXG4gIE1FRElVTSA9IDEwLFxuICBMT1cgPSAxMDAsXG4gIFBBU1NJVkUgPSAxMDAwXG59XG5cbi8qKlxuICogVXNlZCBpbiB0aGUgc3dpdGNoTW9kZSBmdW5jdGlvblxuICpcbiAqIFBvc3NpYmxlIHZhbHVlczpcbiAqICBCQUNLR1JPVU5EOiAwXG4gKiAgRk9SRUdST1VORDogMVxuICpcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uTW9kZSB7XG4gIEJBQ0tHUk9VTkQgPSAwLFxuICBGT1JFR1JPVU5EID0gMVxufVxuXG5leHBvcnQgZGVjbGFyZSBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbklPU0FjdGl2aXR5IHtcbiAgQXV0b21vdGl2ZU5hdmlnYXRpb24gPSAnQXV0b21vdGl2ZU5hdmlnYXRpb24nLFxuICBPdGhlck5hdmlnYXRpb24gPSAnT3RoZXJOYXZpZ2F0aW9uJyxcbiAgRml0bmVzcyA9ICdGaXRuZXNzJyxcbiAgT3RoZXIgPSAnT3RoZXInXG59XG5cbi8qKlxuICogQG5hbWUgQmFja2dyb3VuZCBHZW9sb2NhdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBwcm92aWRlcyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGdlb2xvY2F0aW9uIHdpdGggYmF0dGVyeS1zYXZpbmcgXCJjaXJjdWxhciByZWdpb24gbW9uaXRvcmluZ1wiIGFuZCBcInN0b3AgZGV0ZWN0aW9uXCIuIEZvclxuICogbW9yZSBkZXRhaWwsIHBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb25cbiAqXG4gKiBAdXNhZ2VcbiAqXG4gKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gbXVzdCBiZSBjYWxsZWQgd2l0aGluIGFwcC50cyBhbmQgb3IgYmVmb3JlIEdlb2xvY2F0aW9uLiBPdGhlcndpc2UgdGhlIHBsYXRmb3JtIHdpbGwgbm90IGFzayB5b3UgZm9yIGJhY2tncm91bmQgdHJhY2tpbmcgcGVybWlzc2lvbi5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCYWNrZ3JvdW5kR2VvbG9jYXRpb24sIEJhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZywgQmFja2dyb3VuZEdlb2xvY2F0aW9uUmVzcG9uc2UgfSBmcm9tICdAaW9uaWMtbmF0aXZlL2JhY2tncm91bmQtZ2VvbG9jYXRpb24nO1xuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2dyb3VuZEdlb2xvY2F0aW9uOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24pIHsgfVxuICpcbiAqIC4uLlxuICpcbiAqIGNvbnN0IGNvbmZpZzogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnID0ge1xuICogICAgICAgICAgICAgZGVzaXJlZEFjY3VyYWN5OiAxMCxcbiAqICAgICAgICAgICAgIHN0YXRpb25hcnlSYWRpdXM6IDIwLFxuICogICAgICAgICAgICAgZGlzdGFuY2VGaWx0ZXI6IDMwLFxuICogICAgICAgICAgICAgZGVidWc6IHRydWUsIC8vICBlbmFibGUgdGhpcyBoZWFyIHNvdW5kcyBmb3IgYmFja2dyb3VuZC1nZW9sb2NhdGlvbiBsaWZlLWN5Y2xlLlxuICogICAgICAgICAgICAgc3RvcE9uVGVybWluYXRlOiBmYWxzZSwgLy8gZW5hYmxlIHRoaXMgdG8gY2xlYXIgYmFja2dyb3VuZCBsb2NhdGlvbiBzZXR0aW5ncyB3aGVuIHRoZSBhcHAgdGVybWluYXRlc1xuICogICAgIH07XG4gKlxuICogdGhpcy5iYWNrZ3JvdW5kR2VvbG9jYXRpb24uY29uZmlndXJlKGNvbmZpZylcbiAqICAgLnRoZW4oKCkgPT4ge1xuICpcbiAqICAgICB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5vbignbG9jYXRpb24nKS5zdWJzY3JpYmUoKGxvY2F0aW9uOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZSkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2cobG9jYXRpb24pO1xuICpcbiAqICAgICAgIC8vIElNUE9SVEFOVDogIFlvdSBtdXN0IGV4ZWN1dGUgdGhlIGZpbmlzaCBtZXRob2QgaGVyZSB0byBpbmZvcm0gdGhlIG5hdGl2ZSBwbHVnaW4gdGhhdCB5b3UncmUgZmluaXNoZWQsXG4gKiAgICAgICAvLyBhbmQgdGhlIGJhY2tncm91bmQtdGFzayBtYXkgYmUgY29tcGxldGVkLiAgWW91IG11c3QgZG8gdGhpcyByZWdhcmRsZXNzIGlmIHlvdXIgb3BlcmF0aW9ucyBhcmUgc3VjY2Vzc2Z1bCBvciBub3QuXG4gKiAgICAgICAvLyBJRiBZT1UgRE9OJ1QsIGlvcyB3aWxsIENSQVNIIFlPVVIgQVBQIGZvciBzcGVuZGluZyB0b28gbXVjaCB0aW1lIGluIHRoZSBiYWNrZ3JvdW5kLlxuICogICAgICAgdGhpcy5iYWNrZ3JvdW5kR2VvbG9jYXRpb24uZmluaXNoKCk7IC8vIEZPUiBJT1MgT05MWVxuICogICAgIH0pO1xuICpcbiAqICAgfSk7XG4gKlxuICogLy8gc3RhcnQgcmVjb3JkaW5nIGxvY2F0aW9uXG4gKiB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5zdGFydCgpO1xuICpcbiAqIC8vIElmIHlvdSB3aXNoIHRvIHR1cm4gT0ZGIGJhY2tncm91bmQtdHJhY2tpbmcsIGNhbGwgdGhlICNzdG9wIG1ldGhvZC5cbiAqIHRoaXMuYmFja2dyb3VuZEdlb2xvY2F0aW9uLnN0b3AoKTtcbiAqXG4gKiBgYGBcbiAqIEBpbnRlcmZhY2VzXG4gKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZVxuICogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnQmFja2dyb3VuZEdlb2xvY2F0aW9uJyxcbiAgcGx1Z2luOiAnY29yZG92YS1wbHVnaW4tbWF1cm9uODUtYmFja2dyb3VuZC1nZW9sb2NhdGlvbkBhbHBoYScsXG4gIHBsdWdpblJlZjogJ0JhY2tncm91bmRHZW9sb2NhdGlvbicsXG4gIHJlcG86ICdodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbicsXG4gIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRHZW9sb2NhdGlvbiBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB7QmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnfSBvcHRpb25zIEFuIG9iamVjdCBvZiB0eXBlIENvbmZpZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNvbmZpZ3VyZShvcHRpb25zOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIE9OIHRoZSBiYWNrZ3JvdW5kLWdlb2xvY2F0aW9uIHN5c3RlbS5cbiAgICogVGhlIHVzZXIgd2lsbCBiZSB0cmFja2VkIHdoZW5ldmVyIHRoZXkgc3VzcGVuZCB0aGUgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzdGFydCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIE9GRiBiYWNrZ3JvdW5kLXRyYWNraW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHN0b3AoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSW5mb3JtIHRoZSBuYXRpdmUgcGx1Z2luIHRoYXQgeW91J3JlIGZpbmlzaGVkLCB0aGUgYmFja2dyb3VuZC10YXNrIG1heSBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ11cbiAgfSlcbiAgZmluaXNoKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBwbHVnaW4gdG8gZW50ZXIgXCJtb3ZpbmdcIiBvciBcInN0YXRpb25hcnlcIiBzdGF0ZVxuICAgKiBAcGFyYW0gaXNNb3Zpbmcge2Jvb2xlYW59XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddXG4gIH0pXG4gIGNoYW5nZVBhY2UoaXNNb3Zpbmc6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIHtCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWd9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnXG4gIH0pXG4gIHNldENvbmZpZyhvcHRpb25zOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgc3RhdGlvbmFyeUxvY2F0aW9uIGlmIGF2YWlsYWJsZS4gbnVsbCBpZiBub3RcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYXRpb24+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXVxuICB9KVxuICBnZXRTdGF0aW9uYXJ5TG9jYXRpb24oKTogUHJvbWlzZTxCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzdGF0aW9uYXJ5LXJlZ2lvbiBsaXN0ZW5lci4gV2hlbmV2ZXIgdGhlIGRldmljZXMgZW50ZXJzIFwic3RhdGlvbmFyeS1tb2RlXCIsXG4gICAqIHlvdXIgI3N1Y2Nlc3MgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCB3aXRoICNsb2NhdGlvbiBwYXJhbSBjb250YWluaW5nICNyYWRpdXMgb2YgcmVnaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddXG4gIH0pXG4gIG9uU3RhdGlvbmFyeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBsb2NhdGlvbiBpcyBlbmFibGVkIG9uIHRoZSBkZXZpY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gUmV0dXJucyBhIHByb21pc2Ugd2l0aCBpbnQgYXJndW1lbnQgdGhhdCB0YWtlcyB2YWx1ZXMgMCwgMSAodHJ1ZSkuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXVxuICB9KVxuICBpc0xvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFwcCBzZXR0aW5ncyB0byBjaGFuZ2UgcGVybWlzc2lvbnNcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzaG93QXBwU2V0dGluZ3MoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGRldmljZSBsb2NhdGlvbiBzZXR0aW5nc1xuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHNob3dMb2NhdGlvblNldHRpbmdzKCk6IHZvaWQge31cblxuICAvKipcbiAgICogTWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB1c2VyIGNoYW5nZXMgaW4gbG9jYXRpb24gc2VydmljZXMgc2V0dGluZ3MuXG4gICAqIElmIHVzZXIgZW5hYmxlIG9yIGRpc2FibGUgbG9jYXRpb24gc2VydmljZXMgdGhlbiBzdWNjZXNzIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIEluIGNhc2Ugb3IgIChTZXR0aW5nTm90Rm91bmRFeGNlcHRpb24pIGZhaWwgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZC5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8bnVtYmVyPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICAgIG9ic2VydmFibGU6IHRydWVcbiAgfSlcbiAgd2F0Y2hMb2NhdGlvbk1vZGUoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB3YXRjaGluZyBmb3IgbG9jYXRpb24gbW9kZSBjaGFuZ2VzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ11cbiAgfSlcbiAgc3RvcFdhdGNoaW5nTG9jYXRpb25Nb2RlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB3aWxsIHJldHVybiBhbGwgc3RvcmVkIGxvY2F0aW9ucy5cbiAgICogTG9jYXRpb25zIGFyZSBzdG9yZWQgd2hlbjpcbiAgICogIC0gY29uZmlnLnN0b3BPblRlcm1pbmF0ZSBpcyBmYWxzZSBhbmQgbWFpbiBhY3Rpdml0eSB3YXMga2lsbGVkXG4gICAqICAgIGJ5IHRoZSBzeXN0ZW1cbiAgICogIG9yXG4gICAqICAtIG9wdGlvbi5kZWJ1ZyBpcyB0cnVlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXVxuICB9KVxuICBnZXRMb2NhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdpbGwgcmV0dXJuIGxvY2F0aW9ucywgd2hpY2ggaGFzIG5vdCBiZWVuIHlldCBwb3N0ZWQgdG8gc2VydmVyLiBOT1RFOiBMb2NhdGlvbnMgZG9lcyBjb250YWluIGxvY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFZhbGlkTG9jYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzdG9yZWQgbG9jYXRpb24gYnkgZ2l2ZW4gbG9jYXRpb25JZC5cbiAgICogQHBhcmFtIGxvY2F0aW9uSWQge251bWJlcn1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddXG4gIH0pXG4gIGRlbGV0ZUxvY2F0aW9uKGxvY2F0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgc3RvcmVkIGxvY2F0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddXG4gIH0pXG4gIGRlbGV0ZUFsbExvY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSBwbHVnaW4gd2lsbCBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gQkFDS0dST1VORCBhbmQgRk9SRUdST1VORCBtb2RlIGl0c2VsZi5cbiAgICogQ2FsbGluZyBzd2l0Y2hNb2RlIHlvdSBjYW4gb3ZlcnJpZGUgcGx1Z2luIGJlaGF2aW9yIGFuZCBmb3JjZSBwbHVnaW4gdG8gc3dpdGNoIGludG8gb3RoZXIgbW9kZS5cbiAgICpcbiAgICogSW4gRk9SRUdST1VORCBtb2RlIHBsdWdpbiB1c2VzIGlPUyBsb2NhbCBtYW5hZ2VyIHRvIHJlY2VpdmUgbG9jYXRpb25zIGFuZCBiZWhhdmlvciBpcyBhZmZlY3RlZCBieSBvcHRpb24uZGVzaXJlZEFjY3VyYWN5IGFuZCBvcHRpb24uZGlzdGFuY2VGaWx0ZXIuXG4gICAqIEluIEJBQ0tHUk9VTkQgbW9kZSBwbHVnaW4gdXNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIGFuZCByZWdpb24gbW9uaXRvcmluZyB0byByZWNlaXZlIGxvY2F0aW9ucyBhbmQgdXNlcyBvcHRpb24uc3RhdGlvbmFyeVJhZGl1cyBvbmx5LlxuICAgKlxuICAgKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24uTW9kZS5GT1JFR1JPVU5EXG4gICAqIEJhY2tncm91bmRHZW9sb2NhdGlvbi5Nb2RlLkJBQ0tHUk9VTkRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVJZCB7bnVtYmVyfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXVxuICB9KVxuICBzd2l0Y2hNb2RlKG1vZGVJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBsb2dnZWQgZXZlbnRzLiBVc2VmdWwgZm9yIHBsdWdpbiBkZWJ1Z2dpbmcuIFBhcmFtZXRlciBsaW1pdCBsaW1pdHMgbnVtYmVyIG9mIHJldHVybmVkIGVudHJpZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb24vdHJlZS92Mi4yLjEjZGVidWdnaW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQge251bWJlcn0gTGltaXRzIHRoZSBudW1iZXIgb2YgZW50cmllc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRMb2dFbnRyaWVzKFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZnJvbUlkOiBudW1iZXIsXG4gICAgbWluTGV2ZWw6IEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0xldmVsXG4gICk6IFByb21pc2U8QmFja2dyb3VuZEdlb2xvY2F0aW9uTG9nRW50cnlbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGxvZ2dlZCBldmVudHMuIFVzZWZ1bCBmb3IgcGx1Z2luIGRlYnVnZ2luZy4gUGFyYW1ldGVyIGxpbWl0IGxpbWl0cyBudW1iZXIgb2YgcmV0dXJuZWQgZW50cmllcy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbi90cmVlL3YyLjIuMSNkZWJ1Z2dpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldENvbmZpZygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUgdGltZSBsb2NhdGlvbiBjaGVjayB0byBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgZGV2aWNlLlxuICAgKiB7dGltZW91dDogTWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyBkZXZpY2Ugd2lsbCB3YWl0IGZvciBsb2NhdGlvbixcbiAgICogbWF4aW11bUFnZTogTWF4aW11bSBhZ2UgaW4gbWlsbGlzZWNvbmRzIG9mIGEgcG9zc2libGUgY2FjaGVkIGxvY2F0aW9uIHRoYXQgaXMgYWNjZXB0YWJsZSB0byByZXR1cm47XG4gICAqIGVuYWJsZUhpZ2hBY2N1cmFjeTogaWYgdHJ1ZSBhbmQgaWYgdGhlIGRldmljZSBpcyBhYmxlIHRvIHByb3ZpZGUgYSBtb3JlIGFjY3VyYXRlIHBvc2l0aW9uLCBpdCB3aWxsIGRvIHNvfVxuICAgKlxuICAgKiBAcGFyYW0ge0JhY2tncm91bmRHZW9sb2NhdGlvbkN1cnJlbnRQb3NpdGlvbkNvbmZpZ30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJ1xuICB9KVxuICBnZXRDdXJyZW50TG9jYXRpb24oXG4gICAgb3B0aW9ucz86IEJhY2tncm91bmRHZW9sb2NhdGlvbkN1cnJlbnRQb3NpdGlvbkNvbmZpZ1xuICApOiBQcm9taXNlPEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyBvZiB0aGUgc2VydmljZVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjaGVja1N0YXR1cygpOiBQcm9taXNlPFNlcnZpY2VTdGF0dXM+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYmFja2dyb3VuZCB0YXNrIChpT1Mgb25seSlcbiAgICpcbiAgICogVG8gcGVyZm9ybSBhbnkgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiBvbiBpT1NcbiAgICogeW91IG5lZWQgdG8gY3JlYXRlIGJhY2tncm91bmQgdGFza1xuICAgKiBJTVBPUlRBTlQ6IHRhc2sgaGFzIHRvIGJlIGVuZGVkIGJ5IGVuZFRhc2tcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gdGFza0tleVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydJT1MnXVxuICB9KVxuICBzdGFydFRhc2soKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogIEVuZCBiYWNrZ3JvdW5kIHRhc2sgaW5kZW50aWZpZWQgYnkgdGFza0tleSAoaU9TIG9ubHkpXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0lPUyddXG4gIH0pXG4gIGVuZFRhc2sodGFza0tleTogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsIHRhc2sgdGhhdCBnZXRzIGV4ZWN1dGVkIHdoZW4gdGhlIGFwcCBpcyB0ZXJtaW5hdGVkLCBidXRcbiAgICogdGhlIHBsdWdpbiB3YXMgY29uZmlndXJlZCB0byBjb250aW51ZSBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gICAqIChvcHRpb24gPGNvZGU+c3RvcE9uVGVybWluYXRlOiBmYWxzZTwvY29kZT4pLlxuICAgKlxuICAgKiBJbiB0aGlzIHNjZW5hcmlvIHRoZSBBY3Rpdml0eSB3YXMga2lsbGVkIGJ5IHRoZSBzeXN0ZW0gYW5kIGFsbCByZWdpc3RlcmVkXG4gICAqIGV2ZW50IGxpc3RlbmVycyB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgdW50aWwgdGhlIGFwcCBpcyByZWxhdW5jaGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgQmFja2dyb3VuZEdlb2xvY2F0aW9uLmhlYWRsZXNzVGFzayhmdW5jdGlvbihldmVudCkge1xuICAgKlxuICAgKiAgICAgIGlmIChldmVudC5uYW1lID09PSAnbG9jYXRpb24nIHx8IGV2ZW50Lm5hbWUgPT09ICdzdGF0aW9uYXJ5Jykge1xuICAgKiAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAqICAgICAgICAgIHhoci5vcGVuKCdQT1NUJywgJ2h0dHA6Ly8xOTIuMTY4LjgxLjE0OjMwMDAvaGVhZGxlc3MnKTtcbiAgICogICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAqICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGV2ZW50LnBhcmFtcykpO1xuICAgKiAgICAgIH1cbiAgICpcbiAgICogICAgICByZXR1cm4gJ1Byb2Nlc3NpbmcgZXZlbnQ6ICcgKyBldmVudC5uYW1lOyAvLyB3aWxsIGJlIGxvZ2dlZFxuICAgKiAgfSk7XG4gICAqIEBwYXJhbSBmdW5jXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGhlYWRsZXNzVGFzayhmdW5jOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBzeW5jIG9mIHBlbmRpbmcgbG9jYXRpb25zLlxuICAgKiBPcHRpb24gPGNvZGU+c3luY1RocmVzaG9sZDwvY29kZT4gd2lsbCBiZSBpZ25vcmVkIGFuZCBhbGwgcGVuZGluZyBsb2NhdGlvbnMgd2lsbCBiZSBpbW1lZGlhdGVseSBwb3N0ZWQgdG8gPGNvZGU+c3luY1VybDwvY29kZT4gaW4gc2luZ2xlIGJhdGNoLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZCwgaU9TXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGZvcmNlU3luYygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogVHJpZ2dlcmVkIHdoZW4gc2VydmVyIHJlc3BvbmRlZCB3aXRoIFwiPGNvZGU+Mjg1IFVwZGF0ZXMgTm90IFJlcXVpcmVkPC9jb2RlPlwiIHRvIHBvc3Qvc3luYyByZXF1ZXN0LlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIGNhbGxiYWNrRm5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlXG4gIH0pXG4gIG9uKGV2ZW50OiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMpOiBPYnNlcnZhYmxlPEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYWxsIGV2ZW50IGxpc3RlbmVycyBmb3IgZ2l2ZW4gZXZlbnQuXG4gICAqXG4gICAqIElmIHBhcmFtZXRlciA8Y29kZT5ldmVudDwvY29kZT4gaXMgbm90IHByb3ZpZGVkIHRoZW4gYWxsIGV2ZW50IGxpc3RlbmVycyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlbW92ZUFsbExpc3RlbmVycyhldmVudD86IEJhY2tncm91bmRHZW9sb2NhdGlvbkV2ZW50cyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG59XG4iXX0=