nomadex-client
Version:
Client library to programmatically interact with https://voi.nomadex.app
266 lines • 195 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.PoolClient = exports.PoolCallFactory = exports.APP_SPEC = void 0;
/* eslint-disable */
// @ts-nocheck
/**
* This file was automatically generated by @algorandfoundation/algokit-client-generator.
* DO NOT MODIFY IT BY HAND.
* requires: @algorandfoundation/algokit-utils: ^2
*/
const algokit = __importStar(require("@algorandfoundation/algokit-utils"));
const algosdk_1 = require("algosdk");
exports.APP_SPEC = {
"hints": {
"arc200_name()byte[32]": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_symbol()byte[8]": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_decimals()uint8": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_totalSupply()uint256": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_balanceOf(address)uint256": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_allowance(address,address)uint256": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_transfer(address,uint256)bool": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_approve(address,uint256)bool": {
"call_config": {
"no_op": "CALL"
}
},
"arc200_transferFrom(address,address,uint256)bool": {
"call_config": {
"no_op": "CALL"
}
},
"supportsInterface(byte[4])bool": {
"call_config": {
"no_op": "CALL"
}
},
"zeroAddress()address": {
"call_config": {
"no_op": "CALL"
}
},
"hasBox(address,address)bool": {
"call_config": {
"no_op": "CALL"
}
},
"createBalanceBox(address)bool": {
"call_config": {
"no_op": "CALL"
}
},
"createAllowanceBox(address,address)bool": {
"call_config": {
"no_op": "CALL"
}
},
"noop(uint64)void": {
"call_config": {
"no_op": "CALL"
}
},
"updateApplication()void": {
"call_config": {
"update_application": "CALL"
}
},
"deleteApplication()void": {
"call_config": {
"delete_application": "CALL"
}
},
"manager()address": {
"call_config": {
"no_op": "CALL"
}
},
"grant(address)void": {
"call_config": {
"no_op": "CALL"
}
},
"setFees(uint256)bool": {
"call_config": {
"no_op": "CALL"
}
},
"registerOnline(byte[],byte[],byte[],uint64,uint64,uint64)void": {
"call_config": {
"no_op": "CALL"
}
},
"registerOffline()void": {
"call_config": {
"no_op": "CALL"
}
},
"removeLiquidity(uint256)bool": {
"call_config": {
"no_op": "CALL"
}
},
"addLiquidity(txn,txn)bool": {
"call_config": {
"no_op": "CALL"
}
},
"swapAlphaToBeta(txn,uint256)uint256": {
"call_config": {
"no_op": "CALL"
}
},
"swapBetaToAlpha(txn,uint256)uint256": {
"call_config": {
"no_op": "CALL"
}
},
"createApplication(uint64,address,byte[32],byte[8],uint64,uint8,uint64,uint8,uint256)void": {
"call_config": {
"no_op": "CREATE"
}
},
"bootstrap()void": {
"call_config": {
"no_op": "CALL"
}
}
},
"bare_call_config": {
"no_op": "NEVER",
"opt_in": "NEVER",
"close_out": "NEVER",
"update_application": "NEVER",
"delete_application": "NEVER"
},
"schema": {
"local": {
"declared": {},
"reserved": {}
},
"global": {
"declared": {
"name": {
"type": "bytes",
"key": "name"
},
"symbol": {
"type": "bytes",
"key": "symbol"
},
"decimals": {
"type": "bytes",
"key": "decimals"
},
"totalSupply": {
"type": "bytes",
"key": "total_supply"
},
"initialized": {
"type": "bytes",
"key": "initialized"
},
"warden": {
"type": "bytes",
"key": "warden"
},
"factory": {
"type": "uint64",
"key": "factory"
},
"alphaId": {
"type": "uint64",
"key": "alpha_id"
},
"betaId": {
"type": "uint64",
"key": "beta_id"
},
"alphaType": {
"type": "bytes",
"key": "alpha_type"
},
"betaType": {
"type": "bytes",
"key": "beta_type"
},
"swapFee": {
"type": "bytes",
"key": "swap_fee"
}
},
"reserved": {}
}
},
"state": {
"global": {
"num_byte_slices": 9,
"num_uints": 3
},
"local": {
"num_byte_slices": 0,
"num_uints": 0
}
},
"source": {
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwMi4wCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnQgNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggKmNhbGxfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbiAqY2FsbF9EZWxldGVBcHBsaWNhdGlvbiAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFyYzIwMF9uYW1lKClieXRlWzMyXQoqYWJpX3JvdXRlX2FyYzIwMF9uYW1lOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9uYW1lKClieXRlWzMyXQoJY2FsbHN1YiBhcmMyMDBfbmFtZQoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9uYW1lKCk6IFN0YXRpY0J5dGVzPDMyPgphcmMyMDBfbmFtZToKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjI0CgkvLyByZXR1cm4gdGhpcy5uYW1lLnZhbHVlOwoJYnl0ZSAweDZlNjE2ZDY1IC8vICJuYW1lIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKLy8gYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoqYWJpX3JvdXRlX2FyYzIwMF9zeW1ib2w6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoJY2FsbHN1YiBhcmMyMDBfc3ltYm9sCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3N5bWJvbCgpOiBTdGF0aWNCeXRlczw4PgphcmMyMDBfc3ltYm9sOgoJcHJvdG8gMCAxCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MjkKCS8vIHJldHVybiB0aGlzLnN5bWJvbC52YWx1ZTsKCWJ5dGUgMHg3Mzc5NmQ2MjZmNmMgLy8gInN5bWJvbCIKCWFwcF9nbG9iYWxfZ2V0CglyZXRzdWIKCi8vIGFyYzIwMF9kZWNpbWFscygpdWludDgKKmFiaV9yb3V0ZV9hcmMyMDBfZGVjaW1hbHM6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX2RlY2ltYWxzKCl1aW50OAoJY2FsbHN1YiBhcmMyMDBfZGVjaW1hbHMKCWl0b2IKCWR1cAoJYml0bGVuCglpbnQgOAoJPD0KCgkvLyBhcmMyMDBfZGVjaW1hbHMgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgOCBiaXRzCglhc3NlcnQKCWV4dHJhY3QgNyAxCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2RlY2ltYWxzKCk6IHVpbnQ4CmFyYzIwMF9kZWNpbWFsczoKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjM0CgkvLyByZXR1cm4gdGhpcy5kZWNpbWFscy52YWx1ZTsKCWJ5dGUgMHg2NDY1NjM2OTZkNjE2YzczIC8vICJkZWNpbWFscyIKCWFwcF9nbG9iYWxfZ2V0CglidG9pCglyZXRzdWIKCi8vIGFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF90b3RhbFN1cHBseToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX3RvdGFsU3VwcGx5CglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfdG90YWxTdXBwbHkgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfdG90YWxTdXBwbHkoKTogdWludDI1NgphcmMyMDBfdG90YWxTdXBwbHk6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czozOQoJLy8gcmV0dXJuIHRoaXMudG90YWxTdXBwbHkudmFsdWU7CglieXRlIDB4NzQ2Zjc0NjE2YzVmNzM3NTcwNzA2Yzc5IC8vICJ0b3RhbF9zdXBwbHkiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF9iYWxhbmNlT2Y6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgYXJjMjAwX2JhbGFuY2VPZiBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfYmFsYW5jZU9mIHJldHVybiB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2JhbGFuY2VPZihvd25lcjogQWRkcmVzcyk6IHVpbnQyNTYKYXJjMjAwX2JhbGFuY2VPZjoKCXByb3RvIDEgMQoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjQ1CgkvLyByZXR1cm4gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYmFsYW5jZXMob3duZXIpLnZhbHVlCglhc3NlcnQKCXJldHN1YgoKKmlmMF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NwoJLy8gcmV0dXJuIDx1aW50MjU2PjA7CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJcmV0c3ViCgovLyBhcmMyMDBfYWxsb3dhbmNlKGFkZHJlc3MsYWRkcmVzcyl1aW50MjU2CiphYmlfcm91dGVfYXJjMjAwX2FsbG93YW5jZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgYXJjMjAwX2FsbG93YW5jZSBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBhcmMyMDBfYWxsb3dhbmNlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gYXJjMjAwX2FsbG93YW5jZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hbGxvd2FuY2Uob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiB1aW50MjU2CmFyYzIwMF9hbGxvd2FuY2U6Cglwcm90byAyIDEKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTIKCS8vIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyBvd25lcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTMKCS8vIHJldHVybiB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS52YWx1ZQoJYXNzZXJ0CglyZXRzdWIKCippZjFfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTUKCS8vIHJldHVybiA8dWludDI1Nj4wOwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCXJldHN1YgoKLy8gdHJhbnNmZXIoZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgp0cmFuc2ZlcjoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjYzCgkvLyAhdGhpcy5iYWxhbmNlcyhmcm9tKS5leGlzdHMgJiYgZnJvbS5iYWxhbmNlID49IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJJiYKCipza2lwX2FuZDA6CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NjQKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY2CgkvLyAhdGhpcy5iYWxhbmNlcyh0bykuZXhpc3RzICYmIHRvLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQxCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglnbG9iYWwgTWluQmFsYW5jZQoJPj0KCSYmCgoqc2tpcF9hbmQxOgoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY3CgkvLyB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSA9IDx1aW50MjU2PjAKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjNfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzAKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKGZyb20pLmV4aXN0cywgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzEKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKHRvKS5leGlzdHMsIEVNUFRZX1dBTExFVCkKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gZW1wdHkgd2FsbGV0LCBtdXN0IGhvbGQgbWluQmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzMKCS8vIHNlbmRlckJhbGFuY2UgPSB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyhmcm9tKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc0CgkvLyBhc3NlcnQoc2VuZGVyQmFsYW5jZSA+PSB2YWx1ZSwgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBub3QgZW5vdWdoIGJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc2CgkvLyB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlID0gc2VuZGVyQmFsYW5jZSAtIHZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliLQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gc2VuZGVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo3NwoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgPSB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyh0bykudmFsdWUKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliKwoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgKyB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCglib3hfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzkKCS8vIHRoaXMuYXJjMjAwX1RyYW5zZmVyLmxvZyh7IGZyb206IGZyb20sIHRvOiB0bywgdmFsdWU6IHZhbHVlIH0pCglieXRlIDB4Nzk4M2MzNWMgLy8gYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWNvbmNhdAoJY29uY2F0Cglsb2cKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo4MQoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXI6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyIG11c3QgYmUgYSB1aW50MjU2Cglhc3NlcnQKCgkvLyB0bzogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxICh0bykgZm9yIGFyYzIwMF90cmFuc2ZlciBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKCWNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2Zlcih0bzogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCmFyYzIwMF90cmFuc2ZlcjoKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg1CgkvLyByZXR1cm4gdGhpcy50cmFuc2Zlcih0aGlzLnR4bi5zZW5kZXIsIHRvLCB2YWx1ZSk7CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMSAvLyB0bzogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiB0cmFuc2ZlcgoJcmV0c3ViCgovLyBhcHByb3ZlKG93bmVyOiBBZGRyZXNzLCBzcGVuZGVyOiBBZGRyZXNzLCB2YWx1ZTogdWludDI1Nik6IGJvb2xlYW4KYXBwcm92ZToKCXByb3RvIDMgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg5CgkvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLmV4aXN0cyB8fCBzcGVuZGVyLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlLCBFTVBUWV9XQUxMRVQpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJZHVwCglibnogKnNraXBfb3IwCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJfHwKCipza2lwX29yMDoKCS8vIGVtcHR5IHdhbGxldCwgbXVzdCBob2xkIG1pbkJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjkxCgkvLyB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWUgPSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo5MgoJLy8gdGhpcy5hcmMyMDBfQXBwcm92YWwubG9nKHsgb3duZXI6IG93bmVyLCBzcGVuZGVyOiBzcGVuZGVyLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHgxOTY5Zjg2NSAvLyBhcmMyMDBfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk0CgkvLyByZXR1cm4gdHJ1ZTsKCWludCAxCglyZXRzdWIKCi8vIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCiphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX2FwcHJvdmUgbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAoc3BlbmRlcikgZm9yIGFyYzIwMF9hcHByb3ZlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF9hcHByb3ZlCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hcHByb3ZlKHNwZW5kZXI6IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfYXBwcm92ZToKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk4CgkvLyByZXR1cm4gdGhpcy5hcHByb3ZlKHRoaXMudHhuLnNlbmRlciwgc3BlbmRlciwgdmFsdWUpOwoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlOiB1aW50MjU2CglmcmFtZV9kaWcgLTEgLy8gc3BlbmRlcjogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiBhcHByb3ZlCglyZXRzdWIKCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlckZyb206CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyRnJvbSBtdXN0IGJlIGEgdWludDI1NgoJYXNzZXJ0CgoJLy8gdG86IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAodG8pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBmcm9tOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDIgKGZyb20pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoJY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfdHJhbnNmZXJGcm9tOgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cAoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHZhbHVlID09PSAwCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgliPT0KCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCWIgKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjEwNAoJLy8gYWxsb3dhbmNlID0gdGhpcy5hcmMyMDBfYWxsb3dhbmNlKGZyb20sIHRoaXMudHhuLnNlbmRlcikKCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9hbGxvd2FuY2UKCWZyYW1lX2J1cnkgMCAvLyBhbGxvd2FuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA1CgkvLyBhc3NlcnQoYWxsb3dhbmNlID49IHZhbHVlLCBBTExPV0FOQ0VfSU5TVUZGSUNJRU5UKQoJZnJhbWVfZGlnIDAgLy8gYWxsb3dhbmNlOiB1bnNhZmUgdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBjYW4ndCBzcGVuZCBtb3JlIHRoYW4gYWxsb3dlZAoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA3CgkvLyBvd25lckJhbGFuY2UgPSB0aGlzLmFyYzIwMF9iYWxhbmNlT2YoZnJvbSkKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKCWZyYW1lX2J1cnkgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA4CgkvLyBhc3NlcnQob3duZXJCYWxhbmNlID49IHZhbHVlLCBOT1RfRU5PVUdIX0JBTEFOQ0UpCglmcmFtZV9kaWcgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWI+PQoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTEwCgkvLyB0aGlzLmFsbG93YW5jZXMoW2Zyb20sIHRoaXMudHhuLnNlbmRlcl0pLnZhbHVlID0gYWxsb3dhbmNlIC0gdmFsdWUKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgl0eG4gU2VuZGVyCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGFsbG93YW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIGFsbG93YW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTEKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSBvd25lckJhbGFuY2UgLSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAxIC8vIG93bmVyQmFsYW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIG93bmVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTIKCS8vIHRoaXMuYmFsYW5jZXModG8pLnZhbHVlID0gdGhpcy5hcmMyMDBfYmFsYW5jZU9mKHRvKSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWIrCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyB0aGlzLmFyYzIwMF9iYWxhbmNlT2YodG8pICsgdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJYm94X3B1dAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNAoJLy8gdGhpcy5hcmMyMDBfVHJhbnNmZXIubG9nKHsgZnJvbTogZnJvbSwgdG86IHRvLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHg3OTgzYzM1YyAvLyBhcmMyMDBfVHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHRvOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNgoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMQoJcmV0c3ViCgovLyBzdXBwb3J0c0ludGVyZmFjZShieXRlWzRdKWJvb2wKKmFiaV9yb3V0ZV9zdXBwb3J0c0ludGVyZmFjZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gaW50ZXJmYWNlSUQ6IGJ5dGVbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgNAoJPT0KCgkvLyBhcmd1bWVudCAwIChpbnRlcmZhY2VJRCkgZm9yIHN1cHBvcnRzSW50ZXJmYWNlIG11c3QgYmUgYSBieXRlWzRdCglhc3NlcnQKCgkvLyBleGVjdXRlIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVbNF0pYm9vbAoJY2FsbHN1YiBzdXBwb3J0c0ludGVyZmFjZQoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBzdXBwb3J0c0ludGVyZmFjZShpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4pOiBib29sZWFuCnN1cHBvcnRzSW50ZXJmYWNlOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMjEKCS8vIGlkID0gYnRvaShpbnRlcmZhY2VJRCkKCWZyYW1lX2RpZyAtMSAvLyBpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4KCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyBpZDogdWludDY0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTIzCgkvLyByZXR1cm4gKAoJLy8gICAgICAgaWQgPT09IDB4NGUyMmEzYmEgfHwKCS8vICAgICAgIGlkID09PSAweGM3YmVhMDQwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhkYTcwMjViOSB8fAoJLy8gICAgICAgaWQgPT09IDB4NGE5NjhmOGYgfHwKCS8vICAgICAgIGlkID09PSAweGI1NDIyMTI1IHx8CgkvLyAgICAgICBpZCA9PT0gMHg2NTdkMTNlYyB8fAoJLy8gICAgICAgaWQgPT09IDB4YjZhZTFhMjUgfHwKCS8vICAgICAgIGlkID09PSAweDg0ZWMxM2Q1IHx8CgkvLyAgICAgICBpZCA9PT0gMHhlYzk5NjA0MSB8fAoJLy8gICAgICAgaWQgPT09IDB4ODJlNTczYzQgfHwKCS8vICAgICAgIGlkID09PSAweGJiYjMxOWYzIHx8CgkvLyAgICAgICBpZCA9PT0gMHg3OTgzYzM1YyB8fAoJLy8gICAgICAgaWQgPT09IDB4MTk2OWY4NjUgfHwKCS8vICAgICAgIGlkID09PSAweGJjNGE1NDAwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhjOThkZDA1NSB8fAoJLy8gICAgICAgaWQgPT09IDB4NjYzMDQyZmIKCS8vICAgICApOwoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NGUyMmEzYmEKCT09CglkdXAKCWJueiAqc2tpcF9vcjEKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGM3YmVhMDQwCgk9PQoJfHwKCipza2lwX29yMToKCWR1cAoJYm56ICpza2lwX29yMgoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZGE3MDI1YjkKCT09Cgl8fAoKKnNraXBfb3IyOgoJZHVwCglibnogKnNraXBfb3IzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg0YTk2OGY4ZgoJPT0KCXx8Cgoqc2tpcF9vcjM6CglkdXAKCWJueiAqc2tpcF9vcjQKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGI1NDIyMTI1Cgk9PQoJfHwKCipza2lwX29yNDoKCWR1cAoJYm56ICpza2lwX29yNQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NjU3ZDEzZWMKCT09Cgl8fAoKKnNraXBfb3I1OgoJZHVwCglibnogKnNraXBfb3I2CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiNmFlMWEyNQoJPT0KCXx8Cgoqc2tpcF9vcjY6CglkdXAKCWJueiAqc2tpcF9vcjcKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDg0ZWMxM2Q1Cgk9PQoJfHwKCipza2lwX29yNzoKCWR1cAoJYm56ICpza2lwX29yOAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZWM5OTYwNDEKCT09Cgl8fAoKKnNraXBfb3I4OgoJZHVwCglibnogKnNraXBfb3I5CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg4MmU1NzNjNAoJPT0KCXx8Cgoqc2tpcF9vcjk6CglkdXAKCWJueiAqc2tpcF9vcjEwCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYmIzMTlmMwoJPT0KCXx8Cgoqc2tpcF9vcjEwOgoJZHVwCglibnogKnNraXBfb3IxMQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Nzk4M2MzNWMKCT09Cgl8fAoKKnNraXBfb3IxMToKCWR1cAoJYm56ICpza2lwX29yMTIKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDE5NjlmODY1Cgk9PQoJfHwKCipza2lwX29yMTI6CglkdXAKCWJueiAqc2tpcF9vcjEzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYzRhNTQwMAoJPT0KCXx8Cgoqc2tpcF9vcjEzOgoJZHVwCglibnogKnNraXBfb3IxNAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Yzk4ZGQwNTUKCT09Cgl8fAoKKnNraXBfb3IxNDoKCWR1cAoJYm56ICpza2lwX29yMTUKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDY2MzA0MmZiCgk9PQoJfHwKCipza2lwX29yMTU6CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gemVyb0FkZHJlc3MoKWFkZHJlc3MKKmFiaV9yb3V0ZV96ZXJvQWRkcmVzczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSB6ZXJvQWRkcmVzcygpYWRkcmVzcwoJY2FsbHN1YiB6ZXJvQWRkcmVzcwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHplcm9BZGRyZXNzKCk6IEFkZHJlc3MKemVyb0FkZHJlc3M6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNDUKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGhhc0JveChhZGRyZXNzLGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2hhc0JveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgaGFzQm94IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBvd25lcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxIChvd25lcikgZm9yIGhhc0JveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBoYXNCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKCWNhbGxzdWIgaGFzQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGhhc0JveChvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IGJvb2xlYW4KaGFzQm94OgoJcHJvdG8gMiAxCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MAoJLy8gc3BlbmRlciA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNTEKCS8vIHJldHVybiB0aGlzLmJhbGFuY2VzKG93bmVyKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgoqaWY1X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MwoJLy8gcmV0dXJuIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgovLyBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2NyZWF0ZUJhbGFuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgY3JlYXRlQmFsYW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoJY2FsbHN1YiBjcmVhdGVCYWxhbmNlQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUJhbGFuY2VCb3gob3duZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUJhbGFuY2VCb3g6Cglwcm90byAxIDEKCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTU3CgkvLyAhdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1OAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglib3hfcHV0CgoqaWY2X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2MAoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoJcmV0c3ViCgovLyBjcmVhdGVBbGxvd2FuY2VCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKKmFiaV9yb3V0ZV9jcmVhdGVBbGxvd2FuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoc3BlbmRlcikgZm9yIGNyZWF0ZUFsbG93YW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBjcmVhdGVBbGxvd2FuY2VCb3ggbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQWxsb3dhbmNlQm94KGFkZHJlc3MsYWRkcmVzcylib29sCgljYWxsc3ViIGNyZWF0ZUFsbG93YW5jZUJveAoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBbGxvd2FuY2VCb3gob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUFsbG93YW5jZUJveDoKCXByb3RvIDIgMQoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjQKCS8vICF0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2NQoJLy8gdGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLnZhbHVlID0gPHVpbnQyNTY+MAoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYm94X3B1dAoKKmlmN19lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjcKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCXJldHN1YgoKLy8gbm9vcCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX25vb3A6CgkvLyBfbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBub29wKHVpbnQ2NCl2b2lkCgljYWxsc3ViIG5vb3AKCWludCAxCglyZXR1cm4KCi8vIG5vb3AoX246IHVpbnQ2NCk6IHZvaWQKbm9vcDoKCXByb3RvIDEgMAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czo3CgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCB1cGRhdGUnKQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoKCS8vIHRoaXMgYXBwIGNhbiBub3QgdXBkYXRlCglhc3NlcnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6OAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZQoJYXNzZXJ0CglyZXRzdWIKCi8vIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfZGVsZXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIGRlbGV0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBkZWxldGVBcHBsaWNhdGlvbigpOiB2b2lkCmRlbGV0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjEyCgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCBiZSBkZWxldGVkJykKCXR4bmEgQXBwbGljYXRpb25zIDAKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0X2V4Cglzd2FwCglwb3AKCgkvLyB0aGlzIGFwcCBjYW4gbm90IGJlIGRlbGV0ZWQKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBhbW91bnQ6IDAsCgkvLyAgICAgICBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUsCgkvLyAgICAgICBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZSwKCS8vICAgICAgIHJla2V5VG86IHRoaXMud2FyZGVuLnZhbHVlLAoJLy8gICAgICAgZmVlOiBnbG9iYWxzLm1pblR4bkZlZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxNQoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MTYKCS8vIHNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE3CgkvLyByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE4CgkvLyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZQoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxOQoJLy8gcmVrZXlUbzogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJla2V5VG8KCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjAKCS8vIGZlZTogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBNaW5UeG5GZWUKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBtYW5hZ2VyKClhZGRyZXNzCiphYmlfcm91dGVfbWFuYWdlcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBtYW5hZ2VyKClhZGRyZXNzCgljYWxsc3ViIG1hbmFnZXIKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBtYW5hZ2VyKCk6IEFkZHJlc3MKbWFuYWdlcjoKCXByb3RvIDAgMQoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjYKCS8vIHRoaXMud2FyZGVuLmV4aXN0cwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoyNwoJLy8gcmV0dXJuIHRoaXMud2FyZGVuLnZhbHVlOwoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKKmlmOF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjkKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGdyYW50KGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2dyYW50OgoJLy8gbWFuYWdlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChtYW5hZ2VyKSBmb3IgZ3JhbnQgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ3JhbnQoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGdyYW50CglpbnQgMQoJcmV0dXJuCgovLyBncmFudChtYW5hZ2VyOiBBZGRyZXNzKTogdm9pZApncmFudDoKCXByb3RvIDEgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czozMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICd1bmF1dGhvcml6ZWQnKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gdW5hdXRob3JpemVkCglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM0CgkvLyBtYW5hZ2VyID09PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gbWFuYWdlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYnogKmlmOV9lbHNlCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MzUKCS8vIHRoaXMud2FyZGVuLmRlbGV0ZSgpCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2RlbAoJYiAqaWY5X2VuZAoKKmlmOV9lbHNlOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM3CgkvLyB0aGlzLndhcmRlbi52YWx1ZSA9IG1hbmFnZXIKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWZyYW1lX2RpZyAtMSAvLyBtYW5hZ2VyOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoKKmlmOV9lbmQ6CglyZXRzdWIKCi8vIHNldEZlZXModWludDI1Nilib29sCiphYmlfcm91dGVfc2V0RmVlczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZmVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGZlZSkgZm9yIHNldEZlZXMgbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIGV4ZWN1dGUgc2V0RmVlcyh1aW50MjU2KWJvb2wKCWNhbGxzdWIgc2V0RmVlcwoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBzZXRGZWVzKGZlZTogdWludDI1Nik6IGJvb2xlYW4Kc2V0RmVlczoKCXByb3RvIDEgMQoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjQxCgkvLyBhc3NlcnQodGhpcy53YXJkZW4udmFsdWUgPT09IHRoaXMudHhuLnNlbmRlcikKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0Cgl0eG4gU2VuZGVyCgk9PQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NDIKCS8vIHRoaXMuc3dhcEZlZS52YWx1ZSA9IGZlZQoJYnl0ZSAweDczNzc2MTcwNWY2NjY1NjUgLy8gInN3YXBfZmVlIgoJZnJhbWVfZGlnIC0xIC8vIGZlZTogdWludDI1NgoJYXBwX2dsb2JhbF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTEuYWxnby50czo0MwoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoJcmV0c3ViCgovLyByZWdpc3Rlck9ubGluZShieXRlW10sYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfcmVnaXN0ZXJPbmxpbmU6CgkvLyB2b3RlS2V5RGlsdXRpb246IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgoJYnRvaQoKCS8vIHZvdGVMYXN0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDUKCWJ0b2kKCgkvLyB2b3RlRmlyc3Q6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAoJYnRvaQoKCS8vIHZvdGVQazogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglleHRyYWN0IDIgMAoKCS8vIHN0YXRlUHJvb2ZQazogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIHNlbGVjdGlvblBrOiBieXRlW10KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgoJLy8gZXhlY3V0ZSByZWdpc3Rlck9ubGluZShieXRlW10sYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIHJlZ2lzdGVyT25saW5lCglpbnQgMQoJcmV0dXJuCgovLyByZWdpc3Rlck9ubGluZShzZWxlY3Rpb25QazogYnl0ZXMsIHN0YXRlUHJvb2ZQazogYnl0ZXMsIHZvdGVQazogYnl0ZXMsIHZvdGVGaXJzdDogdWludDY0LCB2b3RlTGFzdDogdWludDY0LCB2b3RlS2V5RGlsdXRpb246IHVpbnQ2NCk6IHZvaWQKcmVnaXN0ZXJPbmxpbmU6Cglwcm90byA2IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjU0CgkvLyBmYWN0b3J5TWFuYWdlciA9IHRoaXMuZmFjdG9yeS52YWx1ZS5nbG9iYWxTdGF0ZSgnd2FyZGVuJykgYXMgQWRkcmVzcwoJYnl0ZSAweDY2NjE2Mzc0NmY3Mjc5IC8vICJmYWN0b3J5IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLmZhY3RvcnkudmFsdWUuZ2xvYmFsU3RhdGUoJ3dhcmRlbicpCglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBmYWN0b3J5TWFuYWdlcjogYWRkcmVzcwoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjU1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLndhcmRlbi52YWx1ZSB8fCB0aGlzLnR4bi5zZW5kZXIgPT09IGZhY3RvcnlNYW5hZ2VyKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CglkdXAKCWJueiAqc2tpcF9vcjE2Cgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBmYWN0b3J5TWFuYWdlcjogYWRkcmVzcwoJPT0KCXx8Cgoqc2tpcF9vcjE2OgoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NTcKCS8vIHNlbmRPbmxpbmVLZXlSZWdpc3RyYXRpb24oewoJLy8gICAgICAgc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgc2VsZWN0aW9uUEs6IHNlbGVjdGlvblBrLAoJLy8gICAgICAgc3RhdGVQcm9vZlBLOiBzdGF0ZVByb29mUGssCgkvLyAgICAgICB2b3RlUEs6IHZvdGVQaywKCS8vICAgICAgIHZvdGVGaXJzdDogdm90ZUZpcnN0LAoJLy8gICAgICAgdm90ZUxhc3Q6IHZvdGVMYXN0LAoJLy8gICAgICAgdm90ZUtleURpbHV0aW9uOiB2b3RlS2V5RGlsdXRpb24sCgkvLyAgICAgICBmZWU6IGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQga2V5cmVnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NTgKCS8vIHNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NTkKCS8vIHNlbGVjdGlvblBLOiBzZWxlY3Rpb25QawoJZnJhbWVfZGlnIC0xIC8vIHNlbGVjdGlvblBrOiBieXRlcwoJaXR4bl9maWVsZCBTZWxlY3Rpb25QSwoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjYwCgkvLyBzdGF0ZVByb29mUEs6IHN0YXRlUHJvb2ZQawoJZnJhbWVfZGlnIC0yIC8vIHN0YXRlUHJvb2ZQazogYnl0ZXMKCWl0eG5fZmllbGQgU3RhdGVQcm9vZlBLCgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NjEKCS8vIHZvdGVQSzogdm90ZVBrCglmcmFtZV9kaWcgLTMgLy8gdm90ZVBrOiBieXRlcwoJaXR4bl9maWVsZCBWb3RlUEsKCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTEuYWxnby50czo2MgoJLy8gdm90ZUZpcnN0OiB2b3RlRmlyc3QKCWZyYW1lX2RpZyAtNCAvLyB2b3RlRmlyc3Q6IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlRmlyc3QKCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTEuYWxnby50czo2MwoJLy8gdm90ZUxhc3Q6IHZvdGVMYXN0CglmcmFtZV9kaWcgLTUgLy8gdm90ZUxhc3Q6IHVpbnQ2NAoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjY0CgkvLyB2b3RlS2V5RGlsdXRpb246IHZvdGVLZXlEaWx1dGlvbgoJZnJhbWVfZGlnIC02IC8vIHZvdGVLZXlEaWx1dGlvbjogdWludDY0CglpdHhuX2ZpZWxkIFZvdGVLZXlEaWx1dGlvbgoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjY1CgkvLyBmZWU6IGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgTWluVHhuRmVlCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gcmVnaXN0ZXJPZmZsaW5lKCl2b2lkCiphYmlfcm91dGVfcmVnaXN0ZXJPZmZsaW5lOgoJLy8gZXhlY3V0ZSByZWdpc3Rlck9mZmxpbmUoKXZvaWQKCWNhbGxzdWIgcmVnaXN0ZXJPZmZsaW5lCglpbnQgMQoJcmV0dXJuCgovLyByZWdpc3Rlck9mZmxpbmUoKTogdm9pZApyZWdpc3Rlck9mZmxpbmU6Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjcwCgkvLyBmYWN0b3J5TWFuYWdlciA9IHRoaXMuZmFjdG9yeS52YWx1ZS5nbG9iYWxTdGF0ZSgnd2FyZGVuJykgYXMgQWRkcmVzcwoJYnl0ZSAweDY2NjE2Mzc0NmY3Mjc5IC8vICJmYWN0b3J5IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0X2V4CgoJLy8gZ2xvYmFsIHN0YXRlIHZhbHVlIGRvZXMgbm90IGV4aXN0OiB0aGlzLmZhY3RvcnkudmFsdWUuZ2xvYmFsU3RhdGUoJ3dhcmRlbicpCglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBmYWN0b3J5TWFuYWdlcjogYWRkcmVzcwoKCS8vIHNyYy9jb250cmFjdHMvcG9vbC8xL1Bvb2wxMS5hbGdvLnRzOjcxCgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLndhcmRlbi52YWx1ZSB8fCB0aGlzLnR4bi5zZW5kZXIgPT09IGZhY3RvcnlNYW5hZ2VyKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CglkdXAKCWJueiAqc2tpcF9vcjE3Cgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgMCAvLyBmYWN0b3J5TWFuYWdlcjogYWRkcmVzcwoJPT0KCXx8Cgoqc2tpcF9vcjE3OgoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDExLmFsZ28udHM6NzMKCS8vIHNlbmRPZmZsaW5lS2V5UmVnaXN0cmF0aW9uKHsKCS8vICAgICAgIHNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGZlZTogZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBrZXlyZWcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTEuYWxnby50czo3NAoJLy8gc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTEuYWxnby50czo3NQoJLy8gZmVlOiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIE1pblR4bkZlZQoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGdldEFsZ29CYWxhbmNlKGFkZHJlc3M6IEFkZHJlc3MpOiB1aW50MjU2CmdldEFsZ29CYWxhbmNlOgoJcHJvdG8gMSAxCgoJLy8gc3JjL2NvbnRyYWN0cy9wb29sLzEvUG9vbDEyLmFsZ28udHM6NgoJLy8gcmV0dXJuIDx1aW50MjU2PihhZGRyZXNzLmJhbGFuY2UgLSBhZGRyZXNzLm1pbkJhbGFuY2UpOwoJZnJhbWVfZGlnIC0xIC8vIGFkZHJlc3M6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgLTEgLy8gYWRkcmVzczogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0b2IKCXJldHN1YgoKLy8gZ2V0QXNhQmFsYW5jZShhZGRyZXNzOiBBZGRyZXNzLCBhc3NldElkOiB1aW50NjQpOiB1aW50MjU2CmdldEFzYUJhbGFuY2U6Cglwcm90byAyIDEKCgkvLyBzcmMvY29udHJhY3RzL3Bvb2wvMS9Qb29sMTIuYWxnby50czoxMAoJLy8gcmV0dXJuIDx1aW50MjU2PmFkZHJlc3MuYXNzZXRCYWxhbmNlKGFzc2V0SWQpOwoJZnJhbWVfZGlnIC0xIC8vIGFkZHJlc3M6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldElkOiB1aW50NjQKCWFzc2V0X2hv